If you are running sequentially you likely want the first routine, in parallel the third routine.
MatCreateSeqAIJWithArrays() PETSC_EXTERN PetscErrorCode MatSeqAIJSetPreallocationCSR(Mat,const PetscInt [],const PetscInt [],const PetscScalar []); PETSC_EXTERN PetscErrorCode MatMPIAIJSetPreallocationCSR(Mat,const PetscInt[],const PetscInt[],const PetscScalar[]); PETSC_EXTERN PetscErrorCode MatSeqBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); PETSC_EXTERN PetscErrorCode MatMPIBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); PETSC_EXTERN PetscErrorCode MatMPISBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); > On Jul 20, 2020, at 7:38 AM, Adolfo Rodriguez <adan...@gmail.com> wrote: > > I am trying to use PETSc to solve a non-linear problem. The problem I am > facing is that I already have the Jacobian matrix formed in CSR format. Now I > am trying to define a function FormJacobian which takes this preexisting > matrix and writes it in PETSc format. For a small problem, I can use > MatSetValue, looping over all non-zero elements one at a time. However, this > turns out too slow for larger problems. > > In my current implementation, I am using MatCreateSeqAIJ which works great. > However, this approach does not seem to work to set the Jacobian. > > Any suggestions? > > Regards, > > Adolfo