[petsc-users] snes setjacobian with csr sparse matrix
Barry Smith
bsmith at petsc.dev
Mon Jul 20 11:10:24 CDT 2020
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 <adantra at 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
More information about the petsc-users
mailing list