VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
World2D.h
Go to the documentation of this file.
1/*--------------------------------*- VM2D -*-----------------*---------------*\
2| ## ## ## ## #### ##### | | Version 1.14 |
3| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2026/03/06 |
4| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5| #### ## ## ## ## ## | Open Source Code |
6| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7| |
8| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9*-----------------------------------------------------------------------------*
10| File name: World2D.h |
11| Info: Source code of VM2D |
12| |
13| This file is part of VM2D. |
14| VM2D is free software: you can redistribute it and/or modify it |
15| under the terms of the GNU General Public License as published by |
16| the Free Software Foundation, either version 3 of the License, or |
17| (at your option) any later version. |
18| |
19| VM2D is distributed in the hope that it will be useful, but WITHOUT |
20| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
21| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22| for more details. |
23| |
24| You should have received a copy of the GNU General Public License |
25| along with VM2D. If not, see <http://www.gnu.org/licenses/>. |
26\*---------------------------------------------------------------------------*/
27
28
40#ifndef WORLD2D_H
41#define WORLD2D_H
42
43#include "Gpu2D.h"
44#include "WorldGen.h"
45#include "Passport2D.h"
46#include "Velocity2D.h"
47
48namespace VM2D
49{
50 class Airfoil;
51 class AirfoilGeometry;
52 class Boundary;
53 class MeasureVP;
54 class Mechanics;
55 class Passport;
56 class Times;
57 class TimersGen;
58 class Velocity;
59 class Wake;
60 class WakeDataBase;
61
73 class World2D : public VMlib::WorldGen
74 {
75 private:
77 std::vector<std::unique_ptr<Airfoil>> airfoil;
78
80 std::vector<std::unique_ptr<AirfoilGeometry>> oldAirfoil;
81
83 std::vector<std::unique_ptr<Boundary>> boundary;
84
86 std::vector<size_t> dispBoundaryInSystem;
87
89 std::vector<std::unique_ptr<Mechanics>> mechanics;
90
92 std::unique_ptr<Velocity> velocity;
93
95 std::unique_ptr<Wake> wake;
96
98 std::unique_ptr<WakeDataBase> source;
99
101 std::unique_ptr<MeasureVP> measureVP;
102
103 public:
104 mutable int gabb;
105 mutable int check01;
106 mutable int check02;
107 mutable int checkPan;
108
109
110 private:
112 //Eigen::MatrixXd matr;
113 Eigen::MatrixXd matrReord;
114 //Eigen::MatrixXd matrSkos;
115
117 std::vector<std::vector<std::pair<Eigen::MatrixXd, Eigen::MatrixXd>>> IQ;
118
120 Eigen::MatrixXd invMatr;
121
124
126 //Eigen::VectorXd rhs;
127 Eigen::VectorXd rhsReord;
128 //Eigen::VectorXd rhsSkos;
129
131 Eigen::VectorXd sol;
132
135
137 mutable Gpu cuda;
138
139 public:
140
143 {
145 }
146
148 bool isAnyMovable() const;
149
151 bool isAnyMovableOrDeformable() const;
152
157 const Airfoil& getAirfoil(size_t i) const { return *airfoil[i]; };
158
163 const AirfoilGeometry& getOldAirfoil(size_t i) const { return *oldAirfoil[i]; };
164
169 Airfoil& getNonConstAirfoil(size_t i) const { return *airfoil[i]; };
170
174 size_t getNumberOfAirfoil() const { return airfoil.size(); };
175
180 const Boundary& getBoundary(size_t i) const { return *boundary[i]; };
181
186 Boundary& getNonConstBoundary(size_t i) const { return *boundary[i]; };
187
191 size_t getNumberOfBoundary() const { return boundary.size(); };
192
197 size_t getDispBoundaryInSystem(size_t i) const { return dispBoundaryInSystem[i]; };
198
202 const MeasureVP& getMeasureVP() const { return *measureVP; };
203
208
213 const Mechanics& getMechanics(size_t i) const { return *mechanics[i]; };
214
219 Mechanics& getNonConstMechanics(size_t i) const { return *mechanics[i]; };
220
221 const std::vector<std::unique_ptr<Mechanics>>& getMechanicsVector() const { return mechanics; };
222
226 const Wake& getWake() const { return *wake; };
227
231 Wake& getNonConstWake() const { return *wake; };
232
236 const WakeDataBase& getSource() const { return *source; };
237
241 const Velocity& getVelocity() const { return *velocity; };
242
246 Velocity& getNonConstVelocity() const { return *velocity; };
247
251 const Passport& getPassport() const { return passport; };
252
256 Passport& getNonConstPassport() const { return const_cast<Passport&>(passport); };
257
261 const Gpu& getCuda() const { return cuda; };
262
266 Gpu& getNonConstCuda() const { return cuda; };
267
271 const std::pair<Eigen::MatrixXd, Eigen::MatrixXd>& getIQ(size_t i, size_t j) const { return IQ[i][j]; };
272
276 VMlib::TimersGen& getTimers() const { return *timers; };
277
278 bool ifDivisible(int val) const { return ((val > 0) && (!(currentStep % val))); };
279
283 void SolveLinearSystem();
284
288 void FillIQ();
289
293 void FillMatrixAndRhs();
294
299
303 void CalcVortexVelo();
304
309
314
319 void MoveVortexes(std::vector<Point2D>& newPos);
320
326 void CheckInside(std::vector<Point2D>& newPos, const std::vector<std::unique_ptr<AirfoilGeometry>>& oldAirfoil);
327
331 void WakeAndAirfoilsMotion(bool dynamics);
332
333
337 World2D(const VMlib::PassportGen& passport_);
338
341
344 void GenerateMechanicsHeader(size_t mechanicsNumber);
345
346
347
348 // Реализация виртуальных функций
349 virtual void Step() override;
350 //virtual void ZeroStep() override;
351
356
360 };
361
362}//namespace VM2D
363
364#endif
365
Заголовочный файл с описанием класса Gpu.
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами
Заголовочный файл с описанием класса Velocity.
Заголовочный файл с описанием класса WorldGen.
Класс, определяющий форму профиля
Definition Airfoil2D.h:66
Абстрактный класс, определяющий обтекаемый профиль
Definition Airfoil2D.h:182
Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле
Definition Boundary2D.h:65
Класс, обеспечивающий возможность выполнения вычислений на GPU по технологии Nvidia CUDA.
Definition Gpu2D.h:69
Класс, отвечающий за вычисление поля скорости и давления в заданых точках для вывода
Definition MeasureVP2D.h:65
Абстрактный класс, определяющий вид механической системы
Definition Mechanics2D.h:72
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition Passport2D.h:289
Абстрактный класс, определяющий способ вычисления скоростей
Definition Velocity2D.h:105
Класс, опеделяющий набор вихрей
Класс, опеделяющий вихревой след (пелену)
Definition Wake2D.h:63
Класс, опеделяющий текущую решаемую задачу
Definition World2D.h:74
VMlib::vmTimer timerConvVelo
Definition World2D.h:357
size_t getNumberOfAirfoil() const
Возврат количества профилей в задаче
Definition World2D.h:174
VMlib::vmTimer timerMerging
Definition World2D.h:359
Gpu cuda
Объект, управляющий графическим ускорителем
Definition World2D.h:137
void ReserveMemoryForMatrixAndRhs()
Вычисляем размер матрицы и резервируем память под нее и под правую часть
Definition World2D.cpp:1213
bool isAnyMovable() const
Возврат признака того, что хотя бы один из профилей подвижный
Definition World2D.cpp:1758
void MoveVortexes(std::vector< Point2D > &newPos)
Вычисляем новые положения вихрей (в пелене и виртуальных)
Definition World2D.cpp:1401
std::vector< std::unique_ptr< Airfoil > > airfoil
Список умных указателей на обтекаемые профили
Definition World2D.h:77
VMlib::vmTimer timerInitialBuild
Definition World2D.h:352
bool isAnyMovableOrDeformable() const
Возврат признака того, что хотя бы один из профилей подвижный или деформируемый
Definition World2D.cpp:1765
std::unique_ptr< MeasureVP > measureVP
Умный указатель на алгоритм вычисления полей скоростей и давления (для сохранения в файл)
Definition World2D.h:101
Eigen::MatrixXd matrReord
Матрица системы
Definition World2D.h:113
bool useInverseMatrix
Признак использования обратной матрицы
Definition World2D.h:123
const Wake & getWake() const
Возврат константной ссылки на вихревой след
Definition World2D.h:226
Eigen::MatrixXd invMatr
Обратная матрица
Definition World2D.h:120
void CalcPanelsVeloAndAttachedSheets()
Вычисление скоростей панелей и интенсивностей присоединенных слоев вихрей и источников
Definition World2D.cpp:1385
void CalcVortexVelo()
Вычисление скоростей (и конвективных, и диффузионных) вихрей (в пелене и виртуальных),...
Definition World2D.cpp:1273
std::vector< std::unique_ptr< AirfoilGeometry > > oldAirfoil
Список умных указателей на обтекаемые профили для сохранения старого положения
Definition World2D.h:80
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition World2D.h:157
const AirfoilGeometry & getOldAirfoil(size_t i) const
Возврат константной ссылки на объект старого профиля
Definition World2D.h:163
const WakeDataBase & getSource() const
Возврат константной ссылки на источники в области течения
Definition World2D.h:236
const std::vector< std::unique_ptr< Mechanics > > & getMechanicsVector() const
Definition World2D.h:221
VMlib::vmTimer timerInside
Definition World2D.h:358
Gpu & getNonConstCuda() const
Возврат неконстантной ссылки на объект, связанный с видеокартой (GPU)
Definition World2D.h:266
std::unique_ptr< WakeDataBase > source
Умный указатель на источники
Definition World2D.h:98
void CalcAndSolveLinearSystem()
Набор матрицы, правой части и решение СЛАУ
Definition World2D.cpp:1506
Velocity & getNonConstVelocity() const
Возврат неконстантной ссылки на объект для вычисления скоростей
Definition World2D.h:246
Eigen::VectorXd rhsReord
Правая часть системы
Definition World2D.h:127
size_t getDispBoundaryInSystem(size_t i) const
Возврат смещения в системе dispBoundaryInSystem.
Definition World2D.h:197
MeasureVP & getNonConstMeasureVP() const
Возврат неконстантной ссылки на measureVP.
Definition World2D.h:207
std::vector< size_t > dispBoundaryInSystem
Список номеров, с которых начинаются элементы правой части (или матрицы) системы для профилей
Definition World2D.h:86
VMlib::TimersGen & getTimers() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition World2D.h:276
void FillIQ()
Заполнение матрицы, состоящей из интегралов от (r-xi) / |r-xi|^2.
Definition World2D.cpp:1464
const Mechanics & getMechanics(size_t i) const
Возврат константной ссылки на объект механики
Definition World2D.h:213
Point2D getV0() const
Возврат текущей скорости набегающего потока
Definition World2D.h:142
const std::pair< Eigen::MatrixXd, Eigen::MatrixXd > & getIQ(size_t i, size_t j) const
Возврат константной ссылки на объект, связанный с матрицей интегралов от (r-xi)/|r-xi|^2.
Definition World2D.h:271
void WakeAndAirfoilsMotion(bool dynamics)
Перемещение вихрей и профилей на шаге
Definition World2D.cpp:1653
std::vector< std::unique_ptr< Mechanics > > mechanics
Список умных указателей на типы механической системы для каждого профиля
Definition World2D.h:89
const Velocity & getVelocity() const
Возврат константной ссылки на объект для вычисления скоростей
Definition World2D.h:241
const Gpu & getCuda() const
Возврат константной ссылки на объект, связанный с видеокартой (GPU)
Definition World2D.h:261
std::vector< std::unique_ptr< Boundary > > boundary
Список умных указателей на формирователи граничных условий на профилях
Definition World2D.h:83
VMlib::vmTimer timerRhs
Definition World2D.h:353
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:251
Passport & getNonConstPassport() const
Возврат неконстантной ссылки на паспорт
Definition World2D.h:256
void GenerateMechanicsHeader(size_t mechanicsNumber)
Definition World2D.cpp:1457
Boundary & getNonConstBoundary(size_t i) const
Возврат неконстантной ссылки на объект граничного условия
Definition World2D.h:186
void CheckInside(std::vector< Point2D > &newPos, const std::vector< std::unique_ptr< AirfoilGeometry > > &oldAirfoil)
Проверка проникновения вихрей внутрь профиля
Definition World2D.cpp:713
void SolveLinearSystem()
Решение системы линейных алгебраических уравнений
Definition World2D.cpp:826
~World2D()
Деструктор
Definition World2D.h:340
std::unique_ptr< Wake > wake
Умный указатель на вихревой след
Definition World2D.h:95
const Boundary & getBoundary(size_t i) const
Возврат константной ссылки на объект граничного условия
Definition World2D.h:180
bool ifDivisible(int val) const
Definition World2D.h:278
size_t getNumberOfBoundary() const
Возврат количества граничных условий в задаче
Definition World2D.h:191
std::unique_ptr< Velocity > velocity
Умный укзатель на объект, определяющий методику вычисления скоростей
Definition World2D.h:92
const Passport & passport
Константная ссылка на паспорт конкретного расчета
Definition World2D.h:134
void FillMatrixAndRhs()
Заполнение матрицы системы для всех профилей
Definition World2D.cpp:1115
virtual void Step() override
Функция выполнения предварительного шага
Definition World2D.cpp:260
VMlib::vmTimer timerFillMatrix
Definition World2D.h:354
Eigen::VectorXd sol
Решение системы
Definition World2D.h:131
Mechanics & getNonConstMechanics(size_t i) const
Возврат неконстантной ссылки на объект механики
Definition World2D.h:219
std::vector< std::vector< std::pair< Eigen::MatrixXd, Eigen::MatrixXd > > > IQ
Матрица, состоящая из пар матриц, в которых хранятся касательные и нормальные компоненты интегралов о...
Definition World2D.h:117
Airfoil & getNonConstAirfoil(size_t i) const
Возврат неконстантной ссылки на объект профиля
Definition World2D.h:169
const MeasureVP & getMeasureVP() const
Возврат константной ссылки на measureVP.
Definition World2D.h:202
VMlib::vmTimer timerSlaeSolve
Definition World2D.h:355
Wake & getNonConstWake() const
Возврат неконстантной ссылки на вихревой след
Definition World2D.h:231
Абстрактный класс, опеделяющий паспорт задачи
Definition PassportGen.h:96
Класс для сбора статистики времени исполнения основных шагов алгоритма и вывода ее в файл
Definition TimesGen.h:157
Класс, опеделяющий текущую решаемую задачу
Definition WorldGen.h:57
std::unique_ptr< TimersGen > timers
Сведения о временах выполнения основных операций
Definition WorldGen.h:66
double getCurrentTime() const
Definition WorldGen.h:100
size_t currentStep
Текущий номер шага в решаемой задаче
Definition WorldGen.h:69
Класс засекания времени
Definition TimesGen.h:59
Point2D V0(double currentTime) const
Функция скорости набегающего потока с учетом разгона
Definition Passport2D.h:93