VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
Mechanics2DRigidOscillPart.cpp
Go to the documentation of this file.
1/*--------------------------------*- VM2D -*-----------------*---------------*\
2| ## ## ## ## #### ##### | | Version 1.14 |
3| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2026/03/06 |
4| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5| #### ## ## ## ## ## | Open Source Code |
6| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7| |
8| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9*-----------------------------------------------------------------------------*
10| File name: Mechanics2DRigidOscillPart.cpp |
11| Info: Source code of VM2D |
12| |
13| This file is part of VM2D. |
14| VM2D is free software: you can redistribute it and/or modify it |
15| under the terms of the GNU General Public License as published by |
16| the Free Software Foundation, either version 3 of the License, or |
17| (at your option) any later version. |
18| |
19| VM2D is distributed in the hope that it will be useful, but WITHOUT |
20| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
21| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22| for more details. |
23| |
24| You should have received a copy of the GNU General Public License |
25| along with VM2D. If not, see <http://www.gnu.org/licenses/>. |
26\*---------------------------------------------------------------------------*/
27
28
41
42#include "Airfoil2D.h"
43#include "Boundary2D.h"
44#include "MeasureVP2D.h"
45#include "StreamParser.h"
46#include "Velocity2D.h"
47#include "Wake2D.h"
48#include "World2D.h"
49#include "Gmres2D.h"
50
51using namespace VM2D;
52
54 :
55 Mechanics(W_, numberInPassport_, true, false)
56 //, V0({ 0.0, 0.0 })
57 //, r0({ W_.getAirfoil(numberInPassport_).rcm[0], W_.getAirfoil(numberInPassport_).rcm[1] })
58{
59 Vcm0 = { 0.0, 0.0 };
60 Rcm0 = { W_.getAirfoil(numberInPassport_).rcm[0], W_.getAirfoil(numberInPassport_).rcm[1] };
61 Vcm = Vcm0;
62 Rcm = Rcm0;
63 VcmOld = Vcm0;
64 RcmOld = Rcm;
65
66 strongCoupling = false;
67
70};
71
72//Вычисление гидродинамической силы, действующей на профиль
74{
75 W.getTimers().start("Force");
76
77 const double& dt = W.getPassport().timeDiscretizationProperties.dt;
78
79 hydroDynamForce = { 0.0, 0.0 };
80 hydroDynamMoment = 0.0;
81
82 viscousForce = { 0.0, 0.0 };
83 viscousMoment = 0.0;
84
85 Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.завихренностью
86 Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные приростом завихренности
87 Point2D hDFQ = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.источниками
88
89 double hDMGam = 0.0; //гидродинамический момент, обусловленный присоед.завихренностью
90 double hDMdelta = 0.0; //гидродинамический момент, обусловленный приростом завихренности
91 double hDMQ = 0.0; //гидродинамический момент, обусловленный присоед.источниками
92 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
93 {
94 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
95
96 Point2D velK = 0.5 * (afl.getV(i) + afl.getV(i + 1));
97 double gAtt = (velK & afl.tau[i]);
98
99 double gAttOld = 0.0;
100 if (W.getCurrentStep() > 0)
101 {
102 auto oldAfl = W.getOldAirfoil(numberInPassport);
103 gAttOld = ((0.5 * (oldAfl.getV(i) + oldAfl.getV(i + 1))) & oldAfl.tau[i]);
104 }
105
106 double deltaGAtt = gAtt - gAttOld;
107
108 double qAtt = (velK & afl.nrm[i]);
109
111 double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i] + deltaGAtt * afl.len[i];
112
113 /*1*/
114 hDFdelta += deltaK * Point2D({ -rK[1], rK[0] });
115 hDMdelta += 0.5 * deltaK * rK.length2();
116
117 /*2*/
118 hDFGam += 0.5 * velK.kcross() * gAtt * afl.len[i];
119 hDMGam += 0.5 * (rK ^ velK.kcross()) * gAtt * afl.len[i];
120
121 /*3*/
122 hDFQ -= 0.5 * velK * qAtt * afl.len[i];
123 hDMQ -= 0.5 * (rK ^ velK) * qAtt * afl.len[i];
124 }
125
126 const double rho = W.getPassport().physicalProperties.rho;
127
128 hydroDynamForce = rho * (hDFGam + hDFdelta * (1.0 / dt) + hDFQ);
129 hydroDynamMoment = rho * (hDMGam + hDMdelta / dt + hDMQ);
130
131 if ((W.getPassport().physicalProperties.nu > 0.0)/* && (W.currentStep > 0)*/)
132 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
133 {
134 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
135 viscousForce += rho * afl.viscousStress[i] * afl.tau[i];
136 viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
137 }
138
139 W.getTimers().stop("Force");
140}// GetHydroDynamForce()
141
142// Вычисление скорости центра масс
144{
145 return Vcm;
146}//VeloOfAirfoilRcm(...)
147
148// Вычисление положения центра масс
150{
151 return Rcm;
152}//PositionOfAirfoilRcm(...)
153
155{
156 return Wcm;
157}//AngularVelocityOfAirfoil(...)
158
160{
161 if (afl.phiAfl != Phi)
162 {
163 std::cout << "afl.phiAfl != Phi" << std::endl;
164 exit(100600);
165 }
166
167 return afl.phiAfl;
168}//AngleOfAirfoil(...)
169
170// Вычисление скоростей начал панелей
172{
173 Point2D veloRcm = VeloOfAirfoilRcm(currTime);
174
175 std::vector<Point2D> veloW(afl.getNumberOfPanels());
176 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
177 veloW[i] = veloRcm + Wcm * (afl.getR(i) - Rcm).kcross();
178
179 afl.setV(veloW);
180
182 circulation = 2.0 * afl.area * Wcm;
183
184}//VeloOfAirfoilPanels(...)
185
186
188{
189 Point2D meff;
190 //if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
191 // meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
192 //else
193 meff = Point2D{ m, m };
194
195 double Jeff = J;
196
198 double M = hydroDynamMoment + viscousMoment;
199
200 VcmOld = Vcm;
201 RcmOld = Rcm;
202 PhiOld = Phi;
203 WcmOld = Wcm;
204
205 Point2D dr, dV;
206 double dphi, dw;
207
208 //W.getInfo('t') << "k = " << k << std::endl;
209
210 if (k[0] > 0)
211 {
213 Point2D kk[4];
214
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] };
219
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;
222 }
223 else
224 {
225 dr[0] = 0.0;
226 dV[0] = 0.0;
227 }
228
229
230
231 if (k[1] > 0)
232 {
234 Point2D kk[4];
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]};
239
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;
242 }
243 else
244 {
245 dr[1] = 0.0;
246 dV[1] = 0.0;
247 }
248
249
250
251 if (kw > 0)
252 {
254 Point2D kk[4];
255
256 kk[0] = { Wcm, (M - 2.0 * bw * Wcm - kw * Phi) / Jeff };
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 };
260
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;
263 }
264 else
265 {
266 dphi = 0.0;
267 dw = 0.0;
268 }
269
270 afl.Move(dr);
271 afl.Rotate(dphi);
272
273 Rcm += dr;
274 Vcm += dV;
275
276 Phi += dphi;
277 Wcm += dw;
278}//Move()
279
280
281
283{
284 VcmOld = Vcm;
285 RcmOld = Rcm;
286
287 Point2D dr, dV;
289
290 if (k[1] > 0)
291 {
292 dr[1] = Vcm[1] * dt;
293 dV[1] = 0.0;
294 }
295 else
296 {
297 dr[1] = 0.0;
298 dV[1] = 0.0;
299 }
300
301
302 if (k[0] > 0)
303 {
304 dr[0] = Vcm[0] * dt;
305 dV[0] = 0.0;
306 }
307 else
308 {
309 dr[0] = 0.0;
310 dV[0] = 0.0;
311 }
312
313 afl.Move(dr);
314
315 Rcm += dr;
316 Vcm += dV;
317}//MoveKinematic()
318
319
321{
322 Point2D meff;
323 if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
324 meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
325 else
326 meff = Point2D{ m, m };
327
328 Point2D dr, dV;
329
330 if (k[1] > 0)
331 {
333 Point2D kk[4];
334
335 kk[0] = { Vcm[1], (hydroDynamForce[1] - 2.0 * b[1] * Vcm[1] - k[1] * Rcm[1]) / meff[1]};
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]};
339
340 dr[1] = 0.0;// dt* (kk[0][0] + 2.0 * kk[1][0] + 2.0 * kk[2][0] + kk[3][0]) / 6.0;
341 dV[1] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
342 }
343 else
344 {
345 dr[1] = 0.0;
346 dV[1] = 0.0;
347 }
348
349
350 if (k[0] > 0)
351 {
353 Point2D kk[4];
354
355 kk[0] = { Vcm[0], (hydroDynamForce[0] - 2.0 * b[0] * Vcm[0] - k[0] * Rcm[0]) / meff[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]};
359
360 dr[0] = 0.0; // dt* (kk[0][0] + 2.0 * kk[1][0] + 2.0 * kk[2][0] + kk[3][0]) / 6.0;
361 dV[0] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
362 }
363 else
364 {
365 dr[0] = 0.0;
366 dV[0] = 0.0;
367 }
368
369 //afl.Move({ dx, dy });
370 Vcm += dV;
371
372}//MoveOnlyVelo()
373
374
375
376#if defined(INITIAL) || defined(BRIDGE)
378{
379 /*
380 mechParamsParser->get("m", m);
381 W.getInfo('i') << "mass " << "m = " << m << std::endl;
382
383 mechParamsParser->get("J", J);
384 W.getInfo('i') << "moment of inertia " << "J = " << J << std::endl;
385
386
387 mechParamsParser->get("k", k);
388 mechParamsParser->get("kw", kw);
389
390 W.getInfo('i') << "linear rigidity (kx, ky) = " << k << std::endl;
391 W.getInfo('i') << "rotational rigidity kw = " << kw << std::endl;
392
393 Point2D c;
394 mechParamsParser->get("c", c);//Логарифмический декремент
395 double cw;
396 mechParamsParser->get("cw", cw);//Логарифмический декремент
397
398 b[0] = c[0] / 2.0;
399 b[1] = c[1] / 2.0;
400 bw = cw / 2.0;
401
402 W.getInfo('i') << "linear damping (bx, by) = " << b << std::endl;
403 W.getInfo('i') << "rotational damping bw = " << bw << std::endl;
404
405 mechParamsParser->get("initDisplacement", initDisplacement, &defaults::defaultInitDisplacement);
406 mechParamsParser->get("initAngularDisplacement", initAngularDisplacement, &defaults::defaultInitAngularDisplacement);
407 W.getInfo('i') << "initial displacement: " << "translational = " << initDisplacement << ", rotational = " << initAngularDisplacement << std::endl;
408
409 mechParamsParser->get("initVelocity", initVelocity, &defaults::defaultInitVelocity);
410 mechParamsParser->get("initAngularVelocity", initAngularVelocity, &defaults::defaultInitAngularVelocity);
411 W.getInfo('i') << "initial velocity: " << "translational = " << initVelocity << ", rotational = " << initAngularVelocity << std::endl;
412
413 //*/
414
415 //*
416 mechParamsParser->get("m", m);
417 W.getInfo('i') << "mass " << "m = " << m << std::endl;
418
419 mechParamsParser->get("J", J);
420 W.getInfo('i') << "moment of inertia " << "J = " << J << std::endl;
421
422 Point2D sh;
423 mechParamsParser->get("sh", sh);
424 k[0] = m * sqr(2.0 * PI * sh[0] / W.getPassport().airfoilParams[numberInPassport].chord) * W.getPassport().physicalProperties.vInf.length2();
425 k[1] = m * sqr(2.0 * PI * sh[1] / W.getPassport().airfoilParams[numberInPassport].chord) * W.getPassport().physicalProperties.vInf.length2();
426
427 double shw;
428 mechParamsParser->get("shw", shw);
430
431 W.getInfo('i') << "linear rigidity (kx, ky) = " << k << std::endl;
432 W.getInfo('i') << "rotational rigidity kw = " << kw << std::endl;
433
434 Point2D zeta;
435 mechParamsParser->get("zeta", zeta);//Логарифмический декремент
436 double zetaw;
437 mechParamsParser->get("zetaw", zetaw);//Логарифмический декремент
438
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);
442
443 W.getInfo('i') << "linear damping (bx, by) = " << b << std::endl;
444 W.getInfo('i') << "rotational damping bw = " << bw << std::endl;
445
446
449 W.getInfo('i') << "initial displacement: " << "translational = " << initDisplacement << ", rotational = " << initAngularDisplacement << std::endl;
450
453 W.getInfo('i') << "initial velocity: " << "translational = " << initVelocity << ", rotational = " << initAngularVelocity << std::endl;
454 //*/
455
456}//ReadSpecificParametersFromDictionary()
457#endif
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с функциями для метода GMRES.
Заголовочный файл с описанием класса MeasureVP.
Заголовочный файл с описанием класса MechanicsRigidOscillPart.
Заголовочный файл с описанием класса StreamParser.
const double PI
Число .
Definition defs.h:76
Заголовочный файл с описанием класса Velocity.
Заголовочный файл с описанием класса Wake.
Заголовочный файл с описанием класса World2D.
double phiAfl
Поворот профиля
Definition Airfoil2D.h:100
std::vector< double > len
Длины панелей профиля
Definition Airfoil2D.h:94
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
Definition Airfoil2D.h:145
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition Airfoil2D.h:113
double area
Площадь профиля
Definition Airfoil2D.h:103
const Point2D & getV(size_t q) const
Возврат константной ссылки на скорость вершины профиля
Definition Airfoil2D.h:137
std::vector< Point2D > nrm
Нормали к панелям профиля
Definition Airfoil2D.h:81
std::vector< Point2D > tau
Касательные к панелям профиля
Definition Airfoil2D.h:91
Point2D rcm
Положение центра масс профиля
Definition Airfoil2D.h:97
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition Airfoil2D.h:163
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
Definition Airfoil2D.h:276
virtual void Move(const Point2D &dr)
Перемещение профиля
std::vector< double > viscousStress
Нейросеть для коэффициентов I0 и I3 диффузионной скорости
Definition Airfoil2D.h:268
virtual void Rotate(double alpha)
Поворот профиля
Sheet sheets
Слои на профиле
Definition Boundary2D.h:96
Абстрактный класс, определяющий вид механической системы
Definition Mechanics2D.h:72
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
Definition Mechanics2D.h:98
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
Point2D Vcm0
Начальная скорость центра и угловая скорость
const size_t numberInPassport
Номер профиля в паспорте
Definition Mechanics2D.h:82
Point2D RcmOld
Текущие положение профиля
Point2D VcmOld
Скорость и отклонение с предыдущего шага
const World2D & W
Константная ссылка на решаемую задачу
Definition Mechanics2D.h:79
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Point2D Rcm
Текущие положение профиля
Point2D Rcm0
Начальное положение профиля
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
double circulationOld
Циркуляция скорости по границе профиля с предыдущего шага
double hydroDynamMoment
Airfoil & afl
Definition Mechanics2D.h:87
Point2D Vcm
Текущие скорость центра и угловая скорость
double circulation
Текущая циркуляция скорости по границе профиля
const Boundary & boundary
Definition Mechanics2D.h:91
bool strongCoupling
признак полунеявной схемы связывания
double m
масса профиля
Point2D initVelocity
начальные скорости
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
Вычисление гидродинамической силы, действующей на профиль
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
Структура с физическими свойствами задачи
Definition Passport2D.h:301
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition Passport2D.h:276
const double & freeVortexSheet(size_t n, size_t moment) const
Definition Sheet2D.h:100
Класс, опеделяющий текущую решаемую задачу
Definition World2D.h:77
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition World2D.h:163
const AirfoilGeometry & getOldAirfoil(size_t i) const
Возврат константной ссылки на объект старого профиля
Definition World2D.h:169
VMlib::TimersGen & getTimers() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition World2D.h:288
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:263
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
void stop(const std::string &timerLabel)
Останов счетчика
Definition TimesGen.cpp:68
void start(const std::string &timerLabel)
Запуск счетчика
Definition TimesGen.cpp:55
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода
Definition WorldGen.h:82
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
Definition WorldGen.h:99
numvector< T, 2 > kcross() const
Геометрический поворот двумерного вектора на 90 градусов
Definition numvector.h:511
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:386
static Point2D defaultInitVelocity
Definition defs.h:232
static double defaultInitAngularVelocity
Definition defs.h:233
static double defaultInitAngularDisplacement
Definition defs.h:231
static Point2D defaultInitDisplacement
Для профиля на упругих связях - начальные отклонения и скорости
Definition defs.h:230
double nu
Коэффициент кинематической вязкости среды
Definition Passport2D.h:99
double rho
Плотность потока
Definition Passport2D.h:75
Point2D vInf
Скоростью набегающего потока
Definition Passport2D.h:78
double dt
Шаг по времени
Definition PassportGen.h:67