58 numberInPassport(numberInPassport_),
59 afl(W_.getNonConstAirfoil(numberInPassport_)),
60 boundary(W_.getBoundary(numberInPassport_)),
61 virtVortParams(W_.getVelocity().virtualVortexesParams[numberInPassport_]),
82 hydroDynamForce({0.0, 0.0}),
83 hydroDynamMoment(0.0),
84 viscousForce({ 0.0, 0.0 }),
88 ReadParametersFromDictionary();
127 std::stringstream forceFileName, forceFileNameCsv;
131 std::ofstream newForcesFile(forceFileName.str());
132 std::ofstream newForcesFileCsv(forceFileNameCsv.str());
142 newForcesFileCsv <<
"step,time,Fx,Fy,Mz,Ftaux,Ftauy,Mtau";
144 newForcesFileCsv <<
"step,time,CFx,CFy,CMz,CFtaux,CFtauy,CMtau";
146 newForcesFile.close();
147 newForcesFile.clear();
149 newForcesFileCsv.close();
150 newForcesFileCsv.clear();
160 std::stringstream positionFileName, positionFileNameCsv;
164 std::ofstream newPositionFile(positionFileName.str());
165 std::ofstream newPositionFileCsv(positionFileNameCsv.str());
171 newPositionFileCsv <<
"step,time,x,y,phi,Vx,Vy,w";
173 newPositionFile.close();
174 newPositionFile.clear();
176 newPositionFileCsv.close();
177 newPositionFileCsv.clear();
185 std::stringstream forceFileName, forceFileNameCsv;
218 cartesianHydroForce /= (flowPress * chord);
219 cartesianViscoForce /= (flowPress * chord);
221 cartesianHydroMoment /= (flowPress * sqr(chord));
222 cartesianViscoMoment /= (flowPress * sqr(chord));
226 std::ofstream forcesFile(forceFileName.str(), std::ios::app);
227 forcesFile << std::endl <<
W.
getCurrentStep() <<
" " <<
W.
getCurrentTime() <<
" " << cartesianHydroForce[0] <<
" " << cartesianHydroForce[1] <<
" " << cartesianHydroMoment <<
" " << cartesianViscoForce[0] <<
" " << cartesianViscoForce[1] <<
" " << cartesianViscoMoment;
230 std::ofstream forcesFileCsv(forceFileNameCsv.str(), std::ios::app);
231 forcesFileCsv << std::endl <<
W.
getCurrentStep() <<
"," <<
W.
getCurrentTime() <<
"," << cartesianHydroForce[0] <<
"," << cartesianHydroForce[1] <<
"," << cartesianHydroMoment <<
"," << cartesianViscoForce[0] <<
"," << cartesianViscoForce[1] <<
"," << cartesianViscoMoment;
232 forcesFileCsv.close();
242 std::stringstream positionFileName, positionFileNameCsv;
246 std::ofstream positionFile(positionFileName.str(), std::ios::app);
248 positionFile.close();
250 std::ofstream positionFileCsv(positionFileNameCsv.str(), std::ios::app);
252 positionFileCsv.close();
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с описанием класса MeasureVP.
Заголовочный файл с описанием класса Mechanics.
Заголовочный файл с описанием класса StreamParser.
Заголовочный файл с описанием класса Velocity.
Заголовочный файл с описанием класса Wake.
Заголовочный файл с описанием класса World2D.
double phiAfl
Поворот профиля
double area
Площадь профиля
Point2D rcm
Положение центра масс профиля
virtual void Move(const Point2D &dr)
Перемещение профиля
const size_t numberInPassport
Номер профиля в паспорте
virtual void Rotate(double alpha)
Поворот профиля
std::unique_ptr< VMlib::StreamParser > mechParamsParser
Умный указатель на парсер параметров механической системы
const bool isMoves
Переменная, отвечающая за то, двигается профиль или нет
Point2D hydroDynamForce
Вектор гидродинамической силы и момент, действующие на профиль
void GeneratePositionHeader()
Генерация заголовка файла положения профиля
Point2D Vcm0
Начальная скорость центра и угловая скорость
const size_t numberInPassport
Номер профиля в паспорте
Point2D RcmOld
Текущие положение профиля
void GeneratePositionString()
Сохранение строки со статистикой в файл нагрузок
void GenerateForcesString()
Сохранение строки со статистикой в файл нагрузок
Mechanics(const World2D &W_, size_t numberInPassport_, bool isMoves_, bool isDeform_)
Конструктор
Point2D VcmOld
Скорость и отклонение с предыдущего шага
const World2D & W
Константная ссылка на решаемую задачу
void Initialize(Point2D Vcm0_, Point2D Rcm0_, double Wcm0_, double Phi0_)
Задание начального положения и начальной скорости
Point2D Rcm
Текущие положение профиля
Point2D Rcm0
Начальное положение профиля
void ReadParametersFromDictionary()
Парсинг списка параметров механической системы
Point2D viscousForce
Вектор силы и момент вязкого трения, действующие на профиль
double circulationOld
Циркуляция скорости по границе профиля с предыдущего шага
Point2D Vcm
Текущие скорость центра и угловая скорость
void GenerateForcesHeader()
Генерация заголовка файла нагрузок
double circulation
Текущая циркуляция скорости по границе профиля
PhysicalProperties physicalProperties
Структура с физическими свойствами задачи
bool calcCoefficients
Признак вычисления коэффициентов вместо сил
std::vector< AirfoilParams > airfoilParams
Список структур с параметрами профилей
Класс, опеделяющий текущую решаемую задачу
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
const Passport & getPassport() const
Возврат константной ссылки на паспорт
std::string dir
Рабочий каталог задачи
Класс, позволяющий выполнять разбор файлов и строк с настройками и параметрами
VMlib::LogStream & getInfo() const
Возврат ссылки на объект LogStream Используется в техничеcких целях для организации вывода
double getCurrentTime() const
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
double vRef
Референсная скорость
double rho
Плотность потока