// fem_bihar3d_la.java Galerkin FEM biharmonic 4th order PDE in three dimensions // // solve uxxxx(x,y,z) + uyyyy(x,y,z) + uzzzz(x,y,z) + 2*uxxyy(x,y,z) + // 2*uxxzz(x,y,z) + 2*uyyzz(x,y,z) = f(x,y,z) // // f(x,y,z) := 0.24 , // // in the cube xminmaxerr) maxerr = err; avgerr = avgerr + err; System.out.println("ug["+i+","+ii+","+iii+"]="+ug[s(i,ii,iii)]+", Ua="+Ua[s(i,ii,iii)]+ ", err="+(ug[s(i,ii,iii)]-Ua[s(i,ii,iii)])); } } } System.out.println("xmax="+xmax+", ymax="+ymax+", zmax="+zmax); System.out.println("nx="+nx+", ny="+ny+", nz="+nz+", npx="+npx+", npy="+npy+", npz="+npz); System.out.println(" maxerr="+maxerr+", avgerr="+ avgerr/(double)(nx*ny*nz)); System.out.println("\n"); } // end fem_bihar3d_la constructor // PDE problem definition functions f and ub double F(double x, double y, double z) { return 0.24; // kept general for future use } double ub(double x, double y, double z) { return 0.01*x*x*x*x + 0.02*y*y*y*y + 0.03*z*z*z*z - 0.04*x*x*y*y - 0.05*y*y*z*z - 0.06*x*x*z*z + 0.1*x*x*x*y + 0.2*z*z*z*x - 0.03*y*y*y*z - x*y - y*z - x*z + 1.0; } double u(double x, double y, double z) { return ub(x,y,z); } double uxxxx(double x, double y, double z) { return 0.24; } double uyyyy(double x, double y, double z) { return 0.48; } double uzzzz(double x, double y, double z) { return 0.72; } double uxxyy(double x, double y, double z) { return -0.16; } double uxxzz(double x, double y, double z) { return -0.24; } double uyyzz(double x, double y, double z) { return -0.20; } double galk(double x, double y, double z) { // Galerkin k stiffness function for this problem // solve uxxxx(x,y,z) + uyyyy(x,y,z) + uzzzz(x,y,z) // 2*uxxyy(x,y,z) + 2*uxxzz(x,y,z) + 2*uyyzz(x,y,z) = f(x,y,z) return ( L.phipppp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg)* L.phi(z,jjj,nz-1,zg) + L.phi(x,j,nx-1,xg)* L.phipppp(y,jj,ny-1,yg)* L.phi(z,jjj,nz-1,zg) + L.phi(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg)* L.phipppp(z,jjj,nz-1,zg) + 2.0* L.phipp(x,j,nx-1,xg)* L.phipp(y,jj,ny-1,yg)* L.phi(z,jjj,nz-1,zg) + 2.0* L.phipp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg)* L.phipp(z,jjj,nz-1,zg) + 2.0* L.phi(x,j,nx-1,xg)* L.phipp(y,jj,ny-1,yg)* L.phipp(z,jjj,nz-1,zg) )* L.phi(x,i,nx-1,xg)* L.phi(y,ii,ny-1,yg)* L.phi(z,iii,nz-1,zg); } // end galk used by integration double galf(double x, double y, double z) // Galerkin f function for this problem { return F(x,y,z)*L.phi(x,i,nx-1,xg)*L.phi(y,ii,ny-1,yg)*L.phi(z,iii,nz-1,zg); } // end galf used by integration void write_soln() { try { FileWriter fout = new FileWriter("fem_bihar3d_la.dat"); BufferedWriter fileout = new BufferedWriter(fout); System.out.println("writing fem_bihar3d_la.dat"); for(int i=0; i