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 158 of file Boundary2DConstLayerAver.cpp.

159{
160 std::vector<Point2D> selfVelo(pointsDb.vtx.size());
161
162 double cft = IDPI;
163
164#pragma warning (push)
165#pragma warning (disable: 4101)
166 //Локальные переменные для цикла
167 Point2D velI;
168 Point2D tempVel;
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 double IDPI
Число .
Definition defs.h:79
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:511
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:528
auto unit(P newlen=1) const -> numvector< typename std::remove_const< decltype(this->data[0] *newlen)>::type, n >
Вычисление орта вектора или вектора заданной длины, коллинеарного данному
Definition numvector.h:402
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 275 of file Boundary2DConstLayerAver.cpp.

276{
277
278 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
279 {
282 }
283
284 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
285 {
286 sheets.attachedVortexSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.tau[i];
287 sheets.attachedSourceSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.nrm[i];
288 }
289}//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 151 of file Boundary2DConstLayerAver.cpp.

152{
153 afl.calcIQ(1, otherBoundary.afl, IQ);
154}//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 137 of file Boundary2DConstLayerAver.cpp.

138{
139 afl.calcIQ(1, afl, IQ);
140}//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 143 of file Boundary2DConstLayerAver.cpp.

144{
145 for (size_t i = 0; i < afl.getNumberOfPanels(); ++i)
146 for (size_t j = 0; j < otherBoundary.afl.getNumberOfPanels(); ++j)
147 matr(i, j) = afl.getA(1, i, otherBoundary.afl, j)[0];
148}//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 121 of file Boundary2DConstLayerAver.cpp.

122{
123 size_t np = afl.getNumberOfPanels();
124
125 for (size_t i = 0; i < np; ++i)
126 {
127 lactCol(i) = 1.0;
128 lastLine(i) = afl.len[i];
129 }
130
131 for (size_t i = 0; i < np; ++i)
132 for (size_t j = 0; j < np; ++j)
133 matr(i, j) = afl.getA(1, i, afl, j)[0];
134
135}//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 344 of file Boundary2DConstLayerAver.cpp.

345{
346 vel.toZero();
347
348 const Point2D& posI = ptr.r();
349
350 Point2D dj = afl.getR(panel + 1) - afl.getR(panel);
351 Point2D tauj = dj.unit();
352
353 Point2D s = posI - afl.getR(panel);
354 Point2D p = posI - afl.getR(panel + 1);
355
356 double a = VMlib::Alpha(p, s);
357
358 double lambda;
359 if ((s.length2() > 1e-16) && (p.length2() > 1e-16))
360 lambda = VMlib::Lambda(p, s);
361 else
362 lambda = 0.0;
363
364 vel += sheets.attachedSourceSheet(panel, 0) * (-a * tauj.kcross() + lambda * tauj);
365}// 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 320 of file Boundary2DConstLayerAver.cpp.

321{
322 double& velI = wakeRhs[0];
323
324 const Point2D& posI0 = afl.getR(panel);
325 const Point2D& posI1 = afl.getR(panel + 1);
326
327 for (size_t it = 0; it != count; ++it)
328 {
329 const Vortex2D& vt = ptr[it];
330 const Point2D& posJ = vt.r();
331 const double& gamJ = vt.g();
332
333 Point2D s = posJ - posI0;
334 Point2D p = posJ - posI1;
335
336 double lambda = VMlib::Lambda(p, s);
337
338 velI -= gamJ * lambda;
339 }
340}// GetInfluenceFromSourcesToRectPanel(...)
Класс, опеделяющий двумерный вихревой элемент
Definition Vortex2D.h:59
void vt(const Vector3d &x, const Matrix3d *T, Matrix3d &M)
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 396 of file Boundary2DConstLayerAver.cpp.

397{
398 size_t np = afl.getNumberOfPanels();
399 vInfRhs.resize(np);
400
401#pragma omp parallel for default(none) shared(vInfRhs, np)
402 for (int i = 0; i < np; ++i)
403 vInfRhs[i] = afl.tau[i] & W.getV0();
404
405}
const World2D & W
Константная ссылка на решаемую задачу
Definition Boundary2D.h:68
Point2D getV0() const
Возврат текущей скорости набегающего потока
Definition World2D.h:148
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 368 of file Boundary2DConstLayerAver.cpp.

369{
370 vel.toZero();
371
372 const Point2D& posI = ptr.r();
373
374 Point2D dj = afl.getR(panel + 1) - afl.getR(panel);
375 Point2D tauj = dj.unit();
376
377 Point2D s = posI - afl.getR(panel);
378 Point2D p = posI - afl.getR(panel + 1);
379 double a = VMlib::Alpha(p, s);
380
381 double lambda;
382 if ((s.length2() > 1e-16) && (p.length2() > 1e-16))
383 lambda = VMlib::Lambda(p, s);
384 else
385 lambda = 0.0;
386
387 Point2D skos = -a * tauj.kcross() + lambda * tauj;
388
389 vel += sheets.freeVortexSheet(panel, 0) * skos.kcross();
390 vel += sheets.attachedVortexSheet(panel, 0) * skos.kcross();
391
392}// 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 293 of file Boundary2DConstLayerAver.cpp.

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

◆ GetUnknownsSize()

size_t Boundary::GetUnknownsSize ( ) const
inherited

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

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

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

Definition at line 74 of file Boundary2D.cpp.

75{
77}
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 57 of file Boundary2DConstLayerAver.cpp.

58{
59 Vortex2D virtVort;
60 Point2D midNorm;
61
62 size_t np = afl.getNumberOfPanels();
63
65
67
68 //Очистка и резервирование памяти
70 virtualWake.vecHalfGamma.reserve(np * nVortPerPan);
71
72 //Очистка и резервирование памяти
73 virtualWake.aflPan.clear();
74 virtualWake.aflPan.reserve(np * nVortPerPan);
75
76 //Резервирование памяти
77 virtualWake.vtx.clear();
78 virtualWake.vtx.reserve(np * nVortPerPan);
79
80 //Очистка и резервирование памяти
81 vortexBeginEnd.clear();
82 vortexBeginEnd.reserve(np);
83
85
86 std::pair<int, int> pair;
87
88 for (size_t i = 0; i < np; ++i)
89 {
90 midNorm = afl.nrm[i] * delta;
91
92 size_t NEWnVortPerPan = (size_t)std::max((int)std::ceil(fabs(sol(i) * afl.len[i]) / maxG), nVortPerPan);
93
94 pair.first = (int)virtualWake.vtx.size();
95
96
97 Point2D dr = 1.0 / NEWnVortPerPan * (afl.getR(i + 1) - afl.getR(i));
98
99 for (size_t j = 0; j < NEWnVortPerPan; ++j)
100 {
101 virtVort.r() = afl.getR(i) + dr * (j * 1.0 + 0.5) + midNorm;
102 virtVort.g() = sol(i) * afl.len[i] / NEWnVortPerPan;
103 virtualWake.vtx.push_back(virtVort);
104
105 virtualWake.vecHalfGamma.push_back(0.5 * sol(i) * afl.tau[i]);
106 virtualWake.aflPan.push_back({ numberInPassport, i });
107 }
108
109 pair.second = (int)virtualWake.vtx.size();
110 vortexBeginEnd.push_back(pair);
111 }
112
113
114 for (size_t j = 0; j < np; ++j)
115 sheets.freeVortexSheet(j, 0) = sol(j);
116
117}//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:304
std::vector< Point2D > vecHalfGamma
Скорость вихрей виртуального следа конкретного профиля (равна Gamma/2) используется для расчета давле...
std::vector< std::pair< size_t, size_t > > aflPan
Пара чисел: номер профиля и номер панели, на которой рожден виртуальный вихрь
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:263
HD Point2D & r()
Функция для доступа к радиус-вектору вихря
Definition Vortex2D.h:92
HD double & g()
Функция для доступа к циркуляции вихря
Definition Vortex2D.h:100
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: