47 #include "mlp_cudnn.cuh"
69 std::vector<Point2D>
r_;
72 std::vector<Point2D>
v_;
81 std::vector<Point2D>
nrm;
86 std::vector<std::pair<Point2D, Point2D>>
psn;
91 std::vector<Point2D>
tau;
94 std::vector<double>
len;
115 return (q <
r_.size()) ?
r_[q] :
r_[0];
127 return (q <
r_.size()) ?
r_[q] :
r_[0];
139 return (q <
v_.size()) ?
v_[q] :
v_[0];
148 v_.resize(
r_.size(), vel);
154 void setV(
const std::vector<Point2D>& vel)
157 v_.insert(
v_.end(), vel.begin(), vel.end());
226 IFCUDA(
mutable std::vector<double> tmpRhs);
229 IFCUDA(
mutable double* devFreeVortexSheetPtr);
232 IFCUDA(
mutable double* devFreeVortexSheetLinPtr);
235 IFCUDA(
mutable double* devAttachedVortexSheetPtr);
238 IFCUDA(
mutable double* devAttachedVortexSheetLinPtr);
241 IFCUDA(
mutable double* devAttachedSourceSheetPtr);
244 IFCUDA(
mutable double* devAttachedSourceSheetLinPtr);
247 IFCUDA(
mutable double* devMeanEpsOverPanelPtr);
250 IFCUDA(
mutable double* devViscousStressesPtr);
253 IFCUDA(
mutable std::vector<double> tmpViscousStresses);
259 IFCUDA(std::vector<int> vorticesToProcess);
261 IFCUDA(std::vector<float> batch);
262 IFCUDA(std::vector<int> signy);
263 IFCUDA(std::vector<float> nnout);
264 IFCUDA(std::vector<int> batchPanels);
293 bool isAfter(
size_t i,
size_t j)
const;
302 virtual void Rotate(
double alpha);
358 virtual std::vector<double>
getA(
size_t p,
size_t i,
const Airfoil& airfoil,
size_t j)
const;
366 virtual void calcIQ(
size_t p,
const Airfoil& otherAirfoil, std::pair<Eigen::MatrixXd, Eigen::MatrixXd>& matrPair)
const;
385 virtual void GPUGetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(std::vector<double>& domainRadius, std::vector<double>& I0, std::vector<Point2D>& I3);
Класс, определяющий форму профиля
std::vector< Point2D > r_
Координаты начал панелей
void setV(const std::vector< Point2D > &vel)
Установка скоростей всех вершин профиля
std::vector< Point2D > v_
Скорости начал панелей
double phiAfl
Поворот профиля
std::vector< double > len
Длины панелей профиля
std::vector< std::pair< Point2D, Point2D > > psn
Псевдонормали к панелям профиля
void setV(const Point2D &vel)
Установка постоянной скорости всех вершин профиля
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
double area
Площадь профиля
const Point2D & getV(size_t q) const
Возврат константной ссылки на скорость вершины профиля
std::vector< Point2D > nrm
Нормали к панелям профиля
std::vector< Point2D > tau
Касательные к панелям профиля
bool inverse
Признак разворота нормалей (для расчета внутренних течений)
Point2D rcm
Положение центра масс профиля
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
Point2D & setR(size_t q)
Возврат ссылки на вершину профиля
Абстрактный класс, определяющий обтекаемый профиль
const World2D & W
Константная ссылка на решаемую задачу
void calcMeanEpsOverPanel()
Вычисление средних значений eps на панелях
virtual void GetInfluenceFromSourcesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const
Вычисление влияния части подряд идущих источников из области течения на панель для правой части
virtual void GetInfluenceFromSourceSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const
Вычисление влияния слоя источников конкретной прямолинейной панели на вихрь в области течения
IFCUDA(mutable double *devViscousStressesPtr)
Указатель на девайсе, где хранится вектор (по панелям) для силы вязкого трения
virtual void Scale(const Point2D &)
Масштабирование профиля
IFCUDA(mutable double *devFreeVortexSheetLinPtr)
Указатель на девайсе, где хранятся интенсивности (линейные) свободного вихревого слоя на панелях
bool isAfter(size_t i, size_t j) const
Проверка, идет ли вершина i следом за вершиной j.
IFCUDA(mutable double *devRPtr)
Указатель на девайсе, где хранятся вершины профиля
virtual void GetDiffVelocityI0I3ToWakeAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)
bool isOutsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором вне габаритного прямоугольника профиля
Point2D upRight
Правый верхний угол габаритного прямоугольника профиля
IFCUDA(mutable std::vector< double > tmpRhs)
Указатель на хосте, где хранится временная часть матрицы, полученная с девайса
IFCUDA(mutable double *devAttachedVortexSheetPtr)
Указатель на девайсе, где хранятся интенсивности (константные) присоединенного вихревого слоя на пане...
std::vector< double > gammaThrough
Суммарные циркуляции вихрей, пересекших панели профиля на прошлом шаге
std::vector< int > wayToVertex
Номера путей к вершинам
IFCUDA(mutable double *devAttachedSourceSheetLinPtr)
Указатель на девайсе, где хранятся интенсивности (линейные) присоединенного слоя источников на панеля...
IFCUDA(mutable double *devRhsPtr)
Указатель на девайсе, где хранится правая часть (константная) матрицы
virtual void GetGabarits(double gap=0.02)
Вычисляет габаритный прямоугольник профиля
bool isInsideGabarits(const Point2D &r) const
Определяет, находится ли точка с радиус-вектором внутри габаритного прямоугольника профиля
IFCUDA(mutable std::vector< double > tmpViscousStresses)
Указатель на хосте, где хранится временная часть вектора (по панелям) для силы вязкого трения
double J
Полярный момент инерции профиля относительно центра масс
virtual void GetInfluenceFromVorticesToPanel(size_t panel, const Vortex2D *ptr, ptrdiff_t count, std::vector< double > &panelRhs) const
Вычисление влияния части подряд идущих вихрей из вихревого следа на панель для правой части
virtual void Move(const Point2D &dr)
Перемещение профиля
virtual void GetInfluenceFromVInfToPanel(std::vector< double > &vInfRhs) const
Вычисление влияния набегающего потока на панель для правой части
void CalcNrmTauLen()
Вычисление нормалей, касательных и длин панелей по текущему положению вершин
virtual bool IsPointInAirfoil(const Point2D &point) const
Определяет, находится ли точка с радиус-вектором внутри профиля
IFCUDA(mutable double *devRhsLinPtr)
Указатель на девайсе, где хранится правая часть (линейная) матрицы
void lightningTest()
Тест на "отвещенность".
IFCUDA(mutable double *devAttachedVortexSheetLinPtr)
Указатель на девайсе, где хранятся интенсивности (линейные) присоединенного вихревого слоя на панелях
Point2D lowLeft
Левый нижний угол габаритного прямоугольника профиля
std::vector< double > viscousStress
Нейросеть для коэффициентов I0 и I3 диффузионной скорости
IFCUDA(mutable double *devFreeVortexSheetPtr)
Указатель на девайсе, где хранятся интенсивности (константные) свободного вихревого слоя на панелях
virtual void calcIQ(size_t p, const Airfoil &otherAirfoil, std::pair< Eigen::MatrixXd, Eigen::MatrixXd > &matrPair) const
Вычисление коэффициентов матрицы, состоящей из интегралов от (r-xi)/|r-xi|^2.
virtual void GetInfluenceFromVortexSheetToVortex(size_t panel, const Vortex2D &vtx, Point2D &vel) const
Вычисление влияния вихревых слоев (свободный + присоединенный) конкретной прямолинейной панели на вих...
virtual void GetDiffVelocityI0I3ToSetOfPointsAndViscousStresses(const WakeDataBase &pointsDb, std::vector< double > &domainRadius, std::vector< double > &I0, std::vector< Point2D > &I3)
Вычисление числителей и знаменателей диффузионных скоростей в заданном наборе точек,...
const size_t numberInPassport
Номер профиля в паспорте
IFCUDA(mutable double *devPsnPtr)
Указатель на девайсе, где хранятся псевдонормали профиля
std::vector< std::vector< Point2D > > possibleWays
Возможные пути внутри профиля от точки (0, 0) к центрам всех панелей
IFCUDA(mutable double *devMeanEpsOverPanelPtr)
Указатель на девайсе, где хранятся средние eps на панелях
IFCUDA(mutable double *devAttachedSourceSheetPtr)
Указатель на девайсе, где хранятся интенсивности (константные) присоединенного слоя источников на пан...
virtual void Rotate(double alpha)
Поворот профиля
virtual std::vector< double > getA(size_t p, size_t i, const Airfoil &airfoil, size_t j) const
Вычисление коэффициентов матрицы A для расчета влияния панели на панель
virtual ~Airfoil()
Деструктор
std::vector< double > meanEpsOverPanel
Средние значения Eps на панелях
virtual void ReadFromFile(const std::string &dir)
Считывание профиля из файла
Класс, опеделяющий набор вихрей
Класс, опеделяющий текущую решаемую задачу
Класс, опеделяющий двумерный вихревой элемент
Описание базовых вспомогательных функций