00001
00002
00003
00004 #include <stdio.h>
00005 #include <stdlib.h>
00006 #include <math.h>
00007 #include "utilf.h"
00008 #include "markers.h"
00009 #include "xfig.h"
00010 #include "printxplot.h"
00011 #include "inout.h"
00012
00013
00014 void printxpl(real2D u, real2D v, real2D c, real2D p,
00015 int nx, int ny,
00016 real tau, real du, real dp, char *fname)
00017 {
00018 int i, j, n1, n2;
00019 float uu, vv, cc, pp, h;
00020 char s[256];
00021 FILE *fptr = fopen(fname, "wb");
00022
00023 h = 1.0 / (nx - 2);
00024
00025 n1 = nx - 2;
00026 n2 = ny - 2;
00027 fwrite(&n1, sizeof(int), 1, fptr);
00028 fwrite(&n2, sizeof(int), 1, fptr);
00029 i = 1;
00030 fwrite(&i, sizeof(int), 1, fptr);
00031 i = 4;
00032 fwrite(&i, sizeof(int), 1, fptr);
00033 strcpy(s, "u");
00034 fwrite((char *) s, sizeof(char), 256, fptr);
00035 strcpy(s, "v");
00036 fwrite((char *) s, sizeof(char), 256, fptr);
00037 strcpy(s, "c");
00038 fwrite((char *) s, sizeof(char), 256, fptr);
00039 strcpy(s, "p");
00040 fwrite((char *) s, sizeof(char), 256, fptr);
00041 du *= 0.5 * h / tau;
00042 dp *= h * h / (tau * tau);
00043
00044 for (i = 2; i <= nx - 1; i++)
00045 for (j = 2; j <= ny - 1; j++) {
00046 if (u[i][j] != UNDEFINED && u[i+1][j] != UNDEFINED)
00047 uu = (u[i][j] + u[i+1][j]) * du;
00048 else uu = 0.0;
00049 fwrite(&uu, sizeof(float), 1, fptr);
00050 }
00051 for (i = 2; i <= nx - 1; i++)
00052 for (j = 2; j <= ny - 1; j++) {
00053 if (v[i][j] != UNDEFINED && v[i][j+1] != UNDEFINED)
00054 vv = (v[i][j] + v[i][j+1]) * du;
00055 else vv = 0.0;
00056 fwrite(&vv, sizeof(float), 1, fptr);
00057 }
00058 for (i = 2; i <= nx - 1; i++)
00059 for (j = 2; j <= ny - 1; j++) {
00060 cc = c[i][j];
00061 fwrite(&cc, sizeof(float), 1, fptr);
00062 }
00063 for (i = 2; i <= nx - 1; i++)
00064 for (j = 2; j <= ny - 1; j++) {
00065 pp = p[i][j] * dp;
00066 fwrite(&pp, sizeof(float), 1, fptr);
00067 }
00068
00069 fclose(fptr);
00070
00071 printf("popiplot file %s written\n", fname);
00072 }
00073
00074
00075 void datbarray(real2D a, int nx, int ny, char *name)
00076 {
00077 int i, j;
00078 FILE *fptr;
00079 char fname[256];
00080 float val;
00081
00082 sprintf(fname, "%s.datb", name);
00083 fptr = fopen(fname, "wt");
00084 fwrite(&nx, sizeof(int), 1, fptr);
00085 fwrite(&ny, sizeof(int), 1, fptr);
00086 i = 1;
00087 fwrite(&i, sizeof(int), 1, fptr);
00088 fwrite(&i, sizeof(int), 1, fptr);
00089 strcpy(fname, "val");
00090 fwrite((char *) fname, sizeof(char), 256, fptr);
00091 for (i = 1; i <= nx; i++)
00092 for (j = 1; j <= ny; j++)
00093 {
00094 val = a[i][j];
00095 fwrite(&val, sizeof(float), 1, fptr);
00096 }
00097 fclose(fptr);
00098 }
00099
00100
00101 void datbvector(real2D u, real2D a, real2D v, real2D c,
00102 int nx, int ny, char *name)
00103 {
00104 int i, j;
00105 FILE *fptr;
00106 char fname[256];
00107 real umax = 0.0;
00108
00109 for (i = 2; i < nx; i++)
00110 for (j = 2; j < ny; j++) {
00111 if (a[i-1][j] == 1.0 && fabs(u[i][j]) > umax)
00112 umax = fabs(u[i][j]);
00113 if (c[i][j-1] == 1.0 && fabs(v[i][j]) > umax)
00114 umax = fabs(v[i][j]);
00115 }
00116
00117 sprintf(fname, "%s.gnu", name);
00118 fptr = fopen(fname, "wt");
00119 for (i = 2; i < nx; i++)
00120 for (j = 2; j < ny; j++)
00121 if (umax > 0.0) {
00122 if (a[i-1][j] == 1.0)
00123 fprintf(fptr, "%g %g\n%g %g\n\n",
00124 (real)i, 0.5 + (real)j,
00125 u[i][j]/umax + (real)i, 0.5 + (real)j);
00126 if (c[i][j-1] == 1.0)
00127 fprintf(fptr, "%g %g\n%g %g\n\n",
00128 (real)i + 0.5, (real)j,
00129 (real)i + 0.5, (real)j + v[i][j]/umax);
00130 }
00131 else {
00132 fprintf(fptr, "%g %g\n%g %g\n\n",
00133 (real)i, 0.5 + (real)j,
00134 (real)i, 0.5 + (real)j);
00135 fprintf(fptr, "%g %g\n%g %g\n\n",
00136 (real)i + 0.5, (real)j,
00137 (real)i + 0.5, (real)j);
00138 }
00139 fclose(fptr);
00140 }
00141
00142
00143 void gnuvectors(real2D u, real2D a, real2D v, real2D c,
00144 int nx, int ny, char *name)
00145 {
00146 int i, j;
00147 FILE *fptr;
00148 char fname[256];
00149 real umax = 0.0, u1, v1;
00150
00151 for (i = 2; i < nx; i++)
00152 for (j = 2; j < ny; j++) {
00153 if (a[i-1][j] == 1.0 && fabs(u[i][j]) > umax)
00154 umax = fabs(u[i][j]);
00155 if (c[i][j-1] == 1.0 && fabs(v[i][j]) > umax)
00156 umax = fabs(v[i][j]);
00157 }
00158
00159 sprintf(fname, "%s.gnu", name);
00160 fptr = fopen(fname, "wt");
00161 for (i = 2; i < nx; i++)
00162 for (j = 2; j < ny; j++)
00163 if (umax > 0.0) {
00164 if (a[i][j] <= 1.0) {
00165 if (a[i-1][j] <= 1.0)
00166 u1 = 0.5*(u[i][j] + u[i+1][j]);
00167 else
00168 u1 = u[i+1][j];
00169 }
00170 else if (a[i-1][j] == 1.0)
00171 u1 = u[i][j];
00172 else
00173 u1 = 1000.0;
00174 if (c[i][j] <= 1.0) {
00175 if (c[i][j-1] <= 1.0)
00176 v1 = 0.5*(v[i][j] + v[i][j+1]);
00177 else
00178 v1 = v[i][j+1];
00179 }
00180 else if (c[i][j-1] == 1.0)
00181 v1 = v[i][j];
00182 else
00183 v1 = 1000.0;
00184 if (u1 != 1000.0 && v1 != 1000.0)
00185 fprintf(fptr, "%g %g\n%g %g\n\n",
00186 0.5 + (real)i, 0.5 + (real)j,
00187 3.*u1/umax + 0.5 + (real)i, 3.*v1/umax + 0.5 + (real)j);
00188 }
00189 else {
00190 fprintf(fptr, "%g %g\n%g %g\n\n",
00191 0.5 + (real)i, 0.5 + (real)j,
00192 0.5 + (real)i, 0.5 + (real)j);
00193 fprintf(fptr, "%g %g\n%g %g\n\n",
00194 (real)i + 0.5, 0.5 + (real)j,
00195 (real)i + 0.5, 0.5 + (real)j);
00196 }
00197 fclose(fptr);
00198 }
00199
00200
00201
00202
00203
00204