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< Point2Dc
 Контрольные точки - центры панелей
 
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 55 of file Boundary2DVortexCollocN.cpp.

55 :
56 Boundary(W_, numberInPassport_, 1)
57 {
58 c.reserve(afl.getNumberOfPanels());
59 for (size_t i=0; i < afl.getNumberOfPanels(); ++i)
60 c.push_back(0.5*(afl.getR(i)+afl.getR(i+1)));
61 };
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 177 of file Boundary2DVortexCollocN.cpp.

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

171{
172 //afl.calcIQ(1, otherBoundary.afl, IQ);
173}//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 152 of file Boundary2DVortexCollocN.cpp.

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

◆ FillMatrixFromOther()

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

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

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

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

Implements VM2D::Boundary.

Definition at line 158 of file Boundary2DVortexCollocN.cpp.

159{
160#pragma omp parallel for shared(matr)
161 for (int i = 0; i < afl.getNumberOfPanels(); ++i)
162 for (size_t j = 0; j < otherBoundary.afl.getNumberOfPanels(); ++j)
163 {
164
165 matr(i, j) = -(afl.tau[i] & (c[i]-otherBoundary.afl.getR(j)) ) * IDPI / (c[i]-otherBoundary.afl.getR(j)).length2();
166 }
167}//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 133 of file Boundary2DVortexCollocN.cpp.

134{
135 size_t np = afl.getNumberOfPanels();
136
137 for (size_t i = 0; i < np; ++i)
138 {
139 lactCol(i) = 1.0;
140 lastLine(i) = 1.0;
141 }
142
143
144#pragma omp parallel for shared(matr)
145 for (int i = 0; i < np; ++i)
146 for (size_t j = 0; j < np; ++j)
147 {
148 matr(i, j) = -(afl.tau[i] & (c[i]-afl.getR(j)) ) * IDPI / (c[i]-afl.getR(j)).length2();
149 }
150}//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 325 of file Boundary2DVortexCollocN.cpp.

326{
327 double& velI = wakeRhs[0];
328
329 const Point2D& posI = 0.5 * (afl.getR(panel) + afl.getR(panel + 1));
330
331 for (size_t it = 0; it != count; ++it)
332 {
333 const Vortex2D& vt = ptr[it];
334
335 const Point2D& posJ = vt.r();
336 const double& gamJ = vt.g();
337
338 Point2D d = posI - posJ;
339
340 velI += (gamJ * afl.len[panel] / std::max(d.length2(), W.getPassport().wakeDiscretizationProperties.eps2)) * (afl.nrm[panel] & d);
341 }
342}// GetInfluenceFromSourcesToRectPanel(...)
std::vector< double > len
Длины панелей профиля
Definition Airfoil2D.h:94
const World2D & W
Константная ссылка на решаемую задачу
Definition Boundary2D.h:68
WakeDiscretizationProperties wakeDiscretizationProperties
Структура с параметрами дискретизации вихревого следа
Definition Passport2D.h:292
const Passport & getPassport() const
Возврат константной ссылки на паспорт
Definition World2D.h:251
Класс, опеделяющий двумерный вихревой элемент
Definition Vortex2D.h:59
HD Point2D & r()
Функция для доступа к радиус-вектору вихря
Definition Vortex2D.h:87
HD double & g()
Функция для доступа к циркуляции вихря
Definition Vortex2D.h:95
double eps2
Квадрат радиуса вихря
Definition Passport2D.h:129
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(...)
Point2D getV0() const
Возврат текущей скорости набегающего потока
Definition World2D.h:142
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
315 Point2D d = posI - posJ;
316 //std::cout << "d = " << d << std::endl;
317
318 velI -= (gamJ * afl.len[panel] / std::max(d.length2(), W.getPassport().wakeDiscretizationProperties.eps2)) * (afl.tau[panel] & d);
319 }
320}// 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 BoundaryVortexCollocN::SolutionToFreeVortexSheetAndVirtualVortex ( const Eigen::VectorXd &  sol)
overridevirtual

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

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

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

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

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

Implements VM2D::Boundary.

Definition at line 65 of file Boundary2DVortexCollocN.cpp.

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