47 #include <sys/types.h> 53 #include "Eigen/Dense" 64 #define DYN_SCHEDULE 20 73 const double PI = 3.1415926535897932384626433832795;
76 const double IDPI = 0.1591549430918953357688837633725;
79 const double DPI = 6.2831853071795864769252867665590;
82 const double IQPI = 0.07957747154594766788444188168626;
85 const double QPI = 12.566370614359172953850573533118;
96 const std::pair<std::pair<std::string, int>, std::string>
defaultVelAccel = { {
"RampLin", 1},
"" };
100 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVP = { {
"text", 0},
"" };
104 const std::pair<std::pair<std::string, int>, std::string>
defaultSaveVtx = { {
"text", 0},
"" };
253 void PrintLogoToTextFile(std::ofstream& str,
const std::string& fileName,
const std::string& descr);
273 template <
typename T>
274 std::ostream& operator<< (std::ostream& _stream, const std::vector<T>& _vec)
276 size_t n = _vec.size();
280 for (
size_t j = 0; j < n - 1; ++j)
281 _stream << _vec[j] <<
", ";
282 _stream << _vec[n - 1];
296 inline std::ostream& operator<< (std::ostream& _stream, const std::pair<std::pair<std::string, int>, std::string>& _pair)
298 _stream <<
"( ( " << _pair.first.first <<
", " << _pair.first.second <<
" ), " << _pair.second <<
" )";
310 inline std::ostream& operator<< (std::ostream& _stream, const std::pair<std::string, int>& _pair)
312 _stream <<
"( " << _pair.first <<
", " << _pair.second <<
" )";
326 std::list<std::string> fullExtList(extList);
327 fullExtList.insert(fullExtList.begin(),
"");
329 for (
const auto& ext : fullExtList)
331 std::string newFileName = ((ext ==
"") ? fileName : (fileName +
"." + ext));
332 std::ifstream f(newFileName.c_str());
338 info(
'i') <<
"file " << newFileName <<
" is found" << std::endl;
339 fileName = newFileName;
344 info(
'e') <<
"file " << fileName <<
" is not found" << std::endl;
357 inline std::string
fileNameStep(
const std::string& name,
int length,
size_t number,
const std::string& ext)
359 std::string fname(name);
363 for (
int i = 1; i < length; ++i)
370 std::ostringstream ss;
388 inline void copyFile(
const std::string& fileNameFrom,
const std::string& fileNameTo)
397 #pragma warning (push) 398 #pragma warning (disable: 4996) 399 in = fopen(fileNameFrom.c_str(),
"rb");
400 out = fopen(fileNameTo.c_str(),
"wb");
401 #pragma warning (pop) 403 while ((n = fread((
void*)buf.data(), 1, BUFSIZ, in)) != 0)
405 fwrite((
void*)buf.data(), 1, n, out);
417 _mkdir((dir + name).c_str());
419 mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
430 inline T
sqr(T x) {
return x * x; }
438 template <
typename T>
441 double res = abs(x) > 1.0 ? 0.5*
PI*(1 -
sign(x)) : acos(x);
451 template <
typename T>
454 double dx = (double)x;
455 if (dx > 0)
return 1;
456 if ( (dx < 0.0) || (dx < -0.0) )
return -1;
466 void SaveToStream(
const Eigen::MatrixXd& matr, std::ostream& str);
472 void SaveToStream(
const Eigen::MatrixXcd& matr, std::ostream& str);
478 void SaveToStream(
const Eigen::VectorXd& vec, std::ostream& str);
484 void SaveToStream(
const std::vector<Point2D>& vec, std::ostream& str);
496 void ModifyE2(
double* ee2,
double dst2);
530 char* varArray =
reinterpret_cast<char*
>(&var);
531 for (
long i = 0; i < static_cast<long>(
sizeof(var) / 2); ++i)
532 std::swap(varArray[
sizeof(var) - 1 - i], varArray[i]);
539 return std::max(r2, eps2);
542 return std::max(r2, eps2);
544 return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
PointType
Класс перечисления для определения типа набора точек (пелена/виртуальные вихри/точки для вычисления с...
const std::string defaultPspFile
Имя файла с паспортом задачи
const int defaultSaveVisStress
Шаг подсчета поля скорости и давления
const double defaultChord
Хорда
static std::ostream * defaultWorld2DLogStream
Поток вывода логов и ошибок задачи
Глобальные параметры по умолчанию
static v3D defaultAddMassVcm
const std::string defaultWakesDir
Каталог с файлами вихревых следов
const std::string defaultCopyPath
Путь к каталогу с задачей для копирования в новые каталоги
const bool defaultGeographicalAngles
Признак работы в "географической" системе координат
const double defaultAngle
Угол атаки
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
Класс, определяющий работу с потоком логов
const double defaultVRef
Референсная скорость, равная нулю, что означает ее равенство скорости набегающего потока ...
const std::vector< std::string > defaultBody({})
static v3D defaultAddMassWcm
const int defaultVortexPerPanel
Число вихрей, рождаемых на одной панели
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVP
Шаг подсчета поля скорости и давления
const std::vector< std::string > defaultFileBody({})
const std::pair< std::pair< std::string, int >, std::string > defaultVelAccel
Время разгона
const std::pair< std::string, int > defaultPanelsType
Тип панелей
void copyFile(const std::string &fileNameFrom, const std::string &fileNameTo)
Копирование файла
const double defaultTimeAccel
Заголовочный файл с описанием класса LogStream.
const bool defaultCalcCoefficients
Признак расчета безразмерных коэффициентов вместо сил
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVtx
Шаг подсчета поля скорости и давления
const VMlib::Point2D defaultBasePoint
Базовое смещение профиля
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
const Point2D defaultScale
Коэффициент масштабирования профиля
const std::pair< std::string, int > defaultBoundaryCondition
Способ удовлетворения граничного условия
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
const int defaultMechanicalSystemType
Тип механической системы
std::string fileNameStep(const std::string &name, int length, size_t number, const std::string &ext)
Формирование имени файла
Point2D Omega(const Point2D &a, const Point2D &b, const Point2D &c)
Вспомогательная функция вычисления величины .
T sqr(T x)
Возведение числа в квадрат
Файл кода с описанием класса PairInt.
static bool defaultAddMass
Расчет присоединенной массы
double Lambda(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления логарифма отношения норм векторов
const std::vector< std::string > defaultAirfoil({})
Список профилей
const double defaultMaxGamma
Число вихрей, рождаемых на одной панели
const size_t defaultRequiredNPanels
Желаемое число панелей для разбиения геометрии
int sign(T x)
Усовершенствованный сигнум
const VMlib::v3D defaultBasePoint3D
Заголовочный файл с описанием класса v3D.
Класс, опеделяющий двумерный вектор
const Point2D defaultAddedMass
Присоединенная масса
const std::string defaultBodiesDir
const bool defaultRotateForces
Признак поворота сил в профильную систему координат
std::pair< double, double > timePeriod
Тип для хранения начала и конца промежутка времени
Класс, опеделяющий двумерный вектор
void PrintLogoToStream(std::ostream &str)
Передача в поток вывода шапки программы VM2D/VM3D.
static std::ostream * defaultQueueLogStream
Поток вывода логов и ошибок очереди
bool fileExistTest(std::string &fileName, LogStream &info, const std::list< std::string > &extList={})
Проверка существования файла
const std::pair< std::string, int > defaultLinearSystemSolver
Способ решения линейной системы
const int defaultSaveVPstep
const std::pair< std::string, int > defaultVelocityComputation
Способ вычисления скоростей вихрей
const int defaultNameLength
Число разрядов в имени файла
Описание констант и параметров для взаимодействия с графическим ускорителем
void ModifyE2(double *ee2, double dst2)
Модифицирует массив квадратов расстояний до ближайших вихрей из wake.
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
double boundDenom(double r2, double eps2)
Способ сглаживания скорости вихря (вихрь Рэнкина или вихрь Ламба)
const std::string defaultFileSource("")
Файл с источниками
const std::string defaultFileWake("")
Файл со следом
const double defaultTimeStart
Начало расчета
const double defaultDelta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
const std::vector< std::string > defaultFileAirfoil({})
Список профилей
const std::string defaultMechanicalSystem
void PrintUniversalLogoToStream(std::ostream &str)
Передача в поток вывода универсальной шапки программы VM2D/VM3D.
void SwapEnd(T &var)
Вспомогательная функция перестановки байт местами (нужно для сохранения бинарных VTK) ...
const double defaultDistFar
Радиус убивания дальнего следа
Заголовочный файл с описанием класса Vortex2D.
const int defaultSaveVtxStep
const std::string defaultAirfoilsDir
Каталог с файлами профилей
void CreateDirectory(const std::string &dir, const std::string &name)
Создание каталога
double macos(const T x)
Усовершенствованный аркосинус
const int defaultNp
Необходимое число процессоров для решения задачи
const double rotateAngleVpPoints
Угол поворота точек VP.
void SaveToStream(const std::vector< Point2D > &vec, std::ostream &str)
Сохранение списка из двумерных векторов (точек) в поток
double M4(double t)
Ядро сглаживания (Монагана)
const bool defaultInverse
Признак разворота нормалей (для расчета внутреннего течения)