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