These are timing and accuracy results to solve the system
$$
\gathered
-\nabla\cdot(a\nabla u)+b\cdot\nabla u+cu=f\quad\text{on }\Omega,
\\
a\frac{\partial u}{\partial n}+\gamma u=g\quad\text{on }\partial Omega.
\endgathered
$$
with $b=0$ and $\Omega=[0,1]^2$ on a regular
grid of size $129 \times 129$ with one set of diagonals and
linear finite elements. Conjugate gradient with various preconditioers
was used. I solved the problem on the k=7'th refinement
of the two-triangulation of the square until the dot product of the
residual with the preconditioner of the residual was $16^{-k}$.
It's not clear to me what the stopping criterion should be.
The four columns of numbers are L2 error, H1 error, User ms, and GC ms.
The L2 and H1 errors were estimated by injecting the approximate
solution into a $257 \times 257$ grid and comparing it with the
interpolant of the true solution on the fine grid. The problems
are roughly in increasing order of difficulty; in the last
problem, for example, the stiffness coefficient $a$ varies from
1.0 to 21.0 over the domain.
User ms is the amount of user+system time to solve the linear
system only; every once in a while there was a garbage collection
during the solution process, whose time is measured separately.
The tests were run on a dual processor, 500 MHz, Alpha 21264 DS20
clone with 4 Mbytes of cache on each processor and 2 Gbytes of main memory.
The program was coded in Scheme with the Meroon object system and
compiled from Scheme->C by a hacked version of Gambit-C 3.0; the
C code was compiled with gcc-2.95.1 with options
"-mcpu=ev6 -fno-math-errno -mieee -O2".
a=1, c=1, u=x^2-y^2, Neumann
CG: (Identity preconditioner) .0000178524 .0055265902 1859. 1002.
CG: (Diagonal preconditioner) .0000062320 .0055243868 1416. 0.
CG: (Gauss-Seidel preconditioner) .0000227212 .0055283885 1187. 0.
a=1, c=1, u=\cos(\pi x), Neumann
CG: (Identity preconditioner) .0000308271 .0136300308 1297. 1021.
CG: (Diagonal preconditioner) .0000513635 .0136335376 439. 0.
CG: (Gauss-Seidel preconditioner) .0000463294 .0136320274 873. 0.
a=1, c=1, u=\sin(\pi x)+\sin(\pi y), Neumann
CG: (Identity preconditioner) .0001293431 .0192817840 2157. 1017.
CG: (Diagonal preconditioner) .0001168842 .0192826374 1376. 0.
CG: (Gauss-Seidel preconditioner) .0001162350 .0192801277 2156. 0.
a=11.0+10.0*\cos\pi x, c=1, u=xy, Neumann
CG: (Identity preconditioner) .0000143846 .0039063978 10155. 2847.
CG: (Diagonal preconditioner) .0000173137 .0039080293 4701. 1018.
CG: (Gauss-Seidel preconditioner) .0000167438 .0039074115 3281. 0.
a=1, c=1+xy, u=x^2-y^2, Neumann
CG: (Identity preconditioner) .0000104069 .0055255256 1912. 0.
CG: (Diagonal preconditioner) .0001655629 .0056522351 1771. 0.
CG: (Gauss-Seidel preconditioner) .0000233797 .0055282663 1476. 887.
a=1, c=2+\cos(\pi y), u=\cos(\pi x), Neumann
CG: (Identity preconditioner) .0000309400 .0136305567 1601. 0.
CG: (Diagonal preconditioner) .0000334046 .0136317763 1149. 899.
CG: (Gauss-Seidel preconditioner) .0000485629 .0136329616 1020. 0.
a=1, c=1, gamma=2+\cos(\pi x), u=\sin(\pi x)+\sin(\pi y), Robin
CG: (Identity preconditioner) .0000358628 .0192766014 2911. 913.
CG: (Diagonal preconditioner) .0000394569 .0192773902 2832. 0.
CG: (Gauss-Seidel preconditioner) .0000384198 .0192771890 2271. 916.
a=11.0+10.0*\cos\pi x, c=1+xy, gamma=2+\cos(\pi x), u=xy, Robin
CG: (Identity preconditioner) .0000123079 .0039061711 8908. 1907.
CG: (Diagonal preconditioner) .0000158513 .0039078330 4442. 1019.
CG: (Gauss-Seidel preconditioner) .0000147271 .0039071817 3134. 0.