64 std::vector<Point2D>
r_;
67 std::vector<Point2D>
v_;
103 return (q < r_.size()) ? r_[q] : r_[0];
115 return (q < v_.size()) ? v_[q] : v_[0];
124 v_.resize(r_.size(), vel);
130 void setV(
const std::vector<Point2D>& vel)
133 v_.insert(v_.end(), vel.begin(), vel.end());
145 IFCUDA(
mutable double* devRPtr);
148 IFCUDA(
mutable double* devRhsPtr);
151 IFCUDA(
mutable double* devRhsLinPtr);
154 IFCUDA(
mutable std::vector<double> tmpRhs);
157 IFCUDA(
mutable double* devFreeVortexSheetPtr);
160 IFCUDA(
mutable double* devAttachedVortexSheetPtr);
163 IFCUDA(
mutable double* devAttachedSourceSheetPtr);
166 IFCUDA(
mutable double* devMeanEpsOverPanelPtr);
169 IFCUDA(
mutable double* devViscousStressesPtr);
172 IFCUDA(
mutable std::vector<double> tmpViscousStresses);
213 bool isAfter(
size_t i,
size_t j)
const;
219 virtual void Rotate(
double alpha) = 0;
275 virtual std::vector<double>
getA(
size_t p,
size_t i,
const Airfoil& airfoil,
size_t j)
const = 0;
283 virtual void calcIQ(
size_t p,
const Airfoil& otherAirfoil, std::pair<Eigen::MatrixXd, Eigen::MatrixXd>& matrPair)
const = 0;
301 #if defined(USE_CUDA) 302 virtual void GPUGetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(
const WakeDataBase& pointsDb, std::vector<double>& domainRadius, std::vector<double>& I0, std::vector<Point2D>& I3) = 0;
virtual void GetDiffVelocityI0I3ToWakeAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)=0
std::vector< double > viscousStress
Касательные напряжения на панелях профиля
void setV(const std::vector< Point2D > &vel)
Установка скоростей всех вершин профиля
Airfoil(const World2D &W_, const size_t numberInPassport_)
virtual void GetInfluenceFromSourceSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const =0
Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения ...
double area
Площадь профиля
bool inverse
Признак разворота нормалей (для расчета внутренних течений)
const World2D & W
Константная ссылка на решаемую задачу
std::vector< Point2D > v_
Скорости начал панелей
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
virtual void Scale(const Point2D &)=0
Масштабирование профиля
double J
Полярный момент инерции профиля относительно центра масс
Point2D lowLeft
Левый нижний угол габаритного прямоугольника профиля
const size_t numberInPassport
Номер профиля в паспорте
Описание базовых вспомогательных функций
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
const Point2D & getV(size_t q) const
Возврат константной ссылки на скорость вершины профиля
virtual std::vector< double > getA(size_t p, size_t i, const Airfoil &airfoil, size_t j) const =0
Вычисление коэффициентов матрицы A для расчета влияния панели на панель
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Point2D upRight
Правый верхний угол габаритного прямоугольника профиля
virtual ~Airfoil()
Деструктор
virtual void GetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)=0
Вычисление числителей и знаменателей диффузионных скоростей в заданном наборе точек, обусловленных геометрией профиля, и вычисление вязкого трения
IFCUDA(mutable double *devRPtr)
Указатель на девайсе, где хранятся вершины профиля
bool isInsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором внутри габаритного прямоугольника профиля ...
virtual void GetInfluenceFromVorticesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const =0
Вычисление влияния части подряд идущих вихрей из вихревого следа на панель для правой части ...
std::vector< Point2D > r_
Координаты начал панелей
Класс, опеделяющий двумерный вектор
std::vector< Point2D > tau
Касательные к панелям профиля
virtual void ReadFromFile(const std::string &dir)=0
Считывание профиля из файла
double phiAfl
Поворот профиля
virtual void Rotate(double alpha)=0
Поворот профиля
virtual void GetInfluenceFromVInfToPanel(std::vector< double > &vInfRhs) const =0
Вычисление влияния набегающего потока на панель для правой части
virtual void calcIQ(size_t p, const Airfoil &otherAirfoil, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &matrPair) const =0
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2.
Класс, опеделяющий двумерный вихревой элемент
Point2D rcm
Положение центра масс профиля
virtual void GetGabarits(double gap=0.02)=0
Вычисляет габаритный прямоугольник профиля
void calcMeanEpsOverPanel()
Вычисление средних значений eps на панелях
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
virtual bool IsPointInAirfoil(const Point2D &point) const =0
Определяет, находится ли точка с радиус-вектором внутри профиля
std::vector< Point2D > nrm
Нормали к панелям профиля
Абстрактный класс, определяющий обтекаемый профиль
std::vector< double > meanEpsOverPanel
Средние значения Eps на панелях
Класс, опеделяющий текущую решаемую задачу
Класс, опеделяющий набор вихрей
std::vector< double > len
Длины панелей профиля
bool isAfter(size_t i, size_t j) const
Проверка, идет ли вершина i следом за вершиной j.
virtual void GetInfluenceFromVortexSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const =0
Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вих...
virtual void GetInfluenceFromSourcesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const =0
Вычисление влияния части подряд идущих источников из области течения на панель для правой части ...
virtual void Move(const Point2D &dr)=0
Перемещение профиля
bool isOutsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором вне габаритного прямоугольника профиля ...