55 Mechanics(W_, numberInPassport_, 0, true, false, false),
58 x0(W_.getAirfoil(numberInPassport_).rcm[0]),
59 y0(W_.getAirfoil(numberInPassport_).rcm[1])
93 Point2D hDFdelta = { 0.0, 0.0 };
94 double hDMdelta = 0.0;
99 deltaVstep = { 0.0, 0.0 };
109 hDFdelta += deltaK *
Point2D({ -rK[1], rK[0] });
110 hDMdelta += 0.5 * deltaK * rK.
length2();
175 double dx, dVx, dy, dVy;
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
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]};
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;
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]};
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;
250 double dx, dVx, dy, dVy;
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]};
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;
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]};
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;
374 W.
getInfo(
'i') <<
"mass " <<
"m = " <<
m << std::endl;
378 W.
getInfo(
'i') <<
"damping " <<
"b = " << b << std::endl;
388 W.
getInfo(
'i') <<
"rigidity k = " << k << std::endl;
401 W.
getInfo(
'i') <<
"mass " <<
"m = " <<
m << std::endl;
403 std::vector<double> sh;
412 W.
getInfo(
'i') <<
"rigidity kx = " <<
kx << std::endl;
413 W.
getInfo(
'i') <<
"rigidity ky = " <<
ky << std::endl;
415 std::vector<double> zeta;
418 bx = zeta[0] / (2.0 *
PI) * sqrt(
kx *
m);
419 by = zeta[1] / (2.0 *
PI) * sqrt(
ky * m);
421 W.
getInfo(
'i') <<
"damping bx = " <<
bx << std::endl;
422 W.
getInfo(
'i') <<
"damping by = " <<
by << std::endl;
const double & freeVortexSheet(size_t n, size_t moment) const
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами ...
std::vector< double > viscousStress
Касательные напряжения на панелях профиля
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
virtual void GetHydroDynamForce() override
Вычисление гидродинамической силы, действующей на профиль
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Заголовочный файл с описанием класса Wake.
const Boundary & boundary
Заголовочный файл с описанием класса World2D.
double kx
параметр жесткости механической системы
double bx
параметр демпфирования механической системы
MechanicsRigidOscillPart(const World2D &W_, size_t numberInPassport_)
Конструктор
Заголовочный файл с описанием класса Airfoil.
double xOld
отклонение профиля с предыдущего шага
const double x0
начальное отклонение профиля
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
double x
текущее отклонение профиля
double nu
Коэффициент кинематической вязкости среды
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
const double Vx0
начальная скорость профиля
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
double VxOld
скорость профиля с предыдущего шага
const size_t numberInPassport
Номер профиля в паспорте
T sqr(T x)
Возведение числа в квадрат
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Заголовочный файл с описанием класса MechanicsRigidOscillPart.
Point2D vInf
Скоростью набегающего потока
timePeriod timeGetHydroDynamForce
Начало и конец процесса вычисления нагрузок
double rho
Плотность потока
Заголовочный файл с описанием класса StreamParser.
Класс, опеделяющий двумерный вектор
std::vector< Point2D > tau
Касательные к панелям профиля
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода ...
Sheet sheets
Слои на профиле
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
Заголовочный файл с описанием класса MeasureVP.
double phiAfl
Поворот профиля
const World2D & W
Константная ссылка на решаемую задачу
const Passport & getPassport() const
Возврат константной ссылки на паспорт
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
Point2D rcm
Положение центра масс профиля
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
double Vx
текущая скорость профиля
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Класс, опеделяющий текущую решаемую задачу
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
std::vector< double > len
Длины панелей профиля
virtual void VeloOfAirfoilPanels(double currTime) override
Вычисление скоростей начал панелей
Заголовочный файл с описанием класса Velocity.
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
virtual void Move(const Point2D &dr)=0
Перемещение профиля
Заголовочный файл с описанием класса Boundary.
virtual void Move() override
Перемещение профиля в соответствии с законом
Абстрактный класс, определяющий вид механической системы