Numerical Experiments

Just consider a simple problem:

[Homogeneous Helmholtz Dirichlet BC]

\Delta u+k^2 u=0 in D, D means unit disk.

u=\cos(k) on \partial D[Not true, should be \cos(kx)].

If I use ‘finite element method’, to make our problem easier to handle, I choose square [0,1]\times[0,1] as our domain.

Then \displaystyle\frac{1}{h^2}(u_{i,j+1}+u_{i-1,j}+u_{i,j-1}+u_{i+1,j}-4u_{i,j})+k^2 u_{i,j}=0, one can use Jacobi, Gauss Seidel, SOR, SSOR, with or without preconditioner and shift. However, I found for this very problem, the result doesn’t converge to my exact solution, in other word, there is some error which cannot be cancelled through shrinking our step length.

%Jacobi
%U_now(i,j)=(U_prev(i-1,j)+U_prev(i+1,j)+U_prev(i,j+1)+U_prev(i,j-1))/(4-h*h*k*k);
%9 point
%U_now(i,j)=((2/3)*(U_prev(i-1,j)+U_prev(i+1,j)+U_prev(i,j-1)+U_prev(i,j+1))+(1/6)*(U_prev(i-1,j-1)+U_prev(i-1,j+1)+U_prev(i+1,j-1)+U_prev(i+1,j+1)))/(10/3-k*k*h*h);
%Gauss Seidel
U_now(i,j)=(U_now(i-1,j)+U_prev(i+1,j)+U_now(i,j-1)+U_prev(i,j+1))/(4-h*h*k*k);
%SOR
% U_now(i,j)=(1-omega)*U_prev(i,j)+omega*(U_now(i-1,j)+U_prev(i+1,j)+U_now(i,j-1)+U_prev(i,j+1))/(4-h*h*k*k);

By using package ‘distmesh’, I construct the PI-FEM for the original problem. Still I have encountered the same problem. The linear system is not large but sparse, so GMRES can easily solve it. I used the preconditioner \omega=J_0(kh), where J_0 is Bessel function of \nu=0.

This is the result at k=1, even I put the size of uniform triangle h=0.05, the error stills remain unchanged around some small number.


I have some idea about why FEM cannot give a good result when k is LARGE,  I know the estimate of error is C k^3h^2.

However, matlab ‘pdetool’ toolbox can solve this very easily……[not true : )]

Update: Now solved…with error order of 2.

About YiMin

This is just a nerd PhD student of Math@UT Austin.

2 thoughts on “Numerical Experiments

  1. YiMin says:

    Ooooooooooooooooooops, Matlab pdetool toolbox also sucks. What a relief!

  2. YiMin says:

    I am a such idiot! I made a mistake on mass matrix by using 1/12. Now the problem almost solved, and the BC is totally wrong…..dismiss it.

Comments are closed.