[petsc-dev] MatSetFromOptions() after DMGetMatrix()

Jed Brown jed at 59A2.org
Sat Apr 30 18:22:50 CDT 2011


I was tired of
writing MatSetOption(Ap,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_TRUE) into my
code to find preallocation issues, so I added
-mat_new_nonzero_allocation_err to MatSetFromOptions(). Now I actually call
that function. In particular, I do things like

PetscOptionsList("-Ap_mat_type","Matrix type for velocity
operator","",MatList,mattype_Ap,mattype_Ap,sizeof(mattype_Ap),NULL);
...
DMGetMatrix(fsu,mattype_Ap,&Ap);
MatSetOptionsPrefix(Ap,"Ap_");
MatSetOption(Ap,MAT_SYMMETRIC,PETSC_TRUE);
MatSetFromOptions(Ap);
// Check type and set MAT_IGNORE_LOWER_TRIANGULAR if necessary


Three problems:

1. This is too damn much work.

2. Checking the type is an ugly hack. Should MAT_IGNORE_LOWER_TRIANGULAR be
default, or should nonsymmetric matrices ignore it, or should there be a new
option with those semantics?

3. It's wrong to use "-Ap_mat_type sbaij" because the actual type becomes
seqsbaij, and then preallocation is thrown away [*] when MatSetFromOptions
finds "sbaij", calls MatSetType which compares it to "seqsbaij", and resets
the type. This means that I have to use a different prefix to choose which
type to pass to DMGetMatrix() than the prefix I subsequently set on the
matrix.


Any ideas how to make this work in a sane way?

[*] I was getting a seg-fault, but I set mat->preallocated to false in
MatSetType. It doesn't crash any more, but preallocation is still thrown
away.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20110501/041b161f/attachment.html>


More information about the petsc-dev mailing list