Сохранение вихревого следа в файл .vtk.
79 std::ofstream outfile;
80 size_t numberNonZero = 0;
83 numberNonZero +=
vtx.size();
94 outfile <<
"# vtk DataFile Version 2.0" << std::endl;
96 outfile <<
"ASCII" << std::endl;
97 outfile <<
"DATASET UNSTRUCTURED_GRID" << std::endl;
98 outfile <<
"POINTS " << numberNonZero <<
" float" << std::endl;
104 outfile << r[0] <<
" " << r[1] <<
" " <<
"0.0" << std::endl;
111 outfile << r[0] <<
" " << r[1] <<
" " <<
"0.0" << std::endl;
114 outfile <<
"CELLS " << numberNonZero <<
" " << 2 * numberNonZero << std::endl;
115 for (
size_t i = 0; i < numberNonZero; ++i)
116 outfile <<
"1 " << i << std::endl;
118 outfile <<
"CELL_TYPES " << numberNonZero << std::endl;
119 for (
size_t i = 0; i < numberNonZero; ++i)
120 outfile <<
"1" << std::endl;
122 outfile << std::endl;
123 outfile <<
"POINT_DATA " << numberNonZero << std::endl;
124 outfile <<
"SCALARS Gamma float 1" << std::endl;
125 outfile <<
"LOOKUP_TABLE default" << std::endl;
129 outfile << v.g() << std::endl;
135 outfile <<
"0.0" << std::endl;
144 bool littleEndian = (*((uint8_t*)&x));
145 const char eolnBIN[] =
"\n";
148 outfile.open(
W.
getPassport().
dir +
"snapshots/" + fname, std::ios::out | std::ios::binary);
150 outfile <<
"# vtk DataFile Version 3.0" <<
"\r\n" <<
"VM2D VTK result: " << (
W.
getPassport().
dir +
"snapshots/" + fname).c_str() <<
" saved " <<
VMlib::CurrentDataTime() << eolnBIN;
151 outfile <<
"BINARY" << eolnBIN;
152 outfile <<
"DATASET UNSTRUCTURED_GRID" << eolnBIN <<
"POINTS " << numberNonZero <<
" " <<
"float" << eolnBIN;
157 Eigen::VectorXf rData = Eigen::VectorXf::Zero(vtx.size() * 3);
158 for (
size_t i = 0; i < vtx.size(); ++i)
160 rData(3 * i) = (float)(vtx[i].r())[0];
161 rData(3 * i + 1) = (float)(vtx[i].r())[1];
165 for (
int i = 0; i < vtx.size() * 3; ++i)
167 outfile.write(reinterpret_cast<char*>(rData.data()), vtx.size() * 3 *
sizeof(float));
186 std::vector<int> cells(2 * numberNonZero);
187 for (
size_t i = 0; i < numberNonZero; ++i)
190 cells[2 * i + 1] = (int)i;
193 std::vector<int> cellsTypes;
194 cellsTypes.resize(numberNonZero, 1);
198 for (
int i = 0; i < numberNonZero * 2; ++i)
201 for (
int i = 0; i < numberNonZero; ++i)
205 outfile << eolnBIN <<
"CELLS " << numberNonZero <<
" " << numberNonZero * 2 << eolnBIN;
206 outfile.write(reinterpret_cast<char*>(cells.data()), numberNonZero * 2 *
sizeof(
int));
207 outfile << eolnBIN <<
"CELL_TYPES " << numberNonZero << eolnBIN;
208 outfile.write(reinterpret_cast<char*>(cellsTypes.data()), numberNonZero *
sizeof(
int));
211 outfile << eolnBIN <<
"POINT_DATA " << numberNonZero << eolnBIN;
212 outfile << eolnBIN <<
"SCALARS Gamma " <<
"float" <<
" 1" << eolnBIN;
213 outfile <<
"LOOKUP_TABLE default" << eolnBIN;
217 Eigen::VectorXf pData = Eigen::VectorXf::Zero(numberNonZero);
218 for (
int s = 0; s < vtx.size(); ++s)
219 pData(s) = (float)vtx[s].g();
222 for (
int i = 0; i < vtx.size(); ++i)
224 outfile.write(reinterpret_cast<char*>(pData.data()), vtx.size() *
sizeof(float));
247 outfile <<
"point,x,y,G " << std::endl;
252 outfile << counter++ <<
"," << v.r()[0] <<
"," << v.r()[1] <<
"," << v.g() << std::endl;
258 outfile << counter++ <<
"," << r[0] <<
"," << r[1] <<
"," <<
"0.0" << std::endl;
266 }
Times & getTimestat() const
Возврат ссылки на временную статистику выполнения шага расчета по времени
int saveVtxStep
Шаг сохранения кадров в бинарные файлы
std::string CurrentDataTime()
Формирование строки с текущем временем и датой
int nameLength
Число разрядов в имени файла
std::string dir
Рабочий каталог задачи
const Point2D & getR(size_t q) const
Возврат константной ссылки на вершину профиля
size_t getNumberOfPanels() const
Возврат количества панелей на профиле
std::string fileNameStep(const std::string &name, int length, size_t number, const std::string &ext)
Формирование имени файла
bool ifDivisible(int val) const
timePeriod timeSaveKadr
Начало и конец процесса сохранения кадра в файл
TimeDiscretizationProperties timeDiscretizationProperties
Структура с параметрами процесса интегрирования по времени
size_t getNumberOfAirfoil() const
Возврат количества профилей в задаче
std::vector< Vortex2D > vtx
Список вихревых элементов
const World2D & W
Константная ссылка на решаемую задачу
Класс, опеделяющий двумерный вектор
std::pair< std::string, int > fileTypeVtx
Тип файлов для сохранения скорости и давления
const Passport & getPassport() const
Возврат константной ссылки на паспорт
size_t getCurrentStep() const
Возврат константной ссылки на параметры распараллеливания по MPI.
const Airfoil & getAirfoil(size_t i) const
Возврат константной ссылки на объект профиля
void SwapEnd(T &var)
Вспомогательная функция перестановки байт местами (нужно для сохранения бинарных VTK) ...
void CreateDirectory(const std::string &dir, const std::string &name)
Создание каталога