tsimulation.c: add remaining fields to VTK output - granular - granular dynamics simulation
(HTM) git clone git://src.adamsgaard.dk/granular
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 2fdfacdd7bf02059dfd4531d0e04fc3ad9822d92
(DIR) parent e19a5c31b7b04c8849ed5d8af8582eea0e765330
(HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
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(-)
---
(DIR) diff --git a/simulation.c b/simulation.c
t@@ -69,51 +69,282 @@ sim_print_grains(FILE *stream, const struct simulation *sim)
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\">\n", n);
+ "<?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 [m]\" "
- "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^2]\" "
+ "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 [1/s]\" "
+ "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 acceleration [1/s^2]\" "
+ "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 force [N]\" "
+ "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 [Pa]\" "
+ "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 coefficient [-]\" "
+ "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 [Pa]\" "
+ "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 [Pa]\" "
+ "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