tadded C output, fixed Python input - ns2dfd - 2D finite difference Navier Stokes solver for fluid dynamics
 (HTM) git clone git://src.adamsgaard.dk/ns2dfd
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 1c27cca37f5dad626780cc0a7475f76285534073
 (DIR) parent ec7d202b3fe33c4e0f9838b110c2f75f448837b7
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Sun,  2 Mar 2014 19:47:08 +0100
       
       added C output, fixed Python input
       
       Diffstat:
         M ns2dfd.py                           |       2 +-
         M src/file_io.c                       |      68 +++++++++++++++++++++++++++++++
         M src/file_io.h                       |       8 ++++++++
         M src/main.c                          |      12 ++++++++----
       
       4 files changed, 85 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/ns2dfd.py b/ns2dfd.py
       t@@ -145,7 +145,7 @@ class fluid:
                '''
                fh = None
                try:
       -            targetfile = folder + '/' + self.sim_id
       +            targetfile = path
                    if verbose == True:
                        print('Input file: ' + targetfile)
                    fh = open(targetfile, 'rb')
 (DIR) diff --git a/src/file_io.c b/src/file_io.c
       t@@ -18,6 +18,7 @@ int read_file(char *path,
                fprintf(stderr, "read_file: Could not open file %s\n", path);
                return 1;
            } else {
       +
                fread(t, sizeof(double), 1, fp);
                fread(t_end, sizeof(double), 1, fp);
                fread(tau, sizeof(double), 1, fp);
       t@@ -68,3 +69,70 @@ int read_file(char *path,
            }
            return 0;
        }
       +
       +/* Write the variable values to a file on disk */
       +int write_file(char *path,
       +        double *t, double *t_end, double *tau, int *itermax,
       +        double *epsilon, double *omega, double *gamma,
       +        double *gx, double *gy, double *re,
       +        int *w_left, int *w_right, int *w_top, int *w_bottom,
       +        double *dx, double *dy,
       +        int *nx, int *ny,
       +        double ***P, double ***U, double ***V)
       +{
       +    int i, j;
       +    double tmp;
       +    FILE *fp;
       +    if ((fp = fopen(path, "wb")) == NULL) {
       +        fprintf(stderr, "write_file: Could not open file %s\n", path);
       +        return 1;
       +    } else {
       +
       +        fwrite(t, sizeof(double), 1, fp);
       +        fwrite(t_end, sizeof(double), 1, fp);
       +        fwrite(tau, sizeof(double), 1, fp);
       +
       +        fwrite(itermax, sizeof(int), 1, fp);
       +        fwrite(epsilon, sizeof(double), 1, fp);
       +        fwrite(omega, sizeof(double), 1, fp);
       +        fwrite(gamma, sizeof(double), 1, fp);
       +
       +        fwrite(gx, sizeof(double), 1, fp);
       +        fwrite(gy, sizeof(double), 1, fp);
       +        fwrite(re, sizeof(double), 1, fp);
       +
       +        fwrite(w_left, sizeof(int), 1, fp);
       +        fwrite(w_right, sizeof(int), 1, fp);
       +        fwrite(w_top, sizeof(int), 1, fp);
       +        fwrite(w_bottom, sizeof(int), 1, fp);
       +
       +        fwrite(dx, sizeof(double), 1, fp);
       +        fwrite(dy, sizeof(double), 1, fp);
       +        fwrite(nx, sizeof(int), 1, fp);
       +        fwrite(ny, sizeof(int), 1, fp);
       +
       +        for (j=0; j<*ny+1; j++) {
       +            for (i=0; i<*nx+1; i++) {
       +                tmp = (*P)[i][j];
       +                fwrite(&tmp, sizeof(double), 1, fp);
       +            }
       +        }
       +
       +        for (j=0; j<*ny+2; j++) {
       +            for (i=0; i<*nx+2; i++) {
       +                tmp = (*U)[i][j];
       +                fwrite(&tmp, sizeof(double), 1, fp);
       +            }
       +        }
       +
       +        for (j=0; j<*ny+2; j++) {
       +            for (i=0; i<*nx+2; i++) {
       +                tmp = (*V)[i][j];
       +                fwrite(&tmp, sizeof(double), 1, fp);
       +            }
       +        }
       +
       +        fclose(fp);
       +    }
       +    return 0;
       +}
 (DIR) diff --git a/src/file_io.h b/src/file_io.h
       t@@ -10,4 +10,12 @@ int read_file(char *path,
                int *nx, int *ny,
                double ***P, double ***U, double ***V);
        
       +int write_file(char *path,
       +        double *t, double *t_end, double *tau, int *itermax,
       +        double *epsilon, double *omega, double *gamma,
       +        double *gx, double *gy, double *re,
       +        int *w_left, int *w_right, int *w_top, int *w_bottom,
       +        double *dx, double *dy,
       +        int *nx, int *ny,
       +        double ***P, double ***U, double ***V);
        #endif
 (DIR) diff --git a/src/main.c b/src/main.c
       t@@ -12,11 +12,10 @@ int main(int argc, char** argv)
            int w_left, w_right, w_top, w_bottom;
            double dx, dy;
            int nx, ny;
       -    double **P = NULL;
       -    double **U = NULL;
       -    double **V = NULL;
       +    double **P, **U, **V;
        
       -    read_file("unnamed.dat", &t, &t_end, &tau, &itermax, &epsilon, &omega, &gamma, 
       +    read_file("unnamed.dat", &t, &t_end, &tau, &itermax,
       +            &epsilon, &omega, &gamma, 
                    &gx, &gy, &re, &w_left, &w_right, &w_top, &w_bottom,
                    &dx, &dy, &nx, &ny, &P, &U, &V);
        
       t@@ -24,6 +23,11 @@ int main(int argc, char** argv)
            printf("P[0][0] = %f\n", P[0][0]);
            printf("V[%d][%d] = %f\n", nx, ny, V[nx][ny]);
        
       +    write_file("unnamed2.dat", &t, &t_end, &tau, &itermax,
       +            &epsilon, &omega, &gamma, 
       +            &gx, &gy, &re, &w_left, &w_right, &w_top, &w_bottom,
       +            &dx, &dy, &nx, &ny, &P, &U, &V);
       +
            free_memory(P, U, V, nx);
            return 0;
        }