00001
00002
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
00155
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
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