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

Classes

class  BarnesHut
 Класс, определяющий основной алгоритм модификации метода Барнса - Хата More...
 
class  MortonTree
 Структура, соответствующая мортоновскому дереву More...
 
class  params
 Класс, содержащий параметры метода Баонса - Хата для CPU. More...
 
class  PointsCopy
 Класс-обертка для точек и панелей More...
 
struct  TParticleCode
 Структура, соответствующая частице и ее мортоновскому коду More...
 
struct  treeCellT
 Структура, соответствующая ячейке мортоновского дерева More...
 

Functions

void SizeCheck (std::vector< Point2D > &i00)
 Вспомогательная функция корректировки capacity вектора (при необходимости - удваивает)
 
Point2D powz (const Point2D &z, double n)
 Умножение комплексных чисел
 
template<typename T >
sqr (T x)
 Умножение a на комплексно сопряженноe к b.
 
template<typename T >
int sign (T val)
 Шаблонная функция знака числа Написана оптимизированная версия, которая работает самым быстрым возможным образом, т.к. не содержит ни одного оператора условного перехода
 
int ceilpow2 (unsigned int x, unsigned int p)
 Округление "в потолок" результата деления на степень двойки, эквивалент ceil(x / (2^p))
 
int ceilhalf (unsigned int x)
 Округление "в потолок" результата деления пополам, эквивалент ceil(x / 2)
 
template<typename T >
double norm (const T &b)
 Шаблонная функция вычисления евклидовой нормы вектора или списка
 
template<typename T >
std::vector< T > operator+ (const std::vector< T > &x, const std::vector< T > &y)
 Шаблонная функция сложения двух векторов
 
template<typename T >
std::vector< T > & operator+= (std::vector< T > &x, const std::vector< T > &y)
 Шаблонная функция прибавления к одному вектору другого
 
template<typename T >
std::vector< T > operator- (const std::vector< T > &x, const std::vector< T > &y)
 Шаблонная функция вычитания векторов
 
template<typename T >
std::vector< T > & operator-= (std::vector< T > &x, const std::vector< T > &y)
 Шаблонная функция вычитания из одного вектора другого
 
template<typename T >
std::vector< T > operator* (const T lambda, const std::vector< T > &x)
 Шаблонная функция умножения числа на вектор
 
template<typename T >
operator& (const std::vector< T > &x, const std::vector< T > &y)
 Шаблонная функция вычисления скалярного произведения двух векторов
 

Variables

long long op
 Глобальная переменная - счетчик количества операций
 
static const double PI = 3.1415926535897932384626
 
static const double DPI = 2.0 * 3.1415926535897932384626
 
static const double IPI = 1.0 / PI
 
static const double IDPI = 0.5 / PI
 
static const int twoPowCodeLengthVar = (1 << codeLength)
 2 в степени длины мортоновского кода (на каждую координату)
 

Function Documentation

◆ ceilhalf()

int BH::ceilhalf ( unsigned int  x)
inline

Округление "в потолок" результата деления пополам, эквивалент ceil(x / 2)

Definition at line 134 of file defsBH.h.

135 {
136 return (x >> 1) + (x & 1);
137 }
Here is the caller graph for this function:

◆ ceilpow2()

int BH::ceilpow2 ( unsigned int  x,
unsigned int  p 
)
inline

Округление "в потолок" результата деления на степень двойки, эквивалент ceil(x / (2^p))

Parameters
[in]xделимое
[in]pпоказатель степени двойки в делителе

Definition at line 128 of file defsBH.h.

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

◆ norm()

template<typename T >
double BH::norm ( const T &  b)
inline

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

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

Definition at line 143 of file defsBH.h.

144 {
145 double norm = 0;
146#ifndef OLD_OMP
147#pragma omp simd reduction(+:norm)
148#endif
149 for (size_t i = 0; i < b.size(); i++)
150 norm += (b[i] * b[i]);
151 ADDOP(2*b.size() + 1);
152 return sqrt(norm);
153 }
#define ADDOP(n)
Definition defsBH.h:49
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator&()

template<typename T >
T BH::operator& ( const std::vector< T > &  x,
const std::vector< T > &  y 
)
inline

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

Definition at line 225 of file defsBH.h.

226 {
227 T c = 0;
228#ifndef OLD_OMP
229#pragma omp simd reduction(+:c)
230#endif
231 for (size_t i = 0; i < x.size(); ++i)
232 c += x[i] * y[i];
233 ADDOP(x.size());
234 return c;
235 }

◆ operator*()

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

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

Definition at line 208 of file defsBH.h.

209 {
210 std::vector<T> c(x);
211 c.resize(x.size());
212
213#ifndef OLD_OMP
214#pragma omp simd
215#endif
216 for (size_t i = 0; i < x.size(); ++i)
217 c[i] *= lambda;
218 ADDOP(x.size());
219 return c;
220 }

◆ operator+()

template<typename T >
std::vector< T > BH::operator+ ( const std::vector< T > &  x,
const std::vector< T > &  y 
)
inline

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

Definition at line 157 of file defsBH.h.

158 {
159 std::vector<T> c(x);
160#ifndef OLD_OMP
161#pragma omp simd
162#endif
163 for (size_t i = 0; i < x.size(); ++i)
164 c[i] += y[i];
165 return c;
166 }

◆ operator+=()

template<typename T >
std::vector< T > & BH::operator+= ( std::vector< T > &  x,
const std::vector< T > &  y 
)
inline

Шаблонная функция прибавления к одному вектору другого

Definition at line 171 of file defsBH.h.

172 {
173#ifndef OLD_OMP
174#pragma omp simd
175#endif
176 for (size_t i = 0; i < x.size(); ++i)
177 x[i] += y[i];
178 return x;
179 }

◆ operator-()

template<typename T >
std::vector< T > BH::operator- ( const std::vector< T > &  x,
const std::vector< T > &  y 
)
inline

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

Definition at line 183 of file defsBH.h.

184 {
185 std::vector<T> c(x);
186#ifndef OLD_OMP
187#pragma omp simd
188#endif
189 for (size_t i = 0; i < x.size(); ++i)
190 c[i] -= y[i];
191 return c;
192 }

◆ operator-=()

template<typename T >
std::vector< T > & BH::operator-= ( std::vector< T > &  x,
const std::vector< T > &  y 
)
inline

Шаблонная функция вычитания из одного вектора другого

Definition at line 196 of file defsBH.h.

197 {
198#ifndef OLD_OMP
199#pragma omp simd
200#endif
201 for (size_t i = 0; i < x.size(); ++i)
202 x[i] -= y[i];
203 return x;
204 }

◆ powz()

Point2D BH::powz ( const Point2D z,
double  n 
)
inline

Умножение комплексных чисел

Возведение в степень комплексных чисел

Definition at line 83 of file defsBH.h.

84 {
85 double phi, R;
86 ADDOP(10);
87 phi = n * atan2(z[1], z[0]);
88 R = pow(z.length2(), 0.5*n);
89 return Point2D({ R * cos(phi), R * sin(phi) });
90 }
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:389
Here is the call graph for this function:

◆ sign()

template<typename T >
int BH::sign ( val)
inline

Шаблонная функция знака числа Написана оптимизированная версия, которая работает самым быстрым возможным образом, т.к. не содержит ни одного оператора условного перехода

Definition at line 111 of file defsBH.h.

112 {
113 return (T(0) < val) - (val < T(0));
114 }
Here is the caller graph for this function:

◆ SizeCheck()

void BH::SizeCheck ( std::vector< Point2D > &  i00)
inline

Вспомогательная функция корректировки capacity вектора (при необходимости - удваивает)

Definition at line 68 of file defsBH.h.

69 {
70 if (i00.capacity() == i00.size())
71 i00.reserve(i00.size() * 2);
72 }

◆ sqr()

template<typename T >
T BH::sqr ( x)
inline

Умножение a на комплексно сопряженноe к b.

Шаблонная функция возведения в квадрат

Definition at line 101 of file defsBH.h.

102 {
103 ADDOP(1);
104 return x * x;
105 }
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ DPI

const double BH::DPI = 2.0 * 3.1415926535897932384626
static

Definition at line 58 of file defsBH.h.

◆ IDPI

const double BH::IDPI = 0.5 / PI
static

Definition at line 60 of file defsBH.h.

◆ IPI

const double BH::IPI = 1.0 / PI
static

Definition at line 59 of file defsBH.h.

◆ op

long long BH::op
extern

Глобальная переменная - счетчик количества операций

Definition at line 46 of file TreeBH.cpp.

◆ PI

const double BH::PI = 3.1415926535897932384626
static

Definition at line 57 of file defsBH.h.

◆ twoPowCodeLengthVar

const int BH::twoPowCodeLengthVar = (1 << codeLength)
static

2 в степени длины мортоновского кода (на каждую координату)

Definition at line 64 of file defsBH.h.