Skip to main content
`Ctrl`+`K`

# MatStoreValues

Stashes a copy of the matrix values; this allows reusing of the linear part of a Jacobian, while recomputing only the nonlinear portion.

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatStoreValues(Mat mat)

Logically Collect

## Input Parameter

- mat - the matrix (currently only `MATAIJ` matrices support this option)

## Example Usage

        Using SNES
        Create Jacobian matrix
        Set linear terms into matrix
        Apply boundary conditions to matrix, at this time matrix must have
          final nonzero structure (i.e. setting the nonlinear terms and applying
          boundary conditions again will not change the nonzero structure
        MatSetOption(mat, MAT_NEW_NONZERO_LOCATIONS, PETSC_FALSE);
        MatStoreValues(mat);
        Call SNESSetJacobian() with matrix
        In your Jacobian routine
          MatRetrieveValues(mat);
          Set nonlinear terms in matrix

        Without `SNESSolve()`, i.e. when you handle nonlinear solve yourself:
        // build linear portion of Jacobian
        MatSetOption(mat, MAT_NEW_NONZERO_LOCATIONS, PETSC_FALSE);
        MatStoreValues(mat);
        loop over nonlinear iterations
           MatRetrieveValues(mat);
           // call MatSetValues(mat,...) to set nonliner portion of Jacobian
           // call MatAssemblyBegin/End() on matrix
           Solve linear system with Jacobian
        endloop

## Notes

Matrix must already be assembled before calling this routine Must set the matrix option `MatSetOption`(mat,`MAT_NEW_NONZERO_LOCATIONS`,`PETSC_FALSE`); before calling this routine.

When this is called multiple times it overwrites the previous set of stored values and does not allocated additional space.

## See Also

Matrices, `Mat`, `MatRetrieveValues()`

## Level

advanced

## Location

src/mat/impls/aij/seq/aij.c

## Implementations

MatStoreValues_MPIAIJ() in src/mat/impls/aij/mpi/mpiaij.c
MatStoreValues_SeqAIJ() in src/mat/impls/aij/seq/aij.c
MatStoreValues_MPIBAIJ() in src/mat/impls/baij/mpi/mpibaij.c
MatStoreValues_SeqBAIJ() in src/mat/impls/baij/seq/baij.c
MatStoreValues_MPISBAIJ() in src/mat/impls/sbaij/mpi/mpisbaij.c
MatStoreValues_SeqSBAIJ() in src/mat/impls/sbaij/seq/sbaij.c
MatStoreValues_MPISELL() in src/mat/impls/sell/mpi/mpisell.c
MatStoreValues_SeqSELL() in src/mat/impls/sell/seq/sell.c

Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages