/* checknu_test_4d.c check every derivative function */ #include #include #include #include "nuderiv.h" #include "test_4d.h" #undef abs #define abs(x) ((x)<0.0?(-(x)):(x)) #undef max #define max(x,y) ((x)>(y)?(x):(y)) static double xg[10]; static double yg[10]; static double zg[10]; static double tg[10]; static int nx, ny, nz, nt; static double xmin, xmax, ymin, ymax, zmin, zmax, tmin, tmax; static double maxerror, gmaxerror; void check(char name[], double(* deriv)(double x, double y, double z, double t), int points, int xord, int yord, int zord, int tord) { double cx[10], cy[10], cz[10], ct[10]; double p1[10], p2[10], p3[10]; double analytic, discrete; double error, sum_error; int i, ii, iii, iiii; int j, jj, jjj, jjjj; double x, y, z, t, xx; maxerror = 0.0; for(i=0; i0.001 && i==0 && ii==0 && iii==0 && iiii==0) printf("analytic=%f, discrete=%f, error=%g \n", analytic, discrete, error); } /* end iiii for t */ } /* end iii for z */ } /* end ii for y */ } /* end i for x */ printf(" %s maxerror=%g\n", name, maxerror); gmaxerror = max(maxerror,gmaxerror); } /* end check */ int main(int argc, char *argv[]) { int i; printf("checknu_test_4d.c running \n"); nx = 5; ny = 6; nz = 7; nt = 8; printf("nx=%d, ny=%d, nz=%d, nt=%d \n", nx, ny, nz, nt); xmin = -1.0; xmax = 1.0; ymin = -1.1; ymax = 1.3; zmin = -1.2; zmax = 1.6; tmin = -1.3; tmax = 2.5; printf("xmin=%f, xmax=%f, ymin=%f, ymax=%f \n", xmin, xmax, ymin, ymax); printf("zmin=%f, zmax=%f, tmin=%f, tmax=%f \n", zmin, zmax, tmin, tmax); xg[0] = xmin; xg[1] = xmin + 0.1; xg[2] = 0.333; xg[nx-2] = xmax - 0.2; xg[nx-1] = xmax; yg[0] = ymin; yg[1] = ymin + 0.1; yg[2] = -0.333; yg[3] = 0.333; yg[ny-2] = ymax - 0.2; yg[ny-1] = ymax; zg[0] = zmin; zg[1] = zmin + 0.1; zg[2] = -0.27; zg[3] = -0.1; zg[4] = 0.276; zg[nz-2] = zmax - 0.2; zg[nz-1] = zmax; tg[0] = tmin; tg[1] = tmin + 0.1; tg[2] = -0.27; tg[3] = -0.42; tg[4] = 0.177; tg[5] = 0.333; tg[nt-2] = tmax - 0.3; tg[nt-1] = tmax; for(i=0; i