VM2D  1.12
Vortex methods for 2D flows simulation
VMlib Namespace Reference

Classes

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

Typedefs

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

Enumerations

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

Functions

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

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

Definition at line 106 of file Vortex2D.h.

Enumeration Type Documentation

enum VMlib::TaskState
strong

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

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

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

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

starting 

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

running 

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

finishing 

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

done 

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

Definition at line 59 of file Task.h.

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

Function Documentation

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

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

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

Definition at line 259 of file defs.cpp.

260 {
261  return atan2(cross3(p, s), p & s);
262 }
double cross3(const numvector< T, n > &x, const numvector< P, n > &y)
Вычисление третьей компоненты векторного произведения
Definition: numvector.h:1064

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

Definition at line 536 of file defs.h.

537  {
538 #ifndef LAMBVORTEX
539  return std::max(r2, eps2);
540 #else
541  if (r2 > eps2)
542  return std::max(r2, eps2);
543  else
544  return (r2 < 1e-10) ? 1e-10 : r2 / (1.0 - exp(-6.0*r2 / eps2));
545 #endif
546  }

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

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

Definition at line 388 of file defs.h.

389  {
390  std::string buf;
391  buf.resize(BUFSIZ);
392 
393  FILE *in, *out;
394  size_t n;
395 
396 
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)
402 
403  while ((n = fread((void*)buf.data(), 1, BUFSIZ, in)) != 0)
404  {
405  fwrite((void*)buf.data(), 1, n, out);
406  }
407  }//copyFile
void VMlib::CreateDirectory ( const std::string &  dir,
const std::string &  name 
)
inline

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

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

Definition at line 414 of file defs.h.

415  {
416 #if defined(_WIN32)
417  _mkdir((dir + name).c_str());
418 #else
419  mkdir((dir + name).c_str(), S_IRWXU | S_IRGRP | S_IROTH);
420 #endif
421  }

Here is the caller graph for this function:

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 772 of file numvector.h.

773  {
774  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] };
775  }//cross(...)
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 1064 of file numvector.h.

1065  {
1066  //deprecate: use numvector.operator^ instead of cross3(numvector<>,numvector<>)
1067 
1068  return (x[0] * y[1] - x[1] * y[0]);
1069  }//cross3(...)

Here is the call graph for this function:

Here is the caller graph for this function:

std::string VMlib::CurrentDataTime ( )

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

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

Definition at line 44 of file defs.cpp.

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

Here is the caller graph for this function:

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 804 of file numvector.h.

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

Here is the caller graph for this function:

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 788 of file numvector.h.

789  {
790  numvector<typename std::remove_const<decltype(x[0] - y[0])>::type, n> p = x - y;
791  return p.length2();
792  }//dist2(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
auto length2() const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
Вычисление квадрата нормы (длины) вектора
Definition: numvector.h:383

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

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

Definition at line 324 of file defs.h.

324  {})
325  {
326  std::list<std::string> fullExtList(extList);
327  fullExtList.insert(fullExtList.begin(), "");
328 
329  for (const auto& ext : fullExtList)
330  {
331  std::string newFileName = ((ext == "") ? fileName : (fileName + "." + ext));
332  std::ifstream f(newFileName.c_str());
333  if (f.good())
334  {
335  f.close();
336  f.clear();
337 
338  info('i') << "file " << newFileName << " is found" << std::endl;
339  fileName = newFileName;
340  return true;
341  }
342  }
343 
344  info('e') << "file " << fileName << " is not found" << std::endl;
345  exit(-1);
346  return false;
347  }

Here is the caller graph for this function:

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 357 of file defs.h.

358  {
359  std::string fname(name);
360 
361  size_t dec = 1;
362 
363  for (int i = 1; i < length; ++i)
364  {
365  dec *= 10;
366  if (number < dec)
367  fname += "0";
368  }
369 
370  std::ostringstream ss;
371  ss << number;
372  fname += ss.str();
373 
374  if (ext.size() > 0)
375  {
376  fname += ".";
377  fname += ext;
378  }
379 
380  return fname;
381  }

Here is the caller graph for this function:

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

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

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

Definition at line 57 of file StreamParser.h.

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

Here is the caller graph for this function:

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

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

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

Definition at line 265 of file defs.cpp.

266 {
267  return 0.5*log((s & s) / (p & p));
268 }

Here is the caller graph for this function:

double VMlib::M4 ( double  t)

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

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

Definition at line 224 of file defs.cpp.

225 {
226  double t2 = t*t;
227  double mt = t > 0 ? t : -t;
228 
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;
231 }//M4(...)
T sqr(T x)
Возведение числа в квадрат
Definition: defs.h:430

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

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

Definition at line 439 of file defs.h.

440  {
441  double res = abs(x) > 1.0 ? 0.5*PI*(1 - sign(x)) : acos(x);
442  return res;
443  }
const double PI
Число .
Definition: defs.h:73
int sign(T x)
Усовершенствованный сигнум
Definition: defs.h:452

Here is the call graph for this function:

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

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

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

Definition at line 233 of file defs.cpp.

234 {
235  if (dst2 > 0)
236  {
237  if (dst2 < ee2[0])
238  {
239  ee2[2] = ee2[1];
240  ee2[1] = ee2[0];
241  ee2[0] = dst2;
242  }//if (dist2<ee2[0])
243  else
244  {
245  if (dst2 < ee2[1])
246  {
247  ee2[2] = ee2[1];
248  ee2[1] = dst2;
249  }// if (dist2<ee2[1])
250  else
251  if (dst2 < ee2[2])
252  ee2[2] = dst2;
253  }//else
254  }//if (dst2>0)
255 }//ModifyE2(...)

Here is the caller graph for this function:

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 271 of file defs.cpp.

272 {
273  return (a & b) * c + (Point2D({ -c[1], c[0] }))*cross3(a, b);
274 }
double cross3(const numvector< T, n > &x, const numvector< P, n > &y)
Вычисление третьей компоненты векторного произведения
Definition: numvector.h:1064
Класс, опеделяющий двумерный вектор
Definition: Point2D.h:75

Here is the call graph for this function:

Here is the caller graph for this function:

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 528 of file nummatrix.h.

530  {
531  numvector<typename std::remove_const<decltype(x[0] * A.data()[0])>::type, m> res;
532  for (size_t i = 0; i < m; ++i)
533  {
534  res[i] = 0;
535  for (size_t j = 0; j < n; ++j)
536  res[i] += x[j] * A[j][i];
537  }
538  return res;
539  }//operator&(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
v3D VMlib::operator* ( double  c,
const v3D x 
)
inline
Todo:
Исследовать целесообразность наличия явной перегрузки оператора умножения

Definition at line 109 of file v3D.h.

110  {
111  v3D res(x);
112  for (size_t i = 0; i < 3; ++i)
113  res[i] *= c;
114  return res;
115  }//operator*(...)
Класс, опеделяющий двумерный вектор
Definition: v3D.h:55
std::pair<v3D, v3D> VMlib::operator* ( std::pair< v3D, v3D > &  a,
double  c 
)
inline

Definition at line 132 of file v3D.h.

133  {
134  return {a.first * c, a.second * c};
135  }//operator+=(...)
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 732 of file numvector.h.

733  {
734  numvector<T, n> res(x);
735  for (size_t i = 0; i < n; ++i)
736  res[i] *= c;
737  return res;
738  }//operator*(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
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 750 of file numvector.h.

751  {
753  for (size_t i = 0; i < n; ++i)
754  res[i] = x[i] * c;
755  return res;
756  }//operator*(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
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 905 of file numvector.h.

907  {
908  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;
909  res.first = c * a.first;
910  res.second = c * a.second;
911  return res;
912  }//operator*(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
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 925 of file numvector.h.

927  {
928  return c * a;
929  }//operator*(...)
std::pair<v3D, v3D>& VMlib::operator*= ( std::pair< v3D, v3D > &  a,
double  c 
)
inline

Definition at line 125 of file v3D.h.

126  {
127  a.first *= c;
128  a.second *= c;
129  return a;
130  }//operator+=(...)
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 887 of file numvector.h.

888  {
889  a.first *= c;
890  a.second *= c;
891  return a;
892  }//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 867 of file numvector.h.

869  {
870  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;
871  res.first = a.first + b.first;
872  res.second = a.second + b.second;
873  return res;
874  }//operator+(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
std::pair<PairInt, PairInt>& VMlib::operator+= ( std::pair< PairInt, PairInt > &  a,
const std::pair< PairInt, PairInt > &  b 
)
inline

Definition at line 103 of file PairInt.h.

104  {
105  a.first += b.first;
106  a.second += b.second;
107  return a;
108  }//operator+=(...)
std::pair<v3D, v3D>& VMlib::operator+= ( std::pair< v3D, v3D > &  a,
const std::pair< v3D, v3D > &  b 
)
inline

Definition at line 118 of file v3D.h.

119  {
120  a.first += b.first;
121  a.second += b.second;
122  return a;
123  }//operator+=(...)
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 848 of file numvector.h.

849  {
850  a.first += b.first;
851  a.second += b.second;
852  return a;
853  }//operator+=(...)
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 274 of file defs.h.

275  {
276  size_t n = _vec.size();
277  _stream << "{ ";
278  if (n > 0)
279  {
280  for (size_t j = 0; j < n - 1; ++j)
281  _stream << _vec[j] << ", ";
282  _stream << _vec[n - 1];
283  }
284  _stream << " }";
285  return _stream;
286  }//operator<<(...)
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 296 of file defs.h.

297  {
298  _stream << "( ( " << _pair.first.first << ", " << _pair.first.second << " ), " << _pair.second << " )";
299  return _stream;
300  }//operator<<(...)
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 310 of file defs.h.

311  {
312  _stream << "( " << _pair.first << ", " << _pair.second << " )";
313  return _stream;
314  }//operator<<(...)
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 568 of file nummatrix.h.

569  {
570  str << "{ ";
571  for (size_t j = 0; j < n - 1; ++j)
572  str << x[j] << ", ";
573  str << x[n - 1];
574  str << " }";
575  return str;
576  }//operator<<
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 821 of file numvector.h.

822  {
823  str << "{ ";
824  for (size_t j = 0; j < n - 1; ++j)
825  str << x[j] << ", ";
826  str << x[n - 1];
827  str << " }";
828  return str;
829  }//operator<<(...)
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 943 of file numvector.h.

944  {
945  str << "{ " << x.first << ", " << x.second << " }";
946  return str;
947  }//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 544 of file nummatrix.h.

546  {
548 
549  for (size_t i = 0; i < n; ++i)
550  for (size_t j = 0; j < m; ++j)
551  res[i][j] = x[i] * y[j];
552 
553  return res;
554  }//operator|(...)
Шаблонный класс, определяющий матрицу фиксированного размера Фактически представляет собой массив...
Definition: nummatrix.h:62
void VMlib::PrintHeaderToTextFile ( std::ofstream &  str,
const std::string &  header 
)

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

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

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

Definition at line 172 of file defs.cpp.

173 {
174  str << '\n';
175  str << "// " << header << '\n';
176  str << "//";
177  for (size_t q = 0; q < header.length()+1; ++q)
178  str << '-';
179 }

Here is the caller graph for this function:

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

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

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

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

Definition at line 105 of file defs.cpp.

106 {
107 #ifdef CODE2D
108  str <<
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' << \
115  "| |" << '\n' << \
116  "| Copyright (C) 2017-2024 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |" << '\n' << \
117  "*-----------------------------------------------------------------------------*" << '\n';
118 #endif
119 
120 #ifdef CODE3D
121  str <<
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' << \
128  "| |" << '\n' << \
129  "| Copyright (C) 2019 Ilia Marchevsky, Georgy Shcheglov, Sergey Dergachev |" << '\n' << \
130  "*-----------------------------------------------------------------------------*" << '\n';
131 #endif
132 }

Here is the caller graph for this function:

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 136 of file defs.cpp.

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

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

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

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

Definition at line 89 of file defs.cpp.

90 {
91  str <<
92  "-------------------------------------------------------------------------------" << '\n' << \
93  "##\\ ##\\ ##\\ ##\\ ######\\ #######\\ ##\\ ######\\ #######\\ " << '\n' << \
94  "## | ## | ###\\ ### | ## __##\\ ## __##\\ ## | ## ___##\\ ## __##\\ " << '\n' << \
95  "## | ## | ####\\ #### | \\__/ ## | ## | ## | ## / \\_ / ## | ## | ## |" << '\n' << \
96  "\\##\\ ## | ##\\##\\## ## | ###### | ## | ## | ## / ##### / ## | ## |" << '\n' << \
97  " \\##\\## / ## \\### ## | ## ____/ ## | ## | ## / \\___##\\ ## | ## |" << '\n' << \
98  " \\### / ## |\\# /## | ## | ## | ## | ## / ##\\ ## | ## | ## |" << '\n' << \
99  " \\# / ## | \\_/ ## | ########\\ ####### | ## / \\###### | ####### |" << '\n' << \
100  " \\_/ \\__| \\__| \\________| \\_______/ \\__/ \\______/ \\_______/ " << '\n' << \
101  "-------------------------------------------------------------------------------" << '\n';
102 }

Here is the caller graph for this function:

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

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

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

Definition at line 182 of file defs.cpp.

183 {
184  str.precision(16);
185  for (int i = 0; i < matr.rows(); ++i)
186  {
187  for (int j = 0; j < matr.cols(); ++j)
188  str << matr(i, j) << " ";
189  str << std::endl;
190  }
191 }//SaveToStream(...)
void VMlib::SaveToStream ( const Eigen::MatrixXcd &  matr,
std::ostream &  str 
)

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

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

Definition at line 195 of file defs.cpp.

196 {
197  for (int i = 0; i < matr.rows(); ++i)
198  {
199  for (int j = 0; j < matr.cols(); ++j)
200  str << matr(i, j) << " ";
201  str << std::endl;
202  }
203 }//SaveToStream(...)
void VMlib::SaveToStream ( const Eigen::VectorXd &  vec,
std::ostream &  str 
)

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

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

Definition at line 207 of file defs.cpp.

208 {
209  str.precision(16);
210  for (int i = 0; i < vec.size(); ++i)
211  str << vec(i) << " ";
212 }//SaveToStream(...)
void VMlib::SaveToStream ( const std::vector< Point2D > &  vec,
std::ostream &  str 
)

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

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

Definition at line 216 of file defs.cpp.

217 {
218  for (size_t i = 0; i < vec.size(); ++i)
219  str << "{ " << vec[i][0] << " " << vec[i][1] << " } ";
220 }//SaveToStream(...)

Here is the caller graph for this function:

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

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

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

Definition at line 452 of file defs.h.

453  {
454  double dx = (double)x;
455  if (dx > 0) return 1;
456  if ( (dx < 0.0) || (dx < -0.0) ) return -1;
457  return 0;
458  }

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

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

Definition at line 430 of file defs.h.

430 { return x * x; }

Here is the caller graph for this function:

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

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

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

Definition at line 528 of file defs.h.

529  {
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]);
533  }

Here is the caller graph for this function: