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 }