// pde24js_eq.java 2D uniform grid boundary value PDE based on pde24js_eq.js // known solution to test method // // solve equation in uana24.js // uana24(x,y,z,t), f(x,y,z,t) // // set up and solve system of (nx-2)*(ny-2)*(nz-2)*(nt-2) linear equations // // uses new nuderiv.java // uses simeq.java // uses uana24.js uana() f() coefs() define problem class pde24js_eq { pde24js_eq() { double start, now; boolean debug = false; double xg[] = new double[10]; // data points double yg[] = new double[10]; double zg[] = new double[10]; double tg[] = new double[10]; int neqn; int cs; double us[] = new double[10000]; // solution being computed double ut[][] = new double[10000][10001] ; // [neqn][neqn+1]; equations incl RHS double coef[] = new double[29]; double ccxx, ccyy, cczz, cctt, ccxy, ccxz, ccxt, ccyz, ccyt, cczt; double ccx, ccy, ccz, cct, ccc; int nx, ny, nz, nt; double xmin, xmax, hx; double ymin, ymax, hy; double zmin, zmax, hz; double tmin, tmax, ht; double error; // sum of absolute exact-computed double avgerror; // average error double maxerror; // maximum cell error System.out.print("pde24js_eq.java running \n"); System.out.print("differential equation to solve, from uana24.java \n"); System.out.print("given f(x,y,z), uana(x,y,x) \n"); System.out.print("uniform grid on rectangle xmin,ymin,zmin to xmax,ymax,zmax\n"); System.out.print(" \n"); ccxx = 1.0; ccyy = 2.0; cczz = 3.0; cctt = 4.0; ccxy = 5.0; ccxz = 6.0; ccxt = 7.0; ccyz = 8.0; ccyt = 9.0; cczt = 10.0; ccx = 11.0; ccy = 12.0; ccz = 13.0; cct = 14.0; ccc = 15.0; xmin = 0.0; xmax = 1.0; nx = 5; ymin = 0.1; ymax = 1.1; ny = 6; zmin = 0.2; zmax = 1.2; nz = 7; tmin = 0.3; tmax = 1.3; nt = 8; System.out.print("ccxx="+ccxx+", ccyy="+ccyy+", cczz="+cczz+" \n"); System.out.print("cctt="+cctt+", ccxy="+ccxy+", ccxz="+ccxz+" \n"); System.out.print("ccxt="+ccxt+", ccyz="+ccyz+", ccyt="+ccyt+" \n"); System.out.print("cczt="+cczt+" \n"); System.out.print("ccx="+ccx+", ccy="+ccy+", ccz="+ccz+" \n"); System.out.print("cct="+cct+", ccc="+ccc+" \n"); System.out.print("xmin="+xmin+", xmax="+xmax+", nx="+nx+" \n"); System.out.print("ymin="+ymin+", ymax="+ymax+", ny="+ny+" \n"); System.out.print("zmin="+zmin+", zmax="+zmax+", nz="+nz+" \n"); System.out.print("tmin="+tmin+", tmax="+tmax+", nt="+nt+" \n"); start = System.currentTimeMillis()/1000.0; neqn = (nx-2)*(ny-2)*(nz-2)*(nt-2); // internal, non boundary cells System.out.print(neqn+" equations will be set up and solved \n"); cs = neqn; hx = (xmax-xmin)/(nx-1); System.out.print("hx="+hx+" \n"); for(int i=0; imaxerror) maxerror=err; } // i4 } // k } // j } // i System.out.print("check error="+error+", maxerror="+maxerror+" \n"); } // end check void check_rows(int nx, int ny, int nz, int nt, double ut[][], double xg[], double yg[], double zg[], double tg[]) // only for(checking { // row is in ut solution coordinates int row, col; double sum, sum1; int cs = (nx-2)*(ny-2)*(nz-2)*(nt-2); System.out.print("in check_rows \n"); for(int i=1; i0.001) { System.out.print("row i="+i+", j="+j+", k="+k+", i4="+i4+" is bad err="+sum+" \n"); System.out.print("ut[row][cs]="+ut[row][cs]+", sum1="+sum1+" \n"); } // end if } // i4 } // k } // j } //i System.out.print("finished check_rows \n"); } // end check_rows void printS(int nx, int ny, int nz, int nt, double xg[], double yg[], double zg[], double tg[], double us[]) // typically not known { double error = 0.0; double max_error = 0.0; double avg_error = 0.0; int neqn = (nx-2)*(ny-2)*(nz-2)*(nt-2); System.out.print("exact solution u, computed us, error \n"); for(int i=1; imax_error) max_error = Math.abs(error); System.out.print("xg["+i+"]="+xg[i]+", yg["+j+"]="+yg[j]+ ", zg["+k+"]="+zg[k]+", tg["+i4+"]="+tg[i4]+" \n"); System.out.print("u="+uana(xg[i],yg[j],zg[k],tg[i4])+ ", us="+us[S(i,j,k,i4,ny,nz,nt)]+ ", err="+error+" \n"); } // i4 } // k } // j } // i System.out.print("max_error="+max_error+", avg_error="+avg_error/neqn+" \n"); System.out.print(" \n"); } // end print void printB(int nx, int ny, int nz, int nt, double ut[][]) { System.out.print("matrix B includes RHS \n"); int cs = (nx-2)*(ny-2)*(nz-2)*(nt-2); for(int i=1; i smaxerr) smaxerr = Math.abs(err); } // i4 } // k z } // j y } // i x System.out.print(" \n"); System.out.print("check computed soln against PDE max error="+smaxerr+" \n"); System.out.print(" \n"); System.out.print("x="+xg[nx-2]+", y="+yg[ny-2]+", z="+zg[ny-2]+" \n"); System.out.print("t="+tg[nt-2]+", uxx="+uxx+", uyy="+uyy+", uzz="+uzz+" \n"); System.out.print("utt="+utt+", ux="+ux+", uy="+uy+", uz="+uz+", ut="+ut+" \n"); System.out.print("us="+us[S(nx-2,ny-2,nz-2,nt-2,ny,nz,nt)]+" \n"); System.out.print("f(x,y,z,t)="+f(xg[nx-2],yg[ny-2],zg[nz-2],tg[nt-2])+" \n"); System.out.print(" \n"); } // end Check_Soln double uana(double x,double y,double z,double t) // ub(x,y,z,t) for boundary { return x*x+y*y+z*z+t*t+x*y+x*z+x*t+y*z+y*t+z*t+1.0; } // end uana double f(double x,double y,double z,double t) // RHS f(x,y,z,t) { return 15.0*(x*x+y*y+z*z+t*t+x*y+x*z+x*t+y*z+y*t+z*t)+ 61.0*x+62.0*y+63.0*z+64.0*t+80.0; } // end f public static void main (String[] args) { new pde24js_eq(); } } // end pde24js_eq.java