[petsc-users] Using PETSc solvers and preconditioners with mfem

Stefano Zampini stefano.zampini at gmail.com
Tue Oct 25 13:06:13 CDT 2016


On Oct 25, 2016, at 8:50 PM, Jed Brown <jed at jedbrown.org> wrote:

> Matthew Knepley <knepley at gmail.com> writes:
> 
>> On Tue, Oct 25, 2016 at 12:19 PM, Stefano Zampini <stefano.zampini at gmail.com
>>> wrote:
>> 
>>> I have a working conversion from HypreParCSR to PETSc MPIAIJ format.
>>> I could add this code to PETSc, maybe in the contrib folder. Barry, what
>>> do you think?
>>> 
>> 
>> No, no one looks there. Add it to src/mat/utils and make an interface
>> function like MatCreateFromHypreParCSR().
> 
> Note that mhyp.c contains code to convert AIJ matrices to ParCSR.  If we
> were to create a MatHypreParCSR implementation, we could use those
> functions for MatConvert_{Seq,MPI}AIJ_HypreParCSR and use your function
> for the reverse.  That would be consistent with how external matrix
> formats are normally represented and may enable some new capability to
> mix PETSc and Hypre components in the future.  Here, I'm envisioning
> 
>  PetscErrorCode MatCreateHypreParCSR(hyper_ParCSRMatrix *A,Mat *B);

> 
> This way, if a user chooses -pc_type hypre, there would be no copies for
> going through PETSc.  Similarly, if we implement
> MatSetValues_HypreParCSR, a pure PETSc application could use Hypre
> preconditioners with no copies.

MATHYPRE could be a shell wrapping Hypre calls for the moment.
However, HypreParCSR and MATAIJ are mostly equivalent formats. As far as I know, the main (only?) difference resides in the fact that the diagonal term of the diagonal part is ordered first in the CSR.
For this reason, I think it should inherit from AIJ.

As soon  as I have time, I can start a new matrix class, but I don’t have much time to implement at the SetValues level yet.





More information about the petsc-users mailing list