69Passport::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)
70: PassportGen(infoStream, _problemName, _problemNumber, _filePassport, _mechanics, _defaults, _switchers, vars),
71physicalProperties(timeDiscretizationProperties)
73 std::string fileFullName =
dir + _filePassport;
74 std::string mechanicsFileFullName = _mechanics;
75 std::string defaultsFileFullName = _defaults;
76 std::string switchersFileFullName = _switchers;
79 fileExistTest(fileFullName,
info,
true, {
"txt",
"TXT"}) &&
80 fileExistTest(defaultsFileFullName,
info,
true, {
"txt",
"TXT" }) &&
81 fileExistTest(switchersFileFullName,
info,
true, {
"txt",
"TXT" }) &&
82 fileExistTest(mechanicsFileFullName,
info,
true, {
"txt",
"TXT" })
86 std::stringstream varsStream(str);
88 std::stringstream mainStream;
91 std::stringstream mechanicsStream;
94 std::stringstream defaultsStream;
97 std::stringstream switchersStream;
110 std::istream& mainStream,
111 std::istream& mechanicsStream,
112 std::istream& defaultStream,
113 std::istream& switcherStream,
114 std::istream& varsStream
120 std::unique_ptr<VMlib::StreamParser> parser;
132 info(
'e') <<
"Reference velocity should be non-zero!" << std::endl;
140 std::pair<std::pair<std::string, int>, std::string> velAccel;
142 if (velAccel.first.second != -1)
145 std::stringstream sstr(velAccel.second);
146 std::istream& istr(sstr);
148 std::unique_ptr<VMlib::StreamParser> parserAccel;
150 parserAccel.reset(
new VMlib::StreamParser(
info,
"parserAccel", istr, defaultStream, switcherStream, varsStream));
156 info(
'e') <<
"Velocity acceleration scheme <" << velAccel.first.first <<
"> is unknown" << std::endl;
161 if (!defParamAccelVel)
165 double tempTimeAccel;
168 info(
'e') <<
"timeAccel parameter is set twice!" << std::endl;
184 std::pair<std::pair<std::string, int>, std::string> saveVtx;
186 if (saveVtx.first.second != -1)
189 std::stringstream sstr(saveVtx.second);
190 std::istream& istr(sstr);
192 std::unique_ptr<VMlib::StreamParser> parserSaveVtx;
194 parserSaveVtx.reset(
new VMlib::StreamParser(
info,
"parserSaveVtx", istr, defaultStream, switcherStream, varsStream));
199 std::stringstream ss;
200 ss << saveVtx.first.first;
210 info(
'e') <<
"Vtx file type <" << saveVtx.first.first <<
"> is unknown" << std::endl;
217 std::pair<std::pair<std::string, int>, std::string> saveVP;
219 if (saveVP.first.second != -1)
222 std::stringstream sstr(saveVP.second);
223 std::istream& istr(sstr);
225 std::unique_ptr<VMlib::StreamParser> parserSaveVP;
227 parserSaveVP.reset(
new VMlib::StreamParser(
info,
"parserSaveVP", istr, defaultStream, switcherStream, varsStream));
232 std::stringstream ss;
233 ss << saveVP.first.first;
243 info(
'e') <<
"VP file type <" << saveVP.first.first <<
"> is unknown" << std::endl;
302 std::vector<std::string> airfoil;
308 size_t nAirfoil = airfoil.size();
310 for (
size_t i = 0; i < nAirfoil; ++i)
324 std::unique_ptr<VMlib::StreamParser> parserAirfoil;
326 parserAirfoil.reset(
new VMlib::StreamParser(
info,
"airfoil parser", aflStream, defaultStream, switcherStream, varsStream));
335 parserAirfoil->get(
"scale", tmpScale, &defaultTmpScale);
336 switch (tmpScale.size())
342 prm.
scale[0] = tmpScale[0];
343 prm.
scale[1] = tmpScale[1];
346 info(
'e') <<
"Error in _scale_ value for airfoil" << std::endl;
370 std::unique_ptr<VMlib::StreamParser> parserMechanicsList;
371 std::unique_ptr<VMlib::StreamParser> parserSwitchers;
375 std::string mechString;
382 std::string mechTypeAlias = mechanicsLine.first;
400 const std::string str =
"passport info: ";
402 info(
'i') <<
"--- Passport info ---" << std::endl;
458 info(
'_') <<
"airfoil[" << q <<
"]_file = " <<
airfoilParams[q].fileAirfoil << std::endl;
459 info(
'_') <<
"airfoil[" << q <<
"]_requiredNPanels = " <<
airfoilParams[q].requiredNPanels << std::endl;
460 info(
'_') <<
"airfoil[" << q <<
"]_basePoint = " <<
airfoilParams[q].basePoint << std::endl;
461 info(
'_') <<
"airfoil[" << q <<
"]_scale = " <<
airfoilParams[q].scale << std::endl;
462 info(
'_') <<
"airfoil[" << q <<
"]_angle = " <<
airfoilParams[q].angle << std::endl;
463 info(
'_') <<
"airfoil[" << q <<
"]_chord = " <<
airfoilParams[q].chord << std::endl;
464 info(
'_') <<
"airfoil[" << q <<
"]_inverse = " << (
airfoilParams[q].inverse ?
"true":
"false") << std::endl;
465 info(
'_') <<
"airfoil[" << q <<
"]_mechanicalSystem = " <<
airfoilParams[q].mechanicalSystem << std::endl;
466 info(
'_') <<
"airfoil[" << q <<
"]_addedMass = " <<
airfoilParams[q].addedMass << std::endl;
Заголовочный файл с описанием класса Passport (двумерный) и cоответствующими структурами
Заголовочный файл с описанием класса Preprocessor.
Заголовочный файл с описанием класса StreamParser.
bool rotateForces
Признак работы в "географической" системе координат
std::string wakesDir
Каталог с файлами вихревых следов
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
bool calcCoefficients
Признак вычисления коэффициентов вместо сил
double rotateAngleVpPoints
Угол поворота точек VP.
WakeDiscretizationProperties wakeDiscretizationProperties
Структура с параметрами дискретизации вихревого следа
std::string airfoilsDir
Каталог с файлами профилей
virtual void PrintAllParams() override
Печать всех параметров расчета в поток логов
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
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)
Конструктор
virtual void GetAllParamsFromParser(std::istream &mainStream, std::istream &mechanicsStream, std::istream &defaultStream, std::istream &switcherStream, std::istream &varsStream) override
Считывание всех параметров расчета из соответствующих потоков
NumericalSchemes numericalSchemes
Структура с используемыми численными схемами
Класс, определяющий работу с потоком логов
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
LogStream info
Поток для вывода логов и сообщений об ошибках
std::string dir
Рабочий каталог задачи
Класс, позволяющий выполнять предварительную обработку файлов
std::string resultString
Строка, содержащая окончательный результат обработки файла
Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами
static std::vector< std::string > StringToVector(std::string line, char openBracket='(', char closeBracket=')')
Pазбор строки, содержащей запятые, на отдельные строки
static std::pair< std::string, std::string > SplitString(LogStream &info, std::string line, bool upcase=true)
Разбор строки на пару ключ-значение
static std::string VectorStringToString(const std::vector< std::string > &_vecString)
Объединение вектора (списка) из строк в одну строку
P length() const
Вычисление 2-нормы (длины) вектора
const VMlib::Point2D defaultBasePoint
Базовое смещение профиля
const double defaultDistFar
Радиус убивания дальнего следа
const bool defaultCalcCoefficients
Признак расчета безразмерных коэффициентов вместо сил
const std::string defaultWakesDir
Каталог с файлами вихревых следов
const int defaultSaveVisStress
Шаг подсчета поля скорости и давления
const size_t defaultRequiredNPanels
Желаемое число панелей для разбиения геометрии
const double defaultVRef
Референсная скорость, равная нулю, что означает ее равенство скорости набегающего потока
const Point2D defaultScale
Коэффициент масштабирования профиля
const double defaultDelta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
const bool defaultRotateForces
Признак работы в "географической" системе координат
const Point2D defaultAddedMass
Присоединенная масса
const bool defaultInverse
Признак разворота нормалей (для расчета внутреннего течения)
const int defaultSaveVPstep
const double defaultEpsCol
Радиус вихря по умолчанию
const double defaultTimeAccel
const double defaultChord
Хорда
const std::pair< std::string, int > defaultVelocityComputation
Способ вычисления скоростей вихрей
const std::string defaultFileSource("")
Файл с источниками
const std::vector< std::string > defaultAirfoil({})
Список профилей
const double defaultAngle
Угол атаки
const double defaultMaxGamma
Число вихрей, рождаемых на одной панели
const int defaultVortexPerPanel
Число вихрей, рождаемых на одной панели
const int defaultNameLength
Число разрядов в имени файла
const double rotateAngleVpPoints
Угол поворота точек VP.
const std::string defaultAirfoilsDir
Каталог с файлами профилей
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVtx
Шаг подсчета поля скорости и давления
const std::pair< std::pair< std::string, int >, std::string > defaultVelAccel
Время разгона
const double defaultTimeStart
Начало расчета
const std::string defaultMechanicalSystem
const int defaultSaveVtxStep
const std::pair< std::string, int > defaultBoundaryCondition
Способ удовлетворения граничного условия
const double defaultEps
Радиус вихря по умолчанию
const std::pair< std::string, int > defaultLinearSystemSolver
Способ решения линейной системы
const std::pair< std::pair< std::string, int >, std::string > defaultSaveVP
Шаг подсчета поля скорости и давления
const std::string defaultFileWake("")
Файл со следом
Point2D addedMass
Присоединенная масса
std::string mechanicalSystem
Point2D basePoint
Смещение центра масс (перенос профиля)
int mechanicalSystemType
Тип механической системы
std::string fileAirfoil
Имя файла с начальным состоянием профилей (без полного пути)
double angle
Угол поворота (угол атаки)
std::string mechanicalSystemParameters
Point2D scale
Коэффициент масштабирования
size_t requiredNPanels
Желаемое число панелей для разбиения геометрии
bool inverse
Признак разворота нормалей (для расчета внутреннего течения)
std::pair< std::string, int > boundaryCondition
Метод аппроксимации граничных условий
std::pair< std::string, int > velocityComputation
std::pair< std::string, int > linearSystemSolver
std::pair< std::string, int > typeAccel
Способ разгона потока
double accelCft(double currentTime) const
Функция-множитель, позволяющая моделировать разгон
double vRef
Референсная скорость
double nu
Коэффициент кинематической вязкости среды
double timeAccel
Время разгона потока
double rho
Плотность потока
Point2D vInf
Скоростью набегающего потока
int minVortexPerPanel
Минимальное число вихрей, рождаемых на каждой панели профииля
std::string fileSource
Имя файла с положениями источников (без полного пути)
double delta
Расстояние, на которое рождаемый вихрь отодвигается от профиля
double epscol
Радиус коллапса
std::string fileWake
Имя файла с начальным состоянием вихревого следа (без полного пути)
double maxGamma
Максимально допустимая циркуляция вихря
double distFar
Расстояние от центра самого подветренного (правого) профиля, на котором вихри уничтожаются
double eps2
Квадрат радиуса вихря
std::pair< std::string, int > fileTypeVtx
Тип файлов для сохранения скорости и давления
double timeStart
Начальное время
int saveVPstep
Шаг вычисления и сохранения скорости и давления
int saveVtxStep
Шаг сохранения кадров в бинарные файлы
int saveVisStress
Шаг вычисления и сохранения скорости и давления
int nameLength
Число разрядов в имени файла
double timeStop
Конечное время
std::pair< std::string, int > fileTypeVP
Тип файлов для сохранения скорости и давления