54 Mechanics(W_, numberInPassport_, true, false)
85 Point2D hDFdelta = { 0.0, 0.0 };
89 double hDMdelta = 0.0;
96 double gAtt = (velK &
afl.
tau[i]);
102 gAttOld = ((0.5 * (oldAfl.getV(i) + oldAfl.getV(i + 1))) & oldAfl.tau[i]);
105 double deltaGAtt = gAtt - gAttOld;
107 double qAtt = (velK &
afl.
nrm[i]);
113 hDFdelta += deltaK *
Point2D({ -rK[1], rK[0] });
114 hDMdelta += 0.5 * deltaK * rK.
length2();
118 hDMGam += 0.5 * (rK ^ velK.
kcross()) * gAtt *
afl.
len[i];
121 hDFQ -= 0.5 * velK * qAtt *
afl.
len[i];
122 hDMQ -= 0.5 * (rK ^ velK) * qAtt *
afl.
len[i];
162 std::cout <<
"afl.phiAfl != Phi" << std::endl;
212 kk[1] = {
Vcm[0] + 0.5 * dt * kk[0][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + 0.5 * dt * kk[0][1]) -
k[0] * (
Rcm[0] + 0.5 * dt * kk[0][0])) / meff[0] };
213 kk[2] = {
Vcm[0] + 0.5 * dt * kk[1][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + 0.5 * dt * kk[1][1]) -
k[0] * (
Rcm[0] + 0.5 * dt * kk[1][0])) / meff[0] };
214 kk[3] = {
Vcm[0] + dt * kk[2][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + dt * kk[2][1]) -
k[0] * (
Rcm[0] + dt * kk[2][0])) / meff[0] };
216 dr[0] = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
217 dV[0] = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
232 kk[1] = {
Vcm[1] + 0.5 * dt * kk[0][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + 0.5 * dt * kk[0][1]) -
k[1] * (
Rcm[1] + 0.5 * dt * kk[0][0])) / meff[1]};
233 kk[2] = {
Vcm[1] + 0.5 * dt * kk[1][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + 0.5 * dt * kk[1][1]) -
k[1] * (
Rcm[1] + 0.5 * dt * kk[1][0])) / meff[1]};
234 kk[3] = {
Vcm[1] + dt * kk[2][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + dt * kk[2][1]) -
k[1] * (
Rcm[1] + dt * kk[2][0])) / meff[1]};
236 dr[1] = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
237 dV[1] = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
253 kk[1] = {
Wcm + 0.5 * dt * kk[0][1], (
hydroDynamMoment - 2.0 *
bw * (
Wcm + 0.5 * dt * kk[0][1]) -
kw * (
Phi + 0.5 * dt * kk[0][0])) / Jeff };
254 kk[2] = {
Wcm + 0.5 * dt * kk[1][1], (
hydroDynamMoment - 2.0 *
bw * (
Wcm + 0.5 * dt * kk[1][1]) -
kw * (
Phi + 0.5 * dt * kk[1][0])) / Jeff };
257 dphi = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
258 dw = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
332 kk[1] = {
Vcm[1] + 0.5 * dt * kk[0][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + 0.5 * dt * kk[0][1]) -
k[1] * (
Rcm[1] + 0.5 * dt * kk[0][0])) / meff[1]};
333 kk[2] = {
Vcm[1] + 0.5 * dt * kk[1][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + 0.5 * dt * kk[1][1]) -
k[1] * (
Rcm[1] + 0.5 * dt * kk[1][0])) / meff[1]};
334 kk[3] = {
Vcm[1] + dt * kk[2][1], (
hydroDynamForce[1] - 2.0 *
b[1] * (
Vcm[1] + dt * kk[2][1]) -
k[1] * (
Rcm[1] + dt * kk[2][0])) / meff[1]};
337 dV[1] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
352 kk[1] = {
Vcm[0] + 0.5 * dt * kk[0][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + 0.5 * dt * kk[0][1]) -
k[0] * (
Rcm[0] + 0.5 * dt * kk[0][0])) / meff[0]};
353 kk[2] = {
Vcm[0] + 0.5 * dt * kk[1][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + 0.5 * dt * kk[1][1]) -
k[0] * (
Rcm[0] + 0.5 * dt * kk[1][0])) / meff[0]};
354 kk[3] = {
Vcm[0] + dt * kk[2][1], (
hydroDynamForce[0] - 2.0 *
b[0] * (
Vcm[0] + dt * kk[2][1]) -
k[0] * (
Rcm[0] + dt * kk[2][0])) / meff[0]};
357 dV[0] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
372#if defined(INITIAL) || defined(BRIDGE)
413 W.
getInfo(
'i') <<
"mass " <<
"m = " <<
m << std::endl;
416 W.
getInfo(
'i') <<
"moment of inertia " <<
"J = " <<
J << std::endl;
427 W.
getInfo(
'i') <<
"linear rigidity (kx, ky) = " <<
k << std::endl;
428 W.
getInfo(
'i') <<
"rotational rigidity kw = " <<
kw << std::endl;
435 b[0] = zeta[0] / (2.0 *
PI) * sqrt(
k[0] *
m);
436 b[1] = zeta[1] / (2.0 *
PI) * sqrt(
k[1] *
m);
437 bw = zetaw / (2.0 *
PI) * sqrt(
kw *
J);
439 W.
getInfo(
'i') <<
"linear damping (bx, by) = " <<
b << std::endl;
440 W.
getInfo(
'i') <<
"rotational damping bw = " <<
bw << std::endl;
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с описанием класса MeasureVP.
Заголовочный файл с описанием класса MechanicsRigidOscillPart.
Заголовочный файл с описанием класса StreamParser.
Заголовочный файл с описанием класса Velocity.
Заголовочный файл с описанием класса Wake.
Заголовочный файл с описанием класса World2D.
double phiAfl
Поворот профиля
std::vector< double > len
Длины панелей профиля
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
double area
Площадь профиля
const Point2D & getV(size_t q) const
Возврат константной ссылки на скорость вершины профиля
std::vector< Point2D > nrm
Нормали к панелям профиля
std::vector< Point2D > tau
Касательные к панелям профиля
Point2D rcm
Положение центра масс профиля
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
virtual void Move(const Point2D &dr)
Перемещение профиля
std::vector< double > viscousStress
Нейросеть для коэффициентов I0 и I3 диффузионной скорости
virtual void Rotate(double alpha)
Поворот профиля
Sheet sheets
Слои на профиле
Абстрактный класс, определяющий вид механической системы
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Point2D Vcm0
Начальная скорость центра и угловая скорость
const size_t numberInPassport
Номер профиля в паспорте
Point2D RcmOld
Текущие положение профиля
Point2D VcmOld
Скорость и отклонение с предыдущего шага
const World2D & W
Константная ссылка на решаемую задачу
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Point2D Rcm
Текущие положение профиля
Point2D Rcm0
Начальное положение профиля
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
double circulationOld
Циркуляция скорости по границе профиля с предыдущего шага
Point2D Vcm
Текущие скорость центра и угловая скорость
double circulation
Текущая циркуляция скорости по границе профиля
const Boundary & boundary
bool strongCoupling
признак полунеявной схемы связывания
Point2D initVelocity
начальные скорости
double initAngularVelocity
virtual Point2D VeloOfAirfoilRcm(double currTime) override
Вычисление скорости центра масс профиля
Point2D initDisplacement
начальное отклонение
Point2D b
параметр демпфирования механической системы
virtual void ReadSpecificParametersFromDictionary() override
Чтение параметров конкретной механической системы
virtual Point2D PositionOfAirfoilRcm(double currTime) override
Вычисление положения центра масс профиля
virtual double AngleOfAirfoil(double currTime) override
Вычисление угла поворота профиля
virtual void GetHydroDynamForce() override
Вычисление гидродинамической силы, действующей на профиль
double initAngularDisplacement
virtual void Move() override
Перемещение профиля в соответствии с законом
virtual double AngularVelocityOfAirfoil(double currTime) override
Вычисление угловой скорости профиля
Point2D k
параметр жесткости механической системы
virtual void VeloOfAirfoilPanels(double currTime) override
Вычисление скоростей начал панелей
MechanicsRigidOscillPart(const World2D &W_, size_t numberInPassport_)
Конструктор
double J
момент инерции профиля
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
const double & freeVortexSheet(size_t n, size_t moment) const
Класс, опеделяющий текущую решаемую задачу
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
const AirfoilGeometry & getOldAirfoil(size_t i) const
Возврат константной ссылки на объект старого профиля
VMlib::TimersGen & getTimers() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
const Passport & getPassport() const
Возврат константной ссылки на паспорт
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
void stop(const std::string &timerLabel)
Останов счетчика
void start(const std::string &timerLabel)
Запуск счетчика
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
numvector< T, 2 > kcross() const
Геометрический поворот двумерного вектора на 90 градусов
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
static Point2D defaultInitVelocity
static double defaultInitAngularVelocity
static double defaultInitAngularDisplacement
static Point2D defaultInitDisplacement
Для профиля на упругих связях - начальные отклонения и скорости
double nu
Коэффициент кинематической вязкости среды
double rho
Плотность потока
Point2D vInf
Скоростью набегающего потока