// fem_check24_la.java Galerkin FEM // solve uy+uxxxx+uxx-ux=-cos(x)-sin(y) linear version // inside 9 by 9 grid, Gauss Legendre integration class fem_check24_la { // i, j, nx, ii, jj, ny, xg, yg needed by galk or galf, available at call final int nx = 9; final int ny = 9; 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_check24_la() { double x, y, hx, hy; final int npx = 9; // Gauss Legendre integration order final int npy = 9; 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 = 1.0; double ymin = 0.0; double ymax = 1.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_check24_la.java running "); System.out.println("Given:"); System.out.println("uy+uxxxx+uxx-ux=-cos(x)-sin(y)"); System.out.println("xmin<=x<=xmax ymin<=y<=ymax Boundaries "); System.out.println("Analytic solution u(x,y)=sin(x)+cos(y)"); 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("nx="+nx+", ny="+ny+", npx="+npx+", npy="+npy); System.out.println(" maxerr="+maxerr+", avgerr="+ avgerr/(double)(nx*ny)); System.out.println(" "); } // end fem_check24_la constructor // PDE problem definition functions double F(double x, double y) { return -Math.cos(x)-Math.sin(y); } double uana(double x, double y) // u { return Math.sin(x)+Math.cos(y); } double galk(double x, double y) { // Galerkin k stiffness function for this problem return ( L.phi(x,j,nx-1,xg)* L.phip(y,jj,ny-1,yg) + L.phipppp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) + L.phipp(x,j,nx-1,xg)* L.phi(y,jj,ny-1,yg) - L.phip(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 public static void main (String[] args) { new fem_check24_la(); } } // end class fem_check24_la