47 #include "cuLib2D.cuh" 77 #if defined(__CUDACC__) || defined(USE_CUDA) 82 void ReleaseDevMem(T* ptr,
int code)
84 cuDeleteFromDev(ptr, code);
99 template<
typename T,
size_t dim>
100 T* ReserveDevMem(
size_t n,
size_t& new_n)
110 cuReserveDevMem(ptr, new_n * dim *
sizeof(T));
127 T* ReserveDevMemAndCopyFixedArray(
size_t n, T* host_src)
131 cuReserveDevMem(dev_ptr, n *
sizeof(T));
134 cuCopyFixedArray(dev_ptr, host_src,
sizeof(T) * n);
147 template<
typename T,
size_t dim>
148 void CopyMemFromDev(
size_t n, T* dev_ptr, T* host_ptr,
int code = 0)
const 150 cuCopyMemFromDev((
void*)host_ptr, (
void*)dev_ptr,
sizeof(T) * n * dim, code);
160 template<
typename T,
size_t dim>
161 void CopyMemToDev(
size_t n, T* host_ptr, T* dev_ptr)
const 163 cuCopyFixedArray((
void*)dev_ptr, (
void*)host_ptr,
sizeof(T) * n * dim);
168 void RefreshWake(
int code = 0);
171 void RefreshAfls(
int code = 0);
172 void RefreshVirtualWakes(
int code = 0);
175 void RefreshVP(
int code = 0);
184 size_t* dev_ptr_nPanels;
185 size_t* dev_ptr_nVortices;
189 double** dev_ptr_ptr_vtx;
190 double** dev_ptr_ptr_vel;
191 double** dev_ptr_ptr_rad;
192 double** dev_ptr_ptr_i0;
193 double** dev_ptr_ptr_i1;
194 double** dev_ptr_ptr_i2;
195 double** dev_ptr_ptr_i3;
197 double** dev_ptr_ptr_r;
198 double** dev_ptr_ptr_rhs;
200 double** dev_ptr_ptr_freeVortexSheet;
201 double** dev_ptr_ptr_attachedVortexSheet;
202 double** dev_ptr_ptr_attachedSourceSheet;
204 double** dev_ptr_ptr_meanEpsOverPanel;
206 double** dev_ptr_ptr_viscousStresses;
209 std::vector<size_t> n_CUDA_virtWake;
210 size_t n_CUDA_totalVirtWake;
213 std::vector<size_t> n_CUDA_panel;
220 size_t n_CUDA_source;
225 size_t n_CUDA_bodies;
226 BHcu::CUDApointers CUDAptrs;
243 #if defined(__CUDACC__) || defined(USE_CUDA) 244 cuSetAccelCoeff(cft_);
255 #if defined(__CUDACC__) || defined(USE_CUDA) 256 cuSetCollapseCoeff(pos_, refLength_);
266 #if defined(__CUDACC__) || defined(USE_CUDA) 280 #if defined(__CUDACC__) || defined(USE_CUDA) 281 cuSetSchemeSwitcher(schemeSwitcher_, 1);
315 const_pointer
address(const_reference value)
const {
334 return std::numeric_limits<std::size_t>::max() /
sizeof(T);
342 pointer ret = (pointer)(::
operator new(num *
sizeof(T)));
346 cuAlloc((
void**)&ret, num *
sizeof(T));
355 new((
void*)p)T(value);
378 template <
class T1,
class T2>
383 template <
class T1,
class T2>
void setSchemeSwitcher(int schemeSwitcher_)
Установка переключателя расчетных схем
const_pointer address(const_reference value) const
bool operator!=(const MyAlloc< T1 > &, const MyAlloc< T2 > &)
void deallocate(pointer p, size_type num)
Класс, обеспечивающий возможность выполнения вычислений на GPU по технологии Nvidia CUDA...
void setMaxGamma(double gam_)
Установка максимально допустимой циркуляции вихря
MyAlloc(const MyAlloc< U > &)
void setAccelCoeff(double cft_)
Установка коэффициента разгона потока
const World2D & W
Константная ссылка на решаемую задачу
pointer address(reference value) const
Описание констант и параметров для взаимодействия с графическим ускорителем
void setCollapseCoeff(double pos_, double refLength_)
Установка правой границы самого правого профиля (для организации увеличения радиуса коллапса) ...
size_type max_size() const
bool operator==(const MyAlloc< T1 > &, const MyAlloc< T2 > &)
Класс, опеделяющий текущую решаемую задачу
pointer allocate(size_type num, const void *=0)
void construct(pointer p, const T &value)
Gpu(const World2D &W_)
Конструктор
const T & const_reference
std::ptrdiff_t difference_type