[petsc-users] (Fast?) assembly of upper triangle and MatZeroRows

Jed Brown jedbrown at mcs.anl.gov
Mon Aug 8 09:10:32 CDT 2011


On Mon, Aug 8, 2011 at 08:40, Clemens Domanig <clemens.domanig at uibk.ac.at>wrote:

> Hi,
>
> I want my FE-program to be able to use LU- and LDLt-decomp (MUMPS). LU
> works fine and now I want to implement LDLt. My Questions:
> 1.) How can I speed up the assembly of the upper triangle matrix?
> * '-mat_ignore_lower_triangular' makes it terrible slow
> (1000 elements -> 1s explode to 18s
> * MatSetValues with Blocks of 6x6 and single values at the diagonal is even
> worse.
>

SBAIJ needs different preallocation. If you set it with
Mat{Seq,MPI}SBAIJSetPreallocation(), assembly will be fast.


> 2.) SBAIJ doesn't like MatZeroRows. What are the alternatives to apply
> boundary conditions to my matrix?
>

That function would make the matrix nonsymmetric because the columns aren't
also zeroed, so you couldn't use it with a symmetric solver anyway. I
believe in imposing boundary conditions symmetrically at the local level
(either by removing them or by imposing them while computing residuals for
those nodes), but many people like to do it differently.

To do boundary conditions by zeroing rows and columns after assembly, you
would need to modify the right hand side in a compatible way. We could
automate this by having the Mat "remember" the entries in the columns that
it zeroed so that each right hand side could automatically be modified
before starting the solve, but then solving A*x = b would either yield an x
that doesn't satisfy this equation or modify b, both of which I think would
be confusing.

Suggestions for imposing boundary conditions globally without ruining
symmetry or having confusing semantics would be welcome.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110808/fd1e2337/attachment.htm>


More information about the petsc-users mailing list