67#define DYN_SCHEDULE 20
76const double PI = 3.1415926535897932384626433832795;
79const double IDPI = 0.1591549430918953357688837633725;
82const double DPI = 6.2831853071795864769252867665590;
85const double IQPI = 0.07957747154594766788444188168626;
88const double QPI = 12.566370614359172953850573533118;
99 const std::pair<std::pair<std::string, int>, std::string>
defaultVelAccel = { {
"RampLin", 1},
"" };
103 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVP = { {
"text", 0},
"" };
107 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVtx = { {
"text", 0},
"" };
115 const std::vector<std::string>
defaultReviseParameters = {
"nameLength",
"timeStop",
"dt",
"vInf",
"vRef",
"saveVtx",
"saveVP" };
269 void PrintLogoToTextFile(std::ofstream& str,
const std::string& fileName,
const std::string& descr);
289 template <
typename T>
290 std::ostream&
operator<< (std::ostream& _stream,
const std::vector<T>& _vec)
292 size_t n = _vec.size();
296 for (
size_t j = 0; j < n - 1; ++j)
297 _stream << _vec[j] <<
", ";
298 _stream << _vec[n - 1];
312 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::pair<std::string, int>, std::string>& _pair)
314 _stream <<
"( ( " << _pair.first.first <<
", " << _pair.first.second <<
" ), " << _pair.second <<
" )";
326 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::string, int>& _pair)
328 _stream <<
"( " << _pair.first <<
", " << _pair.second <<
" )";
340 inline bool fileExistTest(std::string& fileName,
LogStream& info,
bool exitKey =
false,
const std::list <std::string>& extList = {})
342 std::list<std::string> fullExtList(extList);
343 fullExtList.insert(fullExtList.begin(),
"");
345 for (
const auto& ext : fullExtList)
347 std::string newFileName = ((ext ==
"") ? fileName : (fileName +
"." + ext));
348 std::ifstream f(newFileName.c_str());
354 info(
'i') <<
"file " << newFileName <<
" is found" << std::endl;
355 fileName = newFileName;
362 info(
'e') <<
"file " << fileName <<
" is not found" << std::endl;
366 info(
'i') <<
"file " << fileName <<
" is not found" << std::endl;
379 inline std::string
fileNameStep(
const std::string& name,
int length,
size_t number,
const std::string& ext)
381 std::string fname(name);
385 for (
int i = 1; i < length; ++i)
392 std::ostringstream ss;
410 inline void copyFile(
const std::string& fileNameFrom,
const std::string& fileNameTo)
419#pragma warning (push)
420#pragma warning (disable: 4996)
421 in = fopen(fileNameFrom.c_str(),
"rb");
422 out = fopen(fileNameTo.c_str(),
"wb");
425 while ((n = fread((
void*)buf.data(), 1, BUFSIZ, in)) != 0)
427 fwrite((
void*)buf.data(), 1, n, out);
442 _mkdir((dir + name).c_str());
444 mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
455 inline T
sqr(T x) {
return x * x; }
471 template <
typename T>
474 double res = abs(x) > 1.0 ? 0.5*
PI*(1 -
sign(x)) : acos(x);
484 template <
typename T>
487 double dx = (double)x;
488 if (dx > 0)
return 1;
489 if ( (dx < 0.0) || (dx < -0.0) )
return -1;
499 void SaveToStream(
const Eigen::MatrixXd& matr, std::ostream& str);
505 void SaveToStream(
const Eigen::MatrixXcd& matr, std::ostream& str);
511 void SaveToStream(
const Eigen::VectorXd& vec, std::ostream& str);
517 void SaveToStream(
const std::vector<Point2D>& vec, std::ostream& str);
529 void ModifyE2(
double* ee2,
double dst2);
563 char* varArray =
reinterpret_cast<char*
>(&var);
564 for (
long i = 0; i < static_cast<long>(
sizeof(var) / 2); ++i)
565 std::swap(varArray[
sizeof(var) - 1 - i], varArray[i]);
572 return std::max(r2, eps2);
575 return std::max(r2, eps2);
577 return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
Описание констант и параметров для взаимодействия с графическим ускорителем
Заголовочный файл с описанием класса LogStream.
Заголовочный файл с описанием класса pairInt.
PointType
Класс перечисления для определения типа набора точек (пелена/виртуальные вихри/точки для вычисления с...
std::pair< double, double > timePeriod
Тип для хранения начала и конца промежутка времени
Заголовочный файл с описанием класса Vortex2D.
Класс, определяющий работу с потоком логов
Класс, опеделяющий двумерный вектор
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
double M4(double t)
Ядро сглаживания (Монагана)
void PrintLogoToStream(std::ostream &str)
Передача в поток вывода шапки программы VM2D/VM3D.
void CreateUserDirectory(const std::string &dir, const std::string &name)
Создание каталога
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={})
Проверка существования файла
T cubPower(T x)
Возведение числа в куб
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 int defaultRevisePassportStep
Шаг обновления паспорта и перечень перечитываемых параметров
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 std::vector< std::string > defaultReviseParameters
const int defaultSaveVtxStep
const std::vector< std::string > defaultFileAirfoil({})
Список профилей
const std::string defaultBodiesDir
const std::pair< std::string, int > defaultBoundaryCondition
Способ удовлетворения граничного условия
const std::string defaultPspFile
Имя файла с паспортом задачи
const std::pair< std::string, int > defaultLinearSystemSolver
Способ решения линейной системы
const double defaultSigma0
Радиус вихря по умолчанию
static bool defaultAddMass
Расчет присоединенной массы
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVP
Шаг подсчета поля скорости и давления
const std::string defaultFileWake("")
Файл со следом
static Point2D defaultInitDisplacement
Для профиля на упругих связях - начальные отклонения и скорости
Заголовочный файл с описанием класса v3D.