VM2D  1.12
Vortex methods for 2D flows simulation
Velocity2D.h
Go to the documentation of this file.
1 /*--------------------------------*- VM2D -*-----------------*---------------*\
2 | ## ## ## ## #### ##### | | Version 1.12 |
3 | ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2024/01/14 |
4 | ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5 | #### ## ## ## ## ## | Open Source Code |
6 | ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7 | |
8 | Copyright (C) 2017-2024 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9 *-----------------------------------------------------------------------------*
10 | File name: Velocity2D.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 VELOCITY_H
41 #define VELOCITY_H
42 
43 #include "defs.h"
44 #include "Point2D.h"
45 
46 namespace VM2D
47 {
48 
49  class Airfoil;
50  class Boundary;
51  class WakeDataBase;
52  class World2D;
53 
54 
65  {
67  std::vector<Point2D> convVelo;
68 
70  std::vector<Point2D> diffVelo;
71 
73  std::vector<double> I0;
74 
76  std::vector<double> I1;
77 
79  std::vector<Point2D> I2;
80 
82  std::vector<Point2D> I3;
83 
85  std::vector<double> epsastWake;
86  };
87 
97  class Velocity
98  {
99  protected:
101  const World2D& W;
102 
103  public:
106 
108  std::vector<VortexesParams> virtualVortexesParams;
109 
110 
114  Velocity(const World2D& W_) :
115  W(W_)
116  {
117  virtualVortexesParams.resize(0);
118  };
119 
123  virtual void CalcConvVelo() = 0;
124 
126  virtual void CalcVeloToWakeVP() = 0;
127 
135  void CalcDiffVeloI1I2ToSetOfPointsFromWake(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const WakeDataBase& vorticesDb, std::vector<double>& I1, std::vector<Point2D>& I2);
136  void CalcDiffVeloI1I2ToSetOfPointsFromSheets(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const Boundary& bnd, std::vector<double>& I1, std::vector<Point2D>& I2);
137 
138  virtual void CalcDiffVeloI1I2ToWakeFromSheets(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const Boundary& bnd, std::vector<double>& I1, std::vector<Point2D>& I2) = 0;
139  virtual void CalcDiffVeloI1I2ToWakeFromWake(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const WakeDataBase& vorticesDb, std::vector<double>& I1, std::vector<Point2D>& I2) = 0;
140 #if defined(USE_CUDA)
141  void GPUCalcDiffVeloI1I2ToSetOfPointsFromWake(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const WakeDataBase& vorticesDb, std::vector<double>& I1, std::vector<Point2D>& I2, bool useMesh = false);
142  void GPUCalcDiffVeloI1I2ToSetOfPointsFromSheets(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const Boundary& bnd, std::vector<double>& I1, std::vector<Point2D>& I2, bool useMesh = false);
143  void GPUDiffVeloFAST(const WakeDataBase& pointsDb, const std::vector<double>& domainRadius, const WakeDataBase& vorticesDb, std::vector<double>& I1, std::vector<Point2D>& I2);
144 #endif
145 
151  void CalcDiffVeloI1I2();
152  void CalcDiffVeloI0I3();
153 
154 
158  void LimitDiffVelo(std::vector<Point2D>& diffVel);
159 
163  void CalcDiffVelo();
164 
168  void ResizeAndZero();
169 
173  void SaveVisStress();
174 
177  virtual void FillRhs(Eigen::VectorXd& rhs) const = 0;
178 
180  virtual ~Velocity() { };
181  };
182 
183 }//namespace VM2D
184 
185 #endif
std::vector< double > I0
Вектор знаменателей (I0) диффузионных скоростей вихрей (обусловленных профилем)
Definition: Velocity2D.h:73
std::vector< Point2D > I3
Вектор числителей (I3) диффузионных скоростей вихрей (обусловленных профилем)
Definition: Velocity2D.h:82
Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле ...
Definition: Boundary2D.h:63
Заголовочный файл с описанием класса Point2D.
Описание базовых вспомогательных функций
const World2D & W
Константная ссылка на решаемую задачу
Definition: Velocity2D.h:101
std::vector< VortexesParams > virtualVortexesParams
Вектор струтур, определяющий параметры виртуальных вихрей для профилей
Definition: Velocity2D.h:108
Definition: Airfoil2D.h:45
std::vector< double > I1
Вектор знаменателей (I1) диффузионных скоростей вихрей (обусловленных завихренностью) ...
Definition: Velocity2D.h:76
VortexesParams wakeVortexesParams
Струтура, определяющая параметры вихрей в следе
Definition: Velocity2D.h:105
std::vector< double > epsastWake
Вектор характерных радиусов вихревых доменов (eps*)
Definition: Velocity2D.h:85
Структура, определяющая параметры виртуальных вихрей для отдельного профиля
Definition: Velocity2D.h:64
std::vector< Point2D > diffVelo
Вектор диффузионных скоростей вихрей
Definition: Velocity2D.h:70
Velocity(const World2D &W_)
Конструктор
Definition: Velocity2D.h:114
std::vector< Point2D > I2
Вектор числителей (I2) диффузионных скоростей вихрей (обусловленных завихренностью) ...
Definition: Velocity2D.h:79
Класс, опеделяющий текущую решаемую задачу
Definition: World2D.h:68
Абстрактный класс, определяющий способ вычисления скоростей
Definition: Velocity2D.h:97
Класс, опеделяющий набор вихрей
std::vector< Point2D > convVelo
Вектор конвективных скоростей вихрей
Definition: Velocity2D.h:67
virtual ~Velocity()
Деструктор
Definition: Velocity2D.h:180