// fem_check22p_la.java Galerkin FEM class fem_check22p_la { // i, j, nx, ii, jj, ny, xg, yg needed by galk or galf, available at call final int nx = 5; final int ny = 5; final int nxy = nx*ny; double xg[] = new double[nx]; double yg[] = new double[ny]; int i, j, ii, jj; laphi L = new laphi(); fem_check22p_la() { double x, y, hx, hy; final int npx = 4; // Gauss Legendre integration order final int npy = 4; double xx[] = new double[npx+1]; double wx[] = new double[npx+1]; // for Gauss-Legendre double yy[] = new double[npy+1]; double wy[] = new double[npy+1]; // for Gauss-Legendre double val, err, avgerr, maxerr; int px, py; double xmin = 0.0; // problem parameters double xmax = 2.0; double ymin = 0.0; double ymax = 2.0; double kg[][] = new double[nxy][nxy]; double fg[] = new double[nxy]; double ug[] = new double[nxy]; double Ua[] = new double[nxy]; System.out.println("fem_check22p_la.java running "); System.out.println("Given:"); System.out.println("uxx+uyy=8"); System.out.println("xmin<=x<=xmax ymin<=y<=ymax Boundaries "); System.out.println("Analytic solution u(x,y)=x^2+2xy+3y^2+4x+5y+6"); System.out.println("xmin="+xmin+", xmax="+xmax+", ymin="+ymin+", ymax="+ymax); System.out.println("nx="+nx+", ny="+ny); System.out.println("x grid and analytic solution at ymin "); hx = (xmax-xmin)/(double)(nx-1); for(i=0; imaxerr) 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(" maxerr="+maxerr+", avgerr="+ avgerr/(double)(nx*ny)); System.out.println(" "); } // end fem_check22p_la constructor // PDE problem definition functions double F(double x, double y) { return 8.0; } double uana(double x, double y) // u { return x*x+2.0*x*y+3.0*y*y+4.0*x+5.0*y+6.0; } double galk(double x, double y) { // Galerkin k stiffness function for this problem //return ( 2.0 * L.phipp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) + // 6.0 * L.phi(x,j,nx-1,xg)*L.phipp(y,jj,ny-1,yg))* // L.phi(x,i,nx-1,xg)* L.phi(y,ii,ny-1,yg); return ( L.phipp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) + L.phi(x,j,nx-1,xg)*L.phipp(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 public static void main (String[] args) { new fem_check22p_la(); } } // end class fem_check22p_la