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

Reply via email to