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 }