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
50using namespace VM2D;
51
53 :
54 Mechanics(W_, numberInPassport_, true, false)
55 //, V0({ 0.0, 0.0 })
56 //, r0({ W_.getAirfoil(numberInPassport_).rcm[0], W_.getAirfoil(numberInPassport_).rcm[1] })
57{
58 Vcm0 = { 0.0, 0.0 };
59 Rcm0 = { W_.getAirfoil(numberInPassport_).rcm[0], W_.getAirfoil(numberInPassport_).rcm[1] };
60 Vcm = Vcm0;
61 Rcm = Rcm0;
62 VcmOld = Vcm0;
63 RcmOld = Rcm;
64
65 strongCoupling = false;
66
69};
70
71//Вычисление гидродинамической силы, действующей на профиль
73{
74 W.getTimers().start("Force");
75
76 const double& dt = W.getPassport().timeDiscretizationProperties.dt;
77
78 hydroDynamForce = { 0.0, 0.0 };
79 hydroDynamMoment = 0.0;
80
81 viscousForce = { 0.0, 0.0 };
82 viscousMoment = 0.0;
83
84 Point2D hDFGam = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.завихренностью
85 Point2D hDFdelta = { 0.0, 0.0 }; //гидродинамические силы, обусловленные приростом завихренности
86 Point2D hDFQ = { 0.0, 0.0 }; //гидродинамические силы, обусловленные присоед.источниками
87
88 double hDMGam = 0.0; //гидродинамический момент, обусловленный присоед.завихренностью
89 double hDMdelta = 0.0; //гидродинамический момент, обусловленный приростом завихренности
90 double hDMQ = 0.0; //гидродинамический момент, обусловленный присоед.источниками
91 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
92 {
93 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
94
95 Point2D velK = 0.5 * (afl.getV(i) + afl.getV(i + 1));
96 double gAtt = (velK & afl.tau[i]);
97
98 double gAttOld = 0.0;
99 if (W.getCurrentStep() > 0)
100 {
101 auto oldAfl = W.getOldAirfoil(numberInPassport);
102 gAttOld = ((0.5 * (oldAfl.getV(i) + oldAfl.getV(i + 1))) & oldAfl.tau[i]);
103 }
104
105 double deltaGAtt = gAtt - gAttOld;
106
107 double qAtt = (velK & afl.nrm[i]);
108
110 double deltaK = boundary.sheets.freeVortexSheet(i, 0) * afl.len[i] - afl.gammaThrough[i] + deltaGAtt * afl.len[i];
111
112 /*1*/
113 hDFdelta += deltaK * Point2D({ -rK[1], rK[0] });
114 hDMdelta += 0.5 * deltaK * rK.length2();
115
116 /*2*/
117 hDFGam += 0.5 * velK.kcross() * gAtt * afl.len[i];
118 hDMGam += 0.5 * (rK ^ velK.kcross()) * gAtt * afl.len[i];
119
120 /*3*/
121 hDFQ -= 0.5 * velK * qAtt * afl.len[i];
122 hDMQ -= 0.5 * (rK ^ velK) * qAtt * afl.len[i];
123 }
124
125 const double rho = W.getPassport().physicalProperties.rho;
126
127 hydroDynamForce = rho * (hDFGam + hDFdelta * (1.0 / dt) + hDFQ);
128 hydroDynamMoment = rho * (hDMGam + hDMdelta / dt + hDMQ);
129
130 if ((W.getPassport().physicalProperties.nu > 0.0)/* && (W.currentStep > 0)*/)
131 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
132 {
133 Point2D rK = 0.5 * (afl.getR(i + 1) + afl.getR(i)) - afl.rcm;
134 viscousForce += rho * afl.viscousStress[i] * afl.tau[i];
135 viscousMoment += rho * (afl.viscousStress[i] * afl.tau[i]) & rK;
136 }
137
138 W.getTimers().stop("Force");
139}// GetHydroDynamForce()
140
141// Вычисление скорости центра масс
143{
144 return Vcm;
145}//VeloOfAirfoilRcm(...)
146
147// Вычисление положения центра масс
149{
150 return Rcm;
151}//PositionOfAirfoilRcm(...)
152
154{
155 return Wcm;
156}//AngularVelocityOfAirfoil(...)
157
159{
160 if (afl.phiAfl != Phi)
161 {
162 std::cout << "afl.phiAfl != Phi" << std::endl;
163 exit(100600);
164 }
165
166 return afl.phiAfl;
167}//AngleOfAirfoil(...)
168
169// Вычисление скоростей начал панелей
171{
172 Point2D veloRcm = VeloOfAirfoilRcm(currTime);
173
174 std::vector<Point2D> veloW(afl.getNumberOfPanels());
175 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
176 veloW[i] = veloRcm + Wcm * (afl.getR(i) - Rcm).kcross();
177
178 afl.setV(veloW);
179
181 circulation = 2.0 * afl.area * Wcm;
182
183}//VeloOfAirfoilPanels(...)
184
185
187{
188 Point2D meff;
189 //if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
190 // meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
191 //else
192 meff = Point2D{ m, m };
193
194 double Jeff = J;
195
196 VcmOld = Vcm;
197 RcmOld = Rcm;
198 PhiOld = Phi;
199 WcmOld = Wcm;
200
201 Point2D dr, dV;
202 double dphi, dw;
203
204 //W.getInfo('t') << "k = " << k << std::endl;
205
206 if (k[0] > 0)
207 {
209 Point2D kk[4];
210
211 kk[0] = { Vcm[0], (hydroDynamForce[0] - 2.0 * b[0] * Vcm[0] - k[0] * Rcm[0]) / meff[0] };
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] };
215
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;
218 }
219 else
220 {
221 dr[0] = 0.0;
222 dV[0] = 0.0;
223 }
224
225
226
227 if (k[1] > 0)
228 {
230 Point2D kk[4];
231 kk[0] = { Vcm[1], (hydroDynamForce[1] - 2.0 * b[1] * Vcm[1] - k[1] * Rcm[1]) / meff[1]};
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]};
235
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;
238 }
239 else
240 {
241 dr[1] = 0.0;
242 dV[1] = 0.0;
243 }
244
245
246
247 if (kw > 0)
248 {
250 Point2D kk[4];
251
252 kk[0] = { Wcm, (hydroDynamMoment - 2.0 * bw * Wcm - kw * Phi) / Jeff };
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 };
255 kk[3] = { Wcm + dt * kk[2][1], (hydroDynamMoment - 2.0 * bw * (Wcm + dt * kk[2][1]) - kw * (Phi + dt * kk[2][0])) / Jeff };
256
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;
259 }
260 else
261 {
262 dphi = 0.0;
263 dw = 0.0;
264 }
265
266 afl.Move(dr);
267 afl.Rotate(dphi);
268
269 Rcm += dr;
270 Vcm += dV;
271
272 Phi += dphi;
273 Wcm += dw;
274}//Move()
275
276
277
279{
280 VcmOld = Vcm;
281 RcmOld = Rcm;
282
283 Point2D dr, dV;
285
286 if (k[1] > 0)
287 {
288 dr[1] = Vcm[1] * dt;
289 dV[1] = 0.0;
290 }
291 else
292 {
293 dr[1] = 0.0;
294 dV[1] = 0.0;
295 }
296
297
298 if (k[0] > 0)
299 {
300 dr[0] = Vcm[0] * dt;
301 dV[0] = 0.0;
302 }
303 else
304 {
305 dr[0] = 0.0;
306 dV[0] = 0.0;
307 }
308
309 afl.Move(dr);
310
311 Rcm += dr;
312 Vcm += dV;
313}//MoveKinematic()
314
315
317{
318 Point2D meff;
319 if (W.getPassport().airfoilParams[numberInPassport].addedMass.length2() > 0)
320 meff = Point2D{ m + W.getPassport().airfoilParams[numberInPassport].addedMass[0], m + W.getPassport().airfoilParams[numberInPassport].addedMass[1] };
321 else
322 meff = Point2D{ m, m };
323
324 Point2D dr, dV;
325
326 if (k[1] > 0)
327 {
329 Point2D kk[4];
330
331 kk[0] = { Vcm[1], (hydroDynamForce[1] - 2.0 * b[1] * Vcm[1] - k[1] * Rcm[1]) / meff[1]};
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]};
335
336 dr[1] = 0.0;// dt* (kk[0][0] + 2.0 * kk[1][0] + 2.0 * kk[2][0] + kk[3][0]) / 6.0;
337 dV[1] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
338 }
339 else
340 {
341 dr[1] = 0.0;
342 dV[1] = 0.0;
343 }
344
345
346 if (k[0] > 0)
347 {
349 Point2D kk[4];
350
351 kk[0] = { Vcm[0], (hydroDynamForce[0] - 2.0 * b[0] * Vcm[0] - k[0] * Rcm[0]) / meff[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]};
355
356 dr[0] = 0.0; // dt* (kk[0][0] + 2.0 * kk[1][0] + 2.0 * kk[2][0] + kk[3][0]) / 6.0;
357 dV[0] = dt * (kk[0][1] + 2.0 * kk[1][1] + 2.0 * kk[2][1] + kk[3][1]) / 6.0;
358 }
359 else
360 {
361 dr[0] = 0.0;
362 dV[0] = 0.0;
363 }
364
365 //afl.Move({ dx, dy });
366 Vcm += dV;
367
368}//MoveOnlyVelo()
369
370
371
372#if defined(INITIAL) || defined(BRIDGE)
374{
375 /*
376 mechParamsParser->get("m", m);
377 W.getInfo('i') << "mass " << "m = " << m << std::endl;
378
379 mechParamsParser->get("J", J);
380 W.getInfo('i') << "moment of inertia " << "J = " << J << std::endl;
381
382
383 mechParamsParser->get("k", k);
384 mechParamsParser->get("kw", kw);
385
386 W.getInfo('i') << "linear rigidity (kx, ky) = " << k << std::endl;
387 W.getInfo('i') << "rotational rigidity kw = " << kw << std::endl;
388
389 Point2D c;
390 mechParamsParser->get("c", c);//Логарифмический декремент
391 double cw;
392 mechParamsParser->get("cw", cw);//Логарифмический декремент
393
394 b[0] = c[0] / 2.0;
395 b[1] = c[1] / 2.0;
396 bw = cw / 2.0;
397
398 W.getInfo('i') << "linear damping (bx, by) = " << b << std::endl;
399 W.getInfo('i') << "rotational damping bw = " << bw << std::endl;
400
401 mechParamsParser->get("initDisplacement", initDisplacement, &defaults::defaultInitDisplacement);
402 mechParamsParser->get("initAngularDisplacement", initAngularDisplacement, &defaults::defaultInitAngularDisplacement);
403 W.getInfo('i') << "initial displacement: " << "translational = " << initDisplacement << ", rotational = " << initAngularDisplacement << std::endl;
404
405 mechParamsParser->get("initVelocity", initVelocity, &defaults::defaultInitVelocity);
406 mechParamsParser->get("initAngularVelocity", initAngularVelocity, &defaults::defaultInitAngularVelocity);
407 W.getInfo('i') << "initial velocity: " << "translational = " << initVelocity << ", rotational = " << initAngularVelocity << std::endl;
408
409 //*/
410
411 //*
412 mechParamsParser->get("m", m);
413 W.getInfo('i') << "mass " << "m = " << m << std::endl;
414
415 mechParamsParser->get("J", J);
416 W.getInfo('i') << "moment of inertia " << "J = " << J << std::endl;
417
418 Point2D sh;
419 mechParamsParser->get("sh", sh);
420 k[0] = m * sqr(2.0 * PI * sh[0] / W.getPassport().airfoilParams[numberInPassport].chord) * W.getPassport().physicalProperties.vInf.length2();
421 k[1] = m * sqr(2.0 * PI * sh[1] / W.getPassport().airfoilParams[numberInPassport].chord) * W.getPassport().physicalProperties.vInf.length2();
422
423 double shw;
424 mechParamsParser->get("shw", shw);
426
427 W.getInfo('i') << "linear rigidity (kx, ky) = " << k << std::endl;
428 W.getInfo('i') << "rotational rigidity kw = " << kw << std::endl;
429
430 Point2D zeta;
431 mechParamsParser->get("zeta", zeta);//Логарифмический декремент
432 double zetaw;
433 mechParamsParser->get("zetaw", zetaw);//Логарифмический декремент
434
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);
438
439 W.getInfo('i') << "linear damping (bx, by) = " << b << std::endl;
440 W.getInfo('i') << "rotational damping bw = " << bw << std::endl;
441
442
445 W.getInfo('i') << "initial displacement: " << "translational = " << initDisplacement << ", rotational = " << initAngularDisplacement << std::endl;
446
449 W.getInfo('i') << "initial velocity: " << "translational = " << initVelocity << ", rotational = " << initAngularVelocity << std::endl;
450 //*/
451
452}//ReadSpecificParametersFromDictionary()
453#endif
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с описанием класса MeasureVP.
Заголовочный файл с описанием класса MechanicsRigidOscillPart.
Заголовочный файл с описанием класса StreamParser.
Заголовочный файл с описанием класса 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:284
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition Passport2D.h:268
const double & freeVortexSheet(size_t n, size_t moment) const
Definition Sheet2D.h:100
Класс, опеделяющий текущую решаемую задачу
Definition World2D.h:74
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
Definition World2D.h:157
const AirfoilGeometry & getOldAirfoil(size_t i) const
Возврат константной ссылки на объект старого профиля
Definition World2D.h:163
VMlib::TimersGen & getTimers() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
Definition World2D.h:276
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:251
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:513
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:389
const double PI
Число .
Definition defs.h:82
static Point2D defaultInitVelocity
Definition defs.h:234
static double defaultInitAngularVelocity
Definition defs.h:235
static double defaultInitAngularDisplacement
Definition defs.h:233
static Point2D defaultInitDisplacement
Для профиля на упругих связях - начальные отклонения и скорости
Definition defs.h:232
double nu
Коэффициент кинематической вязкости среды
Definition Passport2D.h:99
double rho
Плотность потока
Definition Passport2D.h:75
Point2D vInf
Скоростью набегающего потока
Definition Passport2D.h:78
double dt
Шаг по времени
Definition PassportGen.h:67