VM2D  1.12
Vortex methods for 2D flows simulation
VM2D::MechanicsRigidOscillPart Class Reference

Класс, определяющий вид механической системы More...

#include <Mechanics2DRigidOscillPart.h>

Inheritance diagram for VM2D::MechanicsRigidOscillPart:
Collaboration diagram for VM2D::MechanicsRigidOscillPart:

Public Member Functions

double & getVy ()
 текущая скорость профиля More...
 
double & getVyOld ()
 
double & getY ()
 текущее отклонение профиля More...
 
double & getYOld ()
 
 MechanicsRigidOscillPart (const World2D &W_, size_t numberInPassport_)
 Конструктор More...
 
 ~MechanicsRigidOscillPart ()
 Деструктор More...
 
virtual void GetHydroDynamForce () override
 Вычисление гидродинамической силы, действующей на профиль More...
 
virtual Point2D VeloOfAirfoilRcm (double currTime) override
 Вычисление скорости центра масс профиля More...
 
virtual Point2D PositionOfAirfoilRcm (double currTime) override
 Вычисление положения центра масс профиля More...
 
virtual double AngularVelocityOfAirfoil (double currTime) override
 Вычисление угловой скорости профиля More...
 
virtual double AngleOfAirfoil (double currTime) override
 Вычисление угла поворота профиля More...
 
virtual void VeloOfAirfoilPanels (double currTime) override
 Вычисление скоростей начал панелей More...
 
virtual void ReadSpecificParametersFromDictionary () override
 Чтение параметров конкретной механической системы More...
 
virtual void Move () override
 Перемещение профиля в соответствии с законом More...
 
void UpdateU ()
 
void Initialize (Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
 Задание начального положения и начальной скорости More...
 
void GenerateForcesHeader ()
 Генерация заголовка файла нагрузок More...
 
void GeneratePositionHeader ()
 Генерация заголовка файла положения профиля More...
 
void GenerateForcesString ()
 Сохранение строки со статистикой в файл нагрузок More...
 
void GeneratePositionString ()
 Сохранение строки со статистикой в файл нагрузок More...
 

Public Attributes

double VxIter
 
double VyIter
 
Point2D Qiter
 
const bool isMoves
 Переменная, отвечающая за то, двигается профиль или нет More...
 
const bool isDeform
 Переменная, отвечающая за то, деформируется профиль или нет More...
 
const bool isRotate
 Переменная, отвечающая за то, может профиль вращаться или нет More...
 
const size_t degOfFreedom
 Количество степеней свободы More...
 
Point2D hydroDynamForce
 Вектор гидродинамической силы и момент, действующие на профиль More...
 
double hydroDynamMoment
 
Point2D viscousForce
 Вектор силы и момент вязкого трения, действующие на профиль More...
 
double viscousMoment
 

Protected Attributes

const World2DW
 Константная ссылка на решаемую задачу More...
 
const size_t numberInPassport
 Номер профиля в паспорте More...
 
Airfoilafl
 
const Boundaryboundary
 
const VortexesParamsvirtVortParams
 
std::unique_ptr< VMlib::StreamParsermechParamsParser
 Умный указатель на парсер параметров механической системы More...
 
Point2D Vcm0
 Начальная скорость центра и угловая скорость More...
 
double Wcm0
 
Point2D Rcm0
 Начальное положение профиля More...
 
double Phi0
 
Point2D Rcm
 Текущие положение профиля More...
 
double Phi
 
Point2D VcmOld
 Скорость и отклонение с предыдущего шага More...
 
double WcmOld
 
Point2D RcmOld
 Текущие положение профиля More...
 
double PhiOld
 

Private Attributes

const double Vx0
 начальная скорость профиля More...
 
const double Vy0
 
const double x0
 начальное отклонение профиля More...
 
const double y0
 
double Vx
 текущая скорость профиля More...
 
double Vy
 
double x
 текущее отклонение профиля More...
 
double y
 
double VxOld
 скорость профиля с предыдущего шага More...
 
double VyOld
 
double xOld
 отклонение профиля с предыдущего шага More...
 
double yOld
 
double m
 масса профиля More...
 
double bx
 параметр демпфирования механической системы More...
 
double by
 
double kx
 параметр жесткости механической системы More...
 
double ky
 

Detailed Description

Класс, определяющий вид механической системы

Упруго закрепленное тело, метод расщепления

Author
Марчевский Илья Константинович
Сокол Ксения Сергеевна
Рятина Евгения Павловна
Колганова Александра Олеговна
\Version 1.12
\date 14 января 2024 г.

Definition at line 64 of file Mechanics2DRigidOscillPart.h.

Constructor & Destructor Documentation

MechanicsRigidOscillPart::MechanicsRigidOscillPart ( const World2D W_,
size_t  numberInPassport_ 
)

Конструктор

Parameters
[in]W_константная ссылка на решаемую задачу
[in]numberInPassport_номер профиля в паспорте задачи

Definition at line 53 of file Mechanics2DRigidOscillPart.cpp.

54  :
55  Mechanics(W_, numberInPassport_, 0, true, false, false),
56  Vx0(0.0),
57  Vy0(0.0),
58  x0(W_.getAirfoil(numberInPassport_).rcm[0]),
59  y0(W_.getAirfoil(numberInPassport_).rcm[1])
60  //bx(0.0 * 0.731),
61  //by(0.0 * 0.731)
62 {
63  Vx = Vx0;
64  Vy = Vy0;
65 
66  x = x0;
67  y = y0;
68 
69  VxOld = Vx0;
70  VyOld = Vy0;
71 
72  xOld = x0;
73  yOld = y0;
74 
76  Initialize({ 0.0, 0.0 }, W_.getAirfoil(numberInPassport_).rcm, 0.0, W_.getAirfoil(numberInPassport_).phiAfl);
77 };
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Definition: Mechanics2D.cpp:89
double xOld
отклонение профиля с предыдущего шага
const double x0
начальное отклонение профиля
double x
текущее отклонение профиля
const double Vx0
начальная скорость профиля
double VxOld
скорость профиля с предыдущего шага
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
double Vx
текущая скорость профиля
Mechanics(const World2D &W_, size_t numberInPassport_, int degOfFreedom_, bool isMoves_, bool isDeform_, bool isRotate_)
Конструктор
Definition: Mechanics2D.cpp:56
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition: World2D.h:130
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы

Here is the call graph for this function:

Here is the caller graph for this function:

VM2D::MechanicsRigidOscillPart::~MechanicsRigidOscillPart ( )
inline

Деструктор

Definition at line 124 of file Mechanics2DRigidOscillPart.h.

124 {};

Here is the call graph for this function:

Member Function Documentation

double MechanicsRigidOscillPart::AngleOfAirfoil ( double  currTime)
overridevirtual

Вычисление угла поворота профиля

Parameters
[in]currTimeтекущее время

Implements VM2D::Mechanics.

Definition at line 148 of file Mechanics2DRigidOscillPart.cpp.

149 {
150  return afl.phiAfl;
151 }//AngleOfAirfoil(...)
Airfoil & afl
Definition: Mechanics2D.h:87
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80

Here is the caller graph for this function:

double MechanicsRigidOscillPart::AngularVelocityOfAirfoil ( double  currTime)
overridevirtual

Вычисление угловой скорости профиля

Parameters
[in]currTimeтекущее время

Implements VM2D::Mechanics.

Definition at line 143 of file Mechanics2DRigidOscillPart.cpp.

144 {
145  return 0.0;
146 }//AngularVelocityOfAirfoil(...)

Here is the caller graph for this function:

void Mechanics::GenerateForcesHeader ( )
inherited

Генерация заголовка файла нагрузок

Definition at line 119 of file Mechanics2D.cpp.

120 {
121  std::stringstream forceFileName, forceFileNameCsv;
122  forceFileName << W.getPassport().dir << "forces-airfoil-" << numberInPassport;
123  forceFileNameCsv << W.getPassport().dir << "forces-airfoil-" << numberInPassport << ".csv";
124 
125  std::ofstream newForcesFile(forceFileName.str());
126  std::ofstream newForcesFileCsv(forceFileNameCsv.str());
127 
128  VMlib::PrintLogoToTextFile(newForcesFile, forceFileName.str(), "Hydrodynamic loads for the airfoil " + W.getPassport().airfoilParams[numberInPassport].fileAirfoil);
129 
131  VMlib::PrintHeaderToTextFile(newForcesFile, "currentStep currentTime Fx Fy Mz Ftaux Ftauy Mtau");
132  else
133  VMlib::PrintHeaderToTextFile(newForcesFile, "currentStep currentTime CFx CFy CMz CFtaux CFtauy CMtau");
134 
136  newForcesFileCsv << "step,t,Fx,Fy,Mz,Ftaux,Ftauy,Mtau";
137  else
138  newForcesFileCsv << "step,t,CFx,CFy,CMz,CFtaux,CFtauy,CMtau";
139 
140  newForcesFile.close();
141  newForcesFile.clear();
142 
143  newForcesFileCsv.close();
144  newForcesFileCsv.clear();
145 
146 }//GenerateForcesHeader()
std::string dir
Рабочий каталог задачи
Definition: PassportGen.h:118
bool calcCoefficients
Признак вычисления коэффициентов вместо сил
Definition: Passport2D.h:289
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
Definition: defs.cpp:172
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
Definition: defs.cpp:136
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280

Here is the call graph for this function:

void Mechanics::GenerateForcesString ( )
inherited

Сохранение строки со статистикой в файл нагрузок

Definition at line 177 of file Mechanics2D.cpp.

178 {
179  W.getTimestat().timeOther.first += omp_get_wtime();
180 
181  std::stringstream forceFileName, forceFileNameCsv;
182  forceFileName << W.getPassport().dir << "forces-airfoil-" << numberInPassport;
183  forceFileNameCsv << W.getPassport().dir << "forces-airfoil-" << numberInPassport << ".csv";
184 
185  //double cShock = (W.getPassport().physicalProperties.getCurrTime() > W.getPassport().physicalProperties.timeAccel + 2.0 * W.getPassport().timeDiscretizationProperties.dt) ? 1.0 : 0.0;
186  double cShock = 1.0;
187 
188  Point2D cartesianHydroForce = cShock * hydroDynamForce;
189  Point2D cartesianViscoForce = cShock * viscousForce;
190 
191  double cartesianHydroMoment = cShock * hydroDynamMoment;
192  double cartesianViscoMoment = cShock * viscousMoment;
193 
194  double rotationAngle = W.getPassport().airfoilParams[numberInPassport].angle;
196  {
197  cartesianHydroForce = cartesianHydroForce.rotated(-0.5 * PI - W.getPassport().airfoilParams[numberInPassport].angle);
198  cartesianViscoForce = cartesianViscoForce.rotated(-0.5 * PI - W.getPassport().airfoilParams[numberInPassport].angle);
199  //rotationAngle += 0.5 * PI;
200  }
201 
202  //if (W.getPassport().rotateForces)
203  //{
204  // cartesianHydroForce = cartesianHydroForce.rotated(rotationAngle);
205  // cartesianViscoForce = cartesianViscoForce.rotated(rotationAngle);
206  //}
207 
208  double flowPress = 0.5 * W.getPassport().physicalProperties.rho * sqr(W.getPassport().physicalProperties.vRef);
210  {
211  const double& chord = W.getPassport().airfoilParams[numberInPassport].chord;
212  cartesianHydroForce /= (flowPress * chord);
213  cartesianViscoForce /= (flowPress * chord);
214 
215  cartesianHydroMoment /= (flowPress * sqr(chord));
216  cartesianViscoMoment /= (flowPress * sqr(chord));
217  }
218 
219 
220  std::ofstream forcesFile(forceFileName.str(), std::ios::app);
221  forcesFile << std::endl << W.getCurrentStep() << " " << W.getPassport().physicalProperties.getCurrTime() << " " << cartesianHydroForce[0] << " " << cartesianHydroForce[1] << " " << cartesianHydroMoment << " " << cartesianViscoForce[0] << " " << cartesianViscoForce[1] << " " << cartesianViscoMoment;
222  forcesFile.close();
223 
224  std::ofstream forcesFileCsv(forceFileNameCsv.str(), std::ios::app);
225  forcesFileCsv << std::endl << W.getCurrentStep() << "," << W.getPassport().physicalProperties.getCurrTime() << "," << cartesianHydroForce[0] << "," << cartesianHydroForce[1] << "," << cartesianHydroMoment << "," << cartesianViscoForce[0] << "," << cartesianViscoForce[1] << "," << cartesianViscoMoment;
226  forcesFileCsv.close();
227 
228  W.getTimestat().timeOther.second += omp_get_wtime();
229 }//GenerateForcesString()
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
Definition: Mechanics2D.h:146
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition: World2D.h:242
bool geographicalAngles
Признак работы в "географической" системе координат
Definition: Passport2D.h:283
const double PI
Число .
Definition: defs.h:73
double vRef
Референсная скорость
Definition: Passport2D.h:81
double hydroDynamMoment
Definition: Mechanics2D.h:143
double getCurrTime() const
Возвращает текуще время
Definition: Passport2D.h:102
std::string dir
Рабочий каталог задачи
Definition: PassportGen.h:118
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
bool calcCoefficients
Признак вычисления коэффициентов вместо сил
Definition: Passport2D.h:289
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
T sqr(T x)
Возведение числа в квадрат
Definition: defs.h:430
double rho
Плотность потока
Definition: Passport2D.h:75
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
double viscousMoment
Definition: Mechanics2D.h:147
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
Definition: WorldGen.h:91
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142
timePeriod timeOther
Все прочее
Definition: Times2D.h:113
Point2D rotated(const double angle=1.5707963267948966192313216916398) const
Поворот вектора на произвольный угол против часовой стрелки (по умолчанию 90 градусов) ...
Definition: Point2D.h:118

Here is the call graph for this function:

void Mechanics::GeneratePositionHeader ( )
inherited

Генерация заголовка файла положения профиля

Definition at line 150 of file Mechanics2D.cpp.

151 {
152  if (isMoves)
153  {
154  std::stringstream positionFileName, positionFileNameCsv;
155  positionFileName << W.getPassport().dir << "position-airfoil-" << numberInPassport;
156  positionFileNameCsv << W.getPassport().dir << "position-airfoil-" << numberInPassport << ".csv";
157 
158  std::ofstream newPositionFile(positionFileName.str());
159  std::ofstream newPositionFileCsv(positionFileNameCsv.str());
160 
161  VMlib::PrintLogoToTextFile(newPositionFile, positionFileName.str(), "Position of the airfoil " + W.getPassport().airfoilParams[numberInPassport].fileAirfoil);
162 
163  VMlib::PrintHeaderToTextFile(newPositionFile, "currentStep currentTime x y phi Vx Vy w");
164 
165  newPositionFileCsv << "step,t,x,y,phi,Vx,Vy,w";
166 
167  newPositionFile.close();
168  newPositionFile.clear();
169 
170  newPositionFileCsv.close();
171  newPositionFileCsv.clear();
172  }
173 }//GeneratePositionHeader()
std::string dir
Рабочий каталог задачи
Definition: PassportGen.h:118
const bool isMoves
Переменная, отвечающая за то, двигается профиль или нет
Definition: Mechanics2D.h:130
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
Definition: defs.cpp:172
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
Definition: defs.cpp:136
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280

Here is the call graph for this function:

void Mechanics::GeneratePositionString ( )
inherited

Сохранение строки со статистикой в файл нагрузок

Definition at line 233 of file Mechanics2D.cpp.

234 {
235  W.getTimestat().timeOther.first += omp_get_wtime();
236 
237  if (isMoves)
238  {
239  std::stringstream positionFileName, positionFileNameCsv;
240  positionFileName << W.getPassport().dir << "position-airfoil-" << numberInPassport;
241  positionFileNameCsv << W.getPassport().dir << "position-airfoil-" << numberInPassport << ".csv";
242 
243  std::ofstream positionFile(positionFileName.str(), std::ios::app);
244  positionFile << std::endl << W.getCurrentStep() << " " << W.getPassport().physicalProperties.getCurrTime() << " " << afl.rcm[0] << " " << afl.rcm[1] << " " << Phi << " " << Vcm[0] << " " << Vcm[1] << " " << Wcm;
245  positionFile.close();
246 
247  std::ofstream positionFileCsv(positionFileNameCsv.str(), std::ios::app);
248  positionFileCsv << std::endl << W.getCurrentStep() << "," << W.getPassport().physicalProperties.getCurrTime() << "," << afl.rcm[0] << "," << afl.rcm[1] << "," << Phi << "," << Vcm[0] << "," << Vcm[1] << "," << Wcm;
249  positionFileCsv.close();
250  }
251 
252  W.getTimestat().timeOther.second += omp_get_wtime();
253 }
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition: World2D.h:242
double getCurrTime() const
Возвращает текуще время
Definition: Passport2D.h:102
std::string dir
Рабочий каталог задачи
Definition: PassportGen.h:118
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
const bool isMoves
Переменная, отвечающая за то, двигается профиль или нет
Definition: Mechanics2D.h:130
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
Airfoil & afl
Definition: Mechanics2D.h:87
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
Definition: WorldGen.h:91
timePeriod timeOther
Все прочее
Definition: Times2D.h:113

Here is the call graph for this function:

void MechanicsRigidOscillPart::GetHydroDynamForce ( )
overridevirtual

Вычисление гидродинамической силы, действующей на профиль

Todo:
Учитываем только нулевой момент решения. Надо ли учитывать остальные?

Implements VM2D::Mechanics.

Definition at line 80 of file Mechanics2DRigidOscillPart.cpp.

81 {
82  W.getTimestat().timeGetHydroDynamForce.first += omp_get_wtime();
83 
84  const double& dt = W.getPassport().timeDiscretizationProperties.dt;
85 
86  hydroDynamForce = { 0.0, 0.0 };
87  hydroDynamMoment = 0.0;
88 
89  viscousForce = { 0.0, 0.0 };
90  viscousMoment = 0.0;
91 
92  Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные Gamma_k
93  Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные delta_k
94  double hDMdelta = 0.0;
95 
96 
97  Point2D deltaVstep;
98  if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
99  deltaVstep = { 0.0, 0.0 }; //Для итерационной процедуры
100  else
101  deltaVstep = { Vx - VxOld, Vy - VyOld }; //Для безытерационной процедуры
102 
103  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
104  {
106  double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i] + (deltaVstep & afl.tau[i]) * afl.len[i];
107  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
108 
109  hDFdelta += deltaK * Point2D({ -rK[1], rK[0] });
110  hDMdelta += 0.5 * deltaK * rK.length2();
111  }
112 
113  const double rho = W.getPassport().physicalProperties.rho;
114 
115  hydroDynamForce = (rho / dt) * hDFdelta;
116  hydroDynamMoment = (rho / dt) * hDMdelta;
117 
118  if ((W.getPassport().physicalProperties.nu > 0.0)/* && (W.currentStep > 0)*/)
119  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
120  {
121  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
122  viscousForce += rho * afl.viscousStress[i] * afl.tau[i];
123  viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
124  }
125 
126  W.getTimestat().timeGetHydroDynamForce.second += omp_get_wtime();
127 }// GetHydroDynamForce()
const double & freeVortexSheet(size_t n, size_t moment) const
Definition: Sheet2D.h:99
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
Definition: Mechanics2D.h:146
std::vector< double > viscousStress
Касательные напряжения на панелях профиля
Definition: Airfoil2D.h:188
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition: World2D.h:242
const Boundary & boundary
Definition: Mechanics2D.h:91
double hydroDynamMoment
Definition: Mechanics2D.h:143
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
double VxOld
скорость профиля с предыдущего шага
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
timePeriod timeGetHydroDynamForce
Начало и конец процесса вычисления нагрузок
Definition: Times2D.h:92
double rho
Плотность потока
Definition: Passport2D.h:75
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
std::vector< Point2D > tau
Касательные к панелям профиля
Definition: Airfoil2D.h:182
Sheet sheets
Слои на профиле
Definition: Boundary2D.h:95
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
double Vx
текущая скорость профиля
double viscousMoment
Definition: Mechanics2D.h:147
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280
std::vector< double > len
Длины панелей профиля
Definition: Airfoil2D.h:185
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142

Here is the call graph for this function:

Here is the caller graph for this function:

double& VM2D::MechanicsRigidOscillPart::getVy ( )
inline

текущая скорость профиля

Definition at line 109 of file Mechanics2DRigidOscillPart.h.

double& VM2D::MechanicsRigidOscillPart::getVyOld ( )
inline

Definition at line 110 of file Mechanics2DRigidOscillPart.h.

double& VM2D::MechanicsRigidOscillPart::getY ( )
inline

текущее отклонение профиля

Definition at line 113 of file Mechanics2DRigidOscillPart.h.

Here is the caller graph for this function:

double& VM2D::MechanicsRigidOscillPart::getYOld ( )
inline

Definition at line 114 of file Mechanics2DRigidOscillPart.h.

Here is the call graph for this function:

Here is the caller graph for this function:

void Mechanics::Initialize ( Point2D  Vcm0_,
Point2D  Rcm0_,
double  Wcm0_,
double  Phi0_ 
)
inherited

Задание начального положения и начальной скорости

Parameters
[in]Vcm0_- скорость центра масс
[in]Rcm0_- положение центра масс
[in]Wcm0_- угловая скорость центра масс
[in]Phi0_- угол поворота центра масс

Definition at line 89 of file Mechanics2D.cpp.

90 {
91  Vcm0 = Vcm0_;
92  Wcm0 = Wcm0_;
93  Rcm0 = Rcm0_;
94  Phi0 = Phi0_;
95 
96  Vcm = Vcm0;
97  Wcm = Wcm0;
98  Rcm = Rcm0;
99  Phi = Phi0;
100  VcmOld = Vcm0;
101  WcmOld = Wcm0;
102  RcmOld = Rcm0;
103  PhiOld = Phi0;
104 
107 }//Initialize(...)
Point2D Rcm
Текущие положение профиля
Definition: Mechanics2D.h:120
Point2D VcmOld
Скорость и отклонение с предыдущего шага
Definition: Mechanics2D.h:123
Point2D Rcm0
Начальное положение профиля
Definition: Mechanics2D.h:104
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
Point2D RcmOld
Текущие положение профиля
Definition: Mechanics2D.h:126
Airfoil & afl
Definition: Mechanics2D.h:87
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
virtual void Rotate(double alpha)=0
Поворот профиля
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition: World2D.h:130
Point2D Vcm0
Начальная скорость центра и угловая скорость
Definition: Mechanics2D.h:101
virtual void Move(const Point2D &dr)=0
Перемещение профиля

Here is the call graph for this function:

Here is the caller graph for this function:

void MechanicsRigidOscillPart::Move ( )
overridevirtual

Перемещение профиля в соответствии с законом

Implements VM2D::Mechanics.

Definition at line 161 of file Mechanics2DRigidOscillPart.cpp.

162 {
163  Point2D meff;
164  if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
165  meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
166  else
167  meff = Point2D{ m, m };
168 
169  VxOld = Vx;
170  VyOld = Vy;
171 
172  xOld = x;
173  yOld = y;
174 
175  double dx, dVx, dy, dVy;
176 
177  //W.getInfo('t') << "k = " << k << std::endl;
178 
179 
180  if (ky > 0)
181  {
183  numvector<double, 2> kk[4];
184  kk[0] = { Vy, (hydroDynamForce[1] - 2.0 * by * Vy - ky * y) / meff[1]};
185  kk[1] = { Vy + 0.5 * dt * kk[0][1], (hydroDynamForce[1] - 2.0 * by * (Vy + 0.5 * dt * kk[0][1]) - ky * (y + 0.5 * dt * kk[0][0])) / meff[1]};
186  kk[2] = { Vy + 0.5 * dt * kk[1][1], (hydroDynamForce[1] - 2.0 * by * (Vy + 0.5 * dt * kk[1][1]) - ky * (y + 0.5 * dt * kk[1][0])) / meff[1
187  ]};
188  kk[3] = { Vy + dt * kk[2][1], (hydroDynamForce[1] - 2.0 * by * (Vy + dt * kk[2][1]) - ky * (y + dt * kk[2][0])) / meff[1]};
189 
190  dy = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
191  dVy = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
192  }
193  else
194  {
195  dy = 0.0;
196  dVy = 0.0;
197  }
198 
199 
200  if (kx > 0)
201  {
203  numvector<double, 2> kk[4];
204  kk[0] = { Vx, (hydroDynamForce[0] - 2.0 * bx * Vx - kx * x) / meff[0]};
205  kk[1] = { Vx + 0.5 * dt * kk[0][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + 0.5 * dt * kk[0][1]) - kx * (x + 0.5 * dt * kk[0][0])) / meff[0]};
206  kk[2] = { Vx + 0.5 * dt * kk[1][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + 0.5 * dt * kk[1][1]) - kx * (x + 0.5 * dt * kk[1][0])) / meff[0]};
207  kk[3] = { Vx + dt * kk[2][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + dt * kk[2][1]) - kx * (x + dt * kk[2][0])) / meff[0]};
208 
209  dx = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
210  dVx = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
211  }
212  else
213  {
214  dx = 0.0;
215  dVx = 0.0;
216  }
217 
218  afl.Move({ dx, dy });
219  Vcm[0] += dVx;
220  Vcm[1] += dVy;
221 
222  x += dx;
223  y += dy;
224 
225  Vx += dVx;
226  Vy += dVy;
227 
228 }//Move()
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
double kx
параметр жесткости механической системы
double bx
параметр демпфирования механической системы
double xOld
отклонение профиля с предыдущего шага
double x
текущее отклонение профиля
double dt
Шаг по времени
Definition: PassportGen.h:65
double VxOld
скорость профиля с предыдущего шага
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
double Vx
текущая скорость профиля
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280
double m
масса профиля
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142
virtual void Move(const Point2D &dr)=0
Перемещение профиля

Here is the call graph for this function:

Here is the caller graph for this function:

Point2D MechanicsRigidOscillPart::PositionOfAirfoilRcm ( double  currTime)
overridevirtual

Вычисление положения центра масс профиля

Parameters
[in]currTimeтекущее время

Implements VM2D::Mechanics.

Definition at line 137 of file Mechanics2DRigidOscillPart.cpp.

138 {
139  return{ x, y };
140  //return{ 0.0, 0.0 };
141 }//PositionOfAirfoilRcm(...)
double x
текущее отклонение профиля

Here is the caller graph for this function:

virtual void VM2D::MechanicsRigidOscillPart::ReadSpecificParametersFromDictionary ( )
overridevirtual

Чтение параметров конкретной механической системы

Implements VM2D::Mechanics.

Here is the caller graph for this function:

void MechanicsRigidOscillPart::UpdateU ( )

Definition at line 230 of file Mechanics2DRigidOscillPart.cpp.

231 {
232  Point2D meff;
233  if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
234  //#ifdef addm
235  meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
236  //#else
237  else
238  meff = Point2D{ m, m };
239  //double meff = m;
240  //#endif
241 
242 
243 
244  VxOld = Vx;
245  VyOld = Vy;
246 
247  xOld = x;
248  yOld = y;
249 
250  double dx, dVx, dy, dVy;
251 
252  //W.getInfo('t') << "k = " << k << std::endl;
253 
254 
255  if (ky > 0)
256  {
258  numvector<double, 2> kk[4];
259  kk[0] = { Vy, (hydroDynamForce[1] - 2.0 * by * Vy - ky * y) / meff[1]};
260  kk[1] = { Vy + 0.5 * dt * kk[0][1], (hydroDynamForce[1] - 2.0 * by * (Vy + 0.5 * dt * kk[0][1]) - ky * (y + 0.5 * dt * kk[0][0])) / meff[1]};
261  kk[2] = { Vy + 0.5 * dt * kk[1][1], (hydroDynamForce[1] - 2.0 * by * (Vy + 0.5 * dt * kk[1][1]) - ky * (y + 0.5 * dt * kk[1][0])) / meff[1]};
262  kk[3] = { Vy + dt * kk[2][1], (hydroDynamForce[1] - 2.0 * by * (Vy + dt * kk[2][1]) - ky * (y + dt * kk[2][0])) / meff[1]};
263 
264  dy = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
265  dVy = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
266  }
267  else
268  {
269  dy = 0.0;
270  dVy = 0.0;
271  }
272 
273 
274  if (kx > 0)
275  {
277  numvector<double, 2> kk[4];
278  kk[0] = { Vx, (hydroDynamForce[0] - 2.0 * bx * Vx - kx * x) / meff[0]};
279  kk[1] = { Vx + 0.5 * dt * kk[0][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + 0.5 * dt * kk[0][1]) - kx * (x + 0.5 * dt * kk[0][0])) / meff[0]};
280  kk[2] = { Vx + 0.5 * dt * kk[1][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + 0.5 * dt * kk[1][1]) - kx * (x + 0.5 * dt * kk[1][0])) / meff[0]};
281  kk[3] = { Vx + dt * kk[2][1], (hydroDynamForce[0] - 2.0 * bx * (Vx + dt * kk[2][1]) - kx * (x + dt * kk[2][0])) / meff[0]};
282 
283  dx = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
284  dVx = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
285  }
286  else
287  {
288  dx = 0.0;
289  dVx = 0.0;
290  }
291 
292  //afl.Move({ dx, dy });
293  Vcm[0] += dVx;
294  Vcm[1] += dVy;
295 
296  //x += dx;
297  //y += dy;
298 
299  Vx += dVx;
300  Vy += dVy;
301 
302 }//Move()
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
double kx
параметр жесткости механической системы
double bx
параметр демпфирования механической системы
double xOld
отклонение профиля с предыдущего шага
double x
текущее отклонение профиля
double dt
Шаг по времени
Definition: PassportGen.h:65
double VxOld
скорость профиля с предыдущего шага
const size_t numberInPassport
Номер профиля в паспорте
Definition: Mechanics2D.h:82
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
double Vx
текущая скорость профиля
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280
double m
масса профиля
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142

Here is the call graph for this function:

void MechanicsRigidOscillPart::VeloOfAirfoilPanels ( double  currTime)
overridevirtual

Вычисление скоростей начал панелей

Parameters
[in]currTimeтекущее время

Implements VM2D::Mechanics.

Definition at line 154 of file Mechanics2DRigidOscillPart.cpp.

155 {
156  Point2D veloRcm = VeloOfAirfoilRcm(currTime);
157  afl.setV(veloRcm);
158 }//VeloOfAirfoilPanels(...)
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
Definition: Airfoil2D.h:121
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля

Here is the call graph for this function:

Here is the caller graph for this function:

Point2D MechanicsRigidOscillPart::VeloOfAirfoilRcm ( double  currTime)
overridevirtual

Вычисление скорости центра масс профиля

Parameters
[in]currTimeтекущее время

Implements VM2D::Mechanics.

Definition at line 130 of file Mechanics2DRigidOscillPart.cpp.

131 {
132  return { Vx, Vy};
133  //return{ 0.0, 0.0 };
134 }//VeloOfAirfoilRcm(...)
double Vx
текущая скорость профиля

Here is the caller graph for this function:

Member Data Documentation

Airfoil& VM2D::Mechanics::afl
protectedinherited

Константная ссылка на профиль
инициализируется автоматом в конструкторе, при помощи const_cast

Warning
использует const_cast для получения неконстантной ссылки

Definition at line 87 of file Mechanics2D.h.

const Boundary& VM2D::Mechanics::boundary
protectedinherited

Константная ссылка на граничное условие
инициализируется автоматом в конструкторе

Definition at line 91 of file Mechanics2D.h.

double VM2D::MechanicsRigidOscillPart::bx
private

параметр демпфирования механической системы

Definition at line 98 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::by
private

Definition at line 99 of file Mechanics2DRigidOscillPart.h.

const size_t VM2D::Mechanics::degOfFreedom
inherited

Количество степеней свободы

Definition at line 139 of file Mechanics2D.h.

Point2D VM2D::Mechanics::hydroDynamForce
inherited

Вектор гидродинамической силы и момент, действующие на профиль

Definition at line 142 of file Mechanics2D.h.

double VM2D::Mechanics::hydroDynamMoment
inherited

Definition at line 143 of file Mechanics2D.h.

const bool VM2D::Mechanics::isDeform
inherited

Переменная, отвечающая за то, деформируется профиль или нет

Definition at line 133 of file Mechanics2D.h.

const bool VM2D::Mechanics::isMoves
inherited

Переменная, отвечающая за то, двигается профиль или нет

Definition at line 130 of file Mechanics2D.h.

const bool VM2D::Mechanics::isRotate
inherited

Переменная, отвечающая за то, может профиль вращаться или нет

Definition at line 136 of file Mechanics2D.h.

double VM2D::MechanicsRigidOscillPart::kx
private

параметр жесткости механической системы

Definition at line 102 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::ky
private

Definition at line 103 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::m
private

масса профиля

Definition at line 95 of file Mechanics2DRigidOscillPart.h.

std::unique_ptr<VMlib::StreamParser> VM2D::Mechanics::mechParamsParser
protectedinherited

Умный указатель на парсер параметров механической системы

Definition at line 98 of file Mechanics2D.h.

const size_t VM2D::Mechanics::numberInPassport
protectedinherited

Номер профиля в паспорте

Definition at line 82 of file Mechanics2D.h.

double VM2D::Mechanics::Phi
protectedinherited

Definition at line 120 of file Mechanics2D.h.

double VM2D::Mechanics::Phi0
protectedinherited

Definition at line 104 of file Mechanics2D.h.

double VM2D::Mechanics::PhiOld
protectedinherited

Definition at line 126 of file Mechanics2D.h.

Point2D VM2D::MechanicsRigidOscillPart::Qiter

Definition at line 140 of file Mechanics2DRigidOscillPart.h.

Point2D VM2D::Mechanics::Rcm
protectedinherited

Текущие положение профиля

Definition at line 120 of file Mechanics2D.h.

Point2D VM2D::Mechanics::Rcm0
protectedinherited

Начальное положение профиля

Definition at line 104 of file Mechanics2D.h.

Point2D VM2D::Mechanics::RcmOld
protectedinherited

Текущие положение профиля

Definition at line 126 of file Mechanics2D.h.

Point2D VM2D::Mechanics::Vcm0
protectedinherited

Начальная скорость центра и угловая скорость

Definition at line 101 of file Mechanics2D.h.

Point2D VM2D::Mechanics::VcmOld
protectedinherited

Скорость и отклонение с предыдущего шага

Definition at line 123 of file Mechanics2D.h.

const VortexesParams& VM2D::Mechanics::virtVortParams
protectedinherited

Константная ссылка на структуру с параметрами виртуального вихревого слоя для профиля
инициализируется автоматом в конструкторе

Definition at line 95 of file Mechanics2D.h.

Point2D VM2D::Mechanics::viscousForce
inherited

Вектор силы и момент вязкого трения, действующие на профиль

Definition at line 146 of file Mechanics2D.h.

double VM2D::Mechanics::viscousMoment
inherited

Definition at line 147 of file Mechanics2D.h.

double VM2D::MechanicsRigidOscillPart::Vx
private

текущая скорость профиля

Definition at line 79 of file Mechanics2DRigidOscillPart.h.

const double VM2D::MechanicsRigidOscillPart::Vx0
private

начальная скорость профиля

Definition at line 70 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::VxIter

Definition at line 138 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::VxOld
private

скорость профиля с предыдущего шага

Definition at line 87 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::Vy
private

Definition at line 80 of file Mechanics2DRigidOscillPart.h.

const double VM2D::MechanicsRigidOscillPart::Vy0
private

Definition at line 71 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::VyIter

Definition at line 139 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::VyOld
private

Definition at line 88 of file Mechanics2DRigidOscillPart.h.

const World2D& VM2D::Mechanics::W
protectedinherited

Константная ссылка на решаемую задачу

Definition at line 79 of file Mechanics2D.h.

double VM2D::Mechanics::Wcm0
protectedinherited

Definition at line 101 of file Mechanics2D.h.

double VM2D::Mechanics::WcmOld
protectedinherited

Definition at line 123 of file Mechanics2D.h.

double VM2D::MechanicsRigidOscillPart::x
private

текущее отклонение профиля

Definition at line 83 of file Mechanics2DRigidOscillPart.h.

const double VM2D::MechanicsRigidOscillPart::x0
private

начальное отклонение профиля

Definition at line 75 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::xOld
private

отклонение профиля с предыдущего шага

Definition at line 91 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::y
private

Definition at line 84 of file Mechanics2DRigidOscillPart.h.

const double VM2D::MechanicsRigidOscillPart::y0
private

Definition at line 76 of file Mechanics2DRigidOscillPart.h.

double VM2D::MechanicsRigidOscillPart::yOld
private

Definition at line 92 of file Mechanics2DRigidOscillPart.h.


The documentation for this class was generated from the following files: