55 Mechanics(W_, numberInPassport_, true, false)
86 Point2D hDFdelta = { 0.0, 0.0 };
90 double hDMdelta = 0.0;
97 double gAtt = (velK &
afl.
tau[i]);
103 gAttOld = ((0.5 * (oldAfl.getV(i) + oldAfl.getV(i + 1))) & oldAfl.tau[i]);
106 double deltaGAtt = gAtt - gAttOld;
108 double qAtt = (velK &
afl.
nrm[i]);
114 hDFdelta += deltaK *
Point2D({ -rK[1], rK[0] });
115 hDMdelta += 0.5 * deltaK * rK.
length2();
119 hDMGam += 0.5 * (rK ^ velK.
kcross()) * gAtt *
afl.
len[i];
122 hDFQ -= 0.5 * velK * qAtt *
afl.
len[i];
123 hDMQ -= 0.5 * (rK ^ velK) * qAtt *
afl.
len[i];
163 std::cout <<
"afl.phiAfl != Phi" << std::endl;
215 kk[0] = {
Vcm[0], (F[0] - 2.0 *
b[0] *
Vcm[0] -
k[0] *
Rcm[0]) / meff[0] };
216 kk[1] = {
Vcm[0] + 0.5 * dt * kk[0][1], (F[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] };
217 kk[2] = {
Vcm[0] + 0.5 * dt * kk[1][1], (F[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] };
218 kk[3] = {
Vcm[0] + dt * kk[2][1], (F[0] - 2.0 *
b[0] * (
Vcm[0] + dt * kk[2][1]) -
k[0] * (
Rcm[0] + dt * kk[2][0])) / meff[0] };
220 dr[0] = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
221 dV[0] = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
235 kk[0] = {
Vcm[1], (F[1] - 2.0 *
b[1] *
Vcm[1] -
k[1] *
Rcm[1]) / meff[1]};
236 kk[1] = {
Vcm[1] + 0.5 * dt * kk[0][1], (F[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]};
237 kk[2] = {
Vcm[1] + 0.5 * dt * kk[1][1], (F[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]};
238 kk[3] = {
Vcm[1] + dt * kk[2][1], (F[1] - 2.0 *
b[1] * (
Vcm[1] + dt * kk[2][1]) -
k[1] * (
Rcm[1] + dt * kk[2][0])) / meff[1]};
240 dr[1] = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
241 dV[1] = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
257 kk[1] = {
Wcm + 0.5 * dt * kk[0][1], (M - 2.0 *
bw * (
Wcm + 0.5 * dt * kk[0][1]) -
kw * (
Phi + 0.5 * dt * kk[0][0])) / Jeff };
258 kk[2] = {
Wcm + 0.5 * dt * kk[1][1], (M - 2.0 *
bw * (
Wcm + 0.5 * dt * kk[1][1]) -
kw * (
Phi + 0.5 * dt * kk[1][0])) / Jeff };
259 kk[3] = {
Wcm + dt * kk[2][1], (M - 2.0 *
bw * (
Wcm + dt * kk[2][1]) -
kw * (
Phi + dt * kk[2][0])) / Jeff };
261 dphi = dt * (kk[0][0] + 2. * kk[1][0] + 2. * kk[2][0] + kk[3][0]) / 6.0;
262 dw = dt * (kk[0][1] + 2. * kk[1][1] + 2. * kk[2][1] + kk[3][1]) / 6.0;
336 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]};
337 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]};
338 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]};
341 dV[1] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
356 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]};
357 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]};
358 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]};
361 dV[0] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
376#if defined(INITIAL) || defined(BRIDGE)
417 W.
getInfo(
'i') <<
"mass " <<
"m = " <<
m << std::endl;
420 W.
getInfo(
'i') <<
"moment of inertia " <<
"J = " <<
J << std::endl;
431 W.
getInfo(
'i') <<
"linear rigidity (kx, ky) = " <<
k << std::endl;
432 W.
getInfo(
'i') <<
"rotational rigidity kw = " <<
kw << std::endl;
439 b[0] = zeta[0] / (2.0 *
PI) * sqrt(
k[0] *
m);
440 b[1] = zeta[1] / (2.0 *
PI) * sqrt(
k[1] *
m);
441 bw = zetaw / (2.0 *
PI) * sqrt(
kw *
J);
443 W.
getInfo(
'i') <<
"linear damping (bx, by) = " <<
b << std::endl;
444 W.
getInfo(
'i') <<
"rotational damping bw = " <<
bw << std::endl;
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с функциями для метода GMRES.
Заголовочный файл с описанием класса 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
Скоростью набегающего потока