VM2D  1.12
Vortex methods for 2D flows simulation
Airfoil2D.cpp
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: Airfoil2D.cpp |
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 #include "Airfoil2D.h"
41 
42 #include "Boundary2D.h"
43 #include "MeasureVP2D.h"
44 #include "Mechanics2D.h"
45 #include "Passport2D.h"
46 #include "StreamParser.h"
47 #include "Velocity2D.h"
48 #include "WakeDataBase2D.h"
49 #include "World2D.h"
50 #include "Wake2D.h"
51 
52 using namespace VM2D;
53 
54 // Конструктор
55 Airfoil::Airfoil(const World2D& W_, const size_t numberInPassport_)
56  : W(W_), numberInPassport(numberInPassport_)
57 { }
58 
59 
60 
61 //Проверка, идет ли вершина i следом за вершиной j
62 bool Airfoil::isAfter(size_t i, size_t j) const
63 {
64  return ((i == j + 1) || (i == 0 && j == r_.size() - 1));
65 }//isAfter(...)
66 
67 
68 //Определяет, находится ли точка с радиус-вектором r внутри габаритного прямоугольника профиля
69 bool Airfoil::isInsideGabarits(const Point2D& r) const
70 {
71  return (r[0] <= upRight[0] && (r[0] >= lowLeft[0] && r[1] >= lowLeft[1] && r[1] <= upRight[1]));
72 }//isInsideGabarits(...)
73 
74 
75 //Определяет, находится ли точка с радиус-вектором r вне габаритного прямоугольника профиля
76 bool Airfoil::isOutsideGabarits(const Point2D& r) const
77 {
78  return (r[0] > upRight[0] || (r[0] < lowLeft[0] || r[1] < lowLeft[1] || r[1] > upRight[1]));
79 }//isOutsideGabarits(...)
80 
81 //Вычисление средних значений eps на панелях
83 {
84  meanEpsOverPanel.clear();
86 
87 
88  double midEps;
89 
90  const Boundary& bnd = W.getBoundary(numberInPassport);
92 
93  for (size_t i = 0; i < getNumberOfPanels(); ++i)
94  {
95  /*
96  midEps = 0.0;
97 
98  for (int j = bnd.vortexBeginEnd[i].first; j < bnd.vortexBeginEnd[i].second; ++j)
99  midEps += virtVortParams.epsastWake[j];
100 
101  midEps /= (bnd.vortexBeginEnd[i].second - bnd.vortexBeginEnd[i].first);
102 
103  meanEpsOverPanel[i] = midEps;
104  */
105 
106  /*
107  midEps = 0.0;
108 
109  for (int j = bnd.vortexBeginEnd[i].first; j < bnd.vortexBeginEnd[i].second; ++j)
110  midEps += std::max(virtVortParams.epsastWake[j], 0.5 * len[i] / (bnd.vortexBeginEnd[i].second - bnd.vortexBeginEnd[i].first));
111 
112  midEps /= (bnd.vortexBeginEnd[i].second - bnd.vortexBeginEnd[i].first);
113  meanEpsOverPanel[i] = midEps;
114  //*/
115 
116  midEps = 0.0;
117  for (int j = bnd.vortexBeginEnd[i].first; j < bnd.vortexBeginEnd[i].second; ++j)
118  midEps += virtVortParams.epsastWake[j];
119 
120  midEps /= (bnd.vortexBeginEnd[i].second - bnd.vortexBeginEnd[i].first);
121  meanEpsOverPanel[i] = midEps;
122  }//for i
123 }//calcMeanEpsOverPanel()
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами ...
Airfoil(const World2D &W_, const size_t numberInPassport_)
Definition: Airfoil2D.cpp:55
Заголовочный файл с описанием класса Wake.
Заголовочный файл с описанием класса World2D.
const World2D & W
Константная ссылка на решаемую задачу
Definition: Airfoil2D.h:71
Заголовочный файл с описанием класса Airfoil.
const Velocity & getVelocity() const
Возврат константной ссылки на объект для вычисления скоростей
Definition: World2D.h:212
Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле ...
Definition: Boundary2D.h:63
Заголовочный файл с описанием класса WakeDataBase.
Point2D lowLeft
Левый нижний угол габаритного прямоугольника профиля
Definition: Airfoil2D.h:190
const size_t numberInPassport
Номер профиля в паспорте
Definition: Airfoil2D.h:74
Заголовочный файл с описанием класса Mechanics.
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition: Airfoil2D.h:139
Point2D upRight
Правый верхний угол габаритного прямоугольника профиля
Definition: Airfoil2D.h:191
std::vector< VortexesParams > virtualVortexesParams
Вектор струтур, определяющий параметры виртуальных вихрей для профилей
Definition: Velocity2D.h:108
const Boundary & getBoundary(size_t i) const
Возврат константной ссылки на объект граничного условия
Definition: World2D.h:153
bool isInsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором внутри габаритного прямоугольника профиля ...
Definition: Airfoil2D.cpp:69
Definition: Airfoil2D.h:45
Заголовочный файл с описанием класса StreamParser.
std::vector< Point2D > r_
Координаты начал панелей
Definition: Airfoil2D.h:64
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
Заголовочный файл с описанием класса MeasureVP.
std::vector< double > epsastWake
Вектор характерных радиусов вихревых доменов (eps*)
Definition: Velocity2D.h:85
void calcMeanEpsOverPanel()
Вычисление средних значений eps на панелях
Definition: Airfoil2D.cpp:82
Структура, определяющая параметры виртуальных вихрей для отдельного профиля
Definition: Velocity2D.h:64
std::vector< double > meanEpsOverPanel
Средние значения Eps на панелях
Definition: Airfoil2D.h:92
Класс, опеделяющий текущую решаемую задачу
Definition: World2D.h:68
Заголовочный файл с описанием класса Velocity.
bool isAfter(size_t i, size_t j) const
Проверка, идет ли вершина i следом за вершиной j.
Definition: Airfoil2D.cpp:62
std::vector< std::pair< int, int > > vortexBeginEnd
Номера первого и последнего вихрей, рождаемых на каждой панели профиля (формируется после решения СЛА...
Definition: Boundary2D.h:82
Заголовочный файл с описанием класса Boundary.
bool isOutsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором вне габаритного прямоугольника профиля ...
Definition: Airfoil2D.cpp:76