On Oct 25, 2016, at 8:50 PM, Jed Brown <[email protected]> wrote: > Matthew Knepley <[email protected]> writes: > >> On Tue, Oct 25, 2016 at 12:19 PM, Stefano Zampini <[email protected] >>> 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.
