tadd function to write to VTK files - slidergrid - grid of elastic sliders on a frictional surface
 (HTM) git clone git://src.adamsgaard.dk/slidergrid
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 61541ba4e7dc9660c1dd91aba87dc25c282682c7
 (DIR) parent 3008c9edbbaac56bcfe215ade860e106f79127b8
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Thu, 17 Mar 2016 15:38:43 -0700
       
       add function to write to VTK files
       
       Diffstat:
         M slidergrid/simulation.c             |     153 +++++++++++++++++++++++++++++++
         M slidergrid/slider.h                 |       6 +++---
       
       2 files changed, 156 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c
       t@@ -142,3 +142,156 @@ int save_general_state_to_file(const simulation sim, const char* filename)
            fclose(f);
            return 0;
        }
       +
       +/* save slider information as an unstructured grid to a VTK xml file. The 
       + * filename extension should be '.vtu' in order for Paraview to correctly handle 
       + * the file upon import. See VTK-file-formats.pdf for documentation on the file 
       + * format. */
       +int save_sliders_to_vtk_file(
       +        const slider* sliders,
       +        const int N,
       +        const char* filename)
       +{
       +    FILE* f = fopen(filename, "w");
       +    if (f == NULL) {
       +        fprintf(stderr, "Error: Could not open output file %s.", filename);
       +        return 1;
       +    }
       +    int i;
       +
       +    fprintf(f, "<?xml version=\"1.0\"?>\n");
       +    fprintf(f, "<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" "
       +            "byte_order=\"LittleEndian\">\n");
       +    fprintf(f, "  <UnstructuredGrid>\n");
       +    fprintf(f, "    <Piece NumberOfPoints=\"%d\" NumberOfCells=\"0\">\n", N);
       +    fprintf(f, "      <PointData Scalars=\"Mass [kg]\" "
       +            "Vectors=\"Position [m]\">\n");
       +
       +    // positions
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Position [m]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].pos.x, sliders[i].pos.y, sliders[i].pos.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // velocities
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Velocity [m/s]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].vel.x, sliders[i].vel.y, sliders[i].vel.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // accelerations
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Acceleration [m/(s*s)]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].acc.x, sliders[i].acc.y, sliders[i].acc.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // force
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Force [N]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].force.x, sliders[i].force.y, sliders[i].force.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // angular positions
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Angular position [m]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].angpos.x, sliders[i].angpos.y, sliders[i].angpos.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // angular velocities
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Angular velocity [rad/s]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].angvel.x, sliders[i].angvel.y, sliders[i].angvel.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // angular accelerations
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Angular acceleration [rad/(s*s)]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].angacc.x, sliders[i].angacc.y, sliders[i].angacc.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // torque
       +    fprintf(f, "        <DataArray NumberOfComponents=\"3\" type=\"Float32\" "
       +            "Name=\"Torque [N*m]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f %f %f ",
       +                sliders[i].torque.x, sliders[i].torque.y, sliders[i].torque.z);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // mass
       +    fprintf(f, "        <DataArray type=\"Float32\" "
       +            "Name=\"Mass [kg]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f ", sliders[i].mass);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // moment of inertia
       +    fprintf(f, "        <DataArray type=\"Float32\" "
       +            "Name=\"Moment of inertia [kg*m*m]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f ", sliders[i].moment_of_inertia);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // bond-parallel stiffness
       +    fprintf(f, "        <DataArray type=\"Float32\" "
       +            "Name=\"Bond-parallel stiffness [N/m]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f ", sliders[i].bond_parallel_stiffness);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    // bond-parallel viscosity
       +    fprintf(f, "        <DataArray type=\"Float32\" "
       +            "Name=\"Bond-parallel viscosity [N/(m/s)]\" format=\"ascii\">\n");
       +    fprintf(f, "          ");
       +    for (i=0; i<N; i++)
       +        fprintf(f, "%f ", sliders[i].bond_parallel_viscosity);
       +    fprintf(f, "        </DataArray>\n");
       +
       +    fprintf(f, "      </PointData>\n");
       +    fprintf(f, "      <CellData>\n");
       +    fprintf(f, "      </CellData>\n");
       +    fprintf(f, "      <Points>\n");
       +    fprintf(f, "      </Points>\n");
       +    fprintf(f, "      <Cells>\n");
       +    fprintf(f, "        <DataArray type=\"Int32\" Name=\"connectivity\" "
       +                    "format=\"ascii\">\n");
       +    fprintf(f, "        </DataArray>\n");
       +    fprintf(f, "        <DataArray type=\"Int32\" Name=\"offsets\" "
       +            "format=\"ascii\">\n");
       +    fprintf(f, "        </DataArray>\n");
       +    fprintf(f, "        <DataArray type=\"UInt8\" Name=\"types\" "
       +            "format=\"ascii\">\n");
       +    fprintf(f, "        </DataArray>\n");
       +    fprintf(f, "      </Cells>\n");
       +    fprintf(f, "    </Piece>\n");
       +    fprintf(f, "  </UnstructuredGrid>\n");
       +    fprintf(f, "</VTKFile>\n");
       +
       +    fclose(f);
       +    return 0;
       +}
       +
 (DIR) diff --git a/slidergrid/slider.h b/slidergrid/slider.h
       t@@ -13,9 +13,9 @@ typedef struct {
            Float3 acc;  // [m/(s*s)]
        
            // angular position, velocity, acceleration of this slider
       -    Float3 angpos;  // [m]
       -    Float3 angvel;  // [m/s]
       -    Float3 angacc;  // [m/(s*s)]
       +    Float3 angpos;  // [rad]
       +    Float3 angvel;  // [rad/s]
       +    Float3 angacc;  // [rad/(s*s)]
        
            // sum of forces acting on this slider [N]
            Float3 force;