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

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

#include <Mechanics2DRigidRotatePart.h>

Inheritance diagram for VM2D::MechanicsRigidRotatePart:
Collaboration diagram for VM2D::MechanicsRigidRotatePart:

Public Member Functions

double & getW ()
 текущая скорость профиля More...
 
double & getWOld ()
 
double & getPhi ()
 текущее отклонение профиля More...
 
double & getPhiOld ()
 
 MechanicsRigidRotatePart (const World2D &W_, size_t numberInPassport_)
 Конструктор More...
 
 ~MechanicsRigidRotatePart ()
 Деструктор 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

const double w0
 начальная угловая скорость профиля More...
 
const double phi0
 начальный угол отклонения профиля More...
 
double J
 момент инерции профиля More...
 
double wAccel
 скорость, до которой профиль принудительно разгоняется More...
 
double tAccel
 время, за которое профиль принудительно разгоняется More...
 
double externalTorque
 внешний момент, который "снимается". More...
 

Detailed Description

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

Вращающееся тело, метод расщепления

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

Definition at line 65 of file Mechanics2DRigidRotatePart.h.

Constructor & Destructor Documentation

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

Конструктор

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

Definition at line 54 of file Mechanics2DRigidRotatePart.cpp.

55  : Mechanics(W_, numberInPassport_, 1, true, false, true),
56  w0(0.0),
57  phi0(W_.getAirfoil(numberInPassport_).phiAfl)
58 {
60  Initialize({ 0.0, 0.0 }, W_.getAirfoil(numberInPassport_).rcm, 0.0, W_.getAirfoil(numberInPassport_).phiAfl);
61 };
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Definition: Mechanics2D.cpp:89
const double phi0
начальный угол отклонения профиля
const double w0
начальная угловая скорость профиля
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
double phiAfl
Поворот профиля
Definition: Airfoil2D.h:80
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77
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

Here is the call graph for this function:

Here is the caller graph for this function:

VM2D::MechanicsRigidRotatePart::~MechanicsRigidRotatePart ( )
inline

Деструктор

Definition at line 120 of file Mechanics2DRigidRotatePart.h.

120 {};

Here is the call graph for this function:

Member Function Documentation

double MechanicsRigidRotatePart::AngleOfAirfoil ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 155 of file Mechanics2DRigidRotatePart.cpp.

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

Here is the caller graph for this function:

double MechanicsRigidRotatePart::AngularVelocityOfAirfoil ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 149 of file Mechanics2DRigidRotatePart.cpp.

150 {
151  return w0;
152 }//AngleOfAirfoil(...)
const double w0
начальная угловая скорость профиля

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

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

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

Implements VM2D::Mechanics.

Definition at line 64 of file Mechanics2DRigidRotatePart.cpp.

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

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

Definition at line 109 of file Mechanics2DRigidRotatePart.h.

109 { return Phi; };
double& VM2D::MechanicsRigidRotatePart::getPhiOld ( )
inline

Definition at line 110 of file Mechanics2DRigidRotatePart.h.

110 { return PhiOld; };

Here is the call graph for this function:

double& VM2D::MechanicsRigidRotatePart::getW ( )
inline

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

Definition at line 105 of file Mechanics2DRigidRotatePart.h.

105 { return Wcm; };
double& VM2D::MechanicsRigidRotatePart::getWOld ( )
inline

Definition at line 106 of file Mechanics2DRigidRotatePart.h.

106 { return WcmOld; };
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 MechanicsRigidRotatePart::Move ( )
overridevirtual

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

Implements VM2D::Mechanics.

Definition at line 176 of file Mechanics2DRigidRotatePart.cpp.

177 {
178  WcmOld = Wcm;
179  PhiOld = Phi;
180 
181  //До момента времени tAccel ротор равномерно ускоряется до скорости wTilde
182 
185 
186  if (t < tAccel)
187  {
188  Wcm = t * wAccel / tAccel;
189  Phi = phi0 + Wcm * t / 2.;
190 
191  W.getInfo('i') << "Wcm * t / 2. " << Wcm * t / 2. << std::endl;
192  }
193  else if (t < 3.0 * tAccel)
194  {
195  Wcm = WcmOld + (hydroDynamMoment + 0.0 * viscousMoment) * dt / J;
196  Phi = PhiOld + Wcm * dt;
197 
198  }
199  else
200  {
201  Wcm = WcmOld + (hydroDynamMoment + 0.0 * viscousMoment - externalTorque) * dt / J;
202  Phi = PhiOld + Wcm * dt;
203 
204 // W.getInfo('i') << "Wcm * dt " << Wcm * dt << std::endl;
205  }
206 
207  afl.Rotate(Phi - PhiOld);
208 
209 
210 
211 // W.getInfo('i') << "hydroDynamMoment " << hydroDynamMoment << std::endl;
212 
213 // W.getInfo('i') << "externalTorque " << externalTorque << std::endl;
214 
215 // W.getInfo('i') << "J " << J << std::endl;
216 
217 // W.getInfo('i') << "Wcm " << Wcm << std::endl;
218 
219 // W.getInfo('i') << "Phi " << Phi << std::endl;
220 
221 // W.getInfo('i') << "PhiOld " << PhiOld << std::endl;
222 
223 // W.getInfo('i') << "Phi - PhiOld " << Phi - PhiOld << std::endl;
224 
225 }//Move()
double hydroDynamMoment
Definition: Mechanics2D.h:143
double getCurrTime() const
Возвращает текуще время
Definition: Passport2D.h:102
double tAccel
время, за которое профиль принудительно разгоняется
const double phi0
начальный угол отклонения профиля
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
double dt
Шаг по времени
Definition: PassportGen.h:65
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
Airfoil & afl
Definition: Mechanics2D.h:87
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода ...
Definition: WorldGen.h:74
const World2D & W
Константная ссылка на решаемую задачу
Definition: Mechanics2D.h:79
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition: World2D.h:222
virtual void Rotate(double alpha)=0
Поворот профиля
double viscousMoment
Definition: Mechanics2D.h:147
double externalTorque
внешний момент, который "снимается".
double wAccel
скорость, до которой профиль принудительно разгоняется
double J
момент инерции профиля

Here is the call graph for this function:

Here is the caller graph for this function:

Point2D MechanicsRigidRotatePart::PositionOfAirfoilRcm ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 143 of file Mechanics2DRigidRotatePart.cpp.

144 {
145  return afl.rcm;
146 }//PositionOfAirfoilRcm(...)
Airfoil & afl
Definition: Mechanics2D.h:87
Point2D rcm
Положение центра масс профиля
Definition: Airfoil2D.h:77

Here is the caller graph for this function:

void MechanicsRigidRotatePart::ReadSpecificParametersFromDictionary ( )
overridevirtual

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

Implements VM2D::Mechanics.

Definition at line 229 of file Mechanics2DRigidRotatePart.cpp.

230 {
231  mechParamsParser->get("J", J);
232 
233  W.getInfo('i') << "moment of inertia " << "J = " << J << std::endl;
234 
235  mechParamsParser->get("wAccel", wAccel);
236 
237  W.getInfo('i') << "wAccel = " << wAccel << std::endl;
238 
239  mechParamsParser->get("tAccel", tAccel);
240 
241  W.getInfo('i') << "tAccel = " << tAccel << std::endl;
242 
243  mechParamsParser->get("externalTorque", externalTorque);
244 
245  W.getInfo('i') << "externalTorque = " << externalTorque << std::endl;
246 
247 }//ReadSpecificParametersFromDictionary()
double tAccel
время, за которое профиль принудительно разгоняется
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
double externalTorque
внешний момент, который "снимается".
double wAccel
скорость, до которой профиль принудительно разгоняется
double J
момент инерции профиля

Here is the call graph for this function:

Here is the caller graph for this function:

void MechanicsRigidRotatePart::VeloOfAirfoilPanels ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 161 of file Mechanics2DRigidRotatePart.cpp.

162 {
163  Point2D veloRcm = VeloOfAirfoilRcm(currTime);
164 
165  std::vector<Point2D> vel(afl.getNumberOfPanels(), { 0.0, 0.0 });
166  for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
167  {
168  vel[i][0] = (afl.getR(i) - afl.rcm).kcross()[0] * Wcm;
169  vel[i][1] = (afl.getR(i) - afl.rcm).kcross()[1] * Wcm;
170  }
171 
172  afl.setV(vel);
173 }//VeloOfAirfoilPanels(...)
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition: Airfoil2D.h:101
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition: Airfoil2D.h:139
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
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 MechanicsRigidRotatePart::VeloOfAirfoilRcm ( double  currTime)
overridevirtual

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

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

Implements VM2D::Mechanics.

Definition at line 137 of file Mechanics2DRigidRotatePart.cpp.

138 {
139  return { 0.0, 0.0 };
140 }//VeloOfAirfoilRcm(...)

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.

const size_t VM2D::Mechanics::degOfFreedom
inherited

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

Definition at line 139 of file Mechanics2D.h.

double VM2D::MechanicsRigidRotatePart::externalTorque
private

внешний момент, который "снимается".

Definition at line 98 of file Mechanics2DRigidRotatePart.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::MechanicsRigidRotatePart::J
private

момент инерции профиля

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

const double VM2D::MechanicsRigidRotatePart::phi0
private

начальный угол отклонения профиля

Definition at line 74 of file Mechanics2DRigidRotatePart.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::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.

double VM2D::MechanicsRigidRotatePart::tAccel
private

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

Definition at line 95 of file Mechanics2DRigidRotatePart.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.

const World2D& VM2D::Mechanics::W
protectedinherited

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

Definition at line 79 of file Mechanics2D.h.

const double VM2D::MechanicsRigidRotatePart::w0
private

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

Definition at line 71 of file Mechanics2DRigidRotatePart.h.

double VM2D::MechanicsRigidRotatePart::wAccel
private

скорость, до которой профиль принудительно разгоняется

Definition at line 92 of file Mechanics2DRigidRotatePart.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: