![]() |
VM2D 1.14
Vortex methods for 2D flows simulation
|
Структура, соответствующая мортоновскому дереву More...
#include <TreeBH.h>

Public Member Functions | |
| void | getStatistics (int &numParticles, int &treshold, std::pair< int, int > &partLevel, std::pair< int, int > &leafsLevel, int &lowLevelCells) const |
| double & | getBinom (int n, int k) |
| MortonTree (const params &prm_, int maxTreeLevel_, std::vector< PointsCopy > &points) | |
| void | MakeRootMortonTree () |
| Построение корня дерева и задание его общих параметров | |
| void | BuildMortonInternalTree () |
| Построение внутренних ячеек дерева | |
| void | BuildMortonParticlesTree () |
| Построение верхушек дерева — отдельных частиц | |
| void | FillMortonLowCells (int cell=0) |
| Функция заполнения списка нижних ячеек дерева (до которых производится обход) | |
| void | FillMortonLowCellsA () |
| void | CalculateMortonTreeParams (int cell, int omplevel) |
| Вычисление параметров дерева (циркуляций и высших моментов) | |
| void | CalcLocalCoeffToLowLevel (int lowCell, std::unique_ptr< MortonTree > &treeInf, int fromWho, bool calcCloseTrees) |
| void | CalcVeloBiotSavart (int lowCell, std::unique_ptr< MortonTree > &treeInf) |
| void | CalcVeloTaylorExpansion (int lowCell) |
| void | AddVelo (int lowCell) |
| void | MinMaxCellsSearch (int numCell) |
| void | MinMaxCellsCalc (BH::treeCellT &cell) |
| void | GabsPyr (int numCell) |
| void | ShareGabs (int numCell) |
Public Attributes | |
| std::vector< TParticleCode > | mortonCodes |
| Список мортоновских кодов, вычисляемых по положениям частиц | |
| std::vector< double > | iFact |
| Спикок обратных факториалов целых чисел | |
| std::vector< double > | binomCft |
| const int | maxTreeLevel |
| Максимальная глубина дерева при его обходе | |
| std::vector< int > | mortonLowCells |
| Вектор индесков ячеек нижнего уровня в дереве | |
| std::vector< treeCellT > | mortonTree |
| Мортоновское дерево Размер дерева равен сумме числа внутренних вершин (число частиц без единицы) и числа частиц резервируется на 1 штуку больше для удобства работы ячейки [0 ... pos.size()-2] отвечают внутренним узлам, ячейка с идексом pos.size()-1 не используется ячейки [pos.size() ... 2*pos.size()-1] отвечают частицам | |
Private Member Functions | |
| int | Delta (int i, int j) const |
| int | PrefixLength (int cell) const |
| std::pair< unsigned int, int > | Prefix (int cell) const |
| void | SetCellGeometry (int cell) |
| Функция вычисления геометрических параметров внутренней ячейки дерева | |
| void | BuildInternalTreeCell (int i) |
| Функция построения i-й внутренней ячейки дерева | |
| void | RSort_Node3 (TParticleCode *m, TParticleCode *m_temp, unsigned int n) |
| Поразрядная сортировка мортоновских кодов | |
| void | RSort_step3 (TParticleCode *source, TParticleCode *dest, unsigned int n, unsigned int *offset, unsigned char sortable_bit) |
| Вспомогательная функция к RSort_Node3. | |
| void | RSort_Parallel (TParticleCode *m, TParticleCode *m_temp, unsigned int n, unsigned int *s) |
| Параллельная версия поразрядной сортировки мортоновских кодов | |
Static Private Member Functions | |
| static unsigned int | ExpandBits (unsigned int v) |
| "Разрежение" двоичного представления беззнакового целого, вставляя по одному нулику между всеми битами | |
| static unsigned int | Morton2D (const Point2D &r) |
| static std::pair< Point2D, Point2D > | FindEnclosingRectangleOld (const std::vector< PointsCopy > &points) |
| Поиск габаритного прямоугольника системы точек (для OpenMP 2.0) | |
Private Attributes | |
| const params & | prm |
| Ссылка на параметры, загружаемые из файла | |
| std::vector< PointsCopy > & | pointsCopy |
| Ссылка на список обобщенных вихрей, по которым строится дерево | |
| double | iQuadSideVar |
| Point2D | lowLeft |
| Положение нижнего левого угла дерева | |
Структура, соответствующая мортоновскому дереву
| BH::MortonTree::MortonTree | ( | const params & | prm_, |
| int | maxTreeLevel_, | ||
| std::vector< PointsCopy > & | points | ||
| ) |
Definition at line 49 of file TreeBH.cpp.

| void BH::MortonTree::AddVelo | ( | int | lowCell | ) |
Добавление влияния дальней зоны для правой части
| [in] | lowCell | — индекс ячейки нижнего уровня, в которой рассчитывается влияние |
|
private |
Функция построения i-й внутренней ячейки дерева
Definition at line 264 of file TreeBH.cpp.


| void BH::MortonTree::BuildMortonInternalTree | ( | ) |
Построение внутренних ячеек дерева
Definition at line 314 of file TreeBH.cpp.

| void BH::MortonTree::BuildMortonParticlesTree | ( | ) |
Построение верхушек дерева — отдельных частиц
Definition at line 330 of file TreeBH.cpp.

| void BH::MortonTree::CalcLocalCoeffToLowLevel | ( | int | lowCell, |
| std::unique_ptr< MortonTree > & | treeInf, | ||
| int | fromWho, | ||
| bool | calcCloseTrees | ||
| ) |
Расчет коэффицентов локального разложения для нижних ячеек
| [in] | lowCell | индекс ячейки нижнего уровня, в которой будет рассчитываться влияние |
| [in] | treeInf | ссылка на влияющее дерево |
| [in] | fromWho | индекс влияющей ячейки во влияющем дереве |
| [in] | calcCloseTrees | признак заполнения списка ближних ячеек (нижнего уровня) к ячейке lowCell |
Definition at line 436 of file TreeBH.cpp.


| void BH::MortonTree::CalculateMortonTreeParams | ( | int | cell, |
| int | omplevel | ||
| ) |
Вычисление параметров дерева (циркуляций и высших моментов)
Расчет мультипольных моментов всех ячеек дерева
| [in] | cell | ячейка для вычисления мультипольных моментов |
| [in] | omplevel | текущий уровень вложенности OpenMP |
Definition at line 378 of file TreeBH.cpp.


| void BH::MortonTree::CalcVeloBiotSavart | ( | int | lowCell, |
| std::unique_ptr< MortonTree > & | treeInf | ||
| ) |
Расчет влияния от ближних ячеек по формуле Био - Савара
| [in] | lowCell | индекс ячейки нижнего уровня, в которой рассчитывается влияние |
| [in] | treeInf | влияющее дерево (чтобы брать ближние ячейки по индексу из нужного массива) |
Definition at line 499 of file TreeBH.cpp.

| void BH::MortonTree::CalcVeloTaylorExpansion | ( | int | lowCell | ) |
Расчет влияния от дальней зоны при помощи Тейлоровского разложения
| [in] | lowCell | — индекс ячейки нижнего уровня, в которой рассчитывается влияние |
Definition at line 536 of file TreeBH.cpp.
|
private |
Функция вычисления длины общей части префиксов двух (а значит - и диапазона) частиц
| [in] | i | индекс одной из частиц в отсортированном по мортоновским кодам списке |
| [in] | j | индекс второй из частиц в отсортированном по мортоновским кодам списке |
Definition at line 187 of file TreeBH.cpp.

|
staticprivate |
"Разрежение" двоичного представления беззнакового целого, вставляя по одному нулику между всеми битами
Definition at line 559 of file TreeBH.cpp.

| void BH::MortonTree::FillMortonLowCells | ( | int | cell = 0 | ) |
Функция заполнения списка нижних ячеек дерева (до которых производится обход)
Definition at line 348 of file TreeBH.cpp.


| void BH::MortonTree::FillMortonLowCellsA | ( | ) |
Definition at line 362 of file TreeBH.cpp.
|
staticprivate |
Поиск габаритного прямоугольника системы точек (для OpenMP 2.0)
Definition at line 82 of file TreeBH.cpp.

| void BH::MortonTree::GabsPyr | ( | int | numCell | ) |
Definition at line 870 of file TreeBH.cpp.


|
inline |
| void BH::MortonTree::getStatistics | ( | int & | numParticles, |
| int & | treshold, | ||
| std::pair< int, int > & | partLevel, | ||
| std::pair< int, int > & | leafsLevel, | ||
| int & | lowLevelCells | ||
| ) | const |
Сбор статистики по дереву
| [out] | numParticles | число частиц в дереве |
| [out] | treshold | уровень, до которого производится обход |
| [out] | partLevel | наименьший и наибольший уровни, на которых находятся частицы |
| [out] | leafsLevel | наименьший и наибольший уровни, на которых ячейки, до которых производится обход |
| [out] | lowLevelCells | число ячеек "нижнего" уровня (до которых производится обход) |
Definition at line 749 of file TreeBH.cpp.
| void BH::MortonTree::MakeRootMortonTree | ( | ) |
Построение корня дерева и задание его общих параметров
Definition at line 140 of file TreeBH.cpp.

| void BH::MortonTree::MinMaxCellsCalc | ( | BH::treeCellT & | cell | ) |
Definition at line 829 of file TreeBH.cpp.

| void BH::MortonTree::MinMaxCellsSearch | ( | int | numCell | ) |
Definition at line 809 of file TreeBH.cpp.


|
staticprivate |
Мортоновский код для пары из чисел типа double Исходные числа (r[0], r[1]) - строго в диапазоне [0, 1 / (1.0 + 1/(2^codeLength - 1) ))
Definition at line 591 of file TreeBH.cpp.


|
private |
Функция вычисления общего префикса и его длины для всех частиц в конкретной ячейке
| [in] | cell | индекс ячейки дерева в линейном массиве |
Definition at line 227 of file TreeBH.cpp.


|
private |
Функция вычисления длины общей части префиксов всех частиц в конкретной ячейке
| [in] | cell | индекс ячейки дерева в линейном массиве |
Definition at line 219 of file TreeBH.cpp.


|
private |
Поразрядная сортировка мортоновских кодов
Definition at line 630 of file TreeBH.cpp.

|
inlineprivate |
Параллельная версия поразрядной сортировки мортоновских кодов
Definition at line 677 of file TreeBH.cpp.

|
inlineprivate |
Вспомогательная функция к RSort_Node3.
Definition at line 618 of file TreeBH.cpp.

|
private |
Функция вычисления геометрических параметров внутренней ячейки дерева
Definition at line 236 of file TreeBH.cpp.


| void BH::MortonTree::ShareGabs | ( | int | numCell | ) |
Definition at line 854 of file TreeBH.cpp.

| std::vector<double> BH::MortonTree::binomCft |
| std::vector<double> BH::MortonTree::iFact |
|
private |
Масштабный фактор дерева (на сколько нужно умножить сторону квадрата содержащего все частицы, чтобы новый квадрат имел размер [0, U]x[0, U], где U выбирается так, чтобы все мортоновские коды заданной длины были в диапазоне [0, 1), т.е. положение частицы должно быть в диапазоне [0, 1 / (1.0 + 1/(2^codeLength - 1) ))
|
private |
| const int BH::MortonTree::maxTreeLevel |
| std::vector<TParticleCode> BH::MortonTree::mortonCodes |
| std::vector<int> BH::MortonTree::mortonLowCells |
| std::vector<treeCellT> BH::MortonTree::mortonTree |
Мортоновское дерево Размер дерева равен сумме числа внутренних вершин (число частиц без единицы) и числа частиц резервируется на 1 штуку больше для удобства работы ячейки [0 ... pos.size()-2] отвечают внутренним узлам, ячейка с идексом pos.size()-1 не используется ячейки [pos.size() ... 2*pos.size()-1] отвечают частицам
|
private |
|
private |