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