petsc-3.7.1 2016-05-15
Report Typos and Errors

MatSetValuesStencil

Inserts or adds a block of values into a matrix. Using structured grid indexing

Synopsis

#include "petscmat.h" 
PetscErrorCode MatSetValuesStencil(Mat mat,PetscInt m,const MatStencil idxm[],PetscInt n,const MatStencil idxn[],const PetscScalar v[],InsertMode addv)
Not Collective Many br

Input Parameters

mat - the matrix Many br
m - number of rows being entered Many br
idxm - grid coordinates (and component number when dof > 1) for matrix rows being entered Many br
n - number of columns being entered Many br
idxn - grid coordinates (and component number when dof > 1) for matrix columns being entered Many br
v - a logically two-dimensional array of values Many br
addv - either ADD_VALUES or INSERT_VALUES, where Many brADD_VALUES adds values to any existing entries, and Many brINSERT_VALUES replaces existing entries with new values Many br

Notes

By default the values, v, are row-oriented. See MatSetOption() for other options. Many br

Calls to MatSetValuesStencil() with the INSERT_VALUES and ADD_VALUES Many broptions cannot be mixed without intervening calls to the assembly Many brroutines. Many br

The grid coordinates are across the entire grid, not just the local portion Many br

MatSetValuesStencil() uses 0-based row and column numbers in Fortran Many bras well as in C. Many br

For setting/accessing vector values via array coordinates you can use the DMDAVecGetArray() routine Many br

In order to use this routine you must either obtain the matrix with DMCreateMatrix() Many bror call MatSetLocalToGlobalMapping() and MatSetStencil() first. Many br

The columns and rows in the stencil passed in MUST be contained within the Many brghost region of the given process as set with DMDACreateXXX() or MatSetStencil(). For example, Many brif you create a DMDA with an overlap of one grid level and on a particular process its first Many brlocal nonghost x logical coordinate is 6 (so its first ghost x logical coordinate is 5) the Many brfirst i index you can use in your column and row indices in MatSetStencil() is 5. Many br

In Fortran idxm and idxn should be declared as Many br

    MatStencil idxm(4,m),idxn(4,n)
and the values inserted using Many br
   idxm(MatStencil_i,1) = i
   idxm(MatStencil_j,1) = j
   idxm(MatStencil_k,1) = k
   idxm(MatStencil_c,1) = c
etc Many br

For periodic boundary conditions use negative indices for values to the left (below 0; that are to be Many brobtained by wrapping values from right edge). For values to the right of the last entry using that index plus one Many bretc to obtain values that obtained by wrapping the values from the left edge. This does not work for anything but the Many brDM_BOUNDARY_PERIODIC boundary type. Many br

For indices that don't mean anything for your case (like the k index when working in 2d) or the c index when you have Many bra single value per point) you can skip filling those indices. Many br

Inspired by the structured grid interface to the HYPRE package Many br(http://www.llnl.gov/CASC/hypre) Many br

Efficiency Alert

The routine MatSetValuesBlockedStencil() may offer much better efficiency Many brfor users of block sparse formats (MATSEQBAIJ and MATMPIBAIJ). Many br

Many br

See Also

MatSetOption(), MatAssemblyBegin(), MatAssemblyEnd(), MatSetValuesBlocked(), MatSetValuesLocal()
MatSetValues(), MatSetValuesBlockedStencil(), MatSetStencil(), DMCreateMatrix(), DMDAVecGetArray(), MatStencil Many br

Level:beginner
Location:
src/mat/interface/matrix.c
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages

Examples

src/ksp/ksp/examples/tutorials/ex25.c.html
src/ksp/ksp/examples/tutorials/ex28.c.html
src/ksp/ksp/examples/tutorials/ex29.c.html
src/ksp/ksp/examples/tutorials/ex32.c.html
src/ksp/ksp/examples/tutorials/ex34.c.html
src/ksp/ksp/examples/tutorials/ex42.c.html
src/ksp/ksp/examples/tutorials/ex43.c.html
src/ksp/ksp/examples/tutorials/ex45.c.html
src/ksp/ksp/examples/tutorials/ex46.c.html
src/ksp/ksp/examples/tutorials/ex49.c.html
src/ksp/ksp/examples/tutorials/ex50.c.html