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},
"" };
118 const std::vector<std::string>
defaultReviseParameters = {
"nameLength",
"timeStop",
"dt",
"vInf",
"vRef",
"coefEpsAst",
"saveVtx",
"saveVP" };
275 void PrintLogoToTextFile(std::ofstream& str,
const std::string& fileName,
const std::string& descr);
295 template <
typename T>
296 std::ostream&
operator<< (std::ostream& _stream,
const std::vector<T>& _vec)
298 size_t n = _vec.size();
302 for (
size_t j = 0; j < n - 1; ++j)
303 _stream << _vec[j] <<
", ";
304 _stream << _vec[n - 1];
318 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::pair<std::string, int>, std::string>& _pair)
320 _stream <<
"( ( " << _pair.first.first <<
", " << _pair.first.second <<
" ), " << _pair.second <<
" )";
332 inline std::ostream&
operator<< (std::ostream& _stream,
const std::pair<std::string, int>& _pair)
334 _stream <<
"( " << _pair.first <<
", " << _pair.second <<
" )";
346 inline bool fileExistTest(
const std::string& fileName_,
LogStream& info,
bool exitKey =
false,
const std::list <std::string>& extList = {})
348 std::string fileName = fileName_;
350 std::list<std::string> fullExtList(extList);
351 fullExtList.insert(fullExtList.begin(),
"");
353 for (
const auto& ext : fullExtList)
355 std::string newFileName = ((ext ==
"") ? fileName : (fileName +
"." + ext));
356 std::ifstream f(newFileName.c_str());
362 info(
'i') <<
"file " << newFileName <<
" is found" << std::endl;
363 fileName = newFileName;
370 info(
'e') <<
"file " << fileName <<
" is not found" << std::endl;
374 info(
'i') <<
"file " << fileName <<
" is not found" << std::endl;
387 inline std::string
fileNameStep(
const std::string& name,
int length,
size_t number,
const std::string& ext)
389 std::string fname(name);
393 for (
int i = 1; i < length; ++i)
400 std::ostringstream ss;
418 inline void copyFile(
const std::string& fileNameFrom,
const std::string& fileNameTo)
427#pragma warning (push)
428#pragma warning (disable: 4996)
429 in = fopen(fileNameFrom.c_str(),
"rb");
430 out = fopen(fileNameTo.c_str(),
"wb");
433 while ((n = fread((
void*)buf.data(), 1, BUFSIZ, in)) != 0)
435 fwrite((
void*)buf.data(), 1, n, out);
450 _mkdir((dir + name).c_str());
452 mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
463 inline T
sqr(T x) {
return x * x; }
479 template <
typename T>
482 double res = abs(x) > 1.0 ? 0.5*
PI*(1 -
sign(x)) : acos(x);
492 template <
typename T>
495 double dx = (double)x;
496 if (dx > 0)
return 1;
497 if ( (dx < 0.0) || (dx < -0.0) )
return -1;
507 void SaveToStream(
const Eigen::MatrixXd& matr, std::ostream& str);
513 void SaveToStream(
const Eigen::MatrixXcd& matr, std::ostream& str);
519 void SaveToStream(
const Eigen::VectorXd& vec, std::ostream& str);
525 void SaveToStream(
const std::vector<Point2D>& vec, std::ostream& str);
537 void ModifyE2(
double* ee2,
double dst2);
571 char* varArray =
reinterpret_cast<char*
>(&var);
572 for (
long i = 0; i < static_cast<long>(
sizeof(var) / 2); ++i)
573 std::swap(varArray[
sizeof(var) - 1 - i], varArray[i]);
580 return std::max(r2, eps2);
583 return std::max(r2, eps2);
585 return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
Описание констант и параметров для взаимодействия с графическим ускорителем
Заголовочный файл с описанием класса LogStream.
Заголовочный файл с описанием класса pairInt.
PointType
Класс перечисления для определения типа набора точек (пелена/виртуальные вихри/точки для вычисления с...
std::pair< double, double > timePeriod
Тип для хранения начала и конца промежутка времени
Заголовочный файл с описанием класса Vortex2D.
Класс, определяющий работу с потоком логов
Класс, опеделяющий двумерный вектор
bool fileExistTest(const std::string &fileName_, LogStream &info, bool exitKey=false, const std::list< std::string > &extList={})
Проверка существования файла
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)
Формирование имени файла
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 int defaultHistoryFrequency
Шаг сохранения буферов истории скорости и давления к контрольных точках в файл
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 double defaultCoefEpsAst
Коэффициент при вычислении eps_ast по умолчанию
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.