VM2D  1.12
Vortex methods for 2D flows simulation
Passport2D.cpp
Go to the documentation of this file.
1 /*--------------------------------*- VM2D -*-----------------*---------------*\
2 | ## ## ## ## #### ##### | | Version 1.12 |
3 | ## ## ### ### ## ## ## ## | VM2D: Vortex Method | 2024/01/14 |
4 | ## ## ## # ## ## ## ## | for 2D Flow Simulation *----------------*
5 | #### ## ## ## ## ## | Open Source Code |
6 | ## ## ## ###### ##### | https://www.github.com/vortexmethods/VM2D |
7 | |
8 | Copyright (C) 2017-2024 I. Marchevsky, K. Sokol, E. Ryatina, A. Kolganova |
9 *-----------------------------------------------------------------------------*
10 | File name: Passport2D.cpp |
11 | Info: Source code of VM2D |
12 | |
13 | This file is part of VM2D. |
14 | VM2D is free software: you can redistribute it and/or modify it |
15 | under the terms of the GNU General Public License as published by |
16 | the Free Software Foundation, either version 3 of the License, or |
17 | (at your option) any later version. |
18 | |
19 | VM2D is distributed in the hope that it will be useful, but WITHOUT |
20 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
21 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22 | for more details. |
23 | |
24 | You should have received a copy of the GNU General Public License |
25 | along with VM2D. If not, see <http://www.gnu.org/licenses/>. |
26 \*---------------------------------------------------------------------------*/
27 
28 
40 #include "Passport2D.h"
41 
42 #include "defs.h"
43 #include "Preprocessor.h"
44 #include "StreamParser.h"
45 
46 using namespace VM2D;
47 
48 
49 
50 // Функция-множитель, позволяющая моделировать разгон
52 {
53  switch (typeAccel.second)
54  {
55  case 0: //импульсный старт
56  return 1.0;
57  case 1: //разгон потока по линейному закону
58  return (timeProp.currTime < timeAccel) ? (timeProp.currTime / timeAccel) : 1.0;
59  case 2: //разгон потока по косинусоиде
60  return (timeProp.currTime < timeAccel) ? 0.5 * (1.0 - cos(PI * timeProp.currTime / timeAccel)) : 1.0;
61  }
62 
63  return 1.0;
64 }//accelCft()
65 
66 
67 
68 
69 //Конструктор
70 Passport::Passport(VMlib::LogStream& infoStream, const std::string& _problemName, const size_t _problemNumber, const std::string& _filePassport, const std::string& _mechanics, const std::string& _defaults, const std::string& _switchers, const std::vector<std::string>& vars)
71 : PassportGen(infoStream, _problemName, _problemNumber, _filePassport, _mechanics, _defaults, _switchers, vars),
72 physicalProperties(timeDiscretizationProperties)
73 {
74  std::string fileFullName = dir + _filePassport;
75  std::string mechanicsFileFullName = _mechanics;
76  std::string defaultsFileFullName = _defaults;
77  std::string switchersFileFullName = _switchers;
78 
79  if (
80  fileExistTest(fileFullName, info, { "txt", "TXT"}) &&
81  fileExistTest(defaultsFileFullName, info, { "txt", "TXT" }) &&
82  fileExistTest(switchersFileFullName, info, { "txt", "TXT" }) &&
83  fileExistTest(mechanicsFileFullName, info, { "txt", "TXT" })
84  )
85  {
86  std::string str = VMlib::StreamParser::VectorStringToString(vars);
87  std::stringstream varsStream(str);
88 
89  std::stringstream mainStream;
90  mainStream << VMlib::Preprocessor(fileFullName).resultString;
91 
92  std::stringstream mechanicsStream;
93  mechanicsStream << VMlib::Preprocessor(mechanicsFileFullName).resultString;
94 
95  std::stringstream defaultsStream;
96  defaultsStream << VMlib::Preprocessor(defaultsFileFullName).resultString;
97 
98  std::stringstream switchersStream;
99  switchersStream << VMlib::Preprocessor(switchersFileFullName).resultString;
100 
101  GetAllParamsFromParser(mainStream, mechanicsStream, defaultsStream, switchersStream, varsStream);
102 
103  PrintAllParams();
104  }
105 }
106 
107 
108 //Считывание всех параметров расчета из соответствующих потоков
110 (
111  std::istream& mainStream,
112  std::istream& mechanicsStream,
113  std::istream& defaultStream,
114  std::istream& switcherStream,
115  std::istream& varsStream
116 )
117 {
118  // 1. Разбор паспорта в целом
119 
120  //создаем парсер и связываем его с нужным потоком
121  std::unique_ptr<VMlib::StreamParser> parser;
122  parser.reset(new VMlib::StreamParser(info, "parser", mainStream, defaultStream, switcherStream, varsStream));
123 
124  //считываем общие параметры
125  parser->get("rho", physicalProperties.rho);
126  parser->get("vInf", physicalProperties.vInf);
128 
129  if (physicalProperties.vRef == 0.0)
130  {
131  if (physicalProperties.vInf.length() == 0.0)
132  {
133  info('e') << "Reference velocity should be non-zero!" << std::endl;
134  exit(1);
135  }
137  }
138 
139  //Считывание схемы разгона потока
140  {
141  std::pair<std::pair<std::string, int>, std::string> velAccel;
142  bool defParamAccelVel = parser->get("accelVel", velAccel, &defaults::defaultVelAccel);
143  if (velAccel.first.second != -1)
144  {
145  physicalProperties.typeAccel = velAccel.first;
146  std::stringstream sstr(velAccel.second);
147  std::istream& istr(sstr);
148 
149  std::unique_ptr<VMlib::StreamParser> parserAccel;
150 
151  parserAccel.reset(new VMlib::StreamParser(info, "parserAccel", istr, defaultStream, switcherStream, varsStream));
152  bool defParamTime = parserAccel->get("timeAccel", physicalProperties.timeAccel, &defaults::defaultTimeAccel, false);
153  parserAccel->get("_DEFVAR_0", physicalProperties.timeAccel, &physicalProperties.timeAccel, defParamAccelVel && !defParamTime);
154  }
155  else
156  {
157  info('e') << "Velocity acceleration scheme <" << velAccel.first.first << "> is unknown" << std::endl;
158  exit(1);
159  }
160 
162  if (!defParamAccelVel)
164  else
165  {
166  double tempTimeAccel;
167  if (parser->get("timeAccel", tempTimeAccel, &defaults::defaultTimeAccel, false))
168  {
169  info('e') << "timeAccel parameter is set twice!" << std::endl;
170  exit(1);
171  }
172  }
173  }
174 
175 
176  parser->get("nu", physicalProperties.nu);
177 
179  parser->get("timeStop", timeDiscretizationProperties.timeStop);
180  parser->get("dt", timeDiscretizationProperties.dt);
182 
183 
184  //Считывание схемы сохранения файлов Vtx
185  std::pair<std::pair<std::string, int>, std::string> saveVtx;
186  bool defParamSaveVtx = parser->get("saveVt?", saveVtx, &defaults::defaultSaveVtx);
187  if (saveVtx.first.second != -1)
188  {
190  std::stringstream sstr(saveVtx.second);
191  std::istream& istr(sstr);
192 
193  std::unique_ptr<VMlib::StreamParser> parserSaveVtx;
194 
195  parserSaveVtx.reset(new VMlib::StreamParser(info, "parserSaveVtx", istr, defaultStream, switcherStream, varsStream));
196  parserSaveVtx->get("_DEFVAR_0", timeDiscretizationProperties.saveVtxStep, &defaults::defaultSaveVtxStep, defParamSaveVtx);
197  }
198  else
199  {
200  std::stringstream ss;
201  ss << saveVtx.first.first;
202  int step;
203  ss >> step;
204  if (!ss.fail())
205  {
208  }
209  else
210  {
211  info('e') << "Vtx file type <" << saveVtx.first.first << "> is unknown" << std::endl;
212  exit(1);
213  }
214  }
215 
216 
217  //Считывание схемы сохранения файлов VP
218  std::pair<std::pair<std::string, int>, std::string> saveVP;
219  bool defParamSaveVP = parser->get("saveVP", saveVP, &defaults::defaultSaveVP);
220  if (saveVP.first.second != -1)
221  {
223  std::stringstream sstr(saveVP.second);
224  std::istream& istr(sstr);
225 
226  std::unique_ptr<VMlib::StreamParser> parserSaveVP;
227 
228  parserSaveVP.reset(new VMlib::StreamParser(info, "parserSaveVP", istr, defaultStream, switcherStream, varsStream));
229  parserSaveVP->get("_DEFVAR_0", timeDiscretizationProperties.saveVPstep, &defaults::defaultSaveVPstep, defParamSaveVP);
230  }
231  else
232  {
233  std::stringstream ss;
234  ss << saveVP.first.first;
235  int step;
236  ss >> step;
237  if (!ss.fail())
238  {
241  }
242  else
243  {
244  info('e') << "VP file type <" << saveVP.first.first << "> is unknown" << std::endl;
245  exit(1);
246  }
247  }
248 
249  parser->get("rotateVpPoints", rotateAngleVpPoints, &defaults::rotateAngleVpPoints);
250 
251 
253 
254 
255  parser->get("eps", wakeDiscretizationProperties.eps);
257  parser->get("epscol", wakeDiscretizationProperties.epscol);
264 
267  //parser->get("wakeMotionIntegrator", numericalSchemes.wakeMotionIntegrator);
269  parser->get("boundaryConditionSatisfaction", numericalSchemes.boundaryCondition, &defaults::defaultBoundaryCondition);
270 
271  parser->get("airfoilsDir", airfoilsDir, &defaults::defaultAirfoilsDir);
272  parser->get("wakesDir", wakesDir, &defaults::defaultWakesDir);
273 
276 
277  parser->get("geographicalAngles", geographicalAngles, &defaults::defaultGeographicalAngles);
278  if (geographicalAngles && (physicalProperties.vInf[1] != 0.0))
279  {
280  info('e') << "For geographical angles vInf should be horizontal; now vInf = " << physicalProperties.vInf << "." << std::endl;
281  exit(1);
282  }
283 
284  parser->get("rotateForces", rotateForces, &defaults::defaultRotateForces);
285  parser->get("calcCoefficients", calcCoefficients, &defaults::defaultCalcCoefficients);
286 
287  std::vector<std::string> airfoil;
288  parser->get("airfoil", airfoil, &defaults::defaultAirfoil);
289 
290  // 2. Разбор параметров профилей
291 
292  //определяем число профилей и организуем цикл по ним
293  size_t nAirfoil = airfoil.size();
294  //*(defaults::defaultPinfo) << "Number of airfoils = " << nAirfoil << endl;
295  for (size_t i = 0; i < nAirfoil; ++i)
296  {
297  //делим имя файла + выражение в скобках на 2 подстроки
298  std::pair<std::string, std::string> airfoilLine = VMlib::StreamParser::SplitString(info, airfoil[i], false);
299 
300  AirfoilParams prm;
301  //первая подстрока - имя файла
302  prm.fileAirfoil = airfoilLine.first;
303 
304  //вторую подстроку разделяем на вектор из строк по запятым, стоящим вне фигурных скобок
305  std::vector<std::string> vecAirfoilLineSecond = VMlib::StreamParser::StringToVector(airfoilLine.second, '{', '}');
306 
307  //создаем парсер и связываем его с параметрами профиля
308  std::stringstream aflStream(VMlib::StreamParser::VectorStringToString(vecAirfoilLineSecond));
309  std::unique_ptr<VMlib::StreamParser> parserAirfoil;
310 
311  parserAirfoil.reset(new VMlib::StreamParser(info, "airfoil parser", aflStream, defaultStream, switcherStream, varsStream));
312 
313  //считываем нужные параметры с учетом default-значений
314  parserAirfoil->get("nPanels", prm.requiredNPanels, &defaults::defaultRequiredNPanels);
315 
316  parserAirfoil->get("basePoint", prm.basePoint, &defaults::defaultBasePoint);
317 
318  std::vector<double> tmpScale, defaultTmpScale = { defaults::defaultScale[0], defaults::defaultScale[1] };
319 
320  parserAirfoil->get("scale", tmpScale, &defaultTmpScale);
321  switch (tmpScale.size())
322  {
323  case 1:
324  prm.scale[0] = prm.scale[1] = tmpScale[0];
325  break;
326  case 2:
327  prm.scale[0] = tmpScale[0];
328  prm.scale[1] = tmpScale[1];
329  break;
330  default:
331  info('e') << "Error in _scale_ value for airfoil" << std::endl;
332  exit(1);
333  }
334  //parserAirfoil->get("scale", prm.scalexy, &defaults::defaultScale);
335 
336 
337  parserAirfoil->get("angle", prm.angle, &defaults::defaultAngle);
338  prm.angle *= PI / 180.0;
339 
340  parserAirfoil->get("chord", prm.chord, &defaults::defaultChord);
341 
342  parserAirfoil->get("addedMass", prm.addedMass, &defaults::defaultAddedMass);
343 
344 
345  parserAirfoil->get("inverse", prm.inverse, &defaults::defaultInverse);
346  parserAirfoil->get("mechanicalSystem", prm.mechanicalSystem, &defaults::defaultMechanicalSystem);
347 
349  {
350  prm.mechanicalSystemType = 0;
352  }
353  else
354  {
355  std::unique_ptr<VMlib::StreamParser> parserMechanicsList;
356  std::unique_ptr<VMlib::StreamParser> parserSwitchers;
357  parserMechanicsList.reset(new VMlib::StreamParser(info, "mechanical parser", mechanicsStream, defaultStream, switcherStream, varsStream, { prm.mechanicalSystem }));
358  parserSwitchers.reset(new VMlib::StreamParser(info, "switchers parser" ,switcherStream));
359 
360  std::string mechString;
361 
362  parserMechanicsList->get(prm.mechanicalSystem, mechString);
363 
364  //делим тип мех.системы + выражение в скобках (ее параметры) на 2 подстроки
365  std::pair<std::string, std::string> mechanicsLine = VMlib::StreamParser::SplitString(info, mechString);
366 
367  std::string mechTypeAlias = mechanicsLine.first;
368  parserSwitchers->get(mechTypeAlias, prm.mechanicalSystemType);
369 
370  //вторую подстроку разделяем на вектор из строк по запятым, стоящим вне фигурных скобок
371  std::vector<std::string> vecMechLineSecond = VMlib::StreamParser::StringToVector(mechanicsLine.second, '{', '}');
373  }
374 
375  //отправляем считанные параметры профиля в структуру данных паспорта
376  airfoilParams.push_back(prm);
377 
378  } //for i
379 }//GetAllParamsFromParser(...)
380 
381 
382 //Печать всех параметров расчета в поток логов
384 {
385  const std::string str = "passport info: ";
386 
387  info('i') << "--- Passport info ---" << std::endl;
388  info('-') << "rho = " << physicalProperties.rho << std::endl;
389  info('-') << "vInf = " << physicalProperties.vInf << std::endl;
390  info('-') << "vRef = " << physicalProperties.vRef << std::endl;
391  info('-') << "velAccel = " << physicalProperties.typeAccel.first << "( " << physicalProperties.timeAccel << " )" << std::endl;
392 
393  info('-') << "nu = " << physicalProperties.nu << std::endl;
394  info('-') << "timeStart = " << timeDiscretizationProperties.timeStart << std::endl;
395  info('-') << "timeStop = " << timeDiscretizationProperties.timeStop << std::endl;
396  info('-') << "dt = " << timeDiscretizationProperties.dt << std::endl;
397  info('-') << "nameLength = " << timeDiscretizationProperties.nameLength << std::endl;
398  info('-') << "saveVtx = " << timeDiscretizationProperties.fileTypeVtx.first << "( " << timeDiscretizationProperties.saveVtxStep << " )" << std::endl;
399  info('-') << "saveVP = " << timeDiscretizationProperties.fileTypeVP.first << "( " << timeDiscretizationProperties.saveVPstep << " )" << std::endl;
400  info('-') << "saveVisStress = " << timeDiscretizationProperties.saveVisStress << std::endl;
401  info('-') << "eps = " << wakeDiscretizationProperties.eps << std::endl;
402  info('-') << "eps2 = " << wakeDiscretizationProperties.eps2 << std::endl;
403  info('-') << "epscol = " << wakeDiscretizationProperties.epscol << std::endl;
404  info('-') << "distFar = " << wakeDiscretizationProperties.distFar << std::endl;
405  info('-') << "delta = " << wakeDiscretizationProperties.delta << std::endl;
406  info('-') << "vortexPerPanel = " << wakeDiscretizationProperties.minVortexPerPanel << std::endl;
407  info('-') << "maxGamma = " << ((wakeDiscretizationProperties.maxGamma == 1e+10) ? 0.0 : wakeDiscretizationProperties.maxGamma) << std::endl;
408  info('-') << "linearSystemSolver = " << numericalSchemes.linearSystemSolver.first << std::endl;
409  info('-') << "velocityComputation = " << numericalSchemes.velocityComputation.first << std::endl;
410  //info('-') << "wakeMotionIntegrator = " << numericalSchemes.wakeMotionIntegrator << std::endl;
411  info('_') << "panelType = " << numericalSchemes.panelsType.first << std::endl;
412  info('_') << "boundaryCondition = " << numericalSchemes.boundaryCondition.first << std::endl;
413 
414  info('-') << "airfoilsDir = " << airfoilsDir << std::endl;
415  info('-') << "wakesDir = " << wakesDir << std::endl;
416 
417  info('-') << "geographicalAngles = " << geographicalAngles << std::endl;
418  info('-') << "rotateForces = " << rotateForces << std::endl;
419  info('-') << "calcCoefficients = " << calcCoefficients << std::endl;
420  info('-') << "rotateVpPoints = " << rotateAngleVpPoints << std::endl;
421 
422 
423 
424  info('-') << "number of airfoils = " << airfoilParams.size() << std::endl;
425  for (size_t q = 0; q < airfoilParams.size(); ++q)
426  {
427  info('_') << "airfoil[" << q << "]_file = " << airfoilParams[q].fileAirfoil << std::endl;
428  info('_') << "airfoil[" << q << "]_requiredNPanels = " << airfoilParams[q].requiredNPanels << std::endl;
429  info('_') << "airfoil[" << q << "]_basePoint = " << airfoilParams[q].basePoint << std::endl;
430  info('_') << "airfoil[" << q << "]_scale = " << airfoilParams[q].scale << std::endl;
431  info('_') << "airfoil[" << q << "]_angle = " << airfoilParams[q].angle << std::endl;
432  info('_') << "airfoil[" << q << "]_chord = " << airfoilParams[q].chord << std::endl;
433  info('_') << "airfoil[" << q << "]_inverse = " << (airfoilParams[q].inverse ? "true": "false") << std::endl;
434  info('_') << "airfoil[" << q << "]_mechanicalSystem = " << airfoilParams[q].mechanicalSystem << std::endl;
435  }
436 
437  info('-') << "fileWake = " << wakeDiscretizationProperties.fileWake << std::endl;
438  info('-') << "fileSource = " << wakeDiscretizationProperties.fileSource << std::endl;
439 }//PrintAllParams()
const int defaultSaveVisStress
Шаг подсчета поля скорости и давления
Definition: defs.h:108
const double defaultChord
Хорда
Definition: defs.h:188
std::pair< std::string, int > fileTypeVP
Тип файлов для сохранения скорости и давления
Definition: PassportGen.h:76
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами ...
const std::string defaultWakesDir
Каталог с файлами вихревых следов
Definition: defs.h:161
std::pair< std::string, int > velocityComputation
Definition: Passport2D.h:190
bool geographicalAngles
Признак работы в "географической" системе координат
Definition: Passport2D.h:283
double eps
Радиус вихря
Definition: Passport2D.h:139
const bool defaultGeographicalAngles
Признак работы в "географической" системе координат
Definition: defs.h:145
const double defaultAngle
Угол атаки
Definition: defs.h:185
int saveVtxStep
Шаг сохранения кадров в бинарные файлы
Definition: PassportGen.h:73
const double PI
Число .
Definition: defs.h:73
Класс, определяющий работу с потоком логов
Definition: LogStream.h:53
const double defaultVRef
Референсная скорость, равная нулю, что означает ее равенство скорости набегающего потока ...
Definition: defs.h:126
double delta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
Definition: Passport2D.h:151
bool inverse
Признак разворота нормалей (для расчета внутреннего течения)
Definition: Passport2D.h:237
double timeStop
Конечное время
Definition: PassportGen.h:62
double timeAccel
Время разгона потока
Definition: Passport2D.h:87
std::pair< std::string, int > boundaryCondition
Метод аппроксимации граничных условий
Definition: Passport2D.h:199
const int defaultVortexPerPanel
Число вихрей, рождаемых на одной панели
Definition: defs.h:120
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVP
Шаг подсчета поля скорости и давления
Definition: defs.h:100
int mechanicalSystemType
Тип механической системы
Definition: Passport2D.h:240
double vRef
Референсная скорость
Definition: Passport2D.h:81
int nameLength
Число разрядов в имени файла
Definition: PassportGen.h:68
const std::pair< std::pair< std::string, int >, std::string > defaultVelAccel
Время разгона
Definition: defs.h:96
double maxGamma
Максимально допустимая циркуляция вихря
Definition: Passport2D.h:157
const std::pair< std::string, int > defaultPanelsType
Тип панелей
Definition: defs.h:132
double currTime
Текущее время
Definition: PassportGen.h:56
virtual void GetAllParamsFromParser(std::istream &mainStream, std::istream &mechanicsStream, std::istream &defaultStream, std::istream &switcherStream, std::istream &varsStream) override
Считывание всех параметров расчета из соответствующих потоков
Definition: Passport2D.cpp:110
const double defaultTimeAccel
Definition: defs.h:97
std::string resultString
Строка, содержащая окончательный результат обработки файла
Definition: Preprocessor.h:159
double nu
Коэффициент кинематической вязкости среды
Definition: Passport2D.h:96
std::string dir
Рабочий каталог задачи
Definition: PassportGen.h:118
const bool defaultCalcCoefficients
Признак расчета безразмерных коэффициентов вместо сил
Definition: defs.h:151
Описание базовых вспомогательных функций
P length() const
Вычисление 2-нормы (длины) вектора
Definition: numvector.h:371
Заголовочный файл с описанием класса Preprocessor.
Класс, позволяющий выполнять предварительную обработку файлов
Definition: Preprocessor.h:59
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
Definition: Passport2D.h:296
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVtx
Шаг подсчета поля скорости и давления
Definition: defs.h:104
const VMlib::Point2D defaultBasePoint
Базовое смещение профиля
Definition: defs.h:178
bool calcCoefficients
Признак вычисления коэффициентов вместо сил
Definition: Passport2D.h:289
double dt
Шаг по времени
Definition: PassportGen.h:65
const Point2D defaultScale
Коэффициент масштабирования профиля
Definition: defs.h:182
virtual void PrintAllParams() override
Печать всех параметров расчета в поток логов
Definition: Passport2D.cpp:383
const std::pair< std::string, int > defaultBoundaryCondition
Способ удовлетворения граничного условия
Definition: defs.h:135
size_t requiredNPanels
Желаемое число панелей для разбиения геометрии
Definition: Passport2D.h:219
double angle
Угол поворота (угол атаки)
Definition: Passport2D.h:231
double rotateAngleVpPoints
Угол поворота точек VP.
Definition: Passport2D.h:292
double accelCft() const
Функция-множитель, позволяющая моделировать разгон
Definition: Passport2D.cpp:51
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
Definition: PassportGen.h:127
const std::vector< std::string > defaultAirfoil({})
Список профилей
Point2D vInf
Скоростью набегающего потока
Definition: Passport2D.h:78
const double defaultMaxGamma
Число вихрей, рождаемых на одной панели
Definition: defs.h:123
static std::vector< std::string > StringToVector(std::string line, char openBracket= '(', char closeBracket= ')')
Pазбор строки, содержащей запятые, на отдельные строки
const size_t defaultRequiredNPanels
Желаемое число панелей для разбиения геометрии
Definition: defs.h:129
double timeStart
Начальное время
Definition: PassportGen.h:59
double chord
Хорда
Definition: Passport2D.h:228
double rho
Плотность потока
Definition: Passport2D.h:75
std::string fileSource
Имя файла с положениями источников (без полного пути)
Definition: Passport2D.h:163
Definition: Airfoil2D.h:45
int saveVPstep
Шаг вычисления и сохранения скорости и давления
Definition: PassportGen.h:78
Заголовочный файл с описанием класса StreamParser.
NumericalSchemes numericalSchemes
Структура с используемыми численными схемами
Definition: Passport2D.h:302
const Point2D defaultAddedMass
Присоединенная масса
Definition: defs.h:191
Point2D basePoint
Смещение центра масс (перенос профиля)
Definition: Passport2D.h:222
const bool defaultRotateForces
Признак поворота сил в профильную систему координат
Definition: defs.h:148
const VMlib::TimeDiscretizationProperties & timeProp
Definition: Passport2D.h:71
bool fileExistTest(std::string &fileName, LogStream &info, const std::list< std::string > &extList={})
Проверка существования файла
Definition: defs.h:324
static std::pair< std::string, std::string > SplitString(LogStream &info, std::string line, bool upcase=true)
Разбор строки на пару ключ-значение
const std::pair< std::string, int > defaultLinearSystemSolver
Способ решения линейной системы
Definition: defs.h:138
const int defaultSaveVPstep
Definition: defs.h:101
Структура, задающая параметры профиля
Definition: Passport2D.h:213
std::string fileWake
Имя файла с начальным состоянием вихревого следа (без полного пути)
Definition: Passport2D.h:160
const std::pair< std::string, int > defaultVelocityComputation
Способ вычисления скоростей вихрей
Definition: defs.h:142
const int defaultNameLength
Число разрядов в имени файла
Definition: defs.h:111
std::pair< std::string, int > fileTypeVtx
Тип файлов для сохранения скорости и давления
Definition: PassportGen.h:71
std::pair< std::string, int > typeAccel
Способ разгона потока
Definition: Passport2D.h:84
std::pair< std::string, int > panelsType
Тип панелей (0 — прямые)
Definition: Passport2D.h:196
const std::string defaultFileSource("")
Файл с источниками
const std::string defaultFileWake("")
Файл со следом
int minVortexPerPanel
Минимальное число вихрей, рождаемых на каждой панели профииля
Definition: Passport2D.h:154
static std::string VectorStringToString(const std::vector< std::string > &_vecString)
Объединение вектора (списка) из строк в одну строку
std::string fileAirfoil
Имя файла с начальным состоянием профилей (без полного пути)
Definition: Passport2D.h:216
const double defaultTimeStart
Начало расчета
Definition: defs.h:93
int saveVisStress
Шаг вычисления и сохранения скорости и давления
Definition: PassportGen.h:81
std::string mechanicalSystemParameters
Definition: Passport2D.h:242
const double defaultDelta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
Definition: defs.h:117
LogStream info
Поток для вывода логов и сообщений об ошибках
Definition: PassportGen.h:111
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Definition: Passport2D.h:280
std::string wakesDir
Каталог с файлами вихревых следов
Definition: Passport2D.h:277
WakeDiscretizationProperties wakeDiscretizationProperties
Структура с параметрами дискретизации вихревого следа
Definition: Passport2D.h:299
const std::string defaultMechanicalSystem
Definition: defs.h:198
Passport(VMlib::LogStream &infoStream, const std::string &_problemName, const size_t _problemNumber, const std::string &_filePassport, const std::string &_mechanics, const std::string &_defaults, const std::string &_switchers, const std::vector< std::string > &vars)
Конструктор
Definition: Passport2D.cpp:70
const double defaultDistFar
Радиус убивания дальнего следа
Definition: defs.h:114
Point2D scale
Коэффициент масштабирования
Definition: Passport2D.h:225
const int defaultSaveVtxStep
Definition: defs.h:105
const std::string defaultAirfoilsDir
Каталог с файлами профилей
Definition: defs.h:157
std::string airfoilsDir
Каталог с файлами профилей
Definition: Passport2D.h:274
Point2D addedMass
Присоединенная масса
Definition: Passport2D.h:234
std::string mechanicalSystem
Definition: Passport2D.h:241
std::pair< std::string, int > linearSystemSolver
Definition: Passport2D.h:187
Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами
Definition: StreamParser.h:151
bool get(const std::string &name, std::vector< Point2D > &res, const std::vector< Point2D > *defValue=nullptr, bool echoDefault=true) const
Считывание вектора из двумерных точек из базы данных
Definition: StreamParser.h:314
double eps2
Квадрат радиуса вихря
Definition: Passport2D.h:142
const double rotateAngleVpPoints
Угол поворота точек VP.
Definition: defs.h:154
double distFar
Расстояние от центра самого подветренного (правого) профиля, на котором вихри уничтожаются ...
Definition: Passport2D.h:148
double epscol
Радиус коллапса
Definition: Passport2D.h:145
const bool defaultInverse
Признак разворота нормалей (для расчета внутреннего течения)
Definition: defs.h:194
bool rotateForces
Признак поворота вычисляемых сил в профильную систему координат
Definition: Passport2D.h:286