MatCreateMPISBAIJ & Non-Square Matrix
Barry Smith
bsmith at mcs.anl.gov
Sat Jun 7 15:22:59 CDT 2008
To mimic what you have done before use MatGetSubMatrix() to "mask
out"
the part you do not want (MatGetSubMatrix() is very fast).
Start with MPIAIJ and get the preallocation correct. And
successfully
solve your problem. Then and only then, consider switching to SBAIJ
to save some memory. Once you have the preallocation correct for MPIAIJ
you can reuse it with a twist of discarding below diagonal counts for
SBAIJ.
Barry
On Jun 7, 2008, at 1:39 PM, Andrew Colombi wrote:
> I am wondering how the d_nz and o_nz are treated for a matrix where N
>> M (i.e. more columns than rows). Also, if I understand the
> documentation correctly, it seems the "diagonal part" of the matrix
> depends only on the number of rows each processor has. If I let PETSc
> decide how can I know this before it's too late? Should I use
> MatMPISBAIJSetPreallocation after Creating the matrix? And finally,
> is d_nz the number of non zeros after having saved 1/2 for storing in
> a symmetric manner? or should I pretend I actually need twice the nz
> than will actually be stored.
>
> I'd also like to describe the problem I am trying to solve as I'm sure
> it's essentially the most trivial use of PETSc, and yet I am having
> some difficulty expressing it. Maybe someone can point out the
> obviously correct thing to do that I am missing.
>
> I am solving a linear elliptic PDE using linear FEM with Dirichlet
> boundary conditions. To handle boundary conditions using dense
> matrices in Matlab my strategy was to create an M x N matrix, A, where
> M is the number of unknowns, and N is unknowns + boundary conditions
> (i.e. N > M). Then I'd multiply A by a vector of 0s at unknowns and
> boundary conditions at knowns, and subtract this from my RHS, b.
> Finally I'd mask away the columns associated with the boundary
> conditions of A to produce a square matrix A' = A(:, unknowns). Then
> x = A' \ b.
>
> Scaling up to PETSc here are my concerns:
>
> * How do I best represent A? It is a symmetric matrix, but I'm not
> sure how to find d_nz and o_nz. nz. The trouble is I don't have any
> control over the bandwidth of the matrix (at least at the present).
> Though I have no estimate for d_nz, I do have one for nz; maybe I'll
> find better performance with an MPIAIJ? If such is the case would I
> still be able to use KSPCG?
>
> * How do I best produce A' from A? Ideally this could be done without
> any copying, since it's just a simple mask (i.e. remove the last N-M
> columns). Do Sub matrix commands perform a copy? Is there a way to
> avoid the copy?
>
> Thanks!
> -Andrew
>
>
More information about the petsc-users
mailing list