39 using namespace VMlib;
41 std::string
Months[12] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December" };
46 std::time_t t = std::time(
nullptr);
49 #pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS 50 std::tm tm = *std::localtime(&t);
53 std::stringstream dateTimeStringStream;
56 std::stringstream st_day, st_hour, st_min, st_sec;
58 st_day <<
"0" << tm.tm_mday;
63 st_hour <<
"0" << tm.tm_hour;
65 st_hour << tm.tm_hour;
68 st_min <<
"0" << tm.tm_min;
73 st_sec <<
"0" << tm.tm_sec;
77 dateTimeStringStream \
78 << st_day.str() <<
" " <<
Months[tm.tm_mon] <<
" " << 1900 + tm.tm_year \
80 << st_hour.str() <<
":" << st_min.str() <<
":" << st_sec.str();
85 return dateTimeStringStream.str();
92 "-------------------------------------------------------------------------------" <<
'\n' << \
93 "##\\ ##\\ ##\\ ##\\ ######\\ #######\\ ##\\ ######\\ #######\\ " <<
'\n' << \
94 "## | ## | ###\\ ### | ## __##\\ ## __##\\ ## | ## ___##\\ ## __##\\ " <<
'\n' << \
95 "## | ## | ####\\ #### | \\__/ ## | ## | ## | ## / \\_ / ## | ## | ## |" <<
'\n' << \
96 "\\##\\ ## | ##\\##\\## ## | ###### | ## | ## | ## / ##### / ## | ## |" <<
'\n' << \
97 " \\##\\## / ## \\### ## | ## ____/ ## | ## | ## / \\___##\\ ## | ## |" <<
'\n' << \
98 " \\### / ## |\\# /## | ## | ## | ## | ## / ##\\ ## | ## | ## |" <<
'\n' << \
99 " \\# / ## | \\_/ ## | ########\\ ####### | ## / \\###### | ####### |" <<
'\n' << \
100 " \\_/ \\__| \\__| \\________| \\_______/ \\__/ \\______/ \\_______/ " <<
'\n' << \
101 "-------------------------------------------------------------------------------" <<
'\n';
109 "/*--------------------------------*- VM2D -*-----------------*---------------*\\" <<
'\n' << \
110 "| ## ## ## ## #### ##### | | Version 1.12 |" <<
'\n' << \
111 "| ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2024/01/14 |" <<
'\n' << \
112 "| ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*" <<
'\n' << \
113 "| #### ## ## ## ## ## | Open Source Code |" <<
'\n' << \
114 "| ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |" <<
'\n' << \
116 "| Copyright (C) 2017-2024 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |" <<
'\n' << \
117 "*-----------------------------------------------------------------------------*" <<
'\n';
122 "/*--------------------------------*- VM3D -*-----------------*---------------*\\" <<
'\n' << \
123 "| ## ## ## ## #### ##### | | Version 1.0 |" <<
'\n' << \
124 "| ## ## ### ### ## ## ## ## | VM3D: Vortex Method | 2019/05/30 |" <<
'\n' << \
125 "| ## ## ## # ## ## ## ## | for 3D Flow Simulation *----------------*" <<
'\n' << \
126 "| #### ## ## ## ## ## ## | Open Source Code |" <<
'\n' << \
127 "| ## ## ## #### ##### | https://www.github.com/vortexmethods/VM3D |" <<
'\n' << \
129 "| Copyright (C) 2019 Ilia Marchevsky, Georgy Shcheglov, Sergey Dergachev |" <<
'\n' << \
130 "*-----------------------------------------------------------------------------*" <<
'\n';
141 "| File name: " << fileName;
142 for (
size_t q = 0; q < 65 - fileName.length(); ++q)
149 for (
size_t q = 0; q < 70 - descr.length(); ++q)
155 std::string dateTimeString =
"| This file was created automatically " +
CurrentDataTime();
158 str << dateTimeString;
159 for (
size_t q = 0; q < 78 - dateTimeString.length(); ++q)
165 "\\*---------------------------------------------------------------------------*/" <<
'\n';
175 str <<
"// " << header <<
'\n';
177 for (
size_t q = 0; q < header.length()+1; ++q)
185 for (
int i = 0; i < matr.rows(); ++i)
187 for (
int j = 0; j < matr.cols(); ++j)
188 str << matr(i, j) <<
" ";
197 for (
int i = 0; i < matr.rows(); ++i)
199 for (
int j = 0; j < matr.cols(); ++j)
200 str << matr(i, j) <<
" ";
210 for (
int i = 0; i < vec.size(); ++i)
211 str << vec(i) <<
" ";
218 for (
size_t i = 0; i < vec.size(); ++i)
219 str <<
"{ " << vec[i][0] <<
" " << vec[i][1] <<
" } ";
227 double mt = t > 0 ? t : -t;
229 return (mt > 2.0) ? 0.0 : \
230 (mt > 1.0) ? 0.5*
sqr(2.0 - mt)*(1.0 - mt) : 1.0 - 2.5*t2 + 1.5*t2*mt;
261 return atan2(
cross3(p, s), p & s);
267 return 0.5*log((s & s) / (p & p));
273 return (a & b) * c + (
Point2D({ -c[1], c[0] }))*
cross3(a, b);
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
Описание базовых вспомогательных функций
void ModifyE2(double *ee2, double dst2)
Модифицирует массив квадратов расстояний до ближайших вихрей из wake.
double Alpha(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления угла между векторами
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
Point2D Omega(const Point2D &a, const Point2D &b, const Point2D &c)
Вспомогательная функция вычисления величины .
T sqr(T x)
Возведение числа в квадрат
double Lambda(const Point2D &p, const Point2D &s)
Вспомогательная функция вычисления логарифма отношения норм векторов
double cross3(const numvector< T, n > &x, const numvector< P, n > &y)
Вычисление третьей компоненты векторного произведения
Класс, опеделяющий двумерный вектор
void PrintLogoToStream(std::ostream &str)
Передача в поток вывода шапки программы VM2D/VM3D.
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
void SaveToStream(const Eigen::MatrixXd &matr, std::ostream &str)
Сохранение матрицы в поток
void PrintUniversalLogoToStream(std::ostream &str)
Передача в поток вывода универсальной шапки программы VM2D/VM3D.
double M4(double t)
Ядро сглаживания (Монагана)