tsimulation.c: condense VTK export code by macros - granular - granular dynamics simulation
(HTM) git clone git://src.adamsgaard.dk/granular
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit ec6f6cd1eda3c204e5ea43df9f48d2ccc612bd17
(DIR) parent 2fdfacdd7bf02059dfd4531d0e04fc3ad9822d92
(HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Thu, 25 Mar 2021 19:41:33 +0100
simulation.c: condense VTK export code by macros
Diffstat:
M simulation.c | 267 +++++--------------------------
1 file changed, 41 insertions(+), 226 deletions(-)
---
(DIR) diff --git a/simulation.c b/simulation.c
t@@ -7,6 +7,23 @@
#include "arrays.h"
#include "util.h"
+#define VTK_XML_SCALAR(M, N, T, F) \
+ fprintf(stream,\
+ "\t\t\t\t<DataArray type=\"" T "\" Name=\"" N "\" "\
+ "NumberOfComponents=\"1\" format=\"ascii\">\n");\
+ for (i = 0; i < n; i++)\
+ fprintf(stream, F, grains[i].M);\
+ fprintf(stream, "\n\t\t\t\t</DataArray>\n");
+
+#define VTK_XML_VECTOR(M, N, T, F) \
+ fprintf(stream,\
+ "\t\t\t\t<DataArray type=\"" T "\" Name=\"" N "\" "\
+ "NumberOfComponents=\"3\" format=\"ascii\">\n");\
+ for (i = 0; i < n; i++)\
+ for (d = 0; d < 3; d++)\
+ fprintf(stream, F, grains[i].M[d]);\
+ fprintf(stream, "\n\t\t\t\t</DataArray>\n");
+
struct simulation
sim_new(void)
{
t@@ -112,232 +129,30 @@ print_grains_vtk(FILE *stream, const struct grain *grains, size_t 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");
+ VTK_XML_VECTOR(vel, "Velocity [m/s]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(acc, "Acceleration [m/s^2]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(force, "Force [N]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(angpos, "Angular position [rad]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(angvel, "Angular velocity [rad/s]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(angacc, "Angular acceleration [rad/s^2]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(torque, "Torque [N/m]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(disp, "Displacement [m]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(forceext, "External body force [N]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(density, "Density [kg/m^3]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(fixed, "Fixed [-]", "Int64", "%d ");
+ VTK_XML_SCALAR(rotating, "Rotating [-]", "Int64", "%d ");
+ VTK_XML_SCALAR(enabled, "Enabled [-]", "Int64", "%d ");
+ VTK_XML_SCALAR(youngs_modulus, "Young's modulus [Pa]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(poissons_ratio, "Poisson's ratio [-]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(friction_coeff, "Friction coefficient [-]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(tensile_strength, "Tensile strength [Pa]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(shear_strength, "Shear strength [Pa]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(fracture_toughness, "Fracture toughness [Pa]", "Float64", "%.17g ");
+ VTK_XML_VECTOR(gridpos, "Grid position [-]", "UInt64", "%zu ");
+ VTK_XML_SCALAR(ncontacts, "Number of contacts [-]", "UInt64", "%zu ");
+ VTK_XML_VECTOR(contact_stress, "Contact stress [Pa]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(thermal_energy, "Thermal energy [J]", "Float64", "%.17g ");
+ VTK_XML_SCALAR(color, "Color [-]", "Int64", "%d ");
fprintf(stream, "\t\t\t</PointData>\n");