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