VM2D  1.12
Vortex methods for 2D flows simulation
Mechanics2D.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: Mechanics2D.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 MECHANICS_H
41 #define MECHANICS_H
42 
43 #include <memory>
44 
45 #include "defs.h"
46 
47 namespace VMlib
48 {
49  class StreamParser;
50 }
51 
52 namespace VM2D
53 {
54  class Airfoil;
55  class Boundary;
56  class World2D;
57  struct VortexesParams;
58 
71  class Mechanics
72  {
73  private:
75  void ReadParametersFromDictionary();
76 
77  protected:
79  const World2D& W;
80 
82  const size_t numberInPassport;
83 
88 
92 
96 
98  std::unique_ptr<VMlib::StreamParser> mechParamsParser;
99 
101  Point2D Vcm0; double Wcm0;
102 
104  Point2D Rcm0; double Phi0;
105 
106 #ifdef INITIAL
107  Point2D Vcm; double Wcm;
109 #endif
110 
111 #ifdef BRIDGE
112  public:
114  Point2D Vcm; double Wcm;
115 #endif
116 
117 
118  protected:
120  Point2D Rcm; double Phi;
121 
123  Point2D VcmOld; double WcmOld;
124 
126  Point2D RcmOld; double PhiOld;
127 
128  public:
130  const bool isMoves;
131 
133  const bool isDeform;
134 
136  const bool isRotate;
137 
139  const size_t degOfFreedom;
140 
144 
148 
149 
152  virtual void ReadSpecificParametersFromDictionary() = 0;
153 
162  //Mechanics(const World2D& W_, size_t numberInPassport_, int degOfFreedom_, bool isMoves_, bool isDeform_, bool isRotate_, Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_);
163  Mechanics(const World2D& W_, size_t numberInPassport_, int degOfFreedom_, bool isMoves_, bool isDeform_, bool isRotate_);
164 
166  virtual ~Mechanics() { };
167 
168 
175  void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_);
176 
177 
179  virtual void GetHydroDynamForce() = 0;
180 
182  void GenerateForcesHeader();
183 
185  void GeneratePositionHeader();
186 
188  void GenerateForcesString();
189 
191  void GeneratePositionString();
192 
193 
197  virtual Point2D VeloOfAirfoilRcm(double currTime) = 0;
198 
202  virtual Point2D PositionOfAirfoilRcm(double currTime) = 0;
203 
207  virtual double AngularVelocityOfAirfoil(double currTime) = 0;
208 
212  virtual double AngleOfAirfoil(double currTime) = 0;
213 
216  virtual void VeloOfAirfoilPanels(double currTime) = 0;
217 
220  virtual void Move() = 0;
221  };
222 
223 }//namespace VM2D
224 
225 #endif
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
Definition: Mechanics2D.h:146
const Boundary & boundary
Definition: Mechanics2D.h:91
Point2D Rcm
Текущие положение профиля
Definition: Mechanics2D.h:120
double hydroDynamMoment
Definition: Mechanics2D.h:143
Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле ...
Definition: Boundary2D.h:63
const size_t degOfFreedom
Количество степеней свободы
Definition: Mechanics2D.h:139
Описание базовых вспомогательных функций
virtual ~Mechanics()
Деструктор
Definition: Mechanics2D.h:166
const bool isMoves
Переменная, отвечающая за то, двигается профиль или нет
Definition: Mechanics2D.h:130
Point2D Rcm0
Начальное положение профиля
Definition: Mechanics2D.h:104
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
Point2D RcmOld
Текущие положение профиля
Definition: Mechanics2D.h:126
Definition: Airfoil2D.h:45
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
const bool isRotate
Переменная, отвечающая за то, может профиль вращаться или нет
Definition: Mechanics2D.h:136
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
Definition: Mechanics2D.h:98
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
Структура, определяющая параметры виртуальных вихрей для отдельного профиля
Definition: Velocity2D.h:64
const bool isDeform
Переменная, отвечающая за то, деформируется профиль или нет
Definition: Mechanics2D.h:133
double viscousMoment
Definition: Mechanics2D.h:147
Абстрактный класс, определяющий обтекаемый профиль
Definition: Airfoil2D.h:60
Класс, опеделяющий текущую решаемую задачу
Definition: World2D.h:68
const VortexesParams & virtVortParams
Definition: Mechanics2D.h:95
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142
Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами
Definition: StreamParser.h:151
Абстрактный класс, определяющий вид механической системы
Definition: Mechanics2D.h:71