VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
Mechanics2DDeformable.h
Go to the documentation of this file.
1/*--------------------------------*- VM2D -*-----------------*---------------*\
2| ## ## ## ## #### ##### | | Version 1.14 |
3| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2026/03/06 |
4| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5| #### ## ## ## ## ## | Open Source Code |
6| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7| |
8| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9*-----------------------------------------------------------------------------*
10| File name: Mechanics2DDeformable.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
41#ifndef MECHANICS2DDEFORMABLE_H
42#define MECHANICS2DDEFORMABLE_H
43
44#include "Mechanics2D.h"
45
46namespace VM2D
47{
48
49 class World2D;
50
61 class Beam
62 {
63 public:
64 const bool fsi;
65
66 const World2D& W;
67
68 double x0; //абсцисса начала балки
69 double L; //длина балки
70
71 double rho, F, EJ;
72
73 int R;
74
75 //соб.частоты для единичной консольной балки
76 const std::vector<double> unitLambda = { 1.87510407, 4.69409113, 7.854757, 10.99554073, 14.1371683 };
77 std::vector<double> qCoeff;
78
79 //Интегралы от квадратов собственных форм
80 const double intSqUnitShape = 0.25;
81
82 //Собств.формы
83 double shape(int n, double x) const
84 {
85 double lam = unitLambda[n] / L;
86 double C4 = (sin(unitLambda[n]) - sinh(unitLambda[n])) / (cos(unitLambda[n]) + cosh(unitLambda[n]));
87
88 return 0.5 * (-cos(lam * (x - x0)) + cosh(lam * (x - x0)) - C4 * sin(lam * (x - x0)) + C4 * sinh(lam * (x - x0)));
89 }
90
91 std::vector<double> currentPhi, currentDPhi;
92
93 const size_t nLastSteps = 1;
94 std::vector<std::vector<double>> presLastSteps;
95
96 public:
97 Beam(const World2D& W_, bool fsi_, double x0_, double L_, int R_);
98 double phi(int n, double t) const;
99 void solveDU(int n, double dt);
100 void solveDU_RK(int n, double dt);
101 double getTotalDisp(double x, double t) const;
102 double getGivenLaw(double x, double t, double deformParam) const; //имитатор деформации упругой линии
103 };
104
105
106 struct ChordPanel //Хорда балки (упругая линия)
107 {
108 Point2D beg, end; //начало и конец
109 std::pair<size_t, size_t> infPanels; //индексы панелей на обтекаемой поверхности балки под хордой и над хордой
110 double rightSemiWidth; //полутолщина балки на правом конце
111 };
112
113
114
130 public Mechanics
131 {
132 private:
134 bool fsi; //false for fish, true for turek
135
136
137 public:
139 Point2D& getVcm() { return Vcm; };
140
142 Point2D& getRcm() { return Rcm; };
143
145 double& getWcm() { return Wcm; };
146
148 double& getPhicm() { return Phi; };
149
150 //bool getFsi() const { return fsi; }; //false for fish, true for turek
151
156 MechanicsDeformable(const World2D& W_, size_t numberInPassport_);
157
160
161 //далее -- реализации виртуальных функций
162 virtual void GetHydroDynamForce() override;
163 virtual Point2D VeloOfAirfoilRcm(double currTime) override;
164 virtual Point2D PositionOfAirfoilRcm(double currTime) override;
165 virtual double AngularVelocityOfAirfoil(double currTime) override;
166 virtual double AngleOfAirfoil(double currTime) override;
167 virtual void VeloOfAirfoilPanels(double currTime) override;
169 virtual void Move() override;
170
176
177 std::vector<ChordPanel> initialChord; //геометрия упругой линии в начальном состоянии
178 std::vector<ChordPanel> chord; //геометрия упругой линии
179 std::vector<double> upperShifts; //превышения (по вертикали) точек верхней половины торца балки над хордой
180 std::vector<double> lowerShifts; //превышения (по вертикали) точек нижней половины торца балки над хордой
181
182 std::unique_ptr<Beam> beam; //сама балка
183
184 std::vector<std::vector<Point2D>> initialPossibleWays;
185
186 };
187
188}//namespace VM2D
189
190#endif
Заголовочный файл с описанием класса Mechanics.
Вспомогательный класс Beam для описания упругой хорды деформируемой балки
std::vector< double > qCoeff
double getGivenLaw(double x, double t, double deformParam) const
void solveDU_RK(int n, double dt)
std::vector< std::vector< double > > presLastSteps
double shape(int n, double x) const
const std::vector< double > unitLambda
std::vector< double > currentPhi
void solveDU(int n, double dt)
std::vector< double > currentDPhi
const World2D & W
double phi(int n, double t) const
double getTotalDisp(double x, double t) const
const size_t nLastSteps
const double intSqUnitShape
Класс, определяющий вид механической системы
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
Point2D & getRcm()
текущее отклонение профиля
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
virtual void Move() override
Перемещение профиля в соответствии с законом
virtual void VeloOfAirfoilPanels(double currTime) override
Вычисление скоростей начал панелей
Point2D & getVcm()
текущая скорость профиля
virtual void GetHydroDynamForce() override
Вычисление гидродинамической силы, действующей на профиль
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
double & getPhicm()
текущий угол поворота профиля
double & getWcm()
текущая угловая скорость профиля
std::vector< ChordPanel > initialChord
~MechanicsDeformable()
Деструктор
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
std::vector< std::vector< Point2D > > initialPossibleWays
std::vector< double > upperShifts
std::vector< double > lowerShifts
std::vector< ChordPanel > chord
std::unique_ptr< Beam > beam
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
Абстрактный класс, определяющий вид механической системы
Definition Mechanics2D.h:72
Point2D Rcm
Текущие положение профиля
Point2D Vcm
Текущие скорость центра и угловая скорость
Класс, опеделяющий текущую решаемую задачу
Definition World2D.h:74
std::pair< size_t, size_t > infPanels