[petsc-users] Implementing Schur complement approach (domain decomposition)

Barry Smith bsmith at mcs.anl.gov
Wed Jan 26 13:49:15 CST 2011


  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



More information about the petsc-users mailing list