VM2D  1.12
Vortex methods for 2D flows simulation
Mechanics2DRigidImmovable.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: Mechanics2DRigidImmovable.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 
41 
42 #include "Airfoil2D.h"
43 #include "Boundary2D.h"
44 #include "MeasureVP2D.h"
45 #include "Passport2D.h"
46 #include "StreamParser.h"
47 #include "Velocity2D.h"
48 #include "Wake2D.h"
49 #include "World2D.h"
50 
51 using namespace VM2D;
52 
53 
54 MechanicsRigidImmovable::MechanicsRigidImmovable(const World2D & W_, size_t numberInPassport_)
55  : Mechanics(W_, numberInPassport_, 0, false, false, false)
56 {
58  Initialize({ 0.0, 0.0 }, W_.getAirfoil(numberInPassport_).rcm, 0.0, W_.getAirfoil(numberInPassport_).phiAfl);
59 };
60 
61 //Вычисление скорости центра масс профиля
63 {
64  return{ 0.0, 0.0 };
65 }//VeloOfAirfoilRcm(...)
66 
67 //Вычисление положения центра масс профиля
69 {
70  return afl.rcm;
71 }//PositionOfAirfoilRcm(...)
72 
74 {
75  return 0.0;
76 }//AngularVelocityOfAirfoil(...)
77 
78 //Вычисление угла поворота профиля
80 {
81  return afl.phiAfl;
82 }//AngleOfAirfoil(...)
83 
84 // Вычисление скоростей начал панелей
86 {
87  Point2D veloRcm = VeloOfAirfoilRcm(currTime);
88  afl.setV(veloRcm);
89 }//VeloOfAirfoilPanels(...)
90 
91 //Вычисление гидродинамической силы, действующей на профиль
93 {
94  W.getTimestat().timeGetHydroDynamForce.first += omp_get_wtime();
95 
96  const double& dt = W.getPassport().timeDiscretizationProperties.dt;
97 
98  hydroDynamForce = { 0.0, 0.0 };
99  hydroDynamMoment = 0.0;
100 
101  viscousForce = { 0.0, 0.0 };
102  viscousMoment = 0.0;
103 
104  Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные Gamma_k
105  Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные delta_k
106  double hDMdelta = 0.0;
107 
108  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
109  {
111  double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i];
112  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
113 
114  hDFdelta += deltaK * Point2D({ -rK[1], rK[0] });
115  hDMdelta += 0.5 * deltaK * rK.length2();
116  }
117 
118  const double rho = W.getPassport().physicalProperties.rho;
119 
120  hydroDynamForce = (rho / dt) * hDFdelta;
121  hydroDynamMoment = (rho / dt) * hDMdelta;
122 
123  if (W.getPassport().physicalProperties.nu > 0.0)
124  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
125  {
126  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
127  viscousForce += rho * afl.viscousStress[i] * afl.tau[i];
128  viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
129  }
130 
131  W.getTimestat().timeGetHydroDynamForce.second += omp_get_wtime();
132 }//GetHydroDynamForce()
const double & freeVortexSheet(size_t n, size_t moment) const
Definition: Sheet2D.h:99
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
Definition: Mechanics2D.h:146
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами ...
std::vector< double > viscousStress
Касательные напряжения на панелях профиля
Definition: Airfoil2D.h:188
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition: World2D.h:242
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Definition: Mechanics2D.cpp:89
MechanicsRigidImmovable(const World2D &W_, size_t numberInPassport_)
Конструктор
virtual void VeloOfAirfoilPanels(double currTime) override
Вычисление скоростей начал панелей
Заголовочный файл с описанием класса Wake.
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
const Boundary & boundary
Definition: Mechanics2D.h:91
Заголовочный файл с описанием класса World2D.
double hydroDynamMoment
Definition: Mechanics2D.h:143
Заголовочный файл с описанием класса Airfoil.
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
Definition: Airfoil2D.h:196
double nu
Коэффициент кинематической вязкости среды
Definition: Passport2D.h:96
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition: Airfoil2D.h:101
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition: Airfoil2D.h:139
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition: numvector.h:383
double dt
Шаг по времени
Definition: PassportGen.h:65
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
Заголовочный файл с описанием класса MechanicsRigidImmovable.
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
timePeriod timeGetHydroDynamForce
Начало и конец процесса вычисления нагрузок
Definition: Times2D.h:92
double rho
Плотность потока
Definition: Passport2D.h:75
Definition: Airfoil2D.h:45
virtual void GetHydroDynamForce() override
Вычисление гидродинамической силы, действующей на профиль
Заголовочный файл с описанием класса StreamParser.
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
std::vector< Point2D > tau
Касательные к панелям профиля
Definition: Airfoil2D.h:182
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
Sheet sheets
Слои на профиле
Definition: Boundary2D.h:95
Заголовочный файл с описанием класса MeasureVP.
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
Definition: Airfoil2D.h:121
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
double viscousMoment
Definition: Mechanics2D.h:147
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition: World2D.h:130
Класс, опеделяющий текущую решаемую задачу
Definition: World2D.h:68
std::vector< double > len
Длины панелей профиля
Definition: Airfoil2D.h:185
Заголовочный файл с описанием класса Velocity.
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142
Заголовочный файл с описанием класса Boundary.
Абстрактный класс, определяющий вид механической системы
Definition: Mechanics2D.h:71