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

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

#include <Boundary2DVortexCollocN.h>

Inheritance diagram for VM2D::BoundaryVortexCollocN:
Collaboration diagram for VM2D::BoundaryVortexCollocN:

Public Member Functions

 BoundaryVortexCollocN (const World2D &W_, size_t numberInPassport_)
 Конструктор
 
virtual ~BoundaryVortexCollocN ()
 Деструктор
 
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

std::vector< Point2D > c
 Контрольные точки - центры панелей
 
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

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

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

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

Definition at line 67 of file Boundary2DVortexCollocN.h.

Constructor & Destructor Documentation

◆ BoundaryVortexCollocN()

BoundaryVortexCollocN::BoundaryVortexCollocN ( const World2D W_,
size_t  numberInPassport_ 
)

Конструктор

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

Definition at line 56 of file Boundary2DVortexCollocN.cpp.

56 :
57 Boundary(W_, numberInPassport_, 1)
58 {
59 c.reserve(afl.getNumberOfPanels());
60 for (size_t i=0; i < afl.getNumberOfPanels(); ++i)
61 c.push_back(0.5*(afl.getR(i)+afl.getR(i+1)));
62 };
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
Definition Airfoil2D.h:113
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Definition Airfoil2D.h:163
Абстрактный класс, определяющий способ удовлетворения граничного условия на обтекаемом профиле
Definition Boundary2D.h:65
const Airfoil & afl
Definition Boundary2D.h:77
std::vector< Point2D > c
Контрольные точки - центры панелей
Here is the call graph for this function:

◆ ~BoundaryVortexCollocN()

virtual VM2D::BoundaryVortexCollocN::~BoundaryVortexCollocN ( )
inlinevirtual

Деструктор

Definition at line 79 of file Boundary2DVortexCollocN.h.

79{};

Member Function Documentation

◆ CalcConvVelocityToSetOfPointsFromSheets()

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

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

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

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

Implements VM2D::Boundary.

Definition at line 178 of file Boundary2DVortexCollocN.cpp.

179{
180 std::vector<Point2D> selfVelo(pointsDb.vtx.size());
181
182 double cft = IDPI;
183
184#pragma warning (push)
185#pragma warning (disable: 4101)
186 //Локальные переменные для цикла
187 Point2D velI;
188 Point2D tempVel;
189 //double dst2eps, dst2;
190#pragma warning (pop)
191
192#pragma omp parallel for default(none) shared(selfVelo, pointsDb, cft, std::cout) private(velI, tempVel)
193 for (int i = 0; i < pointsDb.vtx.size(); ++i)
194 {
195 velI.toZero();
196
197 const Point2D& posI = pointsDb.vtx[i].r();
198
201 for (size_t j = 0; j < sheets.getSheetSize(); ++j)
202 {
203 Point2D dj = afl.getR(j + 1) - afl.getR(j);
204 Point2D tauj = dj.unit();
205
206 Point2D s = posI - afl.getR(j);
207 Point2D p = posI - afl.getR(j + 1);
208
209 double a = VMlib::Alpha(p, s);
210
211 double lambda;
212 if ( (s.length2() > 1e-16) && (p.length2() > 1e-16) )
213 lambda = VMlib::Lambda(p, s);
214 else
215 lambda = 0.0;
216
217 Point2D skos = -a * tauj.kcross() + lambda * tauj;
218
219 velI += sheets.freeVortexSheet(j, 0) * skos.kcross();
220 velI += sheets.attachedVortexSheet(j, 0) * skos.kcross();
221 velI += sheets.attachedSourceSheet(j, 0) * skos;
222 }//for j
223
224 velI *= cft;
225 selfVelo[i] = velI;
226
227 }//for i
228
229 for (size_t i = 0; i < velo.size(); ++i)
230 velo[i] += selfVelo[i];
231}//CalcConvVelocityToSetOfPointsFromSheets(...)
const double IDPI
Число .
Definition defs.h:79
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 BoundaryVortexCollocN::ComputeAttachedSheetsIntensity ( )
overridevirtual

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

Implements VM2D::Boundary.

Definition at line 284 of file Boundary2DVortexCollocN.cpp.

285{
286
287 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
288 {
291 }
292
293 for (size_t i = 0; i < sheets.getSheetSize(); ++i)
294 {
295 sheets.attachedVortexSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.tau[i];
296 sheets.attachedSourceSheet(i, 0) = 0.5 * (afl.getV(i) + afl.getV(i + 1)) & afl.nrm[i];
297 }
298}//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 BoundaryVortexCollocN::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 171 of file Boundary2DVortexCollocN.cpp.

172{
173 //afl.calcIQ(1, otherBoundary.afl, IQ);
174}//FillIQFromOther(...)

◆ FillIQSelf()

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

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

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

Implements VM2D::Boundary.

Definition at line 153 of file Boundary2DVortexCollocN.cpp.

154{
155 //afl.calcIQ(1, afl, IQ);
156}//FillIQSelf(...)

◆ FillMatrixFromOther()

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

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

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

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

Implements VM2D::Boundary.

Definition at line 159 of file Boundary2DVortexCollocN.cpp.

160{
161#pragma omp parallel for shared(matr)
162 for (int i = 0; i < afl.getNumberOfPanels(); ++i)
163 for (size_t j = 0; j < otherBoundary.afl.getNumberOfPanels(); ++j)
164 {
165
166 matr(i, j) = -(afl.tau[i] & (c[i]-otherBoundary.afl.getR(j)) ) * IDPI / (c[i]-otherBoundary.afl.getR(j)).length2();
167 }
168}//FillMatrixFromOther(...)
Here is the call graph for this function:

◆ FillMatrixSelf()

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

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

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

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

Implements VM2D::Boundary.

Definition at line 134 of file Boundary2DVortexCollocN.cpp.

135{
136 size_t np = afl.getNumberOfPanels();
137
138 for (size_t i = 0; i < np; ++i)
139 {
140 lactCol(i) = 1.0;
141 lastLine(i) = 1.0;
142 }
143
144
145#pragma omp parallel for shared(matr)
146 for (int i = 0; i < np; ++i)
147 for (size_t j = 0; j < np; ++j)
148 {
149 matr(i, j) = -(afl.tau[i] & (c[i]-afl.getR(j)) ) * IDPI / (c[i]-afl.getR(j)).length2();
150 }
151}//FillMatrixSelf(...)
Here is the call graph for this function:

◆ GetInfluenceFromSourceSheetAtRectPanelToVortex()

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

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

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

Implements VM2D::Boundary.

Definition at line 346 of file Boundary2DVortexCollocN.cpp.

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

◆ GetInfluenceFromSourcesToRectPanel()

void BoundaryVortexCollocN::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 324 of file Boundary2DVortexCollocN.cpp.

325{
326 double& velI = wakeRhs[0];
327
328 const Point2D& posI = 0.5 * (afl.getR(panel) + afl.getR(panel + 1));
329
330 for (size_t it = 0; it != count; ++it)
331 {
332 const Vortex2D& vt = ptr[it];
333
334 const Point2D& posJ = vt.r();
335 const double& gamJ = vt.g();
336 const double sigma2 = sqr(vt.sigma());
337
338 Point2D d = posI - posJ;
339
340 velI += (gamJ * afl.len[panel] / std::max(d.length2(), sigma2)) * (afl.nrm[panel] & d);
341 }
342}// GetInfluenceFromSourcesToRectPanel(...)
std::vector< double > len
Длины панелей профиля
Definition Airfoil2D.h:94
Класс, опеделяющий двумерный вихревой элемент
Definition Vortex2D.h:59
T sqr(T x)
Возведение числа в квадрат
Definition defs.h:455
void vt(const Vector3d &x, const Matrix3d *T, Matrix3d &M)
Here is the call graph for this function:

◆ GetInfluenceFromVInfToRectPanel()

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

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

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

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

Implements VM2D::Boundary.

Definition at line 398 of file Boundary2DVortexCollocN.cpp.

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

◆ GetInfluenceFromVortexSheetAtRectPanelToVortex()

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

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

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

Implements VM2D::Boundary.

Definition at line 370 of file Boundary2DVortexCollocN.cpp.

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

◆ GetInfluenceFromVorticesToRectPanel()

void BoundaryVortexCollocN::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 302 of file Boundary2DVortexCollocN.cpp.

303{
304 double& velI = wakeRhs[0];
305
306 const Point2D& posI = c[panel];
307
308 for (size_t it = 0; it != count; ++it)
309 {
310 const Vortex2D& vt = ptr[it];
311
312 const Point2D& posJ = vt.r();
313 const double& gamJ = vt.g();
314 const double sigma2 = sqr(vt.sigma());
315
316 Point2D d = posI - posJ;
317 velI -= (gamJ * afl.len[panel] / std::max(d.length2(), sigma2)) * (afl.tau[panel] & d);
318 }
319}// 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 BoundaryVortexCollocN::SolutionToFreeVortexSheetAndVirtualVortex ( const Eigen::VectorXd &  sol)
overridevirtual

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

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

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

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

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

Implements VM2D::Boundary.

Definition at line 66 of file Boundary2DVortexCollocN.cpp.

67{
68 Vortex2D virtVort;
69 Point2D midNorm;
70
71 size_t np = afl.getNumberOfPanels();
72
74
76
77 //Очистка и резервирование памяти
79 virtualWake.vecHalfGamma.reserve(np * nVortPerPan);
80
81 //Очистка и резервирование памяти
82 virtualWake.aflPan.clear();
83 virtualWake.aflPan.reserve(np * nVortPerPan);
84
85 //Резервирование памяти
86 virtualWake.vtx.clear();
87 virtualWake.vtx.reserve(np * nVortPerPan);
88
89 //Очистка и резервирование памяти
90 vortexBeginEnd.clear();
91 vortexBeginEnd.reserve(np);
92
94
95 std::pair<int, int> pair;
96
97 for (size_t i = 0; i < np; ++i)
98 {
99 midNorm = afl.nrm[i] * delta;
100 size_t iNext = (i < np-1) ? i + 1 : 0;
101 size_t iPrev = (i > 0) ? i - 1 : np - 1;
102
103 double Gamma = (sol(i) / (afl.len[iPrev] + afl.len[i]) + sol(iNext) / (afl.len[iNext] + afl.len[i])) * afl.len[i];
104
105 size_t NEWnVortPerPan = std::max(static_cast<int>(std::ceil(fabs(Gamma) / W.getPassport().wakeDiscretizationProperties.maxGamma)), nVortPerPan);
106
107 pair.first = (int)virtualWake.vtx.size();
108
109
110 Point2D dr = 1.0 / NEWnVortPerPan * (afl.getR(i + 1) - afl.getR(i));
111 virtVort.g() = Gamma / NEWnVortPerPan;
112
113 for (size_t j = 0; j < NEWnVortPerPan; ++j)
114 {
115 virtVort.r() = afl.getR(i) + (0.5 + j) * dr + delta * afl.nrm[i];
116
117 virtualWake.vtx.push_back(virtVort);
118
119 virtualWake.vecHalfGamma.push_back(0.5 * Gamma / afl.len[i] * afl.tau[i]);
120 virtualWake.aflPan.push_back({ numberInPassport, i });
121 }
122
123 pair.second = (int)virtualWake.vtx.size();
124 vortexBeginEnd.push_back(pair);
125
126 sheets.freeVortexSheet(i, 0) = Gamma / afl.len[i];
127 }
128
129
130}//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.

◆ c

std::vector<Point2D> VM2D::BoundaryVortexCollocN::c

Контрольные точки - центры панелей

Definition at line 82 of file Boundary2DVortexCollocN.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: