DMPlexVecGetClosure#

Get an array of the values on the closure of ‘point’

Synopsis#

#include "petscdmplex.h"   
PetscErrorCode DMPlexVecGetClosure(DM dm, PetscSection section, Vec v, PetscInt point, PetscInt *csize, PetscScalar *values[])

Not collective

Input Parameters#

  • dm - The DM

  • section - The section describing the layout in v, or NULL to use the default section

  • v - The local vector

  • point - The point in the DM

Input/Output Parameters#

  • csize - The size of the input values array, or NULL; on output the number of values in the closure

  • values - An array to use for the values, or *values = NULL to have it allocated automatically; if the user provided NULL, it is a borrowed array and should not be freed, use DMPlexVecRestoreClosure() to return it

Notes#

DMPlexVecGetClosure()/DMPlexVecRestoreClosure() only allocates the values array if it set to NULL in the calling function. This is because DMPlexVecGetClosure() is typically called in the inner loop of a Vec or Mat assembly function, and a user may already have allocated storage for this operation.

A typical use could be

   values = NULL;
   PetscCall(DMPlexVecGetClosure(dm, NULL, v, p, &clSize, &values));
   for (cl = 0; cl < clSize; ++cl) {
     <Compute on closure>
   }
   PetscCall(DMPlexVecRestoreClosure(dm, NULL, v, p, &clSize, &values));

or

   PetscMalloc1(clMaxSize, &values);
   for (p = pStart; p < pEnd; ++p) {
     clSize = clMaxSize;
     PetscCall(DMPlexVecGetClosure(dm, NULL, v, p, &clSize, &values));
     for (cl = 0; cl < clSize; ++cl) {
       <Compute on closure>
     }
   }
   PetscFree(values);

Fortran Notes#

The csize argument is not present in the Fortran binding.

values must be declared with

  PetscScalar,dimension(:),pointer   :: values

and it will be allocated internally by PETSc to hold the values returned

See Also#

DMPlex: Unstructured Grids, DM, DMPLEX, DMPlexVecRestoreClosure(), DMPlexVecSetClosure(), DMPlexMatSetClosure()

Level#

intermediate

Location#

src/dm/impls/plex/plex.c

Examples#

src/snes/tutorials/ex56.c
src/dm/impls/plex/tutorials/ex6.c
src/dm/impls/plex/tutorials/ex11.c
src/snes/tutorials/ex77.c


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