You should move to petsc-dev and use the new FieldSplit preconditioner. It can apply the Schur complement<div>as you want.</div><div><br></div><div>   Matt<br><br><div class="gmail_quote">On Fri, Jan 28, 2011 at 3:02 AM, Thomas Witkowski <span dir="ltr">&lt;<a href="mailto:thomas.witkowski@tu-dresden.de">thomas.witkowski@tu-dresden.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Barry,<br>
<br>
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!<br>
<font color="#888888">
<br>
Thomas</font><div><div></div><div class="h5"><br>
<br>
Barry Smith wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  Thomas,<br>
<br>
    There are two classes of related non-overlapping domain decomposition methods that use Schur complements.<br>
<br>
1) the &quot;iterative substructuring&quot; 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<br>

<br>
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&#39;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&#39;t discuss FEIT methods directly, they are similar to the balancing that is discussed.<br>

<br>
  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.<br>
<br>
     Barry<br>
<br>
<br>
On Jan 26, 2011, at 6:51 AM, Thomas Witkowski wrote:<br>
<br>
  <br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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<br>

<br>
[A_II          A_IB]    *  [u_I]   =  [f_I]<br>
[A_IB^T    A_BB]      [u_B]      [f_B]<br>
<br>
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&#39;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&#39;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?<br>

<br>
Thank you for any advise,<br>
<br>
Thomas<br>
    <br>
</blockquote>
<br>
<br>
<br>
  <br>
</blockquote>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>
</div>