78#if defined(__CUDACC__) || defined(USE_CUDA)
86 void ReleaseDevMem(T* ptr,
int code)
88 cuDeleteFromDev(ptr, code);
103 template<
typename T,
size_t dim>
104 T* ReserveDevMem(
size_t n,
size_t& new_n,
int code = 0)
114 cuReserveDevMem(ptr, new_n * dim *
sizeof(T), code);
131 T* ReserveDevMemAndCopyFixedArray(
size_t n, T* host_src)
135 cuReserveDevMem(dev_ptr, n *
sizeof(T));
138 cuCopyFixedArray(dev_ptr, host_src,
sizeof(T) * n, 116);
151 template<
typename T,
size_t dim>
152 void CopyMemFromDev(
size_t n, T* dev_ptr, T* host_ptr,
int code = 0)
const
154 cuCopyMemFromDev((
void*)host_ptr, (
void*)dev_ptr,
sizeof(T) * n * dim, code);
164 template<
typename T,
size_t dim>
165 void CopyMemToDev(
size_t n, T* host_ptr, T* dev_ptr)
const
167 cuCopyFixedArray((
void*)dev_ptr, (
void*)host_ptr,
sizeof(T) * n * dim, 117);
172 void RefreshWake(
int code = 0);
175 void RefreshAfls(
int code = 0);
176 void RefreshVirtualWakes(
int code = 0);
179 void RefreshVP(
int code = 0);
187 size_t* dev_ptr_nPanels;
188 size_t* dev_ptr_nVortices;
192 double** dev_ptr_ptr_vtx;
193 double** dev_ptr_ptr_vel;
194 double** dev_ptr_ptr_rad;
195 double** dev_ptr_ptr_i0;
196 float** dev_ptr_ptr_i0f;
197 double** dev_ptr_ptr_i1;
198 double** dev_ptr_ptr_i2;
199 double** dev_ptr_ptr_i3;
200 float** dev_ptr_ptr_i3f;
202 double** dev_ptr_ptr_r;
203 double** dev_ptr_ptr_rhs;
205 double** dev_ptr_ptr_freeVortexSheet;
206 double** dev_ptr_ptr_attachedVortexSheet;
207 double** dev_ptr_ptr_attachedSourceSheet;
209 double** dev_ptr_ptr_meanEpsOverPanel;
211 double** dev_ptr_ptr_viscousStresses;
214 std::vector<size_t> n_CUDA_virtWake;
215 size_t n_CUDA_totalVirtWake;
218 size_t n_CUDA_source;
235 std::unique_ptr<BHcu::CudaTreeInfo> inflTreeWake;
236 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeWake;
238 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreePnl;
239 std::unique_ptr<BHcu::CudaTreeInfo> inflTreePnlVortex;
240 std::unique_ptr<BHcu::CudaTreeInfo> inflTreePnlSource;
242 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeVP;
245 std::unique_ptr<BHcu::CudaTreeInfo> auxTreePnl;
246 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreePoint;
247 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeSegment;
250 void AllocateSolution(
double*& dev_sol,
size_t n);
251 void SetSolution(
double* sol,
double* dev_sol,
size_t n);
252 void ReleaseSolution(
double* dev_sol);
263 Gpu(
const World2D& W_);
274#if defined(__CUDACC__) || defined(USE_CUDA)
275 cuSetAccelCoeff(cft_);
286#if defined(__CUDACC__) || defined(USE_CUDA)
287 cuSetCollapseCoeff(pos_, refLength_);
297#if defined(__CUDACC__) || defined(USE_CUDA)
311#if defined(__CUDACC__) || defined(USE_CUDA)
312 cuSetSchemeSwitcher(schemeSwitcher_, 1);