80#if defined(__CUDACC__) || defined(USE_CUDA)
88 void ReleaseDevMem(T* ptr,
int code)
90 cuDeleteFromDev(ptr, code);
105 template<
typename T,
size_t dim>
106 T* ReserveDevMem(
size_t n,
size_t& new_n,
int code = 0)
116 cuReserveDevMem(ptr, new_n * dim *
sizeof(T), code);
133 T* ReserveDevMemAndCopyFixedArray(
size_t n, T* host_src)
137 cuReserveDevMem(dev_ptr, n *
sizeof(T));
140 cuCopyFixedArray(dev_ptr, host_src,
sizeof(T) * n, 116);
153 template<
typename T,
size_t dim>
154 void CopyMemFromDev(
size_t n, T* dev_ptr, T* host_ptr,
int code = 0)
const
156 cuCopyMemFromDev((
void*)host_ptr, (
void*)dev_ptr,
sizeof(T) * n * dim, code);
166 template<
typename T,
size_t dim>
167 void CopyMemToDev(
size_t n, T* host_ptr, T* dev_ptr)
const
169 cuCopyFixedArray((
void*)dev_ptr, (
void*)host_ptr,
sizeof(T) * n * dim, 117);
174 void RefreshWake(
int code = 0);
177 void RefreshAfls(
int code = 0);
178 void RefreshVirtualWakes(
int code = 0);
181 void RefreshVP(
int code = 0);
189 size_t* dev_ptr_nPanels;
190 size_t* dev_ptr_nVortices;
194 double** dev_ptr_ptr_vtx;
195 double** dev_ptr_ptr_vel;
196 double** dev_ptr_ptr_rad;
197 double** dev_ptr_ptr_i0;
198 float** dev_ptr_ptr_i0f;
199 double** dev_ptr_ptr_i1;
200 double** dev_ptr_ptr_i2;
201 double** dev_ptr_ptr_i3;
202 float** dev_ptr_ptr_i3f;
204 double** dev_ptr_ptr_r;
205 double** dev_ptr_ptr_rhs;
207 double** dev_ptr_ptr_freeVortexSheet;
208 double** dev_ptr_ptr_attachedVortexSheet;
209 double** dev_ptr_ptr_attachedSourceSheet;
211 double** dev_ptr_ptr_meanEpsOverPanel;
213 double** dev_ptr_ptr_viscousStresses;
216 std::vector<size_t> n_CUDA_virtWake;
217 size_t n_CUDA_totalVirtWake;
220 size_t n_CUDA_source;
238 std::unique_ptr<BHcu::CudaTreeInfo> inflTreeWake;
239 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeWake;
241 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeNut;
244 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreePnl;
245 std::unique_ptr<BHcu::CudaTreeInfo> inflTreePnlVortex;
246 std::unique_ptr<BHcu::CudaTreeInfo> inflTreePnlSource;
248 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeVP;
251 std::unique_ptr<BHcu::CudaTreeInfo> auxTreePnl;
252 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreePoint;
253 std::unique_ptr<BHcu::CudaTreeInfo> cntrTreeSegment;
257 std::unique_ptr<GmresSolver> Gmres;
259 void AllocateSolution(
double*& dev_sol,
size_t n);
260 void SetSolution(
double* sol,
double* dev_sol,
size_t n);
261 void ReleaseSolution(
double* dev_sol);
272 Gpu(
const World2D& W_);
283#if defined(__CUDACC__) || defined(USE_CUDA)
284 cuSetAccelCoeff(cft_);
295#if defined(__CUDACC__) || defined(USE_CUDA)
296 cuSetCollapseCoeff(pos_, refLength_);
306#if defined(__CUDACC__) || defined(USE_CUDA)
320#if defined(__CUDACC__) || defined(USE_CUDA)
321 cuSetSchemeSwitcher(schemeSwitcher_, 1);