VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
Mechanics2DRigidImmovable.cpp
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: 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 "StreamParser.h"
46#include "Velocity2D.h"
47#include "Wake2D.h"
48#include "World2D.h"
49
50using namespace VM2D;
51
52
53MechanicsRigidImmovable::MechanicsRigidImmovable(const World2D & W_, size_t numberInPassport_)
54 : Mechanics(W_, numberInPassport_, false, false)
55{
57 Initialize({ 0.0, 0.0 }, W_.getAirfoil(numberInPassport_).rcm, 0.0, W_.getAirfoil(numberInPassport_).phiAfl);
58};
59
60//Вычисление скорости центра масс профиля
62{
63 return{ 0.0, 0.0 };
64}//VeloOfAirfoilRcm(...)
65
66//Вычисление положения центра масс профиля
68{
69 return afl.rcm;
70}//PositionOfAirfoilRcm(...)
71
73{
74 return 0.0;
75}//AngularVelocityOfAirfoil(...)
76
77//Вычисление угла поворота профиля
79{
80 return afl.phiAfl;
81}//AngleOfAirfoil(...)
82
83// Вычисление скоростей начал панелей
85{
86 Point2D veloRcm = VeloOfAirfoilRcm(currTime);
87 afl.setV(veloRcm);
88}//VeloOfAirfoilPanels(...)
89
90//Вычисление гидродинамической силы, действующей на профиль
92{
93 W.getTimers().start("Force");
94
95 const double& dt = W.getPassport().timeDiscretizationProperties.dt;
96
97 hydroDynamForce = { 0.0, 0.0 };
98 hydroDynamMoment = 0.0;
99
100 viscousForce = { 0.0, 0.0 };
101 viscousMoment = 0.0;
102
103 Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные Gamma_k
104 Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные delta_k
105 double hDMdelta = 0.0;
106
107 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
108 {
110 double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i];
111 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
112
113 hDFdelta += deltaK * Point2D({ -rK[1], rK[0] });
114 hDMdelta += 0.5 * deltaK * rK.length2();
115 }
116
117 const double rho = W.getPassport().physicalProperties.rho;
118
119 hydroDynamForce = (rho / dt) * hDFdelta;
120 hydroDynamMoment = (rho / dt) * hDMdelta;
121
122 if ((W.getPassport().physicalProperties.nu > 0.0) && (afl.viscousStress.size() > 0))
123 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
124 {
125 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
126 viscousForce += rho * afl.viscousStress[i] * afl.tau[i];
127 viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
128 }
129
130 W.getTimers().stop("Force");
131}//GetHydroDynamForce()
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с описанием класса MeasureVP.
Заголовочный файл с описанием класса MechanicsRigidImmovable.
Заголовочный файл с описанием класса StreamParser.
Заголовочный файл с описанием класса Velocity.
Заголовочный файл с описанием класса Wake.
Заголовочный файл с описанием класса World2D.
double phiAfl
Поворот профиля
Definition Airfoil2D.h:100
std::vector< double > len
Длины панелей профиля
Definition Airfoil2D.h:94
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
Definition Airfoil2D.h:145
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition Airfoil2D.h:113
std::vector< Point2D > tau
Касательные к панелям профиля
Definition Airfoil2D.h:91
Point2D rcm
Положение центра масс профиля
Definition Airfoil2D.h:97
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition Airfoil2D.h:163
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
Definition Airfoil2D.h:276
std::vector< double > viscousStress
Нейросеть для коэффициентов I0 и I3 диффузионной скорости
Definition Airfoil2D.h:268
Sheet sheets
Слои на профиле
Definition Boundary2D.h:96
Абстрактный класс, определяющий вид механической системы
Definition Mechanics2D.h:72
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
const World2D & W
Константная ссылка на решаемую задачу
Definition Mechanics2D.h:79
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
double hydroDynamMoment
Airfoil & afl
Definition Mechanics2D.h:87
const Boundary & boundary
Definition Mechanics2D.h:91
virtual void VeloOfAirfoilPanels(double currTime) override
Вычисление скоростей начал панелей
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
virtual void GetHydroDynamForce() override
Вычисление гидродинамической силы, действующей на профиль
MechanicsRigidImmovable(const World2D &W_, size_t numberInPassport_)
Конструктор
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition Passport2D.h:289
const double & freeVortexSheet(size_t n, size_t moment) const
Definition Sheet2D.h:100
Класс, опеделяющий текущую решаемую задачу
Definition World2D.h:74
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition World2D.h:157
VMlib::TimersGen & getTimers() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition World2D.h:276
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:251
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
void stop(const std::string &timerLabel)
Останов счетчика
Definition TimesGen.cpp:68
void start(const std::string &timerLabel)
Запуск счетчика
Definition TimesGen.cpp:55
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:386
double nu
Коэффициент кинематической вязкости среды
Definition Passport2D.h:99
double rho
Плотность потока
Definition Passport2D.h:75
double dt
Шаг по времени
Definition PassportGen.h:67