Main Page   Data Structures   File List   Data Fields   Globals  

printxplot.c

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------------*/
00002 /* SCCS Information: %W%    %G% */
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 

Generated on Wed Feb 19 22:26:50 2003 for Markers by doxygen1.2.18