VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
VM2D::BoundaryConstLayerAver Class Reference

Класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле More...

#include <Boundary2DConstLayerAver.h>

Inheritance diagram for VM2D::BoundaryConstLayerAver:
Collaboration diagram for VM2D::BoundaryConstLayerAver:

Public Member Functions

 BoundaryConstLayerAver (const World2D &W_, size_t numberInPassport_)
 Конструктор
 
virtual ~BoundaryConstLayerAver ()
 Деструктор
 
virtual void FillMatrixSelf (Eigen::MatrixXd &matr, Eigen::VectorXd &lastLine, Eigen::VectorXd &lactCol) override
 Генерация блока матрицы
 
virtual void FillIQSelf (std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &IQ) override
 Генерация блока матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2, влияние профиля самого на себя
 
virtual void FillMatrixFromOther (const Boundary &otherBoundary, Eigen::MatrixXd &matr) override
 Генерация блока матрицы влияния от другого профиля того же типа
 
virtual void FillIQFromOther (const Boundary &otherBoundary, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &IQ) override
 Генерация блока матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2, влияние одного профиля на другой
 
virtual void SolutionToFreeVortexSheetAndVirtualVortex (const Eigen::VectorXd &sol) override
 Пересчет решения на интенсивность вихревого слоя и на рождаемые вихри на конкретном профиле
 
virtual void CalcConvVelocityToSetOfPointsFromSheets (const WakeDataBase &pointsDb, std::vector< Point2D > &velo) const override
 Вычисление конвективных скоростей в наборе точек, вызываемых наличием слоев вихрей и источников на профиле
 
virtual void ComputeAttachedSheetsIntensity () override
 Вычисление интенсивностей присоединенного вихревого слоя и присоединенного слоя источников
 
virtual void GetInfluenceFromVorticesToRectPanel (size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &wakeRhs) const override
 Вычисление влияния части подряд идущих вихрей из вихревого следа на прямолинейную панель для правой части
 
virtual void GetInfluenceFromSourcesToRectPanel (size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &wakeRhs) const override
 Вычисление влияния части подряд источников из области течения на прямолинейную панель для правой части
 
virtual void GetInfluenceFromVortexSheetAtRectPanelToVortex (size_t panel, const Vortex2D &vtx, Point2D &vel) const override
 Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вихрь в области течения ///.
 
virtual void GetInfluenceFromSourceSheetAtRectPanelToVortex (size_t panel, const Vortex2D &ptr, Point2D &vel) const override
 Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения
 
virtual void GetInfluenceFromVInfToRectPanel (std::vector< double > &vInfRhs) const override
 Вычисление влияния набегающего потока на прямолинейную панель для правой части
 
size_t GetUnknownsSize () const
 Возврат размерности вектора решения
 

Public Attributes

const Airfoilafl
 
int minVortexPerPanel
 Минимальное число вихрей, рождаемых на панели профиля и формирующих виртуальный вихревой след
 
std::vector< std::pair< int, int > > vortexBeginEnd
 Номера первого и последнего вихрей, рождаемых на каждой панели профиля (формируется после решения СЛАУ)
 
VirtualWake virtualWake
 Виртуальный вихревой след конкретного профиля
 
size_t sheetDim
 Размерность параметров каждого из слоев на каждой из панелей
 
Sheet sheets
 Слои на профиле
 
Sheet oldSheets
 Слои на профиле с предыдущего шага
 

Protected Attributes

const World2DW
 Константная ссылка на решаемую задачу
 
const size_t numberInPassport
 Номер профиля в паспорте
 

Detailed Description

Класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле

Способ удовлетворения граничного условия:

  • генерация вихревого слоя постоянной интенсивности на панелях;
  • условие ортогональности невязки граничного условия константе (выполнение граничного условия в среднем по панели).
Author
Марчевский Илья Константинович
Сокол Ксения Сергеевна
Рятина Евгения Павловна
Колганова Александра Олеговна

\Version 1.14

Date
6 марта 2026 г.

Definition at line 65 of file Boundary2DConstLayerAver.h.

Constructor & Destructor Documentation

◆ BoundaryConstLayerAver()

VM2D::BoundaryConstLayerAver::BoundaryConstLayerAver ( const World2D W_,
size_t  numberInPassport_ 
)
inline

Конструктор

Parameters
[in]W_константная ссылка на решаемую задачу
[in]numberInPassport_номер профиля в паспорте задачи

Definition at line 74 of file Boundary2DConstLayerAver.h.

74 :
75 Boundary(W_, numberInPassport_, 1) {};
Boundary(const World2D &W_, size_t numberInPassport_, int sheetDim_)
Конструктор

◆ ~BoundaryConstLayerAver()

virtual VM2D::BoundaryConstLayerAver::~BoundaryConstLayerAver ( )
inlinevirtual

Деструктор

Definition at line 78 of file Boundary2DConstLayerAver.h.

78{};

Member Function Documentation

◆ CalcConvVelocityToSetOfPointsFromSheets()

void BoundaryConstLayerAver::CalcConvVelocityToSetOfPointsFromSheets ( const WakeDataBase pointsDb,
std::vector< Point2D > &  velo 
) const
overridevirtual

Вычисление конвективных скоростей в наборе точек, вызываемых наличием слоев вихрей и источников на профиле

Вычисляет конвективные скорости в наборе точек, которые вызваны влиянием слоев вихрей и источников на профиле

Parameters
[in]pointsDbконстантная ссылка на базу данных вихрей, в точках которых вычисляются скорости
[out]veloссылка на вектор скоростей, которые приобретают точки из-за влияния слоев вихрей и источников на профиле
Warning
velo — накапливается!
Todo:
сделать вызов функции GetInfluenceFromVortexSheetAtRectPanelToVortex
Todo:
Тут надо разобраться, как должно быть...
Todo:
Todo:
сделать if(move || deform)

Implements VM2D::Boundary.

Definition at line 157 of file Boundary2DConstLayerAver.cpp.

158{
159 std::vector<Point2D> selfVelo(pointsDb.vtx.size());
160
161 double cft = IDPI;
162
163#pragma warning (push)
164#pragma warning (disable: 4101)
165 //Локальные переменные для цикла
166 Point2D velI;
167 Point2D tempVel;
168 //double dst2eps, dst2;
169#pragma warning (pop)
170
171#pragma omp parallel for default(none) shared(selfVelo, cft, pointsDb, std::cout) private(velI, tempVel)
172 for (int i = 0; i < pointsDb.vtx.size(); ++i)
173 {
175
176 velI.toZero();
177
178 const Point2D& posI = pointsDb.vtx[i].r();
179
182 for (size_t j = 0; j < sheets.getSheetSize(); ++j)
183 {
184 Point2D dj = afl.getR(j + 1) - afl.getR(j);
185 Point2D tauj = dj.unit();
186
187 Point2D s = posI - afl.getR(j);
188 Point2D p = posI - afl.getR(j + 1);
189
190 double a = VMlib::Alpha(p, s);
191
192 double lambda;
193 if ( (s.length2() > 1e-16) && (p.length2() > 1e-16) )
194 lambda = VMlib::Lambda(p, s);
195 else
196 lambda = 0.0;
197
198 Point2D skos = -a * tauj.kcross() + lambda * tauj;
199
200 velI += sheets.freeVortexSheet(j, 0) * skos.kcross();
201 velI += sheets.attachedVortexSheet(j, 0) * skos.kcross();
202 velI += sheets.attachedSourceSheet(j, 0) * skos;
203 }//for j
204
205 velI *= cft;
206 selfVelo[i] = velI;
207 }//for i
208
209 for (size_t i = 0; i < velo.size(); ++i)
210 velo[i] += selfVelo[i];
211}//CalcConvVelocityToSetOfPointsFromSheets(...)
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition Airfoil2D.h:113
const Airfoil & afl
Definition Boundary2D.h:77
Sheet sheets
Слои на профиле
Definition Boundary2D.h:96
const double & attachedVortexSheet(size_t n, size_t moment) const
Definition Sheet2D.h:105
const double & attachedSourceSheet(size_t n, size_t moment) const
Definition Sheet2D.h:110
const double & freeVortexSheet(size_t n, size_t moment) const
Definition Sheet2D.h:100
size_t getSheetSize() const
Definition Sheet2D.h:95
std::vector< Vortex2D > vtx
Список вихревых элементов
numvector< T, 2 > kcross() const
Геометрический поворот двумерного вектора на 90 градусов
Definition numvector.h:510
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:386
numvector< T, n > & toZero(P val=0)
Установка всех компонент вектора в константу (по умолчанию — нуль)
Definition numvector.h:527
auto unit(P newlen=1) const -> numvector< typename std::remove_const< decltype(this->data[0] *newlen)>::type, n >
Вычисление орта вектора или вектора заданной длины, коллинеарного данному
Definition numvector.h:402
const double IDPI
Число .
Definition defs.h:85
double Lambda(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления логарифма отношения норм векторов
Definition defs.cpp:268
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
Definition defs.cpp:262
Here is the call graph for this function:

◆ ComputeAttachedSheetsIntensity()

void BoundaryConstLayerAver::ComputeAttachedSheetsIntensity ( )
overridevirtual

Вычисление интенсивностей присоединенного вихревого слоя и присоединенного слоя источников

Implements VM2D::Boundary.

Definition at line 276 of file Boundary2DConstLayerAver.cpp.

277{
278
279 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
280 {
283 }
284
285 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
286 {
287 sheets.attachedVortexSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.tau[i];
288 sheets.attachedSourceSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.nrm[i];
289 }
290}//ComputeAttachedSheetsIntensity()
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
Sheet oldSheets
Слои на профиле с предыдущего шага
Definition Boundary2D.h:99
Here is the call graph for this function:

◆ FillIQFromOther()

void BoundaryConstLayerAver::FillIQFromOther ( const Boundary otherBoundary,
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &  IQ 
)
overridevirtual

Генерация блока матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2, влияние одного профиля на другой

Генерирует блок матрицы влияния от другого профиля того же типа

Parameters
[in]otherBoundaryконстантная ссылка на граничное условие на втором профиле
[out]IQссылка на пару матриц, выражающих взаимные влияния (касательные и нормальные) панелей профиля
Todo:
Пока считается, что граничные условия одинаковые

Implements VM2D::Boundary.

Definition at line 150 of file Boundary2DConstLayerAver.cpp.

151{
152 afl.calcIQ(1, otherBoundary.afl, IQ);
153}//FillIQFromOther(...)
virtual void calcIQ(size_t p, const Airfoil &otherAirfoil, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &matrPair) const
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2.
Here is the call graph for this function:

◆ FillIQSelf()

void BoundaryConstLayerAver::FillIQSelf ( std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &  IQ)
overridevirtual

Генерация блока матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2, влияние профиля самого на себя

Parameters
[out]IQссылка на генерируемую матрицу

Implements VM2D::Boundary.

Definition at line 136 of file Boundary2DConstLayerAver.cpp.

137{
138 afl.calcIQ(1, afl, IQ);
139}//FillIQSelf(...)
Here is the call graph for this function:

◆ FillMatrixFromOther()

void BoundaryConstLayerAver::FillMatrixFromOther ( const Boundary otherBoundary,
Eigen::MatrixXd &  matr 
)
overridevirtual

Генерация блока матрицы влияния от другого профиля того же типа

Генерирует блок матрицы влияния от другого профиля того же типа

Parameters
[in]otherBoundaryконстантная ссылка на граничное условие на втором профиле
[out]matrссылка на генерируемый блок матрицы
Todo:
Пока считается, что граничные условия одинаковые

Implements VM2D::Boundary.

Definition at line 142 of file Boundary2DConstLayerAver.cpp.

143{
144 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
145 for (size_t j = 0; j < otherBoundary.afl.getNumberOfPanels(); ++j)
146 matr(i, j) = afl.getA(1, i, otherBoundary.afl, j)[0];
147}//FillMatrixFromOther(...)
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition Airfoil2D.h:163
virtual std::vector< double > getA(size_t p, size_t i, const Airfoil &airfoil, size_t j) const
Вычисление коэффициентов матрицы A для расчета влияния панели на панель
Here is the call graph for this function:

◆ FillMatrixSelf()

void BoundaryConstLayerAver::FillMatrixSelf ( Eigen::MatrixXd &  matr,
Eigen::VectorXd &  lastLine,
Eigen::VectorXd &  lactCol 
)
overridevirtual

Генерация блока матрицы

Генерирует следующие компоненты матрицы:

  • диагональный блок матрицы — влияние данного профиля на самого себя;
  • нижнюю строку для матрицы для данного профиля;
  • правый столбец матрицы для данного профиля.
Parameters
[out]matrссылка на генерируемую матрицу
[out]lastLineссылка на нижнюю строку
[out]lactColссылка на правый столбец

Implements VM2D::Boundary.

Definition at line 120 of file Boundary2DConstLayerAver.cpp.

121{
122 size_t np = afl.getNumberOfPanels();
123
124 for (size_t i = 0; i < np; ++i)
125 {
126 lactCol(i) = 1.0;
127 lastLine(i) = afl.len[i];
128 }
129
130 for (size_t i = 0; i < np; ++i)
131 for (size_t j = 0; j < np; ++j)
132 matr(i, j) = afl.getA(1, i, afl, j)[0];
133
134}//FillMatrixSelf(...)
std::vector< double > len
Длины панелей профиля
Definition Airfoil2D.h:94
Here is the call graph for this function:

◆ GetInfluenceFromSourceSheetAtRectPanelToVortex()

void BoundaryConstLayerAver::GetInfluenceFromSourceSheetAtRectPanelToVortex ( size_t  panel,
const Vortex2D vtx,
Point2D vel 
) const
overridevirtual

Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения

Parameters
[in]panelномер панели профиля, от которой считается влияние
[in]vtxссылка на вихрь
[out]velссылка на вектор полученной скорости

Implements VM2D::Boundary.

Definition at line 345 of file Boundary2DConstLayerAver.cpp.

346{
347 vel.toZero();
348
349 const Point2D& posI = ptr.r();
350
351 Point2D dj = afl.getR(panel + 1) - afl.getR(panel);
352 Point2D tauj = dj.unit();
353
354 Point2D s = posI - afl.getR(panel);
355 Point2D p = posI - afl.getR(panel + 1);
356
357 double a = VMlib::Alpha(p, s);
358
359 double lambda;
360 if ((s.length2() > 1e-16) && (p.length2() > 1e-16))
361 lambda = VMlib::Lambda(p, s);
362 else
363 lambda = 0.0;
364
365 vel += sheets.attachedSourceSheet(panel, 0) * (-a * tauj.kcross() + lambda * tauj);
366}// GetInfluenceFromSourceSheetAtRectPanelToVortex(...)
Here is the call graph for this function:

◆ GetInfluenceFromSourcesToRectPanel()

void BoundaryConstLayerAver::GetInfluenceFromSourcesToRectPanel ( size_t  panel,
const Vortex2D ptr,
ptrdiff_t  count,
std::vector< double > &  wakeRhs 
) const
overridevirtual

Вычисление влияния части подряд источников из области течения на прямолинейную панель для правой части

Вычисляет влияния части подряд идущих источников из области течения на прямолинейную панель для правой части

Parameters
[in]panelномер панели профиля, на которую считается влияние
[in]ptrуказатель на начало диапазона источников
[in]countдлина диапазона источников
[out]wakeRhsссылка на вектор полученных влияние для правой части СЛАУ

Implements VM2D::Boundary.

Definition at line 321 of file Boundary2DConstLayerAver.cpp.

322{
323 double& velI = wakeRhs[0];
324
325 const Point2D& posI0 = afl.getR(panel);
326 const Point2D& posI1 = afl.getR(panel + 1);
327
328 for (size_t it = 0; it != count; ++it)
329 {
330 const Vortex2D& vt = ptr[it];
331 const Point2D& posJ = vt.r();
332 const double& gamJ = vt.g();
333
334 Point2D s = posJ - posI0;
335 Point2D p = posJ - posI1;
336
337 double lambda = VMlib::Lambda(p, s);
338
339 velI -= gamJ * lambda;
340 }
341}// GetInfluenceFromSourcesToRectPanel(...)
Класс, опеделяющий двумерный вихревой элемент
Definition Vortex2D.h:59
HD Point2D & r()
Функция для доступа к радиус-вектору вихря
Definition Vortex2D.h:87
HD double & g()
Функция для доступа к циркуляции вихря
Definition Vortex2D.h:95
Here is the call graph for this function:

◆ GetInfluenceFromVInfToRectPanel()

void BoundaryConstLayerAver::GetInfluenceFromVInfToRectPanel ( std::vector< double > &  vInfRhs) const
overridevirtual

Вычисление влияния набегающего потока на прямолинейную панель для правой части

Вычисляет влияния набегающего потока на прямолинейную панель для правой части

Parameters
[out]vInfRhsссылка на вектор полученных влияние для правой части СЛАУ

Implements VM2D::Boundary.

Definition at line 397 of file Boundary2DConstLayerAver.cpp.

398{
399 size_t np = afl.getNumberOfPanels();
400 vInfRhs.resize(np);
401
402#pragma omp parallel for default(none) shared(vInfRhs, np)
403 for (int i = 0; i < np; ++i)
404 vInfRhs[i] = afl.tau[i] & W.getV0();
405
406}
const World2D & W
Константная ссылка на решаемую задачу
Definition Boundary2D.h:68
Point2D getV0() const
Возврат текущей скорости набегающего потока
Definition World2D.h:142
Here is the call graph for this function:

◆ GetInfluenceFromVortexSheetAtRectPanelToVortex()

void BoundaryConstLayerAver::GetInfluenceFromVortexSheetAtRectPanelToVortex ( size_t  panel,
const Vortex2D vtx,
Point2D vel 
) const
overridevirtual

Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вихрь в области течения ///.

Parameters
[in]panelномер панели профиля, от которой считается влияние
[in]vtxссылка на вихрь
[out]velссылка на вектор полученной скорости

Implements VM2D::Boundary.

Definition at line 369 of file Boundary2DConstLayerAver.cpp.

370{
371 vel.toZero();
372
373 const Point2D& posI = ptr.r();
374
375 Point2D dj = afl.getR(panel + 1) - afl.getR(panel);
376 Point2D tauj = dj.unit();
377
378 Point2D s = posI - afl.getR(panel);
379 Point2D p = posI - afl.getR(panel + 1);
380 double a = VMlib::Alpha(p, s);
381
382 double lambda;
383 if ((s.length2() > 1e-16) && (p.length2() > 1e-16))
384 lambda = VMlib::Lambda(p, s);
385 else
386 lambda = 0.0;
387
388 Point2D skos = -a * tauj.kcross() + lambda * tauj;
389
390 vel += sheets.freeVortexSheet(panel, 0) * skos.kcross();
391 vel += sheets.attachedVortexSheet(panel, 0) * skos.kcross();
392
393}// GetInfluenceFromVortexSheetAtRectPanelToVortex(...)
Here is the call graph for this function:

◆ GetInfluenceFromVorticesToRectPanel()

void BoundaryConstLayerAver::GetInfluenceFromVorticesToRectPanel ( size_t  panel,
const Vortex2D ptr,
ptrdiff_t  count,
std::vector< double > &  wakeRhs 
) const
overridevirtual

Вычисление влияния части подряд идущих вихрей из вихревого следа на прямолинейную панель для правой части

Вычисляет влияния части подряд идущих вихрей из вихревого следа на прямолинейную панель для правой части

Parameters
[in]panelномер панели профиля, на которую считается влияние
[in]ptrуказатель на начало диапазона вихрей
[in]countдлина диапазона вихрей
[out]wakeRhsссылка на вектор полученных влияние для правой части СЛАУ

Implements VM2D::Boundary.

Definition at line 294 of file Boundary2DConstLayerAver.cpp.

295{
296 double& velI = wakeRhs[0];
297
298 const Point2D& posI0 = afl.getR(panel);
299 const Point2D& posI1 = afl.getR(panel + 1);
300
301
302 for (size_t it = 0; it != count; ++it)
303 {
304 const Vortex2D& vt = ptr[it];
305
306 const Point2D& posJ = vt.r();
307 const double& gamJ = vt.g();
308
309 Point2D s = posJ - posI0;
310 Point2D p = posJ - posI1;
311
312 double alpha = VMlib::Alpha(p, s);
313
314 velI -= gamJ * alpha;
315 }
316}// GetInfluenceFromVorticesToRectPanel(...)
Here is the call graph for this function:

◆ GetUnknownsSize()

size_t Boundary::GetUnknownsSize ( ) const
inherited

Возврат размерности вектора решения

(без учета регуляризирующей переменной)

Returns
размерность вектора решения

Definition at line 73 of file Boundary2D.cpp.

74{
76}
size_t sheetDim
Размерность параметров каждого из слоев на каждой из панелей
Definition Boundary2D.h:93
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SolutionToFreeVortexSheetAndVirtualVortex()

void BoundaryConstLayerAver::SolutionToFreeVortexSheetAndVirtualVortex ( const Eigen::VectorXd &  sol)
overridevirtual

Пересчет решения на интенсивность вихревого слоя и на рождаемые вихри на конкретном профиле

1) Приводит решение к интенсивности вихревого слоя и записывает его в sheets.freeVortexSheet:

  • если неизвестное — интенсивность вихря, то он "размазывается" по панели;
  • если неизвестное — интенсивность слоя, то она передается непосредственно.

2) Приводит интенсивность вихревого слоя к рождаемым вихрям, а также вычисляет их положения

Parameters
[in]solвектор решения СЛАУ

Implements VM2D::Boundary.

Definition at line 56 of file Boundary2DConstLayerAver.cpp.

57{
58 Vortex2D virtVort;
59 Point2D midNorm;
60
61 size_t np = afl.getNumberOfPanels();
62
64
66
67 //Очистка и резервирование памяти
69 virtualWake.vecHalfGamma.reserve(np * nVortPerPan);
70
71 //Очистка и резервирование памяти
72 virtualWake.aflPan.clear();
73 virtualWake.aflPan.reserve(np * nVortPerPan);
74
75 //Резервирование памяти
76 virtualWake.vtx.clear();
77 virtualWake.vtx.reserve(np * nVortPerPan);
78
79 //Очистка и резервирование памяти
80 vortexBeginEnd.clear();
81 vortexBeginEnd.reserve(np);
82
84
85 std::pair<int, int> pair;
86
87 for (size_t i = 0; i < np; ++i)
88 {
89 midNorm = afl.nrm[i] * delta;
90
91 size_t NEWnVortPerPan = (size_t)std::max((int)std::ceil(fabs(sol(i) * afl.len[i]) / maxG), nVortPerPan);
92
93 pair.first = (int)virtualWake.vtx.size();
94
95
96 Point2D dr = 1.0 / NEWnVortPerPan * (afl.getR(i + 1) - afl.getR(i));
97
98 for (size_t j = 0; j < NEWnVortPerPan; ++j)
99 {
100 virtVort.r() = afl.getR(i) + dr * (j * 1.0 + 0.5) + midNorm;
101 virtVort.g() = sol(i) * afl.len[i] / NEWnVortPerPan;
102 virtualWake.vtx.push_back(virtVort);
103
104 virtualWake.vecHalfGamma.push_back(0.5 * sol(i) * afl.tau[i]);
105 virtualWake.aflPan.push_back({ numberInPassport, i });
106 }
107
108 pair.second = (int)virtualWake.vtx.size();
109 vortexBeginEnd.push_back(pair);
110 }
111
112
113 for (size_t j = 0; j < np; ++j)
114 sheets.freeVortexSheet(j, 0) = sol(j);
115
116}//SolutionToFreeVortexSheetAndVirtualVortex(...)
std::vector< std::pair< int, int > > vortexBeginEnd
Номера первого и последнего вихрей, рождаемых на каждой панели профиля (формируется после решения СЛА...
Definition Boundary2D.h:83
VirtualWake virtualWake
Виртуальный вихревой след конкретного профиля
Definition Boundary2D.h:86
const size_t numberInPassport
Номер профиля в паспорте
Definition Boundary2D.h:71
WakeDiscretizationProperties wakeDiscretizationProperties
Структура с параметрами дискретизации вихревого следа
Definition Passport2D.h:292
std::vector< Point2D > vecHalfGamma
Скорость вихрей виртуального следа конкретного профиля (равна Gamma/2) используется для расчета давле...
std::vector< std::pair< size_t, size_t > > aflPan
Пара чисел: номер профиля и номер панели, на которой рожден виртуальный вихрь
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:251
int minVortexPerPanel
Минимальное число вихрей, рождаемых на каждой панели профииля
Definition Passport2D.h:141
double delta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
Definition Passport2D.h:138
double maxGamma
Максимально допустимая циркуляция вихря
Definition Passport2D.h:144
Here is the call graph for this function:

Member Data Documentation

◆ afl

const Airfoil& VM2D::Boundary::afl
inherited

Константная ссылка на профиль
инициализируется автоматом в конструкторе

Definition at line 77 of file Boundary2D.h.

◆ minVortexPerPanel

int VM2D::Boundary::minVortexPerPanel
inherited

Минимальное число вихрей, рождаемых на панели профиля и формирующих виртуальный вихревой след

Definition at line 80 of file Boundary2D.h.

◆ numberInPassport

const size_t VM2D::Boundary::numberInPassport
protectedinherited

Номер профиля в паспорте

Definition at line 71 of file Boundary2D.h.

◆ oldSheets

Sheet VM2D::Boundary::oldSheets
inherited

Слои на профиле с предыдущего шага

Definition at line 99 of file Boundary2D.h.

◆ sheetDim

size_t VM2D::Boundary::sheetDim
inherited

Размерность параметров каждого из слоев на каждой из панелей

Указывает, сколькими числами задается интенсивность каждого из слоев на каждой панели:

  • 1 — одно число — задается только среднее значение;
  • 2 — два числа — задается среднее значение и "наклон".

Definition at line 93 of file Boundary2D.h.

◆ sheets

Sheet VM2D::Boundary::sheets
inherited

Слои на профиле

Definition at line 96 of file Boundary2D.h.

◆ virtualWake

VirtualWake VM2D::Boundary::virtualWake
inherited

Виртуальный вихревой след конкретного профиля

Definition at line 86 of file Boundary2D.h.

◆ vortexBeginEnd

std::vector<std::pair<int, int> > VM2D::Boundary::vortexBeginEnd
inherited

Номера первого и последнего вихрей, рождаемых на каждой панели профиля (формируется после решения СЛАУ)

Definition at line 83 of file Boundary2D.h.

◆ W

const World2D& VM2D::Boundary::W
protectedinherited

Константная ссылка на решаемую задачу

Definition at line 68 of file Boundary2D.h.


The documentation for this class was generated from the following files: