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;