44std::string
Months[12] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December" };
49 std::time_t t = std::time(
nullptr);
52#pragma warning(disable : 4996)
53 std::tm tm = *std::localtime(&t);
56 std::stringstream dateTimeStringStream;
59 std::stringstream st_day, st_hour, st_min, st_sec;
61 st_day <<
"0" << tm.tm_mday;
66 st_hour <<
"0" << tm.tm_hour;
68 st_hour << tm.tm_hour;
71 st_min <<
"0" << tm.tm_min;
76 st_sec <<
"0" << tm.tm_sec;
80 dateTimeStringStream \
81 << st_day.str() <<
" " <<
Months[tm.tm_mon] <<
" " << 1900 + tm.tm_year \
83 << st_hour.str() <<
":" << st_min.str() <<
":" << st_sec.str();
88 return dateTimeStringStream.str();
95 "-------------------------------------------------------------------------------" <<
'\n' << \
96 "##\\ ##\\ ##\\ ##\\ ######\\ #######\\ ##\\ ######\\ #######\\ " <<
'\n' << \
97 "## | ## | ###\\ ### | ## __##\\ ## __##\\ ## | ## ___##\\ ## __##\\ " <<
'\n' << \
98 "## | ## | ####\\ #### | \\__/ ## | ## | ## | ## / \\_ / ## | ## | ## |" <<
'\n' << \
99 "\\##\\ ## | ##\\##\\## ## | ###### | ## | ## | ## / ##### / ## | ## |" <<
'\n' << \
100 " \\##\\## / ## \\### ## | ## ____/ ## | ## | ## / \\___##\\ ## | ## |" <<
'\n' << \
101 " \\### / ## |\\# /## | ## | ## | ## | ## / ##\\ ## | ## | ## |" <<
'\n' << \
102 " \\# / ## | \\_/ ## | ########\\ ####### | ## / \\###### | ####### |" <<
'\n' << \
103 " \\_/ \\__| \\__| \\________| \\_______/ \\__/ \\______/ \\_______/ " <<
'\n' << \
104 "-------------------------------------------------------------------------------" <<
'\n';
112 "/*--------------------------------*- VM2D -*-----------------*---------------*\\" <<
'\n' << \
113 "| ## ## ## ## #### ##### | | Version 1.14 |" <<
'\n' << \
114 "| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2026/03/06 |" <<
'\n' << \
115 "| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*" <<
'\n' << \
116 "| #### ## ## ## ## ## | Open Source Code |" <<
'\n' << \
117 "| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |" <<
'\n' << \
119 "| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |" <<
'\n' << \
120 "*-----------------------------------------------------------------------------*" <<
'\n';
125 "/*--------------------------------*- VM3D -*-----------------*---------------*\\" <<
'\n' << \
126 "| ## ## ## ## #### ##### | | Version 1.0 |" <<
'\n' << \
127 "| ## ## ### ### ## ## ## ## | VM3D: Vortex Method | 2019/05/30 |" <<
'\n' << \
128 "| ## ## ## # ## ## ## ## | for 3D Flow Simulation *----------------*" <<
'\n' << \
129 "| #### ## ## ## ## ## ## | Open Source Code |" <<
'\n' << \
130 "| ## ## ## #### ##### | https://www.github.com/vortexmethods/VM3D |" <<
'\n' << \
132 "| Copyright (C) 2019 Ilia Marchevsky, Georgy Shcheglov, Sergey Dergachev |" <<
'\n' << \
133 "*-----------------------------------------------------------------------------*" <<
'\n';
144 "| File name: " << fileName;
145 for (
size_t q = 0; q < 65 - fileName.length(); ++q)
152 for (
size_t q = 0; q < 70 - descr.length(); ++q)
158 std::string dateTimeString =
"| This file was created automatically " +
CurrentDataTime();
161 str << dateTimeString;
162 for (
size_t q = 0; q < 78 - dateTimeString.length(); ++q)
168 "\\*---------------------------------------------------------------------------*/" <<
'\n';
178 str <<
"// " << header <<
'\n';
180 for (
size_t q = 0; q < header.length() + 1; ++q)
188 for (
int i = 0; i < matr.rows(); ++i)
190 for (
int j = 0; j < matr.cols(); ++j)
191 str << matr(i, j) <<
" ";
200 for (
int i = 0; i < matr.rows(); ++i)
202 for (
int j = 0; j < matr.cols(); ++j)
203 str << matr(i, j) <<
" ";
213 for (
int i = 0; i < vec.size(); ++i)
214 str << vec(i) <<
" ";
221 for (
size_t i = 0; i < vec.size(); ++i)
222 str <<
"{ " << vec[i][0] <<
" " << vec[i][1] <<
" } ";
230 double mt = t > 0 ? t : -t;
232 return (mt > 2.0) ? 0.0 : \
233 (mt > 1.0) ? 0.5*sqr(2.0 - mt)*(1.0 - mt) : 1.0 - 2.5*t2 + 1.5*t2*mt;
264 return atan2(
cross3(p, s), p & s);
270 return 0.5*log((s & s) / (p & p));
276 return (a & b) * c + (
Point2D({ -c[1], c[0] }))*
cross3(a, b);
Описание базовых вспомогательных функций
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.
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.
double cross3(const numvector< T, n > &x, const numvector< P, n > &y)
Вычисление третьей компоненты векторного произведения
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
Point2D Omega(const Point2D &a, const Point2D &b, const Point2D &c)
Вспомогательная функция вычисления величины .