// fem_bihar2d_la.java Galerkin FEM biharmonic 4th order // // solve uxxxx(x,y) + 2*uxxyy(x,y) + uyyyy(x,y) + // 2*uxx(x,y) + 2*uyy(x,y) + 2*u(x,y) = f(x,y) // // f(x,y) := 2.4 + 0.08*x*x + 0.32*y*y + 1.6*x*y + 0.02*x*x*x*x + // 0.04*y*y*y*y - 0.08*x*x*y*y + 0.2*x*x*x*y + 0.4*y*y*y*x // // in the rectangle xmin< x maxerr) maxerr = err; avgerr = avgerr + err; System.out.println("ug["+i+","+ii+"]="+ug[i*ny+ii]+", Ua="+Ua[i*ny+ii]+ ", err="+(ug[i*ny+ii]-Ua[i*ny+ii])); } } System.out.println("xmax="+xmax+", ymax="+ymax+", nx="+nx+ ", ny="+ny+", npx="+npx+", npy="+npy); System.out.println(" maxerr="+maxerr+", avgerr="+ avgerr/(double)(nx*ny)); System.out.println("\n"); } // end fem_bihar2d_la constructor // PDE problem definition functions f and ub double F(double x, double y) { return 2.4 + 0.08*x*x + 0.32*y*y + 1.6*x*y + 0.02*x*x*x*x + 0.04*y*y*y*y - 0.08*x*x*y*y + 0.2*x*x*x*y + 0.4*y*y*y*x; } double ub(double x, double y) { return 0.01*x*x*x*x + 0.02*y*y*y*y - 0.04*x*x*y*y + 0.1*x*x*x*y + 0.2*y*y*y*x - x*y + 1.0; } double galk(double x, double y) { // Galerkin k stiffness function for this problem // solve uxxxx(x,y) + 2*uxxyy(x,y) + uyyyy(x,y) + // 2*uxx(x,y) + 2*uyy(x,y) + 2*u(x,y) = f(x,y) return ( L.phipppp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) + 2.0* L.phipp(x,j,nx-1,xg)* L.phipp(y,jj,ny-1,yg) + L.phi(x,j,nx-1,xg)* L.phipppp(y,jj,ny-1,yg) + 2.0* L.phipp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) + 2.0* L.phi(x,j,nx-1,xg)* L.phipp(y,jj,ny-1,yg) + 2.0* L.phi(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) )* L.phi(x,i,nx-1,xg)* L.phi(y,ii,ny-1,yg); } // end galk used by integration double galf(double x, double y) // Galerkin f function for this problem { return F(x,y)*L.phi(x,i,nx-1,xg)*L.phi(y,ii,ny-1,yg); } // end galf used by integration void write_soln() { try { FileWriter fout = new FileWriter("fem_bihar2d_la.dat"); BufferedWriter fileout = new BufferedWriter(fout); System.out.println("writing fem_bihar2d_la.dat"); for(int i=0; i