59 numberInPassport(numberInPassport_),
60 afl(W_.getNonConstAirfoil(numberInPassport_)),
61 boundary(W_.getBoundary(numberInPassport_)),
62 virtVortParams(W_.getVelocity().virtualVortexesParams[numberInPassport_]),
83 hydroDynamForce({0.0, 0.0}),
84 hydroDynamMoment(0.0),
85 viscousForce({ 0.0, 0.0 }),
89 ReadParametersFromDictionary();
128 std::stringstream forceFileName, forceFileNameCsv;
132 std::ofstream newForcesFile(forceFileName.str());
133 std::ofstream newForcesFileCsv(forceFileNameCsv.str());
143 newForcesFileCsv <<
"step,time,Fx,Fy,Mz,Ftaux,Ftauy,Mtau";
145 newForcesFileCsv <<
"step,time,CFx,CFy,CMz,CFtaux,CFtauy,CMtau";
147 newForcesFile.close();
148 newForcesFile.clear();
150 newForcesFileCsv.close();
151 newForcesFileCsv.clear();
161 std::stringstream positionFileName, positionFileNameCsv;
165 std::ofstream newPositionFile(positionFileName.str());
166 std::ofstream newPositionFileCsv(positionFileNameCsv.str());
172 newPositionFileCsv <<
"step,time,x,y,phi,Vx,Vy,w";
174 newPositionFile.close();
175 newPositionFile.clear();
177 newPositionFileCsv.close();
178 newPositionFileCsv.clear();
186 std::stringstream forceFileName, forceFileNameCsv;
219 cartesianHydroForce /= (flowPress * chord);
220 cartesianViscoForce /= (flowPress * chord);
222 cartesianHydroMoment /= (flowPress * sqr(chord));
223 cartesianViscoMoment /= (flowPress * sqr(chord));
227 std::ofstream forcesFile(forceFileName.str(), std::ios::app);
228 forcesFile << std::endl <<
W.
getCurrentStep() <<
" " <<
W.
getCurrentTime() <<
" " << cartesianHydroForce[0] <<
" " << cartesianHydroForce[1] <<
" " << cartesianHydroMoment <<
" " << cartesianViscoForce[0] <<
" " << cartesianViscoForce[1] <<
" " << cartesianViscoMoment;
231 std::ofstream forcesFileCsv(forceFileNameCsv.str(), std::ios::app);
232 forcesFileCsv << std::endl <<
W.
getCurrentStep() <<
"," <<
W.
getCurrentTime() <<
"," << cartesianHydroForce[0] <<
"," << cartesianHydroForce[1] <<
"," << cartesianHydroMoment <<
"," << cartesianViscoForce[0] <<
"," << cartesianViscoForce[1] <<
"," << cartesianViscoMoment;
233 forcesFileCsv.close();
243 std::stringstream positionFileName, positionFileNameCsv;
247 std::ofstream positionFile(positionFileName.str(), std::ios::app);
249 positionFile.close();
251 std::ofstream positionFileCsv(positionFileNameCsv.str(), std::ios::app);
253 positionFileCsv.close();
Заголовочный файл с описанием класса Airfoil.
Заголовочный файл с описанием класса Boundary.
Заголовочный файл с функциями для метода GMRES.
Заголовочный файл с описанием класса 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
Плотность потока