tvtk_export.c - simple_DEM - a simple 2D Discrete Element Method code for educational purposes
(HTM) git clone git://src.adamsgaard.dk/simple_DEM
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
tvtk_export.c (2600B)
---
1 #include <stdio.h>
2 #include "header.h"
3 #include "global_properties.h"
4
5 int vtk_export_grains(grain* g, int numfile)
6 {
7 FILE* fout;
8 int i;
9
10 char filename[25]; /* File name */
11 sprintf(filename, "output/grains%04d.vtk", numfile);
12
13 if ((fout = fopen(filename, "wt")) == NULL) {
14 fprintf(stderr, "vtk_export error, cannot open ");
15 fprintf(stderr, "%s", filename);
16 fprintf(stderr, "!\n");
17 return 1;
18 }
19
20 /* Write header */
21 fprintf(fout, "# vtk DataFile Version 3.0\n");
22
23 /* Write title */
24 fprintf(fout, "'Time: %f s'\n", numfile*dt);
25
26 /* Write data type */
27 fprintf(fout, "ASCII\nDATASET UNSTRUCTURED_GRID\n");
28
29 /* Grain coordinates */
30 fprintf(fout, "POINTS %d FLOAT\n", np);
31 for (i = 0; i < np; i++)
32 fprintf(fout, "%f %f 0.0\n", g[i].x, g[i].y);
33 fprintf(fout, "POINT_DATA %d\n", np);
34
35 /* Grain radii */
36 fprintf(fout, "SCALARS Diameter float 1\n");
37 fprintf(fout, "LOOKUP_TABLE default\n");
38 for (i = 0; i < np; i++)
39 fprintf(fout, "%f\n", g[i].R*2.0);
40
41 /* Grain radii */
42 fprintf(fout, "SCALARS Mass float 1\n");
43 fprintf(fout, "LOOKUP_TABLE default\n");
44 for (i = 0; i < np; i++)
45 fprintf(fout, "%f\n", g[i].m);
46
47 fprintf(fout, "SCALARS MomentOfInertia float 1\n");
48 fprintf(fout, "LOOKUP_TABLE default\n");
49 for (i = 0; i < np; i++)
50 fprintf(fout, "%g\n", g[i].I);
51
52 /* Grain velocities */
53 fprintf(fout, "VECTORS Velocity float\n");
54 for (i = 0; i < np; i++)
55 fprintf(fout, "%f %f 0.0\n", g[i].vx, g[i].vy);
56
57 /* Grain velocities */
58 fprintf(fout, "VECTORS Force float\n");
59 for (i = 0; i < np; i++)
60 fprintf(fout, "%f %f 0.0\n", g[i].fx, g[i].fy);
61
62 /* Pressure */
63 fprintf(fout, "SCALARS Pressure float 1\n");
64 fprintf(fout, "LOOKUP_TABLE default\n");
65 for (i = 0; i < np; i++)
66 fprintf(fout, "%e\n", g[i].p);
67
68 /* Angular velocity */
69 fprintf(fout, "SCALARS Angvel float 1\n");
70 fprintf(fout, "LOOKUP_TABLE default\n");
71 for (i = 0; i < np; i++)
72 fprintf(fout, "%e\n", g[i].angv);
73
74 fclose(fout);
75 return 0;
76 }
77
78 int vtk_export_forces(grain* g, int numfile)
79 {
80 FILE* fout;
81
82 char filename[25]; /* File name */
83 sprintf(filename, "output/forces%04d.vtk", numfile);
84
85 if ((fout = fopen(filename, "wt")) == NULL) {
86 fprintf(stderr,"vtk_export error, cannot open ");
87 fprintf(stderr, "%s", filename);
88 fprintf(stderr, "!\n");
89 return 1;
90 }
91
92 /* Write header */
93 fprintf(fout, "# vtk DataFile Version 3.0\n");
94
95 /* Write title */
96 fprintf(fout, "'Time: %f s'\n", numfile*dt);
97
98 /* Write data type */
99 fprintf(fout, "ASCII\nDATASET POLYDATA\n");
100
101
102 fclose(fout);
103 return 0;
104 }