// pde23js_eq.java converted from // pde23js_eq.js 2D uniform grid boundary value PDE // known solution to test method // // solve equation in uana23.js // uana23(x,y,z), f(x,y,z), coefs(coef) // // set up and solve system of (nx-2)*(ny-2)*(nz-2) linear equations // // uses nuderiv.js // uses invert.js // uses simeq.js // uses uana23.js uana() f() coefs() define problem class pde23js_eq { pde23js_eq() { double start, now; boolean debug = false; double xg[] = new double[30]; // data points double yg[] = new double[30]; double zg[] = new double[30]; int neqn; int cs; double us[] = new double[900]; // solution being computed double ut[][] = new double[900][901]; // [neqn][neqn+1]; equations incl RHS double coef[] = new double[19]; double ccxx, ccyy, cczz, ccxy, ccxz, ccyz, ccx, ccy, ccz, ccc; double xmin, xmax, hx; int nx; double ymin, ymax, hy; int ny; double zmin, zmax, hz; int nz; double error; // sum of absolute exact-computed double avgerror; // average error double maxerror; // maximum cell error System.out.print("pde23js_eq.java running \n"); System.out.print("differential equation to solve, from uana23.js \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"); start = System.currentTimeMillis()/1000.0; ccxx = 1.0; ccyy = 2.0; cczz = 3.0; ccxy = 4.0; ccxz = 5.0; ccyz = 6.0; ccx = 7.0; ccy = 8.0; ccz = 9.0; ccc = 10.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; System.out.print("ccxx="+ccxx+", ccyy="+ccyy+", cczz="+cczz+" \n"); System.out.print("ccxy="+ccxy+", ccxz="+ccxz+", ccyz="+ccyz+" \n"); System.out.print("ccx="+ccx+", ccy="+ccy+", ccz="+ccz+", 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"); neqn = (nx-2)*(ny-2)*(nz-2); // nx-2 internal, non boundary cells cs = neqn; hx = (xmax-xmin)/(nx-1); System.out.print("hx="+hx+" \n"); for(int i=0; imaxerror) maxerror=err; } //k } // j } // i System.out.print("check error="+error+", maxerror="+maxerror+" \n"); } // end check void check_rows(int nx, int ny, int nz, double ut[][], double xg[], double yg[], double zg[]) // only for(checking { // row is in ut solution coordinates int row, col; double sum, sum1; int cs = (nx-2)*(ny-2)*(nz-2); System.out.print("in check_rows \n"); for(int i=1; i0.001) { System.out.print("row i="+i+", j="+j+", k="+k+" is bad err="+sum+" \n"); System.out.print("ut[row][cs]="+ut[row][cs]+", sum1="+sum1+" \n"); } // end if } // k } // j } //i System.out.print("finished check_rows \n"); } // end check_rows void print(int nx, int ny, int nz, double xg[], double yg[], double zg[], 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); 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]+" \n"); System.out.print("u="+uana(xg[i],yg[j],zg[k])+", us="+us[S(i,j,k,ny,nz)]+ ", err="+error+" \n"); } // 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, double ut[][]) { System.out.print("matrix B includes RHS \n"); int cs = (nx-2)*(ny-2)*(nz-2); for(int i=1; i smaxerr) smaxerr = Math.abs(err); } // 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("uxx="+uxx+", uyy="+uyy+", uzz="+uzz+" \n"); System.out.print("ux="+ux+", uy="+uy+", uz="+uz+" \n"); System.out.print("us="+us[S(nx-2,ny-2,nz-2,ny,nz)]+" \n"); System.out.print("f(x,y,z)="+f(xg[nx-2],yg[ny-2],zg[nz-2])+" \n"); System.out.print(" \n"); } // end Check_Soln double uana(double x,double y,double z) // ub(x,y,z) for boundary { return x*x+y*y+z*z+x*y+x*z+y*z+1; } // end uana double f(double x,double y,double z) // RHS f(x,y,z) { return 10*(x*x+y*y+z*z+x*y+x*z+y*z)+31*x+32*y+33*z+37; } // end f public static void main (String[] args) { new pde23js_eq(); } } // end class pde23js_eq