VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
VMlib Namespace Reference

Classes

struct  GeomPoint
 Класс, опеделяющий двумерный вектор More...
 
class  LogStream
 Класс, определяющий работу с потоком логов More...
 
class  nummatrix
 Шаблонный класс, определяющий матрицу фиксированного размера
Фактически представляет собой массив, для которого определено большое количество различных операций.
Для доступа к элементам матрицы используется оператор [][]
Оператор[] имитирует возврат ссылки/константной ссылки на numvector. More...
 
class  numvector
 Шаблонный класс, определяющий вектор фиксированной длины
Фактически представляет собой массив, для которого определено большое количество различных операций.
Для доступа к элементам массива используется оператор []. More...
 
class  PairInt
 Класс, опеделяющий пару целых чисел More...
 
class  Parallel
 
struct  parProp
 Стрктура, содержащая параметры исполнения задачи в параллельном MPI-режиме More...
 
class  PassportGen
 Абстрактный класс, опеделяющий паспорт задачи More...
 
class  Point2D
 
class  Point2Df
 Класс, опеделяющий двумерный вектор More...
 
class  Point4D
 
class  Preprocessor
 Класс, позволяющий выполнять предварительную обработку файлов More...
 
class  Queue
 Класс, опеделяющий список решаемых задач и очередь их прохождения More...
 
class  StreamParser
 Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами
More...
 
class  Task
 Класс, опеделяющий описание каждой задачи в смысле прохождения процесса ее решения More...
 
struct  TimeDiscretizationProperties
 Структура, задающая параметры процесса интегрирования по времени More...
 
class  TimersGen
 Класс для сбора статистики времени исполнения основных шагов алгоритма и вывода ее в файл More...
 
class  TimesGen
 
struct  TParticleCode
 
class  v3D
 Класс, опеделяющий двумерный вектор More...
 
class  vmTimer
 Класс засекания времени More...
 
class  Vortex2D
 Класс, опеделяющий двумерный вихревой элемент
More...
 
class  WorldGen
 Класс, опеделяющий текущую решаемую задачу More...
 

Typedefs

typedef Vortex2D Source2D
 Определение типа данных - источника, имеющего ту же структуру, что и вихрь
 

Enumerations

enum class  TaskState {
  waiting = 0 , starting = 1 , running = 2 , finishing = 3 ,
  done = 4
}
 Тип-перечисление, опеделяющий состояние задачи в процессе работы программы More...
 

Functions

std::string CurrentDataTime ()
 Формирование строки с текущем временем и датой
 
void PrintLogoToStream (std::ostream &str)
 Передача в поток вывода шапки программы VM2D/VM3D.
 
void PrintUniversalLogoToStream (std::ostream &str)
 Передача в поток вывода универсальной шапки программы VM2D/VM3D.
 
void PrintLogoToTextFile (std::ofstream &str, const std::string &fileName, const std::string &descr)
 Формирование заголовка файла программы VM2D/VM3D.
 
void PrintHeaderToTextFile (std::ofstream &str, const std::string &header)
 Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
 
template<typename T >
std::ostream & operator<< (std::ostream &_stream, const std::vector< T > &_vec)
 Переопределение оператора "<<" для вывода в поток вектора std::vector.
 
std::ostream & operator<< (std::ostream &_stream, const std::pair< std::pair< std::string, int >, std::string > &_pair)
 Переопределение оператора "<<" для вывода в поток пары ((строка, целое число), строка)
 
std::ostream & operator<< (std::ostream &_stream, const std::pair< std::string, int > &_pair)
 Переопределение оператора "<<" для вывода в поток пары (строка, целое число)
 
bool fileExistTest (std::string &fileName, LogStream &info, bool exitKey=false, const std::list< std::string > &extList={})
 Проверка существования файла
 
std::string fileNameStep (const std::string &name, int length, size_t number, const std::string &ext)
 Формирование имени файла
 
void copyFile (const std::string &fileNameFrom, const std::string &fileNameTo)
 Копирование файла
 
void CreateDirectory (const std::string &dir, const std::string &name)
 Создание каталога
 
template<typename T >
sqr (T x)
 Возведение числа в квадрат
 
template<typename T >
double macos (const T x)
 Усовершенствованный аркосинус
 
template<typename T >
int sign (T x)
 Усовершенствованный сигнум
 
void SaveToStream (const Eigen::MatrixXd &matr, std::ostream &str)
 Сохранение матрицы в поток
 
void SaveToStream (const Eigen::MatrixXcd &matr, std::ostream &str)
 Сохранение комплекснозначной матрицы в поток
 
void SaveToStream (const Eigen::VectorXd &vec, std::ostream &str)
 Сохранение вектора в поток
 
void SaveToStream (const std::vector< Point2D > &vec, std::ostream &str)
 Сохранение списка из двумерных векторов (точек) в поток
 
double M4 (double t)
 Ядро сглаживания (Монагана)
 
void ModifyE2 (double *ee2, double dst2)
 Модифицирует массив квадратов расстояний до ближайших вихрей из wake.
 
double Alpha (const Point2D &p, const Point2D &s)
 Вспомогательная функция вычисления угла между векторами
 
double Lambda (const Point2D &p, const Point2D &s)
 Вспомогательная функция вычисления логарифма отношения норм векторов
 
Point2D Omega (const Point2D &a, const Point2D &b, const Point2D &c)
 Вспомогательная функция вычисления величины \( (\vec a \cdot \vec b) \cdot \vec c + (\vec a \times \vec b) \times \vec c \).
 
template<typename T >
void SwapEnd (T &var)
 Вспомогательная функция перестановки байт местами (нужно для сохранения бинарных VTK)
 
double boundDenom (double r2, double eps2)
 Способ сглаживания скорости вихря (вихрь Рэнкина или вихрь Ламба)
 
template<typename T , typename P , size_t n, size_t m>
auto operator& (const numvector< P, n > &x, const nummatrix< T, n, m > &A) -> numvector< typename std::remove_const< decltype(x[0] *A.data()[0])>::type, m >
 Умножение вектора на матрицу
 
template<typename T , typename P , size_t n, size_t m>
auto operator| (const numvector< T, n > &x, const numvector< P, m > &y) -> nummatrix< typename std::remove_const< decltype(x[0] *y[0])>::type, n, m >
 Умножение вектора на вектор внешним образом
 
template<typename T , size_t n, size_t m>
std::ostream & operator<< (std::ostream &str, const nummatrix< T, n, m > &x)
 Перегрузка оператора "<<" вывода в поток
 
template<typename T , size_t n>
numvector< T, n > operator* (double c, const numvector< T, n > &x)
 Оператор "*" умножения вектора на число (число слева, вектор справа)
 
template<typename T , typename P , size_t n>
auto operator* (const P c, const numvector< T, n > &x) -> numvector< typename std::remove_const< decltype(x[0] *c)>::type, n >
 Оператор "*" умножения вектора на число (число слева, вектор справа)
 
template<typename T , typename P , typename R >
void cross (const numvector< T, 3 > &x, const numvector< P, 3 > &y, numvector< R, 3 > &z)
 Быстрое вычисление векторного произведения
 
template<typename T , typename P , size_t n>
auto dist2 (const numvector< T, n > &x, const numvector< P, n > &y) -> typename std::remove_const< decltype(x[0] - y[0])>::type
 Вычисление квадрата расстояния между двумя точками
 
template<typename R = double, typename T , typename P , size_t n>
dist (const numvector< T, n > &x, const numvector< P, n > &y)
 Вычисление расстояния между двумя точками
 
template<typename T , size_t n>
std::ostream & operator<< (std::ostream &str, const numvector< T, n > &x)
 Оператор "<<" вывода вектора в поток
 
template<typename T , typename P , typename R , typename S , size_t n>
std::pair< numvector< T, n >, numvector< P, n > > & operator+= (std::pair< numvector< T, n >, numvector< P, n > > &a, const std::pair< numvector< R, n >, numvector< S, n > > &b)
 Оператор прибавления "+=" для пар векторов
 
template<typename T , typename P , typename R , typename S , size_t n>
auto operator+ (const std::pair< numvector< T, n >, numvector< P, n > > &a, const std::pair< numvector< R, n >, numvector< S, n > > &b) -> std::pair< numvector< typename std::remove_const< decltype(a.first[0]+b.first[0])>::type, n >, numvector< typename std::remove_const< decltype(a.second[0]+b.second[0])>::type, n > >
 Оператор сложения "+" для пар векторов
 
template<typename T , typename P , typename R , size_t n>
std::pair< numvector< T, n >, numvector< P, n > > & operator*= (std::pair< numvector< T, n >, numvector< P, n > > &a, R c)
 Оператор домножения "*=" пары векторов на число (пара слева, число справа)
 
template<typename T , typename P , typename R , size_t n>
auto operator* (R c, const std::pair< numvector< T, n >, numvector< P, n > > &a) -> std::pair< numvector< typename std::remove_const< decltype(c *a.first[0])>::type, n >, numvector< typename std::remove_const< decltype(c *a.second[0])>::type, n > >
 Оператор умножения "*" числа на пару векторов (число слева, пара справа)
 
template<typename T , typename P , typename R , size_t n>
auto operator* (const std::pair< numvector< T, n >, numvector< P, n > > &a, R c) -> std::pair< numvector< typename std::remove_const< decltype(a.first[0] *c)>::type, n >, numvector< typename std::remove_const< decltype(a.second[0] *c)>::type, n > >
 Оператор умножения "*" пары векторов на число (пара слева, число справа)
 
template<typename T , typename P , size_t n>
std::ostream & operator<< (std::ostream &str, const std::pair< numvector< T, n >, numvector< P, n > > &x)
 Оператор "<<" вывода пары векторов в поток
 
template<typename T , typename P , size_t n>
double cross3 (const numvector< T, n > &x, const numvector< P, n > &y)
 Вычисление третьей компоненты векторного произведения
 
std::pair< PairInt, PairInt > & operator+= (std::pair< PairInt, PairInt > &a, const std::pair< PairInt, PairInt > &b)
 
Point2D multz (const Point2D &a, const Point2D &b)
 Умножение комплексных чисел
 
Point2D multzA (const Point2D &a, const Point2D &b)
 Умножение a на комплексно сопряженноe к b.
 
int is_match (const std::string &line_, const std::string &pattern_)
 Функция сверки строки с шаблоном, который может содержать знаки * и ?
 
v3D operator* (double c, const v3D &x)
 
std::pair< v3D, v3D > & operator+= (std::pair< v3D, v3D > &a, const std::pair< v3D, v3D > &b)
 
std::pair< v3D, v3D > & operator*= (std::pair< v3D, v3D > &a, double c)
 
std::pair< v3D, v3Doperator* (std::pair< v3D, v3D > &a, double c)
 

Typedef Documentation

◆ Source2D

Определение типа данных - источника, имеющего ту же структуру, что и вихрь

Definition at line 107 of file Vortex2D.h.

Enumeration Type Documentation

◆ TaskState

enum class VMlib::TaskState
strong

Тип-перечисление, опеделяющий состояние задачи в процессе работы программы

Может принимать 5 различных значений:

  • waiting (0) — ожидает запуска;
  • starting (1) — стартует;
  • running (2) — считает;
  • finishing (3) — останавливается;
  • done (4) — отсчитано;
Author
Марчевский Илья Константинович \Version 1.14
Date
6 марта 2026 г.
Enumerator
waiting 

задача ожидает запуска

starting 

задача стартует

running 

задача решается

finishing 

задача финиширует

done 

задача решена

Definition at line 62 of file Task.h.

63 {
65 waiting = 0,
66
68 starting = 1,
69
71 running = 2,
72
74 finishing = 3,
75
77 done = 4
78 };
@ finishing
задача финиширует
@ starting
задача стартует
@ done
задача решена
@ running
задача решается
@ waiting
задача ожидает запуска

Function Documentation

◆ Alpha()

double VMlib::Alpha ( const Point2D p,
const Point2D s 
)

Вспомогательная функция вычисления угла между векторами

Parameters
[in]pконстантная ссылка на первый вектор
[in]sконстантная ссылка на второй вектор
Returns
угол между векторами в диапазоне \( (-\pi; \pi] \)

Definition at line 262 of file defs.cpp.

263{
264 return atan2(cross3(p, s), p & s);
265}
double cross3(const numvector< T, n > &x, const numvector< P, n > &y)
Вычисление третьей компоненты векторного произведения
Definition numvector.h:1111
Here is the call graph for this function:
Here is the caller graph for this function:

◆ boundDenom()

double VMlib::boundDenom ( double  r2,
double  eps2 
)
inline

Способ сглаживания скорости вихря (вихрь Рэнкина или вихрь Ламба)

Definition at line 563 of file defs.h.

564 {
565#ifndef LAMBVORTEX
566 return std::max(r2, eps2);
567#else
568 if (r2 > eps2)
569 return std::max(r2, eps2);
570 else
571 return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
572#endif
573 }
Here is the caller graph for this function:

◆ copyFile()

void VMlib::copyFile ( const std::string &  fileNameFrom,
const std::string &  fileNameTo 
)
inline

Копирование файла

Parameters
[in]fileNameFromконстантная ссылка на имя исходного файла
[in]fileNameToконстантная ссылка на имя нового файла

Definition at line 412 of file defs.h.

413 {
414 std::string buf;
415 buf.resize(BUFSIZ);
416
417 FILE *in, *out;
418 size_t n;
419
420
421#pragma warning (push)
422#pragma warning (disable: 4996)
423 in = fopen(fileNameFrom.c_str(), "rb");
424 out = fopen(fileNameTo.c_str(), "wb");
425#pragma warning (pop)
426
427 while ((n = fread((void*)buf.data(), 1, BUFSIZ, in)) != 0)
428 {
429 fwrite((void*)buf.data(), 1, n, out);
430 }
431
432 std::fclose(in);
433 std::fclose(out);
434 }//copyFile

◆ CreateDirectory()

void VMlib::CreateDirectory ( const std::string &  dir,
const std::string &  name 
)
inline

Создание каталога

Parameters
[in]dirконстантная ссылка на имя текущего каталога (со слешем на конце)
[in]nameконстантная ссылка на имя создаваемого подкаталога

Definition at line 441 of file defs.h.

442 {
443#if defined(_WIN32)
444 _mkdir((dir + name).c_str());
445#else
446 mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
447#endif
448 }
Here is the caller graph for this function:

◆ cross()

template<typename T , typename P , typename R >
void VMlib::cross ( const numvector< T, 3 > &  x,
const numvector< P, 3 > &  y,
numvector< R, 3 > &  z 
)

Быстрое вычисление векторного произведения

Определено только для трехмерных векторов
Оптимизировано за счет отсутствия вызова конструктора, предполагает наличие трех уже созданных векторов

Template Parameters
Tтип данных компонент вектора первого множителя
Pтип данных компонент вектора второго множителя
Rтип данных компонент вектора результата
Parameters
[in]xконстантная ссылка на первый множитель
[in]yконстантная ссылка на второй множитель
[out]zссылка на результат векторного умножения

Definition at line 819 of file numvector.h.

820 {
821 z = { x[1] * y[2] - x[2] * y[1], x[2] * y[0] - x[0] * y[2], x[0] * y[1] - x[1] * y[0] };
822 }//cross(...)

◆ cross3()

template<typename T , typename P , size_t n>
double VMlib::cross3 ( const numvector< T, n > &  x,
const numvector< P, n > &  y 
)

Вычисление третьей компоненты векторного произведения

Определено для векторов любой размерности, используются только первые 2 компоненты исходных векторов

Template Parameters
Tтип данных компонент вектора - первого множителя
Pтип данных компонент вектора - второго множителя
nразмерность исходных векторов
Parameters
[in]xконстантная ссылка на первый множитель
[in]yконстантная ссылка на второй множитель
Returns
третья компонента вектороного произведения

Definition at line 1111 of file numvector.h.

1112 {
1113 //deprecate: use numvector.operator^ instead of cross3(numvector<>,numvector<>)
1114
1115 return (x[0] * y[1] - x[1] * y[0]);
1116 }//cross3(...)
Here is the caller graph for this function:

◆ CurrentDataTime()

std::string VMlib::CurrentDataTime ( )

Формирование строки с текущем временем и датой

Returns
Возвращает строку с текущей датой и временем в формате XX Month 20XX at XX:XX:XX

Definition at line 47 of file defs.cpp.

48{
49 std::time_t t = std::time(nullptr);
50
51#pragma warning(push)
52#pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS
53 std::tm tm = *std::localtime(&t);
54#pragma warning(pop)
55
56 std::stringstream dateTimeStringStream;
57 //dateTimeStringStream << "| This file was created automatically " << std::put_time(&tm, "%d %B %Y") << " at " << std::put_time(&tm, "%H:%M:%S");
58
59 std::stringstream st_day, st_hour, st_min, st_sec;
60 if (tm.tm_mday < 10)
61 st_day << "0" << tm.tm_mday;
62 else
63 st_day << tm.tm_mday;
64
65 if (tm.tm_hour < 10)
66 st_hour << "0" << tm.tm_hour;
67 else
68 st_hour << tm.tm_hour;
69
70 if (tm.tm_min < 10)
71 st_min << "0" << tm.tm_min;
72 else
73 st_min << tm.tm_min;
74
75 if (tm.tm_sec < 10)
76 st_sec << "0" << tm.tm_sec;
77 else
78 st_sec << tm.tm_sec;
79
80 dateTimeStringStream \
81 << st_day.str() << " " << Months[tm.tm_mon] << " " << 1900 + tm.tm_year \
82 << " at " \
83 << st_hour.str() << ":" << st_min.str() << ":" << st_sec.str();
84
85 //std::string dateTimeString;
86 //dateTimeStringStream >> dateTimeString;
87
88 return dateTimeStringStream.str();
89}
std::string Months[12]
Definition defs.cpp:44
Here is the caller graph for this function:

◆ dist()

template<typename R = double, typename T , typename P , size_t n>
R VMlib::dist ( const numvector< T, n > &  x,
const numvector< P, n > &  y 
)

Вычисление расстояния между двумя точками

Template Parameters
Tтип данных компонент радиус-вектора первой точки
Pтип данных компонент радиус-вектора второй точки
Rтип данных результата (по умолчанию double)
Parameters
[in]xконстантная ссылка на радиус-вектор первой точки
[in]yконстантная ссылка на радиус-вектор второй точки
Returns
расстояние между точками

Definition at line 851 of file numvector.h.

852 {
853 numvector<R, n> p = x - y;
854 return sqrt(p&p);
855 }//dist(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив,...
Definition numvector.h:99

◆ dist2()

template<typename T , typename P , size_t n>
auto VMlib::dist2 ( const numvector< T, n > &  x,
const numvector< P, n > &  y 
) -> typename std::remove_const<decltype(x[0] - y[0])>::type

Вычисление квадрата расстояния между двумя точками

Template Parameters
Tтип данных компонент первого радиус-вектора
Pтип данных компонент второго радиус-вектора
nразмерность векторов
Parameters
[in]xконстантная ссылка на радиус-вектор первой точки
[in]yконстантная ссылка на радиус-вектор второй точки
Returns
квадрат расстояния между точками

Definition at line 835 of file numvector.h.

836 {
837 numvector<typename std::remove_const<decltype(x[0] - y[0])>::type, n> p = x - y;
838 return p.length2();
839 }//dist2(...)
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition numvector.h:386
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fileExistTest()

bool VMlib::fileExistTest ( std::string &  fileName,
LogStream info,
bool  exitKey = false,
const std::list< std::string > &  extList = {} 
)
inline

Проверка существования файла

Parameters
[in,out]fileNameссылка на имя проверяемого файла, заменяется на имя + то из расширений, с которым файл присутствует
[in,out]infoссылка на поток вывода логов/ошибок
[in]extListконстантная ссылка на список проверяемых расширений
Returns
true, если файл существует; false если файл отсутствует

Definition at line 342 of file defs.h.

342 {})
343 {
344 std::list<std::string> fullExtList(extList);
345 fullExtList.insert(fullExtList.begin(), "");
346
347 for (const auto& ext : fullExtList)
348 {
349 std::string newFileName = ((ext == "") ? fileName : (fileName + "." + ext));
350 std::ifstream f(newFileName.c_str());
351 if (f.good())
352 {
353 f.close();
354 f.clear();
355
356 info('i') << "file " << newFileName << " is found" << std::endl;
357 fileName = newFileName;
358 return true;
359 }
360 }
361
362 if (exitKey)
363 {
364 info('e') << "file " << fileName << " is not found" << std::endl;
365 exit(-1);
366 }
367 else
368 info('i') << "file " << fileName << " is not found" << std::endl;
369
370 return false;
371 }
Here is the caller graph for this function:

◆ fileNameStep()

std::string VMlib::fileNameStep ( const std::string &  name,
int  length,
size_t  number,
const std::string &  ext 
)
inline

Формирование имени файла

Parameters
[in]nameконстантная ссылка на префикс имени файла
[in]lengthколичество знаков под номер
[in]numberномер для имени файла
[in]extконстантная ссылка на раширение (дописывается, если непустое)
Returns
строку — имя текстового файла

Definition at line 381 of file defs.h.

382 {
383 std::string fname(name);
384
385 size_t dec = 1;
386
387 for (int i = 1; i < length; ++i)
388 {
389 dec *= 10;
390 if (number < dec)
391 fname += "0";
392 }
393
394 std::ostringstream ss;
395 ss << number;
396 fname += ss.str();
397
398 if (ext.size() > 0)
399 {
400 fname += ".";
401 fname += ext;
402 }
403
404 return fname;
405 }
Here is the caller graph for this function:

◆ is_match()

int VMlib::is_match ( const std::string &  line_,
const std::string &  pattern_ 
)
inline

Функция сверки строки с шаблоном, который может содержать знаки * и ?

Parameters
[in]line_константная ссылка на проверяемую строку
[in]pattern_константная ссылка на строку-шаблон, с которой производится сверка rerurn признак соответствия строки шаблону

Definition at line 59 of file StreamParser.h.

60 {
61
62 const auto lineCStr = line_.c_str();
63 const auto patternCStr = pattern_.c_str();
64
65 const char* line = &(lineCStr[0]);
66 const char* pattern = &(patternCStr[0]);
67
68 // returns 1 (true) if there is a match
69 // returns 0 if the pattern is not whitin the line
70 int wildcard = 0;
71
72 const char* last_pattern_start = 0;
73 const char* last_line_start = 0;
74 do
75 {
76 if (*pattern == *line)
77 {
78 if (wildcard == 1)
79 last_line_start = line + 1;
80
81 line++;
82 pattern++;
83 wildcard = 0;
84 }
85 else if (*pattern == '?')
86 {
87 if (*(line) == '\0') // the line is ended but char was expected
88 return 0;
89 if (wildcard == 1)
90 last_line_start = line + 1;
91 line++;
92 pattern++;
93 wildcard = 0;
94 }
95 else if (*pattern == '*')
96 {
97 if (*(pattern + 1) == '\0')
98 return 1;
99
100 last_pattern_start = pattern;
101 //last_line_start = line + 1;
102 wildcard = 1;
103
104 pattern++;
105 }
106 else if (wildcard)
107 {
108 //if (*line == *pattern) //is always false
109 //{
110 // wildcard = 0;
111 // line++;
112 // pattern++;
113 // last_line_start = line + 1;
114 //}
115 //else
116 line++;
117 }
118 else
119 {
120 if ((*pattern) == '\0' && (*line) == '\0') // end of mask
121 return 1; // if the line also ends here then the pattern match
122 else
123 {
124 if (last_pattern_start != 0) // try to restart the mask on the rest
125 {
126 pattern = last_pattern_start;
127 line = last_line_start;
128 last_line_start = 0;
129 }
130 else
131 return 0;
132 }
133 }
134
135 } while (*line);
136
137 if (*pattern == '\0')
138 return 1;
139 else
140 return 0;
141 };
Here is the caller graph for this function:

◆ Lambda()

double VMlib::Lambda ( const Point2D p,
const Point2D s 
)

Вспомогательная функция вычисления логарифма отношения норм векторов

Parameters
[in]pконстантная ссылка на первый вектор
[in]sконстантная ссылка на второй вектор
Returns
логарифм отношения норм векторов

Definition at line 268 of file defs.cpp.

269{
270 return 0.5*log((s & s) / (p & p));
271}
Here is the caller graph for this function:

◆ M4()

double VMlib::M4 ( double  t)

Ядро сглаживания (Монагана)

Parameters
[in]tаргумент ядра
Returns
Значение ядра сглаживания в конкретной точке

Definition at line 227 of file defs.cpp.

228{
229 double t2 = t*t;
230 double mt = t > 0 ? t : -t;
231
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;
234}//M4(...)

◆ macos()

template<typename T >
double VMlib::macos ( const T  x)
inline

Усовершенствованный аркосинус

Template Parameters
Tтип данных
Parameters
[in]xаргумент
Returns
аркосинус аргумента, если |x|<1, или 0, или Pi,

Definition at line 466 of file defs.h.

467 {
468 double res = abs(x) > 1.0 ? 0.5*PI*(1 - sign(x)) : acos(x);
469 return res;
470 }
const double PI
Число .
Definition defs.h:82
Here is the call graph for this function:

◆ ModifyE2()

void VMlib::ModifyE2 ( double *  ee2,
double  dst2 
)

Модифицирует массив квадратов расстояний до ближайших вихрей из wake.

Parameters
[out]ee2массив расстояний до трех ближайших вихрей
[in]dst2новое расстояние (заменит одно из расстояний в ee2, если меньше)

Definition at line 236 of file defs.cpp.

237{
238 if (dst2 > 0)
239 {
240 if (dst2 < ee2[0])
241 {
242 ee2[2] = ee2[1];
243 ee2[1] = ee2[0];
244 ee2[0] = dst2;
245 }//if (dist2<ee2[0])
246 else
247 {
248 if (dst2 < ee2[1])
249 {
250 ee2[2] = ee2[1];
251 ee2[1] = dst2;
252 }// if (dist2<ee2[1])
253 else
254 if (dst2 < ee2[2])
255 ee2[2] = dst2;
256 }//else
257 }//if (dst2>0)
258}//ModifyE2(...)
Here is the caller graph for this function:

◆ multz()

Point2D VMlib::multz ( const Point2D a,
const Point2D b 
)
inline

Умножение комплексных чисел

Definition at line 208 of file Point2D.h.

209 {
210 Point2D result;
211 result[0] = a[0] * b[0] - a[1] * b[1];
212 result[1] = a[1] * b[0] + a[0] * b[1];
213 return result;
214 }

◆ multzA()

Point2D VMlib::multzA ( const Point2D a,
const Point2D b 
)
inline

Умножение a на комплексно сопряженноe к b.

Definition at line 217 of file Point2D.h.

218 {
219 Point2D result;
220 result[0] = a[0] * b[0] + a[1] * b[1];
221 result[1] = a[1] * b[0] - a[0] * b[1];
222 return result;
223 }

◆ Omega()

Point2D VMlib::Omega ( const Point2D a,
const Point2D b,
const Point2D c 
)

Вспомогательная функция вычисления величины \( (\vec a \cdot \vec b) \cdot \vec c + (\vec a \times \vec b) \times \vec c \).

Для оптимизации все векторы считаются двумерными

Parameters
[in]aконстантная ссылка на первый вектор
[in]bконстантная ссылка на второй вектор
[in]cконстантная ссылка на третий вектор
Returns
логарифм отношения норм векторов

Definition at line 274 of file defs.cpp.

275{
276 return (a & b) * c + (Point2D({ -c[1], c[0] }))*cross3(a, b);
277}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator&()

template<typename T , typename P , size_t n, size_t m>
auto VMlib::operator& ( const numvector< P, n > &  x,
const nummatrix< T, n, m > &  A 
) -> numvector<typename std::remove_const<decltype(x[0] * A.data()[0])>::type, m>

Умножение вектора на матрицу

Template Parameters
Tтип данных матрицы
Pтип данных вектора
nдлина вектора и число строк матрицы
mчисло столбцов матрицы
Parameters
[in]Aконстантная ссылка на матрицу
[in]xконстантная ссылка на вектор
Returns
вектор — результат умножения матрицы на вектор

Definition at line 532 of file nummatrix.h.

534 {
535 numvector<typename std::remove_const<decltype(x[0] * A.data()[0])>::type, m> res;
536 for (size_t i = 0; i < m; ++i)
537 {
538 res[i] = 0;
539 for (size_t j = 0; j < n; ++j)
540 res[i] += x[j] * A[j][i];
541 }
542 return res;
543 }//operator&(...)

◆ operator*() [1/6]

template<typename T , typename P , size_t n>
auto VMlib::operator* ( const P  c,
const numvector< T, n > &  x 
) -> numvector<typename std::remove_const<decltype(x[0] * c)>::type, n>

Оператор "*" умножения вектора на число (число слева, вектор справа)

Template Parameters
Tтип данных компонент вектора
Pтип данных числового множителя
nдлина вектора
Parameters
[in]cчисловой множитель
[in]xконстантная ссылка на умножаемый вектор
Returns
результат умножения вектора на число, приведенный к соответствующему типу

Definition at line 797 of file numvector.h.

798 {
799 numvector<typename std::remove_const<decltype(x[0] * c)>::type, n> res;
800 for (size_t i = 0; i < n; ++i)
801 res[i] = x[i] * c;
802 return res;
803 }//operator*(...)

◆ operator*() [2/6]

template<typename T , typename P , typename R , size_t n>
auto VMlib::operator* ( const std::pair< numvector< T, n >, numvector< P, n > > &  a,
c 
) -> std::pair<numvector<typename std::remove_const<decltype(a.first[0] * c)>::type, n>, numvector<typename std::remove_const<decltype(a.second[0] * c)>::type, n >>
inline

Оператор умножения "*" пары векторов на число (пара слева, число справа)

tparam T тип данных вектора - первого компонента в паре tparam P тип данных вектора - второго компонента в паре tparam R тип данных числового множителя tparam n длина векторов - компонентов пары param[in] c числовой множитель param[in] a константная ссылка на пару return пару, получаемую при покомпонентном умножении пары на число, приведенную к нужному типу

Definition at line 972 of file numvector.h.

974 {
975 return c * a;
976 }//operator*(...)

◆ operator*() [3/6]

template<typename T , size_t n>
numvector< T, n > VMlib::operator* ( double  c,
const numvector< T, n > &  x 
)

Оператор "*" умножения вектора на число (число слева, вектор справа)

Template Parameters
Tтип данных компонент вектора и множителя
nдлина вектора
Parameters
[in]cчисловой множитель
[in]xконстантная ссылка на умножаемый вектор
Returns
результат умножения вектора на число, приведенный к соответствующему типу

Definition at line 779 of file numvector.h.

780 {
781 numvector<T, n> res(x);
782 for (size_t i = 0; i < n; ++i)
783 res[i] *= c;
784 return res;
785 }//operator*(...)

◆ operator*() [4/6]

v3D VMlib::operator* ( double  c,
const v3D x 
)
inline
Todo:
Исследовать целесообразность наличия явной перегрузки оператора умножения

Definition at line 128 of file v3D.h.

129 {
130 v3D res(x);
131 for (size_t i = 0; i < 3; ++i)
132 res[i] *= c;
133 return res;
134 }//operator*(...)
Класс, опеделяющий двумерный вектор
Definition v3D.h:60

◆ operator*() [5/6]

template<typename T , typename P , typename R , size_t n>
auto VMlib::operator* ( c,
const std::pair< numvector< T, n >, numvector< P, n > > &  a 
) -> std::pair<numvector<typename std::remove_const<decltype(c * a.first[0])>::type, n>, numvector<typename std::remove_const<decltype(c * a.second[0])>::type, n >>
inline

Оператор умножения "*" числа на пару векторов (число слева, пара справа)

tparam T тип данных вектора - первого компонента в паре tparam P тип данных вектора - второго компонента в паре tparam R тип данных числового множителя tparam n длина векторов - компонентов пары param[in] c числовой множитель param[in] a константная ссылка на пару return пару, получаемую при покомпонентном умножении пары на число, приведенную к нужному типу

Definition at line 952 of file numvector.h.

954 {
955 std::pair<numvector<typename std::remove_const<decltype(c * a.first[0])>::type, n>, numvector<typename std::remove_const<decltype(c * a.second[0])>::type, n >> res;
956 res.first = c * a.first;
957 res.second = c * a.second;
958 return res;
959 }//operator*(...)

◆ operator*() [6/6]

std::pair< v3D, v3D > VMlib::operator* ( std::pair< v3D, v3D > &  a,
double  c 
)
inline

Definition at line 151 of file v3D.h.

152 {
153 return {a.first * c, a.second * c};
154 }//operator+=(...)

◆ operator*=() [1/2]

template<typename T , typename P , typename R , size_t n>
std::pair< numvector< T, n >, numvector< P, n > > & VMlib::operator*= ( std::pair< numvector< T, n >, numvector< P, n > > &  a,
c 
)
inline

Оператор домножения "*=" пары векторов на число (пара слева, число справа)

tparam T тип данных вектора - первого компонента в паре tparam P тип данных вектора - второго компонента в паре tparam R тип данных числового множителя tparam n длина векторов - компонентов пары param[in] a ссылка на пару param[in] c числовой множитель return ссылка на пару после ее покомпонентного домножения на число

Definition at line 934 of file numvector.h.

935 {
936 a.first *= c;
937 a.second *= c;
938 return a;
939 }//operator*=(...)

◆ operator*=() [2/2]

std::pair< v3D, v3D > & VMlib::operator*= ( std::pair< v3D, v3D > &  a,
double  c 
)
inline

Definition at line 144 of file v3D.h.

145 {
146 a.first *= c;
147 a.second *= c;
148 return a;
149 }//operator+=(...)

◆ operator+()

template<typename T , typename P , typename R , typename S , size_t n>
auto VMlib::operator+ ( const std::pair< numvector< T, n >, numvector< P, n > > &  a,
const std::pair< numvector< R, n >, numvector< S, n > > &  b 
) -> std::pair<numvector<typename std::remove_const<decltype(a.first[0] + b.first[0])>::type, n>, numvector<typename std::remove_const<decltype(a.second[0] + b.second[0])>::type, n >>
inline

Оператор сложения "+" для пар векторов

tparam T тип данных вектора - первого компонента в левой паре tparam P тип данных вектора - второго компонента в левой паре tparam R тип данных вектора - первого компонента в правой паре tparam S тип данных вектора - второго компонента в правой паре tparam n длина векторов - компонентов обеих пар param[in] a константная ссылка на левую пару param[in] b константная ссылка на правую пару return пару, получаемую при покомпонентном суммировании левой и правой пар, приведенную к нужному типу

Definition at line 914 of file numvector.h.

916 {
917 std::pair<numvector<typename std::remove_const<decltype(a.first[0] + b.first[0])>::type, n>, numvector<typename std::remove_const<decltype(a.second[0] + b.second[0])>::type, n >> res;
918 res.first = a.first + b.first;
919 res.second = a.second + b.second;
920 return res;
921 }//operator+(...)

◆ operator+=() [1/3]

template<typename T , typename P , typename R , typename S , size_t n>
std::pair< numvector< T, n >, numvector< P, n > > & VMlib::operator+= ( std::pair< numvector< T, n >, numvector< P, n > > &  a,
const std::pair< numvector< R, n >, numvector< S, n > > &  b 
)
inline

Оператор прибавления "+=" для пар векторов

tparam T тип данных вектора - первого компонента в паре tparam P тип данных вектора - второго компонента в паре tparam R тип данных вектора - первого компонента в прибавляемой паре tparam S тип данных вектора - второго компонента в прибавляемой паре tparam n длина векторов - компонентов обеих пар param[in] a ссылка на первую пару param[in] b константная ссылка на прибавляемую пару return ссылку на первую пару после прибавления к ней второй пары

Definition at line 895 of file numvector.h.

896 {
897 a.first += b.first;
898 a.second += b.second;
899 return a;
900 }//operator+=(...)

◆ operator+=() [2/3]

std::pair< PairInt, PairInt > & VMlib::operator+= ( std::pair< PairInt, PairInt > &  a,
const std::pair< PairInt, PairInt > &  b 
)
inline

Definition at line 89 of file PairInt.h.

90 {
91 a.first += b.first;
92 a.second += b.second;
93 return a;
94 }//operator+=(...)

◆ operator+=() [3/3]

std::pair< v3D, v3D > & VMlib::operator+= ( std::pair< v3D, v3D > &  a,
const std::pair< v3D, v3D > &  b 
)
inline

Definition at line 137 of file v3D.h.

138 {
139 a.first += b.first;
140 a.second += b.second;
141 return a;
142 }//operator+=(...)

◆ operator<<() [1/6]

std::ostream & VMlib::operator<< ( std::ostream &  _stream,
const std::pair< std::pair< std::string, int >, std::string > &  _pair 
)
inline

Переопределение оператора "<<" для вывода в поток пары ((строка, целое число), строка)

Компоненты пары выводятся в скобках с разделителем ","

Parameters
[in,out]_streamссылка на поток для вывода
[in]_pairконстантная ссылка на выводимую пару
Returns
ссылка на поток

Definition at line 314 of file defs.h.

315 {
316 _stream << "( ( " << _pair.first.first << ", " << _pair.first.second << " ), " << _pair.second << " )";
317 return _stream;
318 }//operator<<(...)

◆ operator<<() [2/6]

std::ostream & VMlib::operator<< ( std::ostream &  _stream,
const std::pair< std::string, int > &  _pair 
)
inline

Переопределение оператора "<<" для вывода в поток пары (строка, целое число)

Компоненты пары выводятся в скобках с разделителем ","

Parameters
[in,out]_streamссылка на поток для вывода
[in]_pairконстантная ссылка на выводимую пару
Returns
ссылка на поток

Definition at line 328 of file defs.h.

329 {
330 _stream << "( " << _pair.first << ", " << _pair.second << " )";
331 return _stream;
332 }//operator<<(...)

◆ operator<<() [3/6]

template<typename T >
std::ostream & VMlib::operator<< ( std::ostream &  _stream,
const std::vector< T > &  _vec 
)

Переопределение оператора "<<" для вывода в поток вектора std::vector.

Компоненты вектора выводятся в фигурных скобках с разделителем ";"

Template Parameters
Tтип элементов в векторе
Parameters
[in,out]_streamссылка на поток для вывода
[in]_vecконстантная ссылка на выводимый вектор
Returns
ссылка на поток

Definition at line 292 of file defs.h.

293 {
294 size_t n = _vec.size();
295 _stream << "{ ";
296 if (n > 0)
297 {
298 for (size_t j = 0; j < n - 1; ++j)
299 _stream << _vec[j] << ", ";
300 _stream << _vec[n - 1];
301 }
302 _stream << " }";
303 return _stream;
304 }//operator<<(...)

◆ operator<<() [4/6]

template<typename T , size_t n, size_t m>
std::ostream & VMlib::operator<< ( std::ostream &  str,
const nummatrix< T, n, m > &  x 
)

Перегрузка оператора "<<" вывода в поток

Выводит в поток вектор, элементы которого записаны в фигурных скобках и разделены запятой с пробелом

Template Parameters
Tтип данных
nразмерность вектора
Parameters
[in,out]strссылка на поток вывода
[in]xконстантная ссылка на вектор
Returns
ссылка на поток вывода

Definition at line 572 of file nummatrix.h.

573 {
574 str << "{ ";
575 for (size_t j = 0; j < n - 1; ++j)
576 str << x[j] << ", ";
577 str << x[n - 1];
578 str << " }";
579 return str;
580 }//operator<<

◆ operator<<() [5/6]

template<typename T , size_t n>
std::ostream & VMlib::operator<< ( std::ostream &  str,
const numvector< T, n > &  x 
)

Оператор "<<" вывода вектора в поток

Выводит в поток вектор, элементы которого записываются в фигурных скобках и разделены запятой с пробелом

Template Parameters
Tтип данных компонент вектора
nразмерность вектора
Parameters
[in,out]strссылка на поток вывода
[in]xконстантная ссылка на вектор
Returns
ссылку на поток вывода

Definition at line 868 of file numvector.h.

869 {
870 str << "{ ";
871 for (size_t j = 0; j < n - 1; ++j)
872 str << x[j] << ", ";
873 str << x[n - 1];
874 str << " }";
875 return str;
876 }//operator<<(...)

◆ operator<<() [6/6]

template<typename T , typename P , size_t n>
std::ostream & VMlib::operator<< ( std::ostream &  str,
const std::pair< numvector< T, n >, numvector< P, n > > &  x 
)

Оператор "<<" вывода пары векторов в поток

Выводит в поток векторы из пары, разделяя их запятой с пробелом

Template Parameters
Tтип данных вектора - первого компонента пары
Pтип данных вектора - второго компонента пары
nразмерность векторов
Parameters
[in,out]strссылка на поток вывода
[in]xконстантная ссылка на вектор
Returns
ссылку на поток вывода

Definition at line 990 of file numvector.h.

991 {
992 str << "{ " << x.first << ", " << x.second << " }";
993 return str;
994 }//operator<<

◆ operator|()

template<typename T , typename P , size_t n, size_t m>
auto VMlib::operator| ( const numvector< T, n > &  x,
const numvector< P, m > &  y 
) -> nummatrix<typename std::remove_const<decltype(x[0] * y[0])>::type, n, m>
inline

Умножение вектора на вектор внешним образом

Definition at line 548 of file nummatrix.h.

550 {
551 nummatrix<typename std::remove_const<decltype(x[0] * y[0])>::type, n, m> res;
552
553 for (size_t i = 0; i < n; ++i)
554 for (size_t j = 0; j < m; ++j)
555 res[i][j] = x[i] * y[j];
556
557 return res;
558 }//operator|(...)
Шаблонный класс, определяющий матрицу фиксированного размера Фактически представляет собой массив,...
Definition nummatrix.h:66

◆ PrintHeaderToTextFile()

void VMlib::PrintHeaderToTextFile ( std::ofstream &  str,
const std::string &  header 
)

Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.

Печатает в файл вывода программы VM2D/VM3D подзаголовок и подчеркивает его

Parameters
[out]strссылка на файл для вывода, должен быть открыт
[in]headerконстантная ссылка на строку с заголовком

Definition at line 175 of file defs.cpp.

176{
177 str << '\n';
178 str << "// " << header << '\n';
179 str << "//";
180 for (size_t q = 0; q < header.length() + 1; ++q)
181 str << '-';
182}
Here is the caller graph for this function:

◆ PrintLogoToStream()

void VMlib::PrintLogoToStream ( std::ostream &  str)

Передача в поток вывода шапки программы VM2D/VM3D.

Печатает в поток вывода заголовок программы VM2D/VM3D

Parameters
[out]strссылка на поток вывода

Definition at line 108 of file defs.cpp.

109{
110#ifdef CODE2D
111 str <<
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' << \
118 "| |" << '\n' << \
119 "| Copyright (C) 2017-2026 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |" << '\n' << \
120 "*-----------------------------------------------------------------------------*" << '\n';
121#endif
122
123#ifdef CODE3D
124 str <<
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' << \
131 "| |" << '\n' << \
132 "| Copyright (C) 2019 Ilia Marchevsky, Georgy Shcheglov, Sergey Dergachev |" << '\n' << \
133 "*-----------------------------------------------------------------------------*" << '\n';
134#endif
135}
Here is the caller graph for this function:

◆ PrintLogoToTextFile()

void VMlib::PrintLogoToTextFile ( std::ofstream &  str,
const std::string &  fileName,
const std::string &  descr 
)

Формирование заголовка файла программы VM2D/VM3D.

Печатает в шапку файла заголовок программы VM2D/VM3D

Parameters
[out]strссылка на файл для вывода, должен быть открыт
[in]fileNameконстантная ссылка на строку с именем файла
[in]descrконстантная ссылка на строку с описанием файла

Definition at line 139 of file defs.cpp.

140{
142
143 str <<
144 "| File name: " << fileName;
145 for (size_t q = 0; q < 65 - fileName.length(); ++q)
146 str << " ";
147 str <<
148 "|" << '\n';
149
150 str <<
151 "| Info: " << descr;
152 for (size_t q = 0; q < 70 - descr.length(); ++q)
153 str << " ";
154 str <<
155 "|" << '\n';
156
157
158 std::string dateTimeString = "| This file was created automatically " + CurrentDataTime();
159 //dateTimeStringStream >> dateTimeString;
160
161 str << dateTimeString;
162 for (size_t q = 0; q < 78 - dateTimeString.length(); ++q)
163 str << " ";
164 str <<
165 "|" << '\n';
166
167 str <<
168 "\\*---------------------------------------------------------------------------*/" << '\n';
169}//PrintLogoToTextFile(...)
void PrintLogoToStream(std::ostream &str)
Передача в поток вывода шапки программы VM2D/VM3D.
Definition defs.cpp:108
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
Definition defs.cpp:47
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PrintUniversalLogoToStream()

void VMlib::PrintUniversalLogoToStream ( std::ostream &  str)

Передача в поток вывода универсальной шапки программы VM2D/VM3D.

Печатает в поток вывода заголовок программы VM2D/VM3D

Parameters
[out]strссылка на поток вывода

Definition at line 92 of file defs.cpp.

93{
94 str <<
95 "-------------------------------------------------------------------------------" << '\n' << \
96 "##\\ ##\\ ##\\ ##\\ ######\\ #######\\ ##\\ ######\\ #######\\ " << '\n' << \
97 "## | ## | ###\\ ### | ## __##\\ ## __##\\ ## | ## ___##\\ ## __##\\ " << '\n' << \
98 "## | ## | ####\\ #### | \\__/ ## | ## | ## | ## / \\_ / ## | ## | ## |" << '\n' << \
99 "\\##\\ ## | ##\\##\\## ## | ###### | ## | ## | ## / ##### / ## | ## |" << '\n' << \
100 " \\##\\## / ## \\### ## | ## ____/ ## | ## | ## / \\___##\\ ## | ## |" << '\n' << \
101 " \\### / ## |\\# /## | ## | ## | ## | ## / ##\\ ## | ## | ## |" << '\n' << \
102 " \\# / ## | \\_/ ## | ########\\ ####### | ## / \\###### | ####### |" << '\n' << \
103 " \\_/ \\__| \\__| \\________| \\_______/ \\__/ \\______/ \\_______/ " << '\n' << \
104 "-------------------------------------------------------------------------------" << '\n';
105}
Here is the caller graph for this function:

◆ SaveToStream() [1/4]

void VMlib::SaveToStream ( const Eigen::MatrixXcd &  matr,
std::ostream &  str 
)

Сохранение комплекснозначной матрицы в поток

Parameters
[in]matrконстантная ссылка на сохраняемую комплекснозначную матрицу
[in,out]strссылка на поток для сохранения

Definition at line 198 of file defs.cpp.

199{
200 for (int i = 0; i < matr.rows(); ++i)
201 {
202 for (int j = 0; j < matr.cols(); ++j)
203 str << matr(i, j) << " ";
204 str << std::endl;
205 }
206}//SaveToStream(...)

◆ SaveToStream() [2/4]

void VMlib::SaveToStream ( const Eigen::MatrixXd &  matr,
std::ostream &  str 
)

Сохранение матрицы в поток

Parameters
[in]matrконстантная ссылка на сохраняемую матрицу
[in,out]strссылка на поток для сохранения

Definition at line 185 of file defs.cpp.

186{
187 str.precision(16);
188 for (int i = 0; i < matr.rows(); ++i)
189 {
190 for (int j = 0; j < matr.cols(); ++j)
191 str << matr(i, j) << " ";
192 str << std::endl;
193 }
194}//SaveToStream(...)

◆ SaveToStream() [3/4]

void VMlib::SaveToStream ( const Eigen::VectorXd &  vec,
std::ostream &  str 
)

Сохранение вектора в поток

Parameters
[in]vecконстантная ссылка на сохраняемый вектор
[in,out]strссылка на поток для сохранения

Definition at line 210 of file defs.cpp.

211{
212 str.precision(16);
213 for (int i = 0; i < vec.size(); ++i)
214 str << vec(i) << " ";
215}//SaveToStream(...)

◆ SaveToStream() [4/4]

void VMlib::SaveToStream ( const std::vector< Point2D > &  vec,
std::ostream &  str 
)

Сохранение списка из двумерных векторов (точек) в поток

Parameters
[in]vecконстантная ссылка на сохраняемый список из двумерных векторов (точек)
[in,out]strссылка на поток для сохранения

Definition at line 219 of file defs.cpp.

220{
221 for (size_t i = 0; i < vec.size(); ++i)
222 str << "{ " << vec[i][0] << " " << vec[i][1] << " } ";
223}//SaveToStream(...)

◆ sign()

template<typename T >
int VMlib::sign ( x)

Усовершенствованный сигнум

Template Parameters
Tтип данных
Parameters
[in]xаргумент
Returns
знак числа в обычном математическом смысле,

Definition at line 479 of file defs.h.

480 {
481 double dx = (double)x;
482 if (dx > 0) return 1;
483 if ( (dx < 0.0) || (dx < -0.0) ) return -1;
484 return 0;
485 }
Here is the caller graph for this function:

◆ sqr()

template<typename T >
T VMlib::sqr ( x)
inline

Возведение числа в квадрат

Template Parameters
Tтип данных
Parameters
[in]xаргумент
Returns
квадрат аргумента \( x^2 \)

Definition at line 457 of file defs.h.

457{ return x * x; }

◆ SwapEnd()

template<typename T >
void VMlib::SwapEnd ( T &  var)

Вспомогательная функция перестановки байт местами (нужно для сохранения бинарных VTK)

Parameters
[in]varссылка на переменную, у которой байты нужно поменять местами

Definition at line 555 of file defs.h.

556 {
557 char* varArray = reinterpret_cast<char*>(&var);
558 for (long i = 0; i < static_cast<long>(sizeof(var) / 2); ++i)
559 std::swap(varArray[sizeof(var) - 1 - i], varArray[i]);
560 }
Here is the caller graph for this function: