[petsc-users] Implementing Schur complement approach (domain decomposition)
Thomas Witkowski
Thomas.Witkowski at tu-dresden.de
Fri Jan 28 12:17:06 CST 2011
Zitat von Matthew Knepley <knepley at gmail.com>:
> You should move to petsc-dev and use the new FieldSplit preconditioner. It
> can apply the Schur complement
> as you want.
Thanks for this hint. I will have a look on it.
Thomas
>
> Matt
>
> On Fri, Jan 28, 2011 at 3:02 AM, Thomas Witkowski <
> thomas.witkowski at tu-dresden.de> wrote:
>
>> Barry,
>>
>> I want to implement the iterative substructuring method as described in
>> point 1). You wrote that the method can be applied on fully assembled global
>> matrices. But how would I than implement the action of the Schur complement
>> on a vector. The matrices A_BB, A_IB, A_BI and A_II are than just
>> submatrices of A. Is there an efficient way to access them from matrix A. I
>> though this is not possible because the matrix is in sparse format. My (very
>> general) idea was to assemble the matrices only local on each proc and to
>> define the action of the global Schur complement as the sum of the actions
>> of the local Schur complements. Could you make this point more clear to me?
>> Thanks!
>>
>> Thomas
>>
>>
>> Barry Smith wrote:
>>
>>> Thomas,
>>>
>>> There are two classes of related non-overlapping domain decomposition
>>> methods that use Schur complements.
>>>
>>> 1) the "iterative substructuring" methods. This can be used will fully
>>> assembled global stiffness matrices. They apply the Schur complement S =
>>> A_BB - A_BI * A_II^-1 A_IB implicitly by applying first A_IB then A_II^-1
>>> etc. The preconditioner for S is applied by directly knowing
>>> something about
>>> the structure of S. For example for the Laplacian the S associated with any
>>> particular edge is spectrally equivalent to l_00^{1/2} and its inverse can
>>> be applied efficiently using FFTs. This is introduced in section 4.2 of my
>>> book with particular examples of preconditioners for edges in 4.2.3, 4.2.4,
>>> 4.2.5 4.2.6 adding a coarse grid is discussed in 4.3.4
>>>
>>> 2) the Neumann-Dirichlet type methods, include FEIT and balancing. These
>>> require parts of the unassembled stiffness matrix because they involve
>>> solving Neumann boundary condition problems on subdomains in the
>>> preconditioner. They are more general purpose than traditional iterative
>>> substructuring methods because they don't depend on particular
>>> properties of
>>> the interface operators like l_00^{1/2}. These are discussed in Section
>>> 4.2.1 4.2.2 4.3.1 4.3.2 4.3.3 Note that the book doesn't discuss FEIT
>>> methods directly, they are similar to the balancing that is discussed.
>>>
>>> So what methods do you want to use? From the matrix you wrote below and
>>> its decomposition that is only appropriate for the iterative substructuring
>>> methods.
>>>
>>> Barry
>>>
>>>
>>> On Jan 26, 2011, at 6:51 AM, Thomas Witkowski wrote:
>>>
>>>
>>>
>>>> I want to solve the equation in my FEM code (that makes already use of
>>>> PETSc) with a Schur complement approach (iterative
>>>> substructuring). Although
>>>> I have some basic knowledge about PETSc, I have no good idea how to start
>>>> with it. To concretize my question, I want to solve a system of the form
>>>>
>>>> [A_II A_IB] * [u_I] = [f_I]
>>>> [A_IB^T A_BB] [u_B] [f_B]
>>>>
>>>> A_II is a block diagonal matrix with each block consisting of all
>>>> interior node of one partition. A_BB is the block consisting of
>>>> all bounday
>>>> nodes. A_IB is the connection between the interior and the
>>>> bounday node. The
>>>> same for the unknown vector u und the right hand side vector f. My first
>>>> idea is not to assemble to matrices A_II, A_IB and A_BB in a
>>>> global way, but
>>>> just local and to define their action using a MatShell for each of these
>>>> matrices. Okay, but what's about the global index of the whole
>>>> system. Till
>>>> now I have a continuous global index of the nodes on each
>>>> partition, what is
>>>> required by PETSC, if I'm right. But for using a Schur complement
>>>> approach I
>>>> need to split the index in the interior and the boundary nodes. Who to
>>>> circumvent this (first of my) problem?
>>>>
>>>> Thank you for any advise,
>>>>
>>>> Thomas
>>>>
>>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
> --
> What most experimenters take for granted before they begin their experiments
> is infinitely more interesting than any results to which their experiments
> lead.
> -- Norbert Wiener
>
More information about the petsc-users
mailing list