const real IDPI
Definition: main.cpp:97
![]() |
fastm/BHgpu
1.5
Быстрые алгоритмы в вихревых методах моделирования плоских течений
|
Barnes-Hut method (CUDA) for 2D vortex particles + Morton tree. Подробнее...
#include <algorithm>#include <fstream>#include <iostream>#include <math.h>#include <stdlib.h>#include <stdio.h>#include <vector>#include "omp.h"#include "cuKernels.cuh"#include "Logo.h"#include "Params.h"#include "Point2D.h"#include "Vortex2D.h"
Функции | |
| void | setBinom (std::vector< int > &cft) |
| int | main (int argc, char **argv) |
Переменные | |
| const real | IDPI = (real)0.15915494309189534 |
Barnes-Hut method (CUDA) for 2D vortex particles + Morton tree.
См. определение в файле main.cpp
| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
ПРОКОММЕНТИРОВАННАЯ ЧАСТЬ
RUNS
For MortonTree
Построение габаритного прямоугольника
| [in] | nbodies | количество вихрей |
| [in] | vtxl | указатель на массив на device, где хранятся вихри |
| [out] | Mposl | указатель на массив на device, куда записываются координаты центров внутренних ячеек, заполняется только нулевая ячейка(корень) |
| [out] | maxrl | указатель на пару чисел на device, куда записываются координаты правого верхнего угла габаритного прямоугольника |
| [out] | minrl | указатель на пару чисел на device, куда записываются координаты левого нижнего угла габаритного прямоугольника |
Вычисление кодов Мортона
| [in] | nbodies | количество вихрей |
| [in] | vtxl | указатель на массив на device, где хранятся вихри |
| [out] | MmortonCodesKeyUnsortl | указатель на массив на device, куда записываются несортированные коды Мортона (в том же порядке, что и вихри в массиве vtxl) |
| [out] | MmortonCodesIdxUnsortl | указатель на массив на device, куда записываются числа по порядку от 0 до nbodies-1 |
| [out] | MmortonCodesKeyl | указатель на массив на device, куда записываются отсортированные по возрастанию коды Мортона (в порядке обхода Z-кривой) |
| [out] | MmortonCodesIdxl | указатель на массив на device, куда записываются правила перестановки кодов Мортона (получается "синхронной" сортировкой MmortonCodesKeyl) |
| [out] | Mrangel | указатель на массив на device, куда записываются диапазоны частиц (по индексам в отсортированном массиве MmortonCodesKeyl), содержащихся во внутренних ячейках (заполняется только для корня) |
Определение топологии Мортоновского дерева
| [in] | nbodies | количество вихрей |
| [in] | MmortonCodesKeyl | указатель на массив на device, куда записываются отсортированные по возрастанию коды Мортона (в порядке обхода Z-кривой) |
| [out] | Mparentl | указатель на массив на device, куда записываются индексы родителей ячеек |
| [out] | Mchildl | указатель на массив на device, куда записываются пары индексов ячеек потомков |
| [out] | Mrangel | указатель на массив на device, куда записываются диапазоны частиц (по индексам в отсортированном массиве MmortonCodesKeyl), содержащихся во внутренних ячейках |
Определение геометрических параметров внутренних ячеек Мортоновского дерева
| [in] | nbodies | количество вихрей |
| [in] | nnodes | размер условного массива, хранящего все дерево (не менее, чем 2*nbodies) |
| [in] | MmortonCodesKeyl | указатель на массив на device, куда записываются отсортированные по возрастанию коды Мортона (в порядке обхода Z-кривой) |
| [out] | Mposl | указатель на массив на device, куда записываются координаты центров внутренних ячеек |
| [out] | Msizel | указатель на массив на device, куда записываются пары чисел - размеры внутренних ячеек по горизонтали и вертикали |
| [in] | Mrangel | указатель на массив на device, где хранятся диапазоны частиц (по индексам в отсортированном массиве MmortonCodesKeyl), содержащихся во внутренних ячейках |
| [out] | MlevelUnsortl | указатель на массив на device, куда записываются уровни внутренних ячеек мортоновского дерева |
| [out] | MlevelSortl | указатель на массив на device, куда записываются отсортированные уровни внутренних ячеек мортоновского дерева |
| [out] | MindexUnsortl | указатель на массив на device, куда записываются числа по порядку от 0 до nbodies-2 |
| [out] | MindexSortl | указатель на массив на device, куда записываются правила перестановки MlevelSortl (получается "синхронной" сортировкой MlevelSortl) |
| [out] | MindexSortTl | указатель на массив на device, куда записываются правила обратной перестановки MlevelSortl |
Обнуление необходимых параметров
| [in] | nnodes | размер условного массива, хранящего все дерево (не менее, чем 2*nbodies) |
| [in] | nbodies | количество вихрей |
| [out] | massl | указатель на массив на device, где присваиваются -1 внутренним узлам и 1 вихрям |
| [out] | momsl | указатель на массив на device, где обнуляются мультипольные моменты всех ячеек |
Вычисление мультипольных моментов
| [in] | nnodes | размер условного массива, хранящего все дерево (не менее, чем 2*nbodies) |
| [in] | nbodies | количество вихрей |
| [in] | Mchildl | указатель на массив на device, куда записываются пары индексов ячеек потомков |
| [out] | massl | указатель на массив на device, где присваиваются массы (единица для точечного вихря, число вихрей для ячейки) |
| [out] | momsl | указатель на массив на device, куда записываются мультипольные моменты всех ячеек |
| [in] | vtxl | указатель на массив на device, где хранятся вихри |
| [in] | MmortonCodesIdxl | указатель на массив на device, где хранятся правила перестановки кодов Мортона |
| [in] | Mposl | указатель на массив на device, где хранятся координаты центров внутренних ячеек |
| [in] | MindexSortl | указатель на массив на device, где хранятся правила перестановки массива уровней дерева (MlevelSortl) |
| [in] | MindexSortTl | указатель на массив на device, где хранятся правила обратной перестановки массива уровней дерева (MlevelSortl) |
Вычисление скоростей
| [in] | nnodes | размер условного массива, хранящего все дерево (не менее, чем 2*nbodies) |
| [in] | nbodies | количество вихрей |
| [in] | itolsq | параметр близости |
| [in] | epssq | радиус вихря |
| [in] | Mchildl | указатель на массив на device, где хранятся пары индексов ячеек потомков |
| [in] | momsl | указатель на массив на device, где хранятся мультипольные моменты всех ячеек |
| [in] | vtxl | указатель на массив на device, где хранятся вихри |
| [in] | MmortonCodesIdxl | указатель на массив на device, где хранятся правила перестановки кодов Мортона |
| [in] | Mposl | указатель на массив на device, где хранятся координаты центров внутренних ячеек |
| [in] | MindexSortl | указатель на массив на device, где хранятся правила перестановки массива уровней дерева (MlevelSortl) |
| [in] | MindexSortTl | указатель на массив на device, где хранятся правила обратной перестановки массива уровней дерева (MlevelSortl) |
| [out] | vell | указатель на массив на device, куда записываются скорости вихрей |
| [in] | Msizel | указатель на массив на device, где хранятся пары чисел - размеры внутренних ячеек по горизонтали и вертикали |
For Morton tree
См. определение в файле main.cpp строка 122
