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");