Main Page   Data Structures   File List   Data Fields   Globals  

utilf.c

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------------*/
00002 /* SCCS Information: %W%    %G% */
00003 /*----------------------------------------------------------------------------*/
00004 #include <math.h>
00005 #include <stdio.h>
00006 #include "utilf.h"
00007 #include "inout.h"
00008 
00009 
00010 real findmax(real2D u, int nx, int ny, int *imax, int *jmax)
00011 {
00012   int i, j;
00013   real res;
00014   real fmax;
00015   
00016   fmax = -1.0;
00017   for (i = 2; i <= nx - 1; i++)
00018     for (j = 2; j <= ny - 1; j++)
00019       {
00020         res = u[i][j];
00021         if (res > fmax)
00022           {
00023             fmax = res;
00024             *imax = i;
00025             *jmax = j;
00026           }
00027       }
00028   
00029   return fmax;
00030 }
00031 
00032 
00033 real fmean(real2D u, real umean, int xs, int nx, int ny)
00034 {
00035   int i, j;
00036   real mean = 0;
00037   
00038   for (i = xs; i <= nx - 1; i++)
00039     for (j = 2; j <= ny - 1; j++)
00040       mean += (u[i][j] - umean) * (u[i][j] - umean);
00041 
00042   return sqrt(mean / (nx - xs) / (ny - 2));
00043 }
00044 
00045 
00046 real fmodmax(real2D u, int nx, int ny, int *imax, int *jmax)
00047 {
00048   int i, j;
00049   real res, fmax;
00050   
00051   fmax = 0.0;
00052   for (i = 2; i <= nx - 1; i++)
00053     for (j = 2; j <= ny - 1; j++)
00054       if (u[i][j] != UNDEFINED) {
00055         res = u[i][j];
00056         if(fabs(res) > fmax) {
00057           fmax = fabs(res);
00058           *imax = i;
00059           *jmax = j;
00060         }
00061       }
00062   
00063   return fmax;
00064 }
00065 
00066 
00067 real minau(real2D au, real2D ap, int nx, int ny, int *imin, int *jmin)
00068 {
00069   int i, j;
00070   real val = 100.;
00071   for (i = 2; i < nx; i++)
00072     for (j = 2; j < ny; j++)
00073       if (INU(i,j))
00074         if (au[i][j] < val) {
00075           val = au[i][j];
00076           *imin = i; *jmin = j;
00077         }
00078   return val;
00079 }
00080 
00081 
00082 real minav(real2D av, real2D ap, int nx, int ny, int *imin, int *jmin)
00083 {
00084   int i, j;
00085   real val = 100.;
00086   for (i = 2; i < nx; i++)
00087     for (j = 3; j < ny; j++)
00088       if (INV(i,j))
00089         if (av[i][j] < val) {
00090           val = av[i][j];
00091           *imin = i; *jmin = j;
00092         }
00093   return val;
00094 }
00095 
00096 
00097 real findmin(real2D u, int nx, int ny, int *imin, int *jmin)
00098 {
00099   int i, j;
00100   real res, fmin;
00101   
00102   fmin = 1.0;
00103   for (i = 2; i <= nx - 1; i++)
00104     for (j = 2; j <= ny - 1; j++)
00105       {
00106         res = u[i][j];
00107         if(res < fmin)
00108           {
00109             fmin = res;
00110             *imin = i;
00111             *jmin = j;
00112           }
00113       }
00114       
00115   return fmin;
00116 }
00117 
00118 
00119 real sumfield(real2D u, int nx, int ny)
00120 {
00121   int i, j;
00122   real sum;
00123   
00124   sum = 0.0;
00125   for (i = 2; i <= nx - 1; i++)
00126     for (j = 2; j <= ny - 1; j++)
00127       sum += u[i][j]; 
00128   
00129   return sum;
00130 }
00131 
00132 
00133 real dp(real2D p, real2D cc, int nx, int ny)
00134 {
00135   int i, j, nin = 0, nout = 0;
00136   real pin = 0, pout = 0;
00137 
00138   for (i = 2; i <= nx - 1; i++)
00139     for (j = 2; j <= ny - 1; j++)
00140       if (cc[i][j] == 1.0) {
00141         pin += p[i][j]; nin++;
00142       } 
00143       else 
00144         if (cc[i][j] == 0.0) {
00145           pout += p[i][j]; nout++;
00146         }
00147   if (nin > 0 && nout > 0)
00148     return pin / (real) nin - pout / (real) nout;
00149   else
00150     return 0.0;
00151 }
00152 
00153 
00154 /* compute the maximum relative error on divergence i.e.
00155    max(abs(div()/volume())) */
00156 real rdivmax(real2D div, int nx, int ny, int *imax, int *jmax)
00157 {
00158   int i, j;
00159   real val, maxdiv = 0.0;
00160 
00161   for (i = 2; i < nx; i++)
00162     for (j = 2; j < ny; j++) {
00163       /* 2D-axi: the divergence is div, the volume is (r + 1/2) */
00164       val = fabs(div[i][j]/((real)j - 1.5));
00165       if (val > maxdiv) {
00166         maxdiv = val; *imax = i; *jmax = j;
00167       }
00168     }
00169   return maxdiv;
00170 }
00171 
00172 
00173 void copy(real2D out, real2D in, int nx, int ny)
00174 {
00175   int i, j;
00176   for (i = 1; i <= nx; i++)
00177     for (j = 1; j <= ny; j++)
00178       out[i][j] = in[i][j];
00179 }
00180 
00181 
00182 void add(real2D a, real2D b, int nx, int ny)
00183 {
00184   int i, j;
00185   
00186   for (i = 1; i <= nx; i++)
00187     for (j = 1; j <= ny; j++)
00188       a[i][j] += b[i][j];
00189 }
00190 
00191 
00192 void fill0(real2D u, int nx, int ny)
00193 {      
00194   int i, j;
00195   for (i = 1; i <= nx; i++)
00196     for (j = 1; j <= ny; j++)
00197       u[i][j] = 0.0;
00198 }
00199 
00200 
00201 

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