VM2D  1.12
Vortex methods for 2D flows simulation
Airfoil2DRect.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: Airfoil2DRect.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 AIRFOILRECT_H
41 #define AIRFOILRECT_H
42 
43 #include "Airfoil2D.h"
44 
45 namespace VM2D
46 {
47 
48  class World2D;
49 
65  : public Airfoil
66  {
67  public:
68 
70  AirfoilRect(const World2D& W_, const size_t numberInPassport_)
71  :Airfoil(W_, numberInPassport_)
72  { };
73 
74  AirfoilRect(const Airfoil& afl) : Airfoil(afl) {};
75 
77  virtual ~AirfoilRect() { };
78 
80  void CalcNrmTauLen();
81 
83  virtual void GetGabarits(double gap = 0.02) override;
84 
85  //далее -- реализация виртуальных функций
86  virtual void ReadFromFile(const std::string& dir) override;
87  virtual void Rotate(double alpha) override;
88  virtual void Scale(const Point2D&) override;
89  virtual void Move(const Point2D& dr) override;
90 
91  virtual std::vector<double> getA(size_t p, size_t i, const Airfoil& airfoil, size_t j) const override;
92  virtual void calcIQ(size_t p, const Airfoil& otherAirfoil, std::pair<Eigen::MatrixXd, Eigen::MatrixXd>& matrPair) const override;
93 
94  virtual bool IsPointInAirfoil(const Point2D& point) const override;
95 
96  virtual void GetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(const WakeDataBase& pointsDb, std::vector<double>& domainRadius, std::vector<double>& I0, std::vector<Point2D>& I3) override;
97 #if defined(USE_CUDA)
98  virtual void GPUGetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(const WakeDataBase& pointsDb, std::vector<double>& domainRadius, std::vector<double>& I0, std::vector<Point2D>& I3) override;
99 #endif
100  virtual void GetDiffVelocityI0I3ToWakeAndViscousStresses(const WakeDataBase& pointsDb, std::vector<double>& domainRadius, std::vector<double>& I0, std::vector<Point2D>& I3) override;
101 
102  virtual void GetInfluenceFromVorticesToPanel(size_t panel, const Vortex2D* ptr, ptrdiff_t count, std::vector<double>& panelRhs) const override;
103  virtual void GetInfluenceFromSourcesToPanel(size_t panel, const Vortex2D* ptr, ptrdiff_t count, std::vector<double>& panelRhs) const override;
104 
105  virtual void GetInfluenceFromSourceSheetToVortex(size_t panel, const Vortex2D& vtx, Point2D& vel) const override;
106  virtual void GetInfluenceFromVortexSheetToVortex(size_t panel, const Vortex2D& vtx, Point2D& vel) const override;
107 
108  virtual void GetInfluenceFromVInfToPanel(std::vector<double>& vInfRhs) const override;
109  };
110 
111 }//namespace VM2D
112 
113 #endif
virtual void Rotate(double alpha) override
Поворот профиля
virtual void calcIQ(size_t p, const Airfoil &otherAirfoil, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &matrPair) const override
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2.
virtual void GetGabarits(double gap=0.02) override
Вычисляет габаритный прямоугольник профиля
Заголовочный файл с описанием класса Airfoil.
void CalcNrmTauLen()
Вычисление нормалей, касательных и длин панелей по текущему положению вершин
virtual void ReadFromFile(const std::string &dir) override
Считывание профиля из файла
virtual void GetInfluenceFromVInfToPanel(std::vector< double > &vInfRhs) const override
Вычисление влияния набегающего потока на панель для правой части
virtual void GetInfluenceFromVorticesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const override
Вычисление влияния части подряд идущих вихрей из вихревого следа на панель для правой части ...
virtual void Scale(const Point2D &) override
Масштабирование профиля
virtual std::vector< double > getA(size_t p, size_t i, const Airfoil &airfoil, size_t j) const override
Вычисление коэффициентов матрицы A для расчета влияния панели на панель
virtual void GetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3) override
Вычисление числителей и знаменателей диффузионных скоростей в заданном наборе точек, обусловленных геометрией профиля, и вычисление вязкого трения
Класс, определяющий тип обтекаемого профиля
Definition: Airfoil2DRect.h:64
virtual void Move(const Point2D &dr) override
Перемещение профиля
virtual void GetInfluenceFromVortexSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const override
Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вих...
Definition: Airfoil2D.h:45
virtual bool IsPointInAirfoil(const Point2D &point) const override
Определяет, находится ли точка с радиус-вектором внутри профиля
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
virtual void GetInfluenceFromSourceSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const override
Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения ...
virtual void GetInfluenceFromSourcesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const override
Вычисление влияния части подряд идущих источников из области течения на панель для правой части ...
Класс, опеделяющий двумерный вихревой элемент
Definition: Vortex2D.h:51
virtual ~AirfoilRect()
Деструктор
Definition: Airfoil2DRect.h:77
Абстрактный класс, определяющий обтекаемый профиль
Definition: Airfoil2D.h:60
AirfoilRect(const World2D &W_, const size_t numberInPassport_)
Конструктор
Definition: Airfoil2DRect.h:70
Класс, опеделяющий текущую решаемую задачу
Definition: World2D.h:68
Класс, опеделяющий набор вихрей
AirfoilRect(const Airfoil &afl)
Definition: Airfoil2DRect.h:74
virtual void GetDiffVelocityI0I3ToWakeAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3) override