mixed matrix type?

Matthew Knepley knepley at gmail.com
Wed May 21 11:29:17 CDT 2008

On Wed, May 21, 2008 at 11:14 AM, Sean Dettrick <sdettrick at gmail.com> wrote:
> Hi,
> I have a sparse N*N matrix generated from a DA and a 5 point stencil, with a
> total of approx 5*N non-zero entries.  Now I would like to extend this
> matrix by adding a smaller M*M dense matrix to the bottom right hand side,
> i.e. so that there is a dense square in the bottom right hand corner of the
> otherwise sparse matrix.  The total number of new non-zero entries, M*M, is
> comparable to the total number of old entries, 5*N.  On top of this, there
> would be a small number of non-zero entries in the new upper-right and
> lower-left rectangular portions of the matrix, due to coupling of the two
> systems.  The new total matrix size (including zeroes) would be (N+M)*(N+M).
> Can anybody recommend a Mat type to store the new matrix?
> One possibility I was thinking of was to establish the original sparse Mat
> with a DA in a sub-communicator (with half the CPUs), and get the ownership
> range with MatGetOwnershipRange.  Then in the petsc_comm_world communicator,
> the complete matrix could be constructed (by element-wise copying the old
> one I suppose), and the ownership range could be maintained manually.
> Does this sound like a reasonable strategy?

Not really. If you only want parallelism suitable for the M matrix, I
would use a Schur
complement strategy:

  1) Make the DA matrix

  2) Make M, and the coupling matrices B, B^T

  3) Make a MatShell that has a MatMult() that applies

       B^T A^{-1} B + M

   with A^{-1} done using a KSPSolve().

This seems easier to program and solve to me than the fully assembled one. We
hope later to have something built to do the full assembly.


> I would very much appreciate any suggestions or advice.
> Thanks,
> Sean Dettrick

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