73#define DYN_SCHEDULE 20
82const double PI = 3.1415926535897932384626433832795;
85const double IDPI = 0.1591549430918953357688837633725;
88const double DPI = 6.2831853071795864769252867665590;
91const double IQPI = 0.07957747154594766788444188168626;
94const double QPI = 12.566370614359172953850573533118;
105 const std::pair<std::pair<std::string, int>, std::string>
defaultVelAccel = { {
"RampLin", 1},
"" };
109 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVP = { {
"text", 0},
"" };
113 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVtx = { {
"text", 0},
"" };
271 void PrintLogoToTextFile(std::ofstream& str,
const std::string& fileName,
const std::string& descr);
291 template <
typename T>
292 std::ostream&
operator<< (std::ostream& _stream,
const std::vector<T>& _vec)
294 size_t n = _vec.size();
298 for (
size_t j = 0; j < n - 1; ++j)
299 _stream << _vec[j] <<
", ";
300 _stream << _vec[n - 1];
314 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::pair<std::string, int>, std::string>& _pair)
316 _stream <<
"( ( " << _pair.first.first <<
", " << _pair.first.second <<
" ), " << _pair.second <<
" )";
328 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::string, int>& _pair)
330 _stream <<
"( " << _pair.first <<
", " << _pair.second <<
" )";
342 inline bool fileExistTest(std::string& fileName,
LogStream& info,
bool exitKey =
false,
const std::list <std::string>& extList = {})
344 std::list<std::string> fullExtList(extList);
345 fullExtList.insert(fullExtList.begin(),
"");
347 for (
const auto& ext : fullExtList)
349 std::string newFileName = ((ext ==
"") ? fileName : (fileName +
"." + ext));
350 std::ifstream f(newFileName.c_str());
356 info(
'i') <<
"file " << newFileName <<
" is found" << std::endl;
357 fileName = newFileName;
364 info(
'e') <<
"file " << fileName <<
" is not found" << std::endl;
368 info(
'i') <<
"file " << fileName <<
" is not found" << std::endl;
381 inline std::string
fileNameStep(
const std::string& name,
int length,
size_t number,
const std::string& ext)
383 std::string fname(name);
387 for (
int i = 1; i < length; ++i)
394 std::ostringstream ss;
412 inline void copyFile(
const std::string& fileNameFrom,
const std::string& fileNameTo)
421#pragma warning (push)
422#pragma warning (disable: 4996)
423 in = fopen(fileNameFrom.c_str(),
"rb");
424 out = fopen(fileNameTo.c_str(),
"wb");
427 while ((n = fread((
void*)buf.data(), 1, BUFSIZ, in)) != 0)
429 fwrite((
void*)buf.data(), 1, n, out);
444 _mkdir((dir + name).c_str());
446 mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
457 inline T sqr(T x) {
return x * x; }
465 template <
typename T>
468 double res = abs(x) > 1.0 ? 0.5*
PI*(1 -
sign(x)) : acos(x);
478 template <
typename T>
481 double dx = (double)x;
482 if (dx > 0)
return 1;
483 if ( (dx < 0.0) || (dx < -0.0) )
return -1;
493 void SaveToStream(
const Eigen::MatrixXd& matr, std::ostream& str);
499 void SaveToStream(
const Eigen::MatrixXcd& matr, std::ostream& str);
505 void SaveToStream(
const Eigen::VectorXd& vec, std::ostream& str);
511 void SaveToStream(
const std::vector<Point2D>& vec, std::ostream& str);
523 void ModifyE2(
double* ee2,
double dst2);
557 char* varArray =
reinterpret_cast<char*
>(&var);
558 for (
long i = 0; i < static_cast<long>(
sizeof(var) / 2); ++i)
559 std::swap(varArray[
sizeof(var) - 1 - i], varArray[i]);
566 return std::max(r2, eps2);
569 return std::max(r2, eps2);
571 return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
Описание констант и параметров для взаимодействия с графическим ускорителем
Заголовочный файл с описанием класса LogStream.
Заголовочный файл с описанием класса pairInt.
Заголовочный файл с описанием класса Vortex2D.
Класс, определяющий работу с потоком логов
Класс, опеделяющий двумерный вектор
PointType
Класс перечисления для определения типа набора точек (пелена/виртуальные вихри/точки для вычисления с...
std::pair< double, double > timePeriod
Тип для хранения начала и конца промежутка времени
const double multipoleTheta
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
double M4(double t)
Ядро сглаживания (Монагана)
void PrintLogoToStream(std::ostream &str)
Передача в поток вывода шапки программы VM2D/VM3D.
void PrintUniversalLogoToStream(std::ostream &str)
Передача в поток вывода универсальной шапки программы VM2D/VM3D.
double macos(const T x)
Усовершенствованный аркосинус
void ModifyE2(double *ee2, double dst2)
Модифицирует массив квадратов расстояний до ближайших вихрей из wake.
void SaveToStream(const Eigen::MatrixXd &matr, std::ostream &str)
Сохранение матрицы в поток
double Lambda(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления логарифма отношения норм векторов
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
std::string fileNameStep(const std::string &name, int length, size_t number, const std::string &ext)
Формирование имени файла
bool fileExistTest(std::string &fileName, LogStream &info, bool exitKey=false, const std::list< std::string > &extList={})
Проверка существования файла
void CreateDirectory(const std::string &dir, const std::string &name)
Создание каталога
T sqr(T x)
Возведение числа в квадрат
double boundDenom(double r2, double eps2)
Способ сглаживания скорости вихря (вихрь Рэнкина или вихрь Ламба)
void copyFile(const std::string &fileNameFrom, const std::string &fileNameTo)
Копирование файла
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
int sign(T x)
Усовершенствованный сигнум
void SwapEnd(T &var)
Вспомогательная функция перестановки байт местами (нужно для сохранения бинарных VTK)
std::ostream & operator<<(std::ostream &_stream, const std::vector< T > &_vec)
Переопределение оператора "<<" для вывода в поток вектора std::vector.
Point2D Omega(const Point2D &a, const Point2D &b, const Point2D &c)
Вспомогательная функция вычисления величины .
Глобальные параметры по умолчанию
const VMlib::Point2D defaultBasePoint
Базовое смещение профиля
const double defaultDistFar
Радиус убивания дальнего следа
const int defaultMechanicalSystemType
Тип механической системы
const bool defaultCalcCoefficients
Признак расчета безразмерных коэффициентов вместо сил
static std::ostream * defaultQueueLogStream
Поток вывода логов и ошибок очереди
static v3D defaultAddMassVcm
const std::string defaultWakesDir
Каталог с файлами вихревых следов
const std::vector< std::string > defaultFileBody({})
const std::vector< std::string > defaultBody({})
const int defaultSaveVisStress
Шаг подсчета поля скорости и давления
const size_t defaultRequiredNPanels
Желаемое число панелей для разбиения геометрии
const double defaultVRef
Референсная скорость, равная нулю, что означает ее равенство скорости набегающего потока
const Point2D defaultScale
Коэффициент масштабирования профиля
const double defaultDelta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
const bool defaultRotateForces
Признак работы в "географической" системе координат
const Point2D defaultAddedMass
Присоединенная масса
static Point2D defaultInitVelocity
const bool defaultInverse
Признак разворота нормалей (для расчета внутреннего течения)
const int defaultSaveVPstep
static double defaultInitAngularVelocity
const double defaultEpsCol
Радиус вихря по умолчанию
const double defaultTimeAccel
static v3D defaultAddMassWcm
const double defaultChord
Хорда
const std::pair< std::string, int > defaultVelocityComputation
Способ вычисления скоростей вихрей
static double defaultInitAngularDisplacement
const int defaultNp
Необходимое число процессоров для решения задачи
const std::string defaultFileSource("")
Файл с источниками
const std::vector< std::string > defaultAirfoil({})
Список профилей
const double defaultAngle
Угол атаки
const std::string defaultCopyPath
Путь к каталогу с задачей для копирования в новые каталоги
const double defaultMaxGamma
Число вихрей, рождаемых на одной панели
const int defaultVortexPerPanel
Число вихрей, рождаемых на одной панели
const int defaultNameLength
Число разрядов в имени файла
const double rotateAngleVpPoints
Угол поворота точек VP.
const std::string defaultAirfoilsDir
Каталог с файлами профилей
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVtx
Шаг подсчета поля скорости и давления
const std::pair< std::pair< std::string, int >, std::string > defaultVelAccel
Время разгона
const double defaultTimeStart
Начало расчета
const std::string defaultMechanicalSystem
static std::ostream * defaultWorld2DLogStream
Поток вывода логов и ошибок задачи
const VMlib::v3D defaultBasePoint3D
const int defaultSaveVtxStep
const std::vector< std::string > defaultFileAirfoil({})
Список профилей
const std::string defaultBodiesDir
const std::pair< std::string, int > defaultBoundaryCondition
Способ удовлетворения граничного условия
const double defaultEps
Радиус вихря по умолчанию
const std::string defaultPspFile
Имя файла с паспортом задачи
const std::pair< std::string, int > defaultLinearSystemSolver
Способ решения линейной системы
static bool defaultAddMass
Расчет присоединенной массы
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVP
Шаг подсчета поля скорости и давления
const std::string defaultFileWake("")
Файл со следом
static Point2D defaultInitDisplacement
Для профиля на упругих связях - начальные отклонения и скорости
Заголовочный файл с описанием класса v3D.