tsimulation.c: add remaining fields to VTK output - granular - granular dynamic… | |
git clone git://src.adamsgaard.dk/granular | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 2fdfacdd7bf02059dfd4531d0e04fc3ad9822d92 | |
parent e19a5c31b7b04c8849ed5d8af8582eea0e765330 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 25 Mar 2021 19:08:19 +0100 | |
simulation.c: add remaining fields to VTK output | |
Diffstat: | |
M simulation.c | 291 +++++++++++++++++++++++++++--… | |
1 file changed, 261 insertions(+), 30 deletions(-) | |
--- | |
diff --git a/simulation.c b/simulation.c | |
t@@ -69,51 +69,282 @@ sim_print_grains(FILE *stream, const struct simulation *s… | |
void | |
print_grains_vtk(FILE *stream, const struct grain *grains, size_t n) | |
{ | |
- size_t i; | |
+ size_t i, d; | |
fprintf(stream, | |
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" | |
- "<VTKFile type=\"UnstructuredGrid\" version=\"1.0\" " | |
- "byte_order=\"LittleEndian\">\n" | |
- "\t<UnstructuredGrid>\n" | |
- "\t\t<Piece NumberOfPoints=\"%zu\" NumberOfCells=\"0\"… | |
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" | |
+ "<VTKFile type=\"UnstructuredGrid\" version=\"1.0\" " | |
+ "byte_order=\"LittleEndian\">\n" | |
+ "\t<UnstructuredGrid>\n" | |
+ "\t\t<Piece NumberOfPoints=\"%zu\" NumberOfCells=\"0\">\n", n); | |
fprintf(stream, | |
- "\t\t\t<Points>\n" | |
- "\t\t\t\t<DataArray type=\"Float64\" Name=\"Points\" " | |
- "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ "\t\t\t<Points>\n" | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Points\" " | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
for (i = 0; i < n; i++) | |
- fprintf(stream, "%.17g %.17g %.17g ", | |
- grains[i].pos[0], grains[i].pos[1], grains[i].pos[2]); | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].pos[d]); | |
fprintf(stream, "\n"); | |
fprintf(stream, | |
- "\t\t\t\t</DataArray>\n" | |
- "\t\t\t</Points>\n"); | |
+ "\t\t\t\t</DataArray>\n" | |
+ "\t\t\t</Points>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t<Cells>\n" | |
+ "\t\t\t\t<DataArray type=\"Int32\" Name=\"connectivity\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
+ "\t\t\t\t<DataArray type=\"Int32\" Name=\"offsets\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
+ "\t\t\t\t<DataArray type=\"UInt8\" Name=\"types\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
+ "\t\t\t</Cells>\n"); | |
fprintf(stream, | |
- "\t\t\t<Cells>\n" | |
- "\t\t\t\t<DataArray type=\"Int32\" Name=\"connectivity… | |
- "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
- "\t\t\t\t<DataArray type=\"Int32\" Name=\"offsets\" " | |
- "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
- "\t\t\t\t<DataArray type=\"UInt8\" Name=\"types\" " | |
- "NumberOfComponents=\"1\" format=\"ascii\"/>\n" | |
- "\t\t\t</Cells>\n"); | |
+ "\t\t\t<PointData Scalars=\"Diameter [m]\" " | |
+ "Vectors=\"Angular position [-]\">\n"); | |
fprintf(stream, | |
- "\t\t\t<PointData>\n" | |
- "\t\t\t\t<DataArray type=\"Float64\" Name=\"Diameter [… | |
- "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Diameter [m]\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
for (i = 0; i < n; i++) | |
fprintf(stream, "%.17g ", grains[i].radius * 2.0); | |
fprintf(stream, | |
- "\n" | |
- "\t\t\t\t</DataArray>\n" | |
- "\t\t\t</PointData>\n"); | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Velocity [m/s]\" " | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].vel[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Acceleration [m/s^… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].acc[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Force [N]\" " | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].force[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Angular position [… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].angpos[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Angular velocity [… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].angvel[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Angular accelerati… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].angacc[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Torque [N/m]\" " | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].torque[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Displacement [N]\"… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].disp[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"External body forc… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].forceext[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Density [kg/m^3]\"… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].density); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Int64\" Name=\"Fixed [-]\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%d ", grains[i].fixed); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Int64\" Name=\"Rotating [-]\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%d ", grains[i].rotating); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Int64\" Name=\"Enabled [-]\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%d ", grains[i].enabled); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Young's modulus [P… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].youngs_modulus); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Poisson's ratio [-… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].poissons_ratio); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Friction coefficie… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].friction_coeff); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Tensile strength [… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].tensile_strength); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Shear strength [Pa… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].shear_strength); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Fracture toughness… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].fracture_toughness); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"UInt64\" Name=\"Grid position [-]\"… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%zu ", grains[i].gridpos[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"UInt64\" Name=\"Number of contacts … | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%zu ", grains[i].ncontacts); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Contact stress [Pa… | |
+ "NumberOfComponents=\"3\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ for (d = 0; d < 3; d++) | |
+ fprintf(stream, "%.17g ", grains[i].contact_stress[d]); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Float64\" Name=\"Thermal energy [J]… | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%.17g ", grains[i].thermal_energy); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, | |
+ "\t\t\t\t<DataArray type=\"Int64\" Name=\"Color [-]\" " | |
+ "NumberOfComponents=\"1\" format=\"ascii\">\n"); | |
+ for (i = 0; i < n; i++) | |
+ fprintf(stream, "%d ", grains[i].color); | |
+ fprintf(stream, | |
+ "\n" | |
+ "\t\t\t\t</DataArray>\n"); | |
+ | |
+ fprintf(stream, "\t\t\t</PointData>\n"); | |
fprintf(stream, | |
- "\t\t</Piece>\n" | |
- "\t</UnstructuredGrid>\n" | |
- "</VTKFile>\n"); | |
+ "\t\t</Piece>\n" | |
+ "\t</UnstructuredGrid>\n" | |
+ "</VTKFile>\n"); | |
} | |
void |