Darach,

    Jed's answer is essentially complete, I'll just expand on it a little in 
case it is not completely clear and because I like to hear myself type.

    The diagonal scaling we choose is completely dictated by the fact that we 
want to use geometric multigrid as our solver. For geometric multigrid to work 
well the coarse grid corrections need to be (approximate) PROJECTIONS of the 
error onto the coarser grid space. They cannot be 10 times the projection or 
1/2 times a projection, this means the scaling is important. When one uses the 
Galerkin finite element methods the coarse grid space is actually a subspace of 
the fine grid space so the coarse grid correction is automatically a projection 
of the error. With finite differences this need not be the case (it depends on 
how you scale the matrix). Thus in our examples that use finite differences (we 
have finite difference examples because they are easy to write and understand) 
we use a scaling that MATCHES the scaling one would get if one used Galerkin 
finite elements. 

  For example, in 1d finite elements gives you \integral grad u * grad v = 
\integral v * f where the integrals are over (for example) piecewise linear 
finite element basis functions. Now grad a basis function is order 1/h so the 
left hand side scaling is h * 1/h * 1/h = 1/h the scaling on the right hand 
side is h (since the support of each basis function is of size h). For 3d 
finite elements again grad a basis function is 1/h but now the integral is over 
are region of size h*h*h so the left hand side scaling is h*h*h* 1/h * 1/h and 
the right side scaling is h*h*h.  This gives the basic scaling of the matrix. 
Now to do the scaling of the rows of the matrix that correspond to Dirichlet 
boundary conditions we scale them in the same way as the other diagonals of the 
matrix.

   Barry



On Jul 28, 2010, at 10:27 AM, Jed Brown wrote:

> On Wed, 28 Jul 2010 13:08:59 +0100, Darach Golden <darach at tchpc.tcd.ie> 
> wrote:
>> In each of the examples above, the linear system to be solved seems to
>> contain entries for the total number of nodes (including boundary
>> nodes), with rows associated with boundary nodes containing values on
>> the diagonal only (in the Dirichlet case).  Is this correct?
> 
> Yes.  For simple problems, especially on unstructured grids these nodes
> can be eleminated, but they are usually left in for structured grids or
> for hybrid conditions or conditions that change over time.
> 
>> It's these diagonal matrix values that are confusing me:
> 
> Note that you can scale this any way you like and you will get the same
> solution.  The problem is volume weighted (somewhat important for
> geometric multigrid, happens automatically with FEM) and the boundary
> conditions are scaled to produce similar diagonal entrios to nearby
> nodes.  To explain the exact values, note that Laplace produces diagonal
> entries of magnitude
> 
>  2 d h^d \sum_{i=1}^d 1/h_d^2
> 
> in d dimensions.  See src/snes/examples/tutorials/ex48.c for a nonlinear
> vector problem in a finite element context.
> 
> Jed

Reply via email to