VM2D
1.12
Vortex methods for 2D flows simulation
|
Абстрактный класс, определяющий обтекаемый профиль More...
#include <Airfoil2D.h>
Public Member Functions | |
const Point2D & | getR (size_t q) const |
Возврат константной ссылки на вершину профиля More... | |
const Point2D & | getV (size_t q) const |
Возврат константной ссылки на скорость вершины профиля More... | |
void | setV (const Point2D &vel) |
Установка постоянной скорости всех вершин профиля More... | |
void | setV (const std::vector< Point2D > &vel) |
Установка скоростей всех вершин профиля More... | |
size_t | getNumberOfPanels () const |
Возврат количества панелей на профиле More... | |
IFCUDA (mutable double *devRPtr) | |
Указатель на девайсе, где хранятся вершины профиля More... | |
IFCUDA (mutable double *devRhsPtr) | |
Указатель на девайсе, где хранится правая часть (константная) матрицы More... | |
IFCUDA (mutable double *devRhsLinPtr) | |
Указатель на девайсе, где хранится правая часть (линейная) матрицы More... | |
IFCUDA (mutable std::vector< double > tmpRhs) | |
Указатель на хосте, где хранится временная часть матрицы, полученная с девайса More... | |
IFCUDA (mutable double *devFreeVortexSheetPtr) | |
Указатель на девайсе, где хранятся интенсивности свободного вихревого слоя на панелях More... | |
IFCUDA (mutable double *devAttachedVortexSheetPtr) | |
Указатель на девайсе, где хранятся интенсивности присоединенного вихревого слоя на панелях More... | |
IFCUDA (mutable double *devAttachedSourceSheetPtr) | |
Указатель на девайсе, где хранятся интенсивности присоединенного слоя источников на панелях More... | |
IFCUDA (mutable double *devMeanEpsOverPanelPtr) | |
Указатель на девайсе, где хранятся средние eps на панелях More... | |
IFCUDA (mutable double *devViscousStressesPtr) | |
Указатель на девайсе, где хранится вектор (по панелям) для силы вязкого трения More... | |
IFCUDA (mutable std::vector< double > tmpViscousStresses) | |
Указатель на хосте, где хранится временная часть вектора (по панелям) для силы вязкого трения More... | |
Airfoil (const World2D &W_, const size_t numberInPassport_) | |
virtual | ~Airfoil () |
Деструктор More... | |
bool | isAfter (size_t i, size_t j) const |
Проверка, идет ли вершина i следом за вершиной j. More... | |
virtual void | Rotate (double alpha)=0 |
Поворот профиля More... | |
virtual void | Scale (const Point2D &)=0 |
Масштабирование профиля More... | |
virtual void | Move (const Point2D &dr)=0 |
Перемещение профиля More... | |
virtual void | GetGabarits (double gap=0.02)=0 |
Вычисляет габаритный прямоугольник профиля More... | |
bool | isInsideGabarits (const Point2D &r) const |
Определяет, находится ли точка с радиус-вектором \( \vec r \) внутри габаритного прямоугольника профиля More... | |
bool | isOutsideGabarits (const Point2D &r) const |
Определяет, находится ли точка с радиус-вектором \( \vec r \) вне габаритного прямоугольника профиля More... | |
virtual bool | IsPointInAirfoil (const Point2D &point) const =0 |
Определяет, находится ли точка с радиус-вектором \( \vec r \) внутри профиля More... | |
virtual void | ReadFromFile (const std::string &dir)=0 |
Считывание профиля из файла More... | |
virtual std::vector< double > | getA (size_t p, size_t i, const Airfoil &airfoil, size_t j) const =0 |
Вычисление коэффициентов матрицы A для расчета влияния панели на панель More... | |
virtual void | calcIQ (size_t p, const Airfoil &otherAirfoil, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &matrPair) const =0 |
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2. More... | |
void | calcMeanEpsOverPanel () |
Вычисление средних значений eps на панелях More... | |
virtual void | GetDiffVelocityI0I3ToSetOfPointsAndViscousStresses (const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)=0 |
Вычисление числителей и знаменателей диффузионных скоростей в заданном наборе точек, обусловленных геометрией профиля, и вычисление вязкого трения More... | |
virtual void | GetDiffVelocityI0I3ToWakeAndViscousStresses (const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)=0 |
virtual void | GetInfluenceFromVorticesToPanel (size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const =0 |
Вычисление влияния части подряд идущих вихрей из вихревого следа на панель для правой части More... | |
virtual void | GetInfluenceFromSourcesToPanel (size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const =0 |
Вычисление влияния части подряд идущих источников из области течения на панель для правой части More... | |
virtual void | GetInfluenceFromSourceSheetToVortex (size_t panel, const Vortex2D &vtx, Point2D &vel) const =0 |
Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения More... | |
virtual void | GetInfluenceFromVortexSheetToVortex (size_t panel, const Vortex2D &vtx, Point2D &vel) const =0 |
Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вихрь в области течения More... | |
virtual void | GetInfluenceFromVInfToPanel (std::vector< double > &vInfRhs) const =0 |
Вычисление влияния набегающего потока на панель для правой части More... | |
Public Attributes | |
const World2D & | W |
Константная ссылка на решаемую задачу More... | |
const size_t | numberInPassport |
Номер профиля в паспорте More... | |
Point2D | rcm |
Положение центра масс профиля More... | |
double | phiAfl |
Поворот профиля More... | |
double | area |
Площадь профиля More... | |
double | m |
Масса профиля More... | |
double | J |
Полярный момент инерции профиля относительно центра масс More... | |
std::vector< double > | meanEpsOverPanel |
Средние значения Eps на панелях More... | |
bool | inverse |
Признак разворота нормалей (для расчета внутренних течений) More... | |
std::vector< Point2D > | nrm |
Нормали к панелям профиля More... | |
std::vector< Point2D > | tau |
Касательные к панелям профиля More... | |
std::vector< double > | len |
Длины панелей профиля More... | |
std::vector< double > | viscousStress |
Касательные напряжения на панелях профиля More... | |
Point2D | lowLeft |
Левый нижний угол габаритного прямоугольника профиля More... | |
Point2D | upRight |
Правый верхний угол габаритного прямоугольника профиля More... | |
std::vector< double > | gammaThrough |
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге More... | |
Protected Attributes | |
std::vector< Point2D > | r_ |
Координаты начал панелей More... | |
std::vector< Point2D > | v_ |
Скорости начал панелей More... | |
Абстрактный класс, определяющий обтекаемый профиль
Definition at line 60 of file Airfoil2D.h.
Airfoil::Airfoil | ( | const World2D & | W_, |
const size_t | numberInPassport_ | ||
) |
Конструктор
[in] | W_ | константная ссылка на решаемую задачу |
[in] | numberInPassport_ | номер профиля в паспорте задачи |
Definition at line 55 of file Airfoil2D.cpp.
|
inlinevirtual |
|
pure virtual |
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2.
[in] | p | размерность матрицы-результата |
[in] | otherAirfoil | константная ссылка на профиль, от которого рассчитывается влияние |
[out] | matrPair | ссылка на пару матриц, выражающих взаимные влияния (касательные и нормальные) панелей профиля return соответствующий блок матрицы СЛАУ, вытянутый в линию |
Implemented in VM2D::AirfoilRect.
void Airfoil::calcMeanEpsOverPanel | ( | ) |
Вычисление средних значений eps на панелях
Definition at line 82 of file Airfoil2D.cpp.
|
pure virtual |
Вычисление коэффициентов матрицы A для расчета влияния панели на панель
[in] | p | размерность матрицы - результата |
[in] | i | номер панели, на которую оказывается влияние |
[in] | airfoil | константная ссылка на профиль, от которого рассчитывается влияние |
[in] | j | номер влияющей панели return соответствующий блок матрицы СЛАУ, вытянутый в линию |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление числителей и знаменателей диффузионных скоростей в заданном наборе точек, обусловленных геометрией профиля, и вычисление вязкого трения
Вычисляет диффузионные скорости в наборе точек, которые обусловленных геометрией профиля, и вычисляет вязкое трение
[in] | pointsDb | константная ссылка на базу данных вихрей, в которых вычисляются скорости |
[in] | domainRadius | ссылка на радиусы вихрей |
[out] | I0 | ссылка на вектор знаменателей диффузионных скоростей, которые приобретают точки из-за влияния геометрии профиля |
[out] | I3 | ссылка на вектор числителей диффузионных скоростей, которые приобретают точки из-за влияния геометрии профиля |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
|
pure virtual |
Вычисляет габаритный прямоугольник профиля
Заполняет значения полей lowLeft и upRight по габаритному прямоугольнику профиля с учетом зазора
[in] | gap | относительная величина зазора в долях от размера габаритного прямоугольника (по умолчанию 0.02, что соответствует 2 %) |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения
[in] | panel | номер панели профиля, от которой считается влияние |
[in] | vtx | ссылка на вихрь |
[out] | vel | ссылка на вектор полученной скорости |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление влияния части подряд идущих источников из области течения на панель для правой части
Вычисляет влияния части подряд идущих источников из области течения на панель для правой части
[in] | panel | номер панели профиля, на которую считается влияние |
[in] | ptr | указатель на начало диапазона источников |
[in] | count | длина диапазона источников |
[out] | panelRhs | ссылка на вектор полученного влияния для правой части СЛАУ для конкретной панели |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление влияния набегающего потока на панель для правой части
Вычисляет влияния набегающего потока на панель для правой части
[out] | vInfRhs | ссылка на вектор полученного влияния для правой части СЛАУ для всех панелей профиля |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вихрь в области течения
[in] | panel | номер панели профиля, от которой считается влияние |
[in] | vtx | ссылка на вихрь |
[out] | vel | ссылка на вектор полученной скорости |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Вычисление влияния части подряд идущих вихрей из вихревого следа на панель для правой части
Вычисляет влияния части подряд идущих вихрей из вихревого следа на панель для правой части
[in] | panel | номер панели профиля, на которую считается влияние |
[in] | ptr | указатель на начало диапазона вихрей |
[in] | count | длина диапазона вихрей |
[out] | panelRhs | ссылка на вектор полученного влияния для правой части СЛАУ для конкретной панели |
Implemented in VM2D::AirfoilRect.
|
inline |
Возврат количества панелей на профиле
Definition at line 139 of file Airfoil2D.h.
|
inline |
Возврат константной ссылки на вершину профиля
Организовано "зацикливание" в сторону увеличения индекса, т.е. getR[size()] = getR[0];
Это позволяет удобно обращаться к getR(i) и getR(i+1) как к началу и концу i-й панели
[in] | q | номер вершины профиля return константную ссылку на вершину профиля |
Definition at line 101 of file Airfoil2D.h.
|
inline |
Возврат константной ссылки на скорость вершины профиля
Организовано "зацикливание" в сторону увеличения индекса, т.е. getV[size()] = getV[0];
Это позволяет удобно обращаться к getV(i) и getV(i+1) как к скоростям начала и конца i-й панели
[in] | q | номер вершины профиля return константную ссылку на скорость вершины профиля |
Definition at line 113 of file Airfoil2D.h.
VM2D::Airfoil::IFCUDA | ( | mutable double * | devRPtr | ) |
Указатель на девайсе, где хранятся вершины профиля
VM2D::Airfoil::IFCUDA | ( | mutable double * | devRhsPtr | ) |
Указатель на девайсе, где хранится правая часть (константная) матрицы
VM2D::Airfoil::IFCUDA | ( | mutable double * | devRhsLinPtr | ) |
Указатель на девайсе, где хранится правая часть (линейная) матрицы
VM2D::Airfoil::IFCUDA | ( | mutable std::vector< double > | tmpRhs | ) |
Указатель на хосте, где хранится временная часть матрицы, полученная с девайса
VM2D::Airfoil::IFCUDA | ( | mutable double * | devFreeVortexSheetPtr | ) |
Указатель на девайсе, где хранятся интенсивности свободного вихревого слоя на панелях
VM2D::Airfoil::IFCUDA | ( | mutable double * | devAttachedVortexSheetPtr | ) |
Указатель на девайсе, где хранятся интенсивности присоединенного вихревого слоя на панелях
VM2D::Airfoil::IFCUDA | ( | mutable double * | devAttachedSourceSheetPtr | ) |
Указатель на девайсе, где хранятся интенсивности присоединенного слоя источников на панелях
VM2D::Airfoil::IFCUDA | ( | mutable double * | devMeanEpsOverPanelPtr | ) |
Указатель на девайсе, где хранятся средние eps на панелях
VM2D::Airfoil::IFCUDA | ( | mutable double * | devViscousStressesPtr | ) |
Указатель на девайсе, где хранится вектор (по панелям) для силы вязкого трения
VM2D::Airfoil::IFCUDA | ( | mutable std::vector< double > | tmpViscousStresses | ) |
Указатель на хосте, где хранится временная часть вектора (по панелям) для силы вязкого трения
bool Airfoil::isAfter | ( | size_t | i, |
size_t | j | ||
) | const |
Проверка, идет ли вершина i следом за вершиной j.
[in] | i | проверяемая вершина |
[in] | j | контрольная вершина |
Definition at line 62 of file Airfoil2D.cpp.
bool Airfoil::isInsideGabarits | ( | const Point2D & | r | ) | const |
Определяет, находится ли точка с радиус-вектором \( \vec r \) внутри габаритного прямоугольника профиля
[in] | r | константная ссылка на текущее положение точки |
Definition at line 69 of file Airfoil2D.cpp.
bool Airfoil::isOutsideGabarits | ( | const Point2D & | r | ) | const |
Определяет, находится ли точка с радиус-вектором \( \vec r \) вне габаритного прямоугольника профиля
[in] | r | константная ссылка на текущее положение точки |
Definition at line 76 of file Airfoil2D.cpp.
|
pure virtual |
Определяет, находится ли точка с радиус-вектором \( \vec r \) внутри профиля
[in] | point | константная ссылка на текущее положение точки |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Перемещение профиля
Плоскопараллельно перемещает профиль на вектор \( \overrightarrow{dr} \)
[in] | dr | константная ссылка на вектор перемещения |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Считывание профиля из файла
Считывание геометрии профиля из файла, вычисление всех прочих параметров профиля
После загрузки из файла профиль поворачивается на нужный угол и масштабируется на нужный коэффициент
[in] | dir | константная ссылка на строку — имя каталога, где лежит cчитываемый файл |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Поворот профиля
Поворачивает профиль на угол \( \alpha \) вокруг центра масс
[in] | alpha | угол поворота против часовой стрелки в радианах |
Implemented in VM2D::AirfoilRect.
|
pure virtual |
Масштабирование профиля
Масштабирует профиль в factor раз относительно центра масс
[in] | factor | масштабный коэффициент |
Implemented in VM2D::AirfoilRect.
|
inline |
Установка постоянной скорости всех вершин профиля
[in] | vel | константная ссылка на величину устанавливаемой скорости |
Definition at line 121 of file Airfoil2D.h.
|
inline |
Установка скоростей всех вершин профиля
[in] | vel | константная ссылка на вектор величин скоростей вершин профиля |
Definition at line 130 of file Airfoil2D.h.
double VM2D::Airfoil::area |
Площадь профиля
Definition at line 83 of file Airfoil2D.h.
std::vector<double> VM2D::Airfoil::gammaThrough |
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
Используются в правой части системы, чтобы компенсировать вихри, проникшие в профиль
Definition at line 196 of file Airfoil2D.h.
bool VM2D::Airfoil::inverse |
Признак разворота нормалей (для расчета внутренних течений)
Definition at line 139 of file Airfoil2D.h.
double VM2D::Airfoil::J |
Полярный момент инерции профиля относительно центра масс
Definition at line 89 of file Airfoil2D.h.
std::vector<double> VM2D::Airfoil::len |
Длины панелей профиля
Definition at line 185 of file Airfoil2D.h.
Point2D VM2D::Airfoil::lowLeft |
Левый нижний угол габаритного прямоугольника профиля
Definition at line 190 of file Airfoil2D.h.
double VM2D::Airfoil::m |
Масса профиля
Definition at line 86 of file Airfoil2D.h.
std::vector<double> VM2D::Airfoil::meanEpsOverPanel |
Средние значения Eps на панелях
Definition at line 92 of file Airfoil2D.h.
std::vector<Point2D> VM2D::Airfoil::nrm |
Нормали к панелям профиля
Нормали задаются внешними, нормированными на единицу
Definition at line 177 of file Airfoil2D.h.
const size_t VM2D::Airfoil::numberInPassport |
Номер профиля в паспорте
Definition at line 74 of file Airfoil2D.h.
double VM2D::Airfoil::phiAfl |
Поворот профиля
Definition at line 80 of file Airfoil2D.h.
|
protected |
Координаты начал панелей
Definition at line 64 of file Airfoil2D.h.
Point2D VM2D::Airfoil::rcm |
Положение центра масс профиля
Definition at line 77 of file Airfoil2D.h.
std::vector<Point2D> VM2D::Airfoil::tau |
Касательные к панелям профиля
Касательные соответствуют обходу профиля против часовой стрелки, задаются нормированными на единицу
Definition at line 182 of file Airfoil2D.h.
Point2D VM2D::Airfoil::upRight |
Правый верхний угол габаритного прямоугольника профиля
Definition at line 191 of file Airfoil2D.h.
|
protected |
Скорости начал панелей
Definition at line 67 of file Airfoil2D.h.
std::vector<double> VM2D::Airfoil::viscousStress |
Касательные напряжения на панелях профиля
Definition at line 188 of file Airfoil2D.h.
const World2D& VM2D::Airfoil::W |
Константная ссылка на решаемую задачу
Definition at line 71 of file Airfoil2D.h.