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

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

#include <Mechanics2DRigidGivenLaw.h>

Inheritance diagram for VM2D::MechanicsRigidGivenLaw:
Collaboration diagram for VM2D::MechanicsRigidGivenLaw:

Public Member Functions

 MechanicsRigidGivenLaw (const World2D &W_, size_t numberInPassport_)
 Конструктор More...
 
 ~MechanicsRigidGivenLaw ()
 Деструктор 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 Initialize (Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
 Задание начального положения и начальной скорости More...
 
void GenerateForcesHeader ()
 Генерация заголовка файла нагрузок More...
 
void GeneratePositionHeader ()
 Генерация заголовка файла положения профиля More...
 
void GenerateForcesString ()
 Сохранение строки со статистикой в файл нагрузок More...
 
void GeneratePositionString ()
 Сохранение строки со статистикой в файл нагрузок More...
 

Public Attributes

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

double timeAccel
 
Point2D initPosition
 
Point2D targetVelocity
 
Point2D targetAmplitude
 
std::function< Point2D(double)> PositionOfCenterOfMass
 
std::function< Point2D(double)> VelocityOfCenterOfMass
 
std::function< double(double)> RotationAngle
 
std::function< double(double)> AngularVelocity
 

Detailed Description

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

Жесткое тело, движущееся по заданному закону

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

Definition at line 67 of file Mechanics2DRigidGivenLaw.h.

Constructor & Destructor Documentation

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

Конструктор

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

Definition at line 57 of file Mechanics2DRigidGivenLaw.cpp.

58  : Mechanics(W_, numberInPassport_, 0, true, false, false)
59 {
62 };
std::function< double(double)> AngularVelocity
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Definition: Mechanics2D.cpp:89
std::function< Point2D(double)> VelocityOfCenterOfMass
std::function< double(double)> RotationAngle
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
std::function< Point2D(double)> PositionOfCenterOfMass
Mechanics(const World2D &W_, size_t numberInPassport_, int degOfFreedom_, bool isMoves_, bool isDeform_, bool isRotate_)
Конструктор
Definition: Mechanics2D.cpp:56

Here is the call graph for this function:

VM2D::MechanicsRigidGivenLaw::~MechanicsRigidGivenLaw ( )
inline

Деструктор

Definition at line 122 of file Mechanics2DRigidGivenLaw.h.

122 { };

Here is the call graph for this function:

Member Function Documentation

double MechanicsRigidGivenLaw::AngleOfAirfoil ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 161 of file Mechanics2DRigidGivenLaw.cpp.

162 {
163  return RotationAngle(currTime);
164 }//AngleOfAirfoil(...)
std::function< double(double)> RotationAngle

Here is the caller graph for this function:

double MechanicsRigidGivenLaw::AngularVelocityOfAirfoil ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 155 of file Mechanics2DRigidGivenLaw.cpp.

156 {
157  return AngularVelocity(currTime);
158 }//AngularVelocityOfAirfoil(...)
std::function< double(double)> AngularVelocity

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 MechanicsRigidGivenLaw::GetHydroDynamForce ( )
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 66 of file Mechanics2DRigidGivenLaw.cpp.

67 {
68  W.getTimestat().timeGetHydroDynamForce.first += omp_get_wtime();
69 
70  const double& dt = W.getPassport().timeDiscretizationProperties.dt;
71 
72  hydroDynamForce = { 0.0, 0.0 };
73  hydroDynamMoment = 0.0;
74 
75  viscousForce = { 0.0, 0.0 };
76  viscousMoment = 0.0;
77 
78  Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.завихренностью
79  Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные приростом завихренности
80  Point2D hDFQ = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.источниками
81 
82  double hDMGam = 0.0; //гидродинамический момент, обусловленный присоед.завихренностью
83  double hDMdelta = 0.0; //гидродинамический момент, обусловленный приростом завихренности
84  double hDMQ = 0.0; //гидродинамический момент, обусловленный присоед.источниками
85 
86 
87  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
88  {
90  Point2D VcmOld = VeloOfAirfoilRcm((std::max(W.getCurrentStep(), (size_t)1) - 1) * dt);
91 
92  double Wcm = AngularVelocityOfAirfoil(W.getCurrentStep() * dt);
93  double WcmOld = AngularVelocityOfAirfoil((std::max(W.getCurrentStep(), (size_t)1) - 1) * dt);
94 
95  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i));
96 
97  Point2D dr = rK - afl.rcm;
98 
99  Point2D velK = { -Wcm * dr[1], Wcm * dr[0] };
100  velK += Vcm;
101 
102  double gAtt = Wcm * (dr ^ afl.tau[i]) + (Vcm & afl.tau[i]);
103  double gAttOld = WcmOld * (dr ^ afl.tau[i]) + (VcmOld & afl.tau[i]);
104  double deltaGAtt = gAtt - gAttOld;
105 
106  double qAtt = Wcm * (dr ^ afl.nrm[i]) + (Vcm & afl.nrm[i]);
107 
109  double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i] + deltaGAtt * afl.len[i];
110 
111  /*1*/
112  hDFdelta += deltaK * Point2D({ -dr[1], dr[0] });
113  hDMdelta += 0.5 * deltaK * dr.length2();
114 
115  /*2*/
116  hDFGam += 0.25 * (afl.getV(i) + afl.getV(i+1)).kcross() * gAtt * afl.len[i];
117  hDMGam += 0.25 * dr ^ (afl.getV(i) + afl.getV(i + 1)).kcross() * gAtt * afl.len[i];
118 
119  /*3*/
120  hDFQ -= 0.25 * (afl.getV(i) + afl.getV(i + 1)) * qAtt * afl.len[i];
121  hDMQ -= 0.25 * dr ^ (afl.getV(i) + afl.getV(i + 1)) * qAtt * afl.len[i];
122  }
123 
124  const double rho = W.getPassport().physicalProperties.rho;
125 
126  hydroDynamForce = rho * (hDFGam + hDFdelta * (1.0 / dt) + hDFQ);
127  hydroDynamMoment = rho * (hDMGam + hDMdelta / dt + hDMQ);
128 
129  if ((W.getPassport().physicalProperties.nu > 0.0) && (W.currentStep > 0))
130  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
131  {
132  Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
133  viscousForce += rho * (afl.viscousStress[i] * afl.tau[i]);
134  viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
135  }
136 
137  W.getTimestat().timeGetHydroDynamForce.second += omp_get_wtime();
138 }// 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
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
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
const Point2D & getV(size_t q) const
Возврат константной ссылки на скорость вершины профиля
Definition: Airfoil2D.h:113
Point2D VcmOld
Скорость и отклонение с предыдущего шага
Definition: Mechanics2D.h:123
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
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
size_t currentStep
Текущий номер шага в решаемой задаче
Definition: WorldGen.h:69
std::vector< Point2D > nrm
Нормали к панелям профиля
Definition: Airfoil2D.h:177
double viscousMoment
Definition: Mechanics2D.h:147
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
Definition: WorldGen.h:91
std::vector< double > len
Длины панелей профиля
Definition: Airfoil2D.h:185
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Definition: Mechanics2D.h:142

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 MechanicsRigidGivenLaw::Move ( )
overridevirtual

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

Implements VM2D::Mechanics.

Definition at line 188 of file Mechanics2DRigidGivenLaw.cpp.

189 {
192 
193  //Point2D airfoilVelo = VeloOfAirfoilRcm(t);
194  Point2D aflRcmOld = afl.rcm;
195  double aflPhiOld = afl.phiAfl;
196  afl.Move(PositionOfAirfoilRcm(t + dt) - aflRcmOld);
197  afl.Rotate(AngleOfAirfoil(t + dt) - aflPhiOld);
198 
199  Vcm = VeloOfAirfoilRcm(t + dt);
200  Phi = AngleOfAirfoil(t + dt);
201  Wcm = AngularVelocityOfAirfoil(t + dt);
202 }//Move()
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
double getCurrTime() const
Возвращает текуще время
Definition: Passport2D.h:102
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
double dt
Шаг по времени
Definition: PassportGen.h:65
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
virtual void Rotate(double alpha)=0
Поворот профиля
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
virtual void Move(const Point2D &dr)=0
Перемещение профиля

Here is the call graph for this function:

Here is the caller graph for this function:

Point2D MechanicsRigidGivenLaw::PositionOfAirfoilRcm ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 149 of file Mechanics2DRigidGivenLaw.cpp.

150 {
151  return PositionOfCenterOfMass(currTime);
152 }//PositionOfAirfoilRcm(...)
std::function< Point2D(double)> PositionOfCenterOfMass

Here is the caller graph for this function:

void MechanicsRigidGivenLaw::ReadSpecificParametersFromDictionary ( )
overridevirtual

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

Implements VM2D::Mechanics.

Definition at line 205 of file Mechanics2DRigidGivenLaw.cpp.

206 {
207  mechParamsParser->get("timeAccel", timeAccel);
208  W.getInfo('i') << "time of accelerated movement: " << "timeAccel = " << timeAccel << std::endl;
209 
210  mechParamsParser->get("initPosition", initPosition);
211  W.getInfo('i') << "initial position: " << "initPosition = " << initPosition << std::endl;
212 
213  mechParamsParser->get("targetVelocity", targetVelocity);
214  W.getInfo('i') << "target Velocity: " << "targetVelocity = " << targetVelocity << std::endl;
215 
216  mechParamsParser->get("targetAmplitude", targetAmplitude);
217  W.getInfo('i') << "target Amplitude: " << "targetAmplitude = " << targetAmplitude << std::endl;
218 
219 
220  /*
221  mechParamsParser->get("Comega", Comega);
222 
223  W.getInfo('i') << "frequency " << "Comega = " << Comega << std::endl;
224 
225  mechParamsParser->get("CA", CA);
226 
227  W.getInfo('i') << "Amplitude CA = " << CA << std::endl;
228  */
229 }
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
Definition: Mechanics2D.h:98
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода ...
Definition: WorldGen.h:74
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79

Here is the call graph for this function:

Here is the caller graph for this function:

void MechanicsRigidGivenLaw::VeloOfAirfoilPanels ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 173 of file Mechanics2DRigidGivenLaw.cpp.

174 {
175  Point2D veloRcm = VeloOfAirfoilRcm(currTime);
176 
177  std::vector<Point2D> vel(afl.getNumberOfPanels(), { 0.0, 0.0 });
178  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
179  {
180  vel[i][0] = (afl.getR(i) - afl.rcm).kcross()[0] * Wcm;
181  vel[i][1] = (afl.getR(i) - afl.rcm).kcross()[1] * Wcm;
182  vel[i] += veloRcm;
183  }
184 
185  afl.setV(vel);
186 }//VeloOfAirfoilPanels(...)
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition: Airfoil2D.h:101
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition: Airfoil2D.h:139
Airfoil & afl
Definition: Mechanics2D.h:87
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
Definition: Airfoil2D.h:121

Here is the call graph for this function:

Here is the caller graph for this function:

Point2D MechanicsRigidGivenLaw::VeloOfAirfoilRcm ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 142 of file Mechanics2DRigidGivenLaw.cpp.

143 {
144  return VelocityOfCenterOfMass(currTime);
145 }//VeloOfAirfoilRcm(...)
std::function< Point2D(double)> VelocityOfCenterOfMass

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.

std::function<double(double)> VM2D::MechanicsRigidGivenLaw::AngularVelocity
private
Initial value:
= [=](double t) -> double
{
return 0.0;
}

Definition at line 107 of file Mechanics2DRigidGivenLaw.h.

const Boundary& VM2D::Mechanics::boundary
protectedinherited

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

Definition at line 91 of file Mechanics2D.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.

Point2D VM2D::MechanicsRigidGivenLaw::initPosition
private

Definition at line 73 of file Mechanics2DRigidGivenLaw.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.

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.

std::function<Point2D(double)> VM2D::MechanicsRigidGivenLaw::PositionOfCenterOfMass
private
Initial value:
= [=](double t) -> Point2D
{
return initPosition + Point2D{ targetAmplitude[0] * sin(DPI * t / timeAccel),
targetAmplitude[1] * sin(DPI * t / timeAccel) };
}

Definition at line 77 of file Mechanics2DRigidGivenLaw.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.

std::function<double(double)> VM2D::MechanicsRigidGivenLaw::RotationAngle
private
Initial value:
= [=](double t) -> double
{
return 0.0;
}

Definition at line 102 of file Mechanics2DRigidGivenLaw.h.

Point2D VM2D::MechanicsRigidGivenLaw::targetAmplitude
private

Definition at line 75 of file Mechanics2DRigidGivenLaw.h.

Point2D VM2D::MechanicsRigidGivenLaw::targetVelocity
private

Definition at line 74 of file Mechanics2DRigidGivenLaw.h.

double VM2D::MechanicsRigidGivenLaw::timeAccel
private

Definition at line 72 of file Mechanics2DRigidGivenLaw.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.

std::function<Point2D(double)> VM2D::MechanicsRigidGivenLaw::VelocityOfCenterOfMass
private
Initial value:
= [=](double t) -> Point2D
{
return Point2D{ targetAmplitude[0] * DPI / timeAccel * cos(DPI * t / timeAccel),
targetAmplitude[1] * DPI / timeAccel * cos(DPI * t / timeAccel) };
}

Definition at line 89 of file Mechanics2DRigidGivenLaw.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.

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.


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