| tadd function to write to VTK files - slidergrid - grid of elastic sliders on a… | |
| git clone git://src.adamsgaard.dk/slidergrid | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 61541ba4e7dc9660c1dd91aba87dc25c282682c7 | |
| parent 3008c9edbbaac56bcfe215ade860e106f79127b8 | |
| Author: Anders Damsgaard <[email protected]> | |
| 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(-) | |
| --- | |
| diff --git a/slidergrid/simulation.c b/slidergrid/simulation.c | |
| t@@ -142,3 +142,156 @@ int save_general_state_to_file(const simulation sim, con… | |
| 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 hand… | |
| + * the file upon import. See VTK-file-formats.pdf for documentation on the fil… | |
| + * 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; | |
| +} | |
| + | |
| 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; |