URI:
       tfile_io.c - ns2dfd - 2D finite difference Navier Stokes solver for fluid dynamics
  HTML git clone git://src.adamsgaard.dk/ns2dfd
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
       tfile_io.c (4874B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 #include "utility.h"
            4 
            5 /* Read the variable values from a file on disk */
            6 int read_file(char *path,
            7         double *t, double *t_end, double *t_file, double *tau, int *itermax,
            8         double *epsilon, double *omega, double *gamma,
            9         double *gx, double *gy, double *re,
           10         int *w_left, int *w_right, int *w_top, int *w_bottom,
           11         double *dx, double *dy,
           12         int *nx, int *ny,
           13         double ***P, double ***U, double ***V)
           14 {
           15     int i, j;
           16     double tmp;
           17     FILE *fp;
           18     if ((fp = fopen(path, "rb")) == NULL) {
           19         fprintf(stderr, "read_file: Could not open file %s\n", path);
           20         return 1;
           21     } else {
           22 
           23         if (1 != fread(t, sizeof(double), 1, fp))
           24             exit(1);
           25         if (1 != fread(t_end, sizeof(double), 1, fp))
           26             exit(1);
           27         if (1 != fread(t_file, sizeof(double), 1, fp))
           28             exit(1);
           29         if (1 != fread(tau, sizeof(double), 1, fp))
           30             exit(1);
           31 
           32         if (1 != fread(itermax, sizeof(int), 1, fp))
           33             exit(1);
           34         if (1 != fread(epsilon, sizeof(double), 1, fp))
           35             exit(1);
           36         if (1 != fread(omega, sizeof(double), 1, fp))
           37             exit(1);
           38         if (1 != fread(gamma, sizeof(double), 1, fp))
           39             exit(1);
           40 
           41         if (1 != fread(gx, sizeof(double), 1, fp))
           42             exit(1);
           43         if (1 != fread(gy, sizeof(double), 1, fp))
           44             exit(1);
           45         if (1 != fread(re, sizeof(double), 1, fp))
           46             exit(1);
           47 
           48         if (1 != fread(w_left, sizeof(int), 1, fp))
           49             exit(1);
           50         if (1 != fread(w_right, sizeof(int), 1, fp))
           51             exit(1);
           52         if (1 != fread(w_top, sizeof(int), 1, fp))
           53             exit(1);
           54         if (1 != fread(w_bottom, sizeof(int), 1, fp))
           55             exit(1);
           56 
           57         if (1 != fread(dx, sizeof(double), 1, fp))
           58             exit(1);
           59         if (1 != fread(dy, sizeof(double), 1, fp))
           60             exit(1);
           61         if (1 != fread(nx, sizeof(int), 1, fp))
           62             exit(1);
           63         if (1 != fread(ny, sizeof(int), 1, fp))
           64             exit(1);
           65 
           66         allocate_memory(P, U, V, *nx, *ny);
           67         
           68         for (i=0; i<*nx+2; i++) {
           69             for (j=0; j<*ny+2; j++) {
           70                 if (fread(&tmp, sizeof(double), 1, fp) != 1)
           71                     exit(1);
           72                 (*P)[i][j] = tmp;
           73             }
           74         }
           75 
           76         for (i=0; i<*nx+2; i++) {
           77             for (j=0; j<*ny+2; j++) {
           78                 if (fread(&tmp, sizeof(double), 1, fp) != 1)
           79                     exit(1);
           80                 (*U)[i][j] = tmp;
           81             }
           82         }
           83 
           84         for (i=0; i<*nx+2; i++) {
           85             for (j=0; j<*ny+2; j++) {
           86                 if (fread(&tmp, sizeof(double), 1, fp) != 1)
           87                     exit(1);
           88                 (*V)[i][j] = tmp;
           89             }
           90         }
           91 
           92         fclose(fp);
           93     }
           94     return 0;
           95 }
           96 
           97 /* Write the variable values to a file on disk */
           98 int write_file(char *path,
           99         double *t, double *t_end, double *t_file, double *tau, int *itermax,
          100         double *epsilon, double *omega, double *gamma,
          101         double *gx, double *gy, double *re,
          102         int *w_left, int *w_right, int *w_top, int *w_bottom,
          103         double *dx, double *dy,
          104         int *nx, int *ny,
          105         double ***P, double ***U, double ***V)
          106 {
          107     int i, j;
          108     double tmp;
          109     FILE *fp;
          110     if ((fp = fopen(path, "wb")) == NULL) {
          111         fprintf(stderr, "write_file: Could not open file %s\n", path);
          112         return 1;
          113     } else {
          114 
          115         fwrite(t, sizeof(double), 1, fp);
          116         fwrite(t_end, sizeof(double), 1, fp);
          117         fwrite(t_file, sizeof(double), 1, fp);
          118         fwrite(tau, sizeof(double), 1, fp);
          119 
          120         fwrite(itermax, sizeof(int), 1, fp);
          121         fwrite(epsilon, sizeof(double), 1, fp);
          122         fwrite(omega, sizeof(double), 1, fp);
          123         fwrite(gamma, sizeof(double), 1, fp);
          124 
          125         fwrite(gx, sizeof(double), 1, fp);
          126         fwrite(gy, sizeof(double), 1, fp);
          127         fwrite(re, sizeof(double), 1, fp);
          128 
          129         fwrite(w_left, sizeof(int), 1, fp);
          130         fwrite(w_right, sizeof(int), 1, fp);
          131         fwrite(w_top, sizeof(int), 1, fp);
          132         fwrite(w_bottom, sizeof(int), 1, fp);
          133 
          134         fwrite(dx, sizeof(double), 1, fp);
          135         fwrite(dy, sizeof(double), 1, fp);
          136         fwrite(nx, sizeof(int), 1, fp);
          137         fwrite(ny, sizeof(int), 1, fp);
          138 
          139         for (i=0; i<*nx+2; i++) {
          140             for (j=0; j<*ny+2; j++) {
          141                 tmp = (*P)[i][j];
          142                 fwrite(&tmp, sizeof(double), 1, fp);
          143             }
          144         }
          145 
          146         for (i=0; i<*nx+2; i++) {
          147             for (j=0; j<*ny+2; j++) {
          148                 tmp = (*U)[i][j];
          149                 fwrite(&tmp, sizeof(double), 1, fp);
          150             }
          151         }
          152 
          153         for (i=0; i<*nx+2; i++) {
          154             for (j=0; j<*ny+2; j++) {
          155                 tmp = (*V)[i][j];
          156                 fwrite(&tmp, sizeof(double), 1, fp);
          157             }
          158         }
          159 
          160         fclose(fp);
          161     }
          162     return 0;
          163 }