Skip to content

Commit 5aebfa8

Browse files
Create vtu_save.h
1 parent da78d16 commit 5aebfa8

1 file changed

Lines changed: 71 additions & 0 deletions

File tree

src/io/vtu_save.h

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#pragma once
2+
#include <vector>
3+
#include <string>
4+
#include <fstream>
5+
#include "../struct/particle.h"
6+
7+
inline void SaveVTU(const std::vector<Particle>& p, const std::string& filename)
8+
{
9+
std::ofstream out(filename);
10+
if (!out) return;
11+
12+
const size_t N = p.size();
13+
14+
out << "<?xml version=\"1.0\"?>\n";
15+
out << "<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\">\n";
16+
out << " <UnstructuredGrid>\n";
17+
out << " <Piece NumberOfPoints=\"" << N
18+
<< "\" NumberOfCells=\"" << N << "\">\n";
19+
20+
// --- POINTS ---
21+
out << " <Points>\n";
22+
out << " <DataArray type=\"Float32\" NumberOfComponents=\"3\" format=\"ascii\">\n";
23+
for (const auto& a : p)
24+
out << " " << a.x << " " << a.y << " " << a.z << "\n";
25+
out << " </DataArray>\n";
26+
out << " </Points>\n";
27+
28+
// --- CELLS (each particle is a vertex cell) ---
29+
out << " <Cells>\n";
30+
31+
// connectivity
32+
out << " <DataArray type=\"Int32\" Name=\"connectivity\" format=\"ascii\">\n";
33+
for (size_t i = 0; i < N; i++)
34+
out << " " << i << "\n";
35+
out << " </DataArray>\n";
36+
37+
// offsets
38+
out << " <DataArray type=\"Int32\" Name=\"offsets\" format=\"ascii\">\n";
39+
for (size_t i = 1; i <= N; i++)
40+
out << " " << i << "\n";
41+
out << " </DataArray>\n";
42+
43+
// types (1 = VTK_VERTEX)
44+
out << " <DataArray type=\"UInt8\" Name=\"types\" format=\"ascii\">\n";
45+
for (size_t i = 0; i < N; i++)
46+
out << " 1\n";
47+
out << " </DataArray>\n";
48+
49+
out << " </Cells>\n";
50+
51+
// --- POINT DATA ---
52+
out << " <PointData>\n";
53+
54+
// velocity vector
55+
out << " <DataArray type=\"Float32\" Name=\"velocity\" NumberOfComponents=\"3\" format=\"ascii\">\n";
56+
for (const auto& a : p)
57+
out << " " << a.vx << " " << a.vy << " " << a.vz << "\n";
58+
out << " </DataArray>\n";
59+
60+
// mass scalar
61+
out << " <DataArray type=\"Float32\" Name=\"mass\" format=\"ascii\">\n";
62+
for (const auto& a : p)
63+
out << " " << a.m << "\n";
64+
out << " </DataArray>\n";
65+
66+
out << " </PointData>\n";
67+
68+
out << " </Piece>\n";
69+
out << " </UnstructuredGrid>\n";
70+
out << "</VTKFile>\n";
71+
}

0 commit comments

Comments
 (0)