VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
VM2D Namespace Reference

Classes

class  Airfoil
 Абстрактный класс, определяющий обтекаемый профиль More...
 
class  AirfoilDeformable
 Класс, определяющий тип обтекаемого профиля More...
 
class  AirfoilGeometry
 Класс, определяющий форму профиля More...
 
struct  AirfoilParams
 Структура, задающая параметры профиля More...
 
class  AirfoilRigid
 Класс, определяющий тип обтекаемого профиля More...
 
class  Beam
 Вспомогательный класс Beam для описания упругой хорды деформируемой балки More...
 
class  Boundary
 Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле More...
 
class  BoundaryConstLayerAver
 Класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле More...
 
class  BoundaryLinLayerAver
 Класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле More...
 
class  BoundaryVortexCollocN
 Класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле More...
 
struct  ChordPanel
 
struct  ComplexData
 
class  CpuTreeInfo
 Структура, хранящая данные и указатели на массивы на GPU для оптимизации итерационного решения СЛАУ на GPU. More...
 
class  GmresSolver
 
struct  gmresVectors
 
class  Gpu
 Класс, обеспечивающий возможность выполнения вычислений на GPU по технологии Nvidia CUDA. More...
 
class  MeasureVP
 Класс, отвечающий за вычисление поля скорости и давления в заданых точках для вывода More...
 
class  Mechanics
 Абстрактный класс, определяющий вид механической системы More...
 
class  MechanicsDeformable
 Класс, определяющий вид механической системы More...
 
class  MechanicsRigidGivenLaw
 Класс, определяющий вид механической системы More...
 
class  MechanicsRigidImmovable
 Класс, определяющий вид механической системы More...
 
class  MechanicsRigidOscillPart
 Класс, определяющий вид механической системы More...
 
class  MechanicsRigidRotatePart
 Класс, определяющий вид механической системы More...
 
struct  NumericalSchemes
 Структура, задающая используемые численные схемы More...
 
class  OptimizedRadixSorter
 
class  OptimizedRadixSorter< ValueType * >
 
class  Passport
 Класс, опеделяющий паспорт двумерной задачи More...
 
struct  PhysicalProperties
 Структура, задающая физические свойства задачи More...
 
class  Sheet
 Класс, опеделяющий слои на поверхности обтекаемого профиля More...
 
struct  sweepVectors
 Структура, определяющий необходимые массивы для рализации метода прогонки More...
 
class  Velocity
 Абстрактный класс, определяющий способ вычисления скоростей More...
 
class  VelocityBarnesHut
 Класс, определяющий способ вычисления скоростей More...
 
class  VelocityBiotSavart
 Класс, определяющий способ вычисления скоростей More...
 
class  VirtualWake
 Класс, опеделяющий вихревой след (пелену) More...
 
struct  VortexesParams
 Структура, определяющая параметры виртуальных вихрей для отдельного профиля More...
 
class  Wake
 Класс, опеделяющий вихревой след (пелену) More...
 
class  WakeDataBase
 Класс, опеделяющий набор вихрей More...
 
struct  WakeDiscretizationProperties
 Структура, задающая параметры параметры дискретизации вихревого следа More...
 
class  World2D
 Класс, опеделяющий текущую решаемую задачу More...
 

Typedefs

template<typename T >
using enable_if_trivially_copyable = typename std::enable_if< std::is_trivially_copyable< T >::value >::type
 
template<typename T >
using enable_if_not_trivially_copyable = typename std::enable_if<!std::is_trivially_copyable< T >::value >::type
 

Functions

template<typename T >
double norm (const std::vector< T > &b)
 Шаблонная функция вычисления евклидовой нормы вектора или списка
 
template<typename T >
double norm2 (const std::vector< T > &b)
 Шаблонная функция вычисления евклидовой нормы вектора или списка
 
template<typename T >
std::vector< T > operator* (const T lambda, const std::vector< T > &x)
 Шаблонная функция умножения числа на вектор
 
unsigned int ExpandBits (unsigned int v)
 
int ceilpow2 (int x, int p)
 
int ceilhalf (int x)
 
double mindist2 (const Point4D &lowerUpper, const Point2D &rhs) noexcept
 
double minmaxdist2 (const Point4D &lowerUpper, const Point2D &rhs) noexcept
 
std::pair< double, int > distance_calculator_point2segment (const Point2D &point, const Point4D &object)
 
double MinDist2AABB (const Point4D &gabI, const Point4D &gabJ)
 

Variables

const double onePlusMachineEps = 1.0f + 2.0e-7f
 

Typedef Documentation

◆ enable_if_not_trivially_copyable

template<typename T >
using VM2D::enable_if_not_trivially_copyable = typedef typename std::enable_if<!std::is_trivially_copyable<T>::value>::type

Definition at line 57 of file cpuRadixSorter.h.

◆ enable_if_trivially_copyable

template<typename T >
using VM2D::enable_if_trivially_copyable = typedef typename std::enable_if<std::is_trivially_copyable<T>::value>::type

Definition at line 54 of file cpuRadixSorter.h.

Function Documentation

◆ ceilhalf()

int VM2D::ceilhalf ( int  x)
inline

Definition at line 87 of file cpuTreeInfo.cpp.

88 {
89 return (x >> 1) + (x & 1);
90 }
Here is the caller graph for this function:

◆ ceilpow2()

int VM2D::ceilpow2 ( int  x,
int  p 
)
inline

Definition at line 81 of file cpuTreeInfo.cpp.

82 {
83 return (x >> p) + !!(x & ((1 << p) - 1));
84 }
Here is the caller graph for this function:

◆ distance_calculator_point2segment()

std::pair< double, int > VM2D::distance_calculator_point2segment ( const Point2D point,
const Point4D object 
)
inline

Definition at line 663 of file cpuTreeInfo.cpp.

664 {
665 int location;
666
667 double a = object[3] - object[1];
668 double b = object[2] - object[0];
669
670 double distanceSegment;
671
672 std::pair<double, double> dr = std::make_pair<double, double>(point[0] - object[0], point[1] - object[1]);
673
674 double r_numerator = dr.first * b + dr.second * a;
675 double r_denomenator = b * b + a * a;
676 double r = r_numerator / r_denomenator;
677
678 double s = (dr.first * a - dr.second * b);
679
680 if ((r >= 0) && (r <= 1))
681 {
682 distanceSegment = s * s / r_denomenator;
683 location = 0;
684 }
685 else
686 {
687 double dist1 = dr.first * dr.first + dr.second * dr.second;
688 double dist2 = sqr(point[0] - object[2]) + sqr(point[1] - object[3]);
689 if (dist1 < dist2)
690 {
691 distanceSegment = dist1;
692 location = -1;
693 }
694 else
695 {
696 distanceSegment = dist2;
697 location = 1;
698 }
699 }
700
701 return std::make_pair(distanceSegment, location);
702 }
auto dist2(const numvector< T, n > &x, const numvector< P, n > &y) -> typename std::remove_const< decltype(x[0] - y[0])>::type
Вычисление квадрата расстояния между двумя точками
Definition numvector.h:836
Here is the caller graph for this function:

◆ ExpandBits()

unsigned int VM2D::ExpandBits ( unsigned int  v)
inline

Definition at line 51 of file cpuTreeInfo.cpp.

52 {
53 // вставит 1 нуль
54 v = (v | (v << 8)) & 0x00FF00FF; // 00000000`00000000`abcdefgh`ijklmnop
55 // | 00000000`abcdefgh`ijklmnop`00000000
56 // = 00000000`abcdefgh`XXXXXXXX`ijklmnop
57 // & 00000000`11111111`00000000`11111111
58 // = 00000000`abcdefgh`00000000`ijklmnop
59
60 v = (v | (v << 4)) & 0x0F0F0F0F; // 00000000`abcdefgh`00000000`ijklmnop
61 // | 0000abcd`efgh0000`0000ijkl`mnop0000
62 // = 0000abcd`XXXXefgh`0000ijkl`XXXXmnop
63 // & 00001111`00001111`00001111`00001111
64 // = 0000abcd`0000efgh`0000ijkl`0000mnop
65
66 v = (v | (v << 2)) & 0x33333333; // 0000abcd`0000efgh`0000ijkl`0000mnop
67 // | 00abcd00`00efgh00`00ijkl00`00mnop00
68 // = 00abXXcd`00efXXgh`00ijXXkl`00mnXXop
69 // & 00110011`00110011`00110011`00110011
70 // = 00ab00cd`00ef00gh`00ij00kl`00mn00op
71
72 v = (v | (v << 1)) & 0x55555555; // 00ab00cd`00ef00gh`00ij00kl`00mn00op
73 // | 0ab00cd0`0ef00gh0`0ij00kl0`0mn00op0
74 // = 0aXb0cXd`0eXf0gXh`0iXj0kXl`0mXn0oXp
75 // & 01010101`01010101`01010101`01010101
76 // = 0a0b0c0d`0e0f0g0h`0i0j0k0l`0m0n0o0p
77 return v;
78 }
Here is the caller graph for this function:

◆ mindist2()

double VM2D::mindist2 ( const Point4D lowerUpper,
const Point2D rhs 
)
inlinenoexcept

Definition at line 636 of file cpuTreeInfo.cpp.

637 {
638 const double dx = ::fmin(lowerUpper[2], ::fmax(lowerUpper[0], rhs[0])) - rhs[0];
639 const double dy = ::fmin(lowerUpper[3], ::fmax(lowerUpper[1], rhs[1])) - rhs[1];
640 return dx * dx + dy * dy;
641 }
Here is the caller graph for this function:

◆ MinDist2AABB()

double VM2D::MinDist2AABB ( const Point4D gabI,
const Point4D gabJ 
)
inline

Definition at line 704 of file cpuTreeInfo.cpp.

705 {
706 double dx = 0.0, dy = 0.0;
707
708 if (gabI[0] > gabJ[2])
709 dx = gabI[0] - gabJ[2];
710 else if (gabJ[0] > gabI[2])
711 dx = gabJ[0] - gabI[2];
712
713 if (gabI[1] > gabJ[3])
714 dy = gabI[1] - gabJ[3];
715 else if (gabJ[1] > gabI[3])
716 dy = gabJ[1] - gabI[3];
717
718 return dx * dx + dy * dy;
719 }
Here is the caller graph for this function:

◆ minmaxdist2()

double VM2D::minmaxdist2 ( const Point4D lowerUpper,
const Point2D rhs 
)
inlinenoexcept

Definition at line 643 of file cpuTreeInfo.cpp.

644 {
645 std::pair<double, double> rm_sq = std::make_pair<double, double>((lowerUpper[0] - rhs[0]) * (lowerUpper[0] - rhs[0]),
646 (lowerUpper[1] - rhs[1]) * (lowerUpper[1] - rhs[1]));
647 std::pair<double, double> rM_sq = std::make_pair<double, double>((lowerUpper[2] - rhs[0]) * (lowerUpper[2] - rhs[0]),
648 (lowerUpper[3] - rhs[1]) * (lowerUpper[3] - rhs[1]));
649
650 if ((lowerUpper[2] + lowerUpper[0]) * 0.5 < rhs[0])
651 std::swap(rm_sq.first, rM_sq.first);
652
653 if ((lowerUpper[3] + lowerUpper[1]) * 0.5 < rhs[1])
654 std::swap(rm_sq.second, rM_sq.second);
655
656 const double dx = rm_sq.first + rM_sq.second;
657 const double dy = rM_sq.first + rm_sq.second;
658
659 return fmin(dx, dy);
660 }
Here is the caller graph for this function:

◆ norm()

template<typename T >
double VM2D::norm ( const std::vector< T > &  b)
inline

Шаблонная функция вычисления евклидовой нормы вектора или списка

Parameters
[in]bконстантная ссылка на вектор

Definition at line 102 of file Gmres2D.h.

103 {
104 double norm = 0;
105 #ifndef OLD_OMP
106 #pragma omp simd reduction(+:norm)
107 #endif
108 for (size_t i = 0; i < b.size(); i++)
109 norm += (b[i] * b[i]);
110 return sqrt(norm);
111 }
double norm(const std::vector< T > &b)
Шаблонная функция вычисления евклидовой нормы вектора или списка
Definition Gmres2D.h:102
Here is the call graph for this function:
Here is the caller graph for this function:

◆ norm2()

template<typename T >
double VM2D::norm2 ( const std::vector< T > &  b)
inline

Шаблонная функция вычисления евклидовой нормы вектора или списка

Parameters
[in]bконстантная ссылка на вектор

Definition at line 117 of file Gmres2D.h.

118 {
119 double norm2 = 0;
120 #ifndef OLD_OMP
121 #pragma omp simd reduction(+:norm2)
122 #endif
123 for (size_t i = 0; i < b.size(); i++)
124 norm2 += (b[i] * b[i]);
125 return norm2;
126 }
double norm2(const std::vector< T > &b)
Шаблонная функция вычисления евклидовой нормы вектора или списка
Definition Gmres2D.h:117
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator*()

template<typename T >
std::vector< T > VM2D::operator* ( const T  lambda,
const std::vector< T > &  x 
)
inline

Шаблонная функция умножения числа на вектор

Definition at line 131 of file Gmres2D.h.

132 {
133 std::vector<T> c(x);
134 c.resize(x.size());
135
136 #ifndef OLD_OMP
137 #pragma omp simd
138 #endif
139 for (size_t i = 0; i < x.size(); ++i)
140 c[i] *= lambda;
141 return c;
142 }

Variable Documentation

◆ onePlusMachineEps

const double VM2D::onePlusMachineEps = 1.0f + 2.0e-7f

Definition at line 722 of file cpuTreeInfo.cpp.