Skip to content

vortexmethods/fastm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fastm: Fast algorithms for 2D vortex particle method

Repo Size License

Copyright (C) 2020-2024 Ilia Marchevsky, Evgeniya Ryatina, Alexandra Kolganova

Программная реализация (с открытым исходным кодом) быстрых алгоритмов расчета скоростей вихревых частиц для двумерных методов вычислительной гидродинамики.

Версия 1.5 от 19 июня 2024 г.

ЛИЦЕНЗИЯ

Программа распространяется на условиях свободной лицензии GNU GPLv3

ИСПОЛЬЗУЕМЫЕ МЕТОДЫ

В репозитории представлены программные реализации следующих методов:

  • BH - метод Барнса-Хата, BH, оригинальная версия которого была описана Josh Barnes и Piet Hut в 1986 г., представленная здесь модификация для CPU разработана авторами;

  • BHcu - CUDA-реализация модификации метода Барнса-Хата, разработанная авторами в результате переработки и развития кода, первоначально разработанного Martin Burtscher и доступного под свободной лицензией Modified BSD License на GitHub;

  • BHgpu - то же, но вместо оригинального алгоритма построения quad-дерева реализован более эффективный алгоритм построения k-d дерева, предложенный Tero Karras в 2012 г.;

  • FMM - быстрый метод мультиполей, оригинальная версия которого была описана Leslie Greengard и Владимиром Рохлиным (мл.) в 1987 г., представленная здесь реализация для CPU разработана авторами совместно с Д.О. Попудняк;

  • FFT - метод на основе решения задачи Пуассона для функции тока методом быстрого преобразования Фурье, оригинальная версия которого была описана Guido Morgenthal и Jens Honore Walther в 2007 г.; представленная здесь реализация для CPU со схемами интерполяции повышенной точности разработана авторами;

СТРУКТУРА РЕПОЗИТОРИЯ

  • BH - исходные коды метода Барнса-Хата в авторской модификации

  • BHcu - исходные коды CUDA-реализации модифицированного метода Барнса-Хата (оригинальный алгоритм автора Martin Burtscher, добавлены мультипольные раздожения произвольной длины и возможность работы с "массами" частиц произвольного знака)

  • BHgpu - предыдущий алгоритм, но вместо оригинального метода построения quad-дерева реализован алгоритм построения дерева, разработанный Tero Karras

  • FMM - исходные коды быстрого метода мультиполей

  • FFT - исходные коды метода на основе быстрого преобразования Фурье

  • include - общие библиотеки (eigen и вспомогательные типы данных)

  • test - примеры исходных данных --- распределения различного количества вихревых частиц в единичном квадрате (файлы с большим количеством вихрей заархивированы для экономии места!)

  • res - папка, в которую производится сохранение результатов; в нее помещены результаты прямого решения тестовых задач методом Био-Савара (файлы для большого количества вихрей заархивированы для экономии места!)

УСТАНОВКА

Для запуска программ BH, BHcu, FMM, FFT на комьютере необходимо загрузить исходные коды программы. Если на Вашем компьютере установлен "Git", достаточно исполнить команду

  git clone https://github.com/vortexmethods/fastm.git fastm

по результатам работы которой в текущей папке будет создана подпапка fastm и в нее будут загружены все файлы из репозитория.

Подготовка к компияции исходных кодов предполагает создание папок "build" в каталогах BH, BHcu, FMM, FFT с загруженными исходными кодами, переход в эти папки и выполнение команды

  cmake ..

При необходимости следует указать необходимые ключи для настройки используемых компиляторов, указания опций компиляции и т.п., возможно, потребуется также некоторая модификация файла "CMakeLists.txt", содержащего параметры настройки CMake.

В частности, для подготовки исходных кодов для их последующей компиляции в Windows средствами MS Visual Studio следует, в зависимости от версии, использовать одну из следующих команд (опция Win64 обязательна для использования возможности проведения вычислений на графических картах Nvidia CUDA, для Visual Studio 2019 она включена по умолчанию для 64-битных систем)

  cmake -G"Visual Studio 15 2017 Win64" ..
  cmake -G"Visual Studio 16 2019" ..
  cmake -G"Visual Studio 17 2022" ..

В случае использования компилятора, отличного от используемого по умолчанию в Windows (это, как правило, встроенный в MS Visual Studio компилятор MVSC), например, компилятора Intel, при подготовке исходных кодов к компиляции необходимо указать, в зависимости от версии, ключ (отметим, что Intel C++ Compiler 19 интегрируется в Visual Studio 2019 лишь начиная с версии Upd.4)

  -T"Intel C++ Compiler <ver>"

При работе в Linux альтернативный компилятор с C++ (к примеру, icpc для компилятора Intel вместо используемого в большинстве случаев по умолчанию компилятора g++) требуется исполнить команду

  CXX=icpc cmake ..

Дальнейшая компиляция кода зависит от используемой операционной системы. В Windows, как правило, при помощи CMake будет создан проект для его поледующего открытия и компиляции средствами MS Visual Studio (см. выше), в Linux достаточно исполнения из созданной папки команды

  make

НАСТРОЙКА КОДА BH

Документация разработчика, генерируемая автоматически средствами doxygen доступна по ссылке

  http://vortexmethods.github.io/fastm

Код BH реализует модификацию метода Барнса-Хата для CPU и позволяет решать 3 типа задач:

  1. расчет взаимного влияния N вихревых частиц;

  2. решение граничного интегрального уравнения на профиле;

  3. расчет скоростей в области течения, вызванных наличием завихренности в виде вихревых частиц и профиля.

Для выбора того или иного варианта при подготовке исходных кодов при помощи cmake нужно указать один из ключей

  -DNBODY=ON  -DBIE=ON  -DVP=ON

Для переключения режима нужно вызвать cmake повторно, отметив прежнюю опцию как OFF, а новую как ON.

Все настройки по умолчанию читаются из файла options.txt, однако если аргументом командной строки указать иное имя - считывание произойдет из указанного файла (чтобы все работало нормально, запускать программу следует, находясь в папке build), например

  Release\BH.exe optionsNBODY.txt

Значения опций по умолчанию задаются в defaults.txt, они могут быть переопределены.

Общие настройки, влияющие на параметры быстрого метода:

  * *numOfLevelsVortex*, *numOfLevelsAirfoil*, *numOfLevelsVP* - максимально достигаемая глубина при обходе деревьев
  * *order* - длина мультипольных и локальных разложений (число членов = 1+order)
  * *theta* - параметр близости ячеек

Если при сборке при помощи cmake указан ключ

  -DCALCOP

то отключается параллельный счет с помощью OpenMP и производится подсчет количества операций.

Логика работы модулей:

Расчет взаимного влияния N вихревых частиц

а) Из файла vortexFile считываются положения и циркуляции вихревых частиц, они сдвигаются на wakeShift

б) При вычислении влияния друг на друга каждая частица считается круглым вихрем радиусом eps; к результату добавляется скорость набегающего потока velInf

в) Если указана опция save, то результат сохраняется в файл velBH.txt

г) Если указана опция compare, то производится сравнение с расчетом по прямому методу; если есть файл velBS.txt, то расчет по прямому методу не производится, а данные считываются из него; если файла нет - расчет производится и такой файл создается.

Решение граничного интегрального уравнения на профиле

а) Из файла airfoilFile считываются координаты вершин профиля

б) Из файла vortexFile считываются положения и циркуляции вихревых частиц, имитирующих вихревой след в области течения; они сдвигаются на wakeShift

в) Скорость набегающего потока полагается равной velInf

г) Радиус eps нужно прнять равным длине панели

д) По умолчанию решение принимается кусочно-постоянным; чтобы сделать его кусочно-линейным, нужно в cmake указать опцию

 *-DLINEAR=ON* 

а если профиль имеет угловые точки - то еще и опцию

 *-DAS=ON* 

(параметры угловых точек задаются в настоящее время в defaults.txt). Результат решения интегрального уравнения сохраняется в файл gamRes.txt

е) Критерий останова в методе GMRES - это параметр epsGMRES; если включить параметр residualShow - будет показано, как убывает невязка

ж) Эталонное решение для сравнения (при включенной опции compare) берется из файла Exact-.txt, где определяется параметром task и обычно соответствует названию файла с профилем (хотя может быть любым), принимает значения const, linear или as. Если такого файла нет, то автоматически он создан не будет, а величина ошибки будет показана равной 1 (т.е. 100 %)

Расчет скоростей в области течения, вызванных наличием завихренности в виде вихревых частиц и профиля

а) Из файла vpFile считываются положения точек, в которых будут рассчитываться скорости

б) Из файла airfoilFile считываются координаты вершин профиля, решение на нем читается из файла Exact-.txt (если его нет, то надо решить предыдущую задачу и полученный файл gamRes.txt переименовать в Exact-.txt)

в) Из файла vortexFile считываются положения и циркуляции вихревых частиц, имитирующих вихревой след в области течения; они сдвигаются на wakeShift (отметим, что решение должно быть с этим файлом согласованно!)

г) При вычислении скоростей среды частицы считаются круглыми вихрями радиусом eps; учитывается влияние завихренности с панелей профиля (в соответствии с выбранной схемой const, linear или linear+as); к результату добавляется скорость набегающего потока velInf

д) Если указана опция save, то результат сохраняется в файл velBH.txt

е) Если указана опция compare, то производится сравнение с расчетом по прямому методу; если есть файл velBS.txt, то расчет по прямому методу не производится, а данные считываются из него; если файла нет - расчет производится и такой файл создается.

РАБОТА С CUDA (коды BHcu, BHgpu)

Запуск программ BHcu и BHgpu возможен только при наличии в системе установленного CUDA Toolkit. В ходе работы cmake программа будет автоматически сконфигурирована для счета с использованием возможностей графических карт, работающих по технологии NVidia CUDA.

При выполнении расчетов на узле, на котором установлено несколько видеокарт, по умолчанию все расчеты будут производиться на устройстве с индексом #0. Чтобы этого избежать, нужно открыть файл исходного кода BHcu/src/Params/Params.h и указать соответствующий индекс в качестве значения переменной dev.

ЗАПУСК

Запуск программ осуществляется строго из папок build, что необходимо для коректного считывания исходных файлов (из папки test) и сохранения результатов (в папку res)

НЕОБХОДИМОЕ ПО

Для компиляции требуется наличие установленных:

  • системы автоматизации сборки программного обеспечения из исходного кода cmake,
  • компилятора с языка C++, поддерживающего технологию OpenMP и стандарт С++11,
  • библиотеки Eigen (не обязательно, исходные коды находятся в папке "include"),
  • при наличии в системе графического процессора Nvidia, поддерживающего технологию CUDA, для его использования необходим CUDA Toolkit.

КРАТКАЯ ИСТОРИЯ ВЕРСИЙ

  • Версия 1.0 представлена 09 августа 2021 г. в рамках программы "Вычислительные технологии, многомерный анализ данных и моделирование" (Образовательный центр "Сириус", Сочи, 2-22 августа 2021 г.)

  • Версия 1.1 (BH) обновлен код для BH, в него включено дерево, которое строится по кривой Мортона (24 августа 2022 г.)

  • Версия 1.2 (BH) обновлен код для BH, реализованы три режима работы программы (22 октября 2022 г.)

  • Версия 1.3 (BH) обновлен код для BH, загрузка опций из файлов, оптимизация кода, улучшенная статистика; (FMM) оптимизация кода (24 августа 2022 г.)

  • Версия 1.4 (BHgpu) загружен код для BHgpu; (BH) возможность решения ГИУ для системы профилей (31 мая 2023 г.)

  • Версия 1.5 (BHgpu) обновлен код для BHgpu; (BH) исправлена реализация GMRES (19 июня 2024 г.)

ВОПРОСЫ, ПРЕДЛОЖЕНИЯ И ЗАМЕЧАНИЯ

На странице Issues мы будем рады ответить на Ваши вопросы, с благодарностью выслушаем предложения и замечания по коду.

Мы открыты для любого конструктивного взаимодействия!


С глубоким уважением, разработчики

Марчевский И.К.
Марчевский Илья Константинович
Рятина Е.П.
Рятина Евгения Павловна
Колганова А.О.
Колганова Александра Олеговна

About

Fast algorithms for 2D vortex particle method

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •