On Mon, Apr 06, 2009 at 10:01:24AM -0500, Robert Kirby wrote:
I see two reasons why to do symmetric BC if you can.
1.) If CG is applicable, it will almost always work better than GMRES, both in
terms of convergence rate and memory usage (no Hessenberg matrix). A simple
way to check this without any substantial code development is to do Nitsche BC
for Poisson and compare CG and GMRES
Symmetric applications of BCs is already in place:
A, b = assemble_system(a, L, bc)
The dofs are kept (not eliminated) but the BC is applied to ensure
that A remains symmetric (if symmetric).
2.) In 2d, say for Poisson, it's not a big
deal -- a simple argument shows the diagonal terms are all O(1), so you don't
introduce any weird scaling by setting the diagonal to 1, zeroing the row, etc.
In either 1d or 3d, however, the diagonal terms are not O(1). This can affect
the spectrum of the matrix and hence the convergence properties of the method.
We could always scale what we insert on the diagonal (in both LHS and
RHS) by looking at something like the average of the diagonal entries.
I'm not opposed to eliminating dofs. It's just what we have now works
and if we should spend time implementing something else it must be
worth the effort.
--
Anders