[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