Date: 2026-07-30T21:14:01+00:00

Actual source code: dapreallocate.c

      1: #include <petsc/private/dmdaimpl.h>
      2: #include <petsc/private/isimpl.h>
      3: #include <petscsf.h>

      5: /*@
      6:   DMDASetPreallocationCenterDimension - Determine the topology used to determine adjacency

      8:   Input Parameters:
      9: + dm                - The `DMDA` object
     10: - preallocCenterDim - The dimension of points which connect adjacent entries

     12:   Level: developer

     14:   Notes:
     15: .vb
     16:      FEM:   Two points p and q are adjacent if q \in closure(star(p)), preallocCenterDim = dim
     17:      FVM:   Two points p and q are adjacent if q \in star(cone(p)),    preallocCenterDim = dim-1
     18:      FVM++: Two points p and q are adjacent if q \in star(closure(p)), preallocCenterDim = 0
     19: .ve

     21: .seealso: [](sec_struct), `DM`, `DMDA`, `DMCreateMatrix()`, `DMDAPreallocateOperator()`
     22: @*/
     23: PetscErrorCode DMDASetPreallocationCenterDimension(DM dm, PetscInt preallocCenterDim)
     24: {
     25:   DM_DA *mesh = (DM_DA *)dm->data;

     27:   PetscFunctionBegin;
     29:   mesh->preallocCenterDim = preallocCenterDim;
     30:   PetscFunctionReturn(PETSC_SUCCESS);
     31: }

     33: /*@
     34:   DMDAGetPreallocationCenterDimension - Return the topology used to determine adjacency

     36:   Input Parameter:
     37: . dm - The `DMDA` object

     39:   Output Parameter:
     40: . preallocCenterDim - The dimension of points which connect adjacent entries

     42:   Level: developer

     44:   Notes:
     45: .vb
     46:      FEM:   Two points p and q are adjacent if q \in closure(star(p)), preallocCenterDim = dim
     47:      FVM:   Two points p and q are adjacent if q \in star(cone(p)),    preallocCenterDim = dim-1
     48:      FVM++: Two points p and q are adjacent if q \in star(closure(p)), preallocCenterDim = 0
     49: .ve

     51: .seealso: [](sec_struct), `DM`, `DMDA`, `DMCreateMatrix()`, `DMDAPreallocateOperator()`, `DMDASetPreallocationCenterDimension()`
     52: @*/
     53: PetscErrorCode DMDAGetPreallocationCenterDimension(DM dm, PetscInt *preallocCenterDim)
     54: {
     55:   DM_DA *mesh = (DM_DA *)dm->data;

     57:   PetscFunctionBegin;
     59:   PetscAssertPointer(preallocCenterDim, 2);
     60:   *preallocCenterDim = mesh->preallocCenterDim;
     61:   PetscFunctionReturn(PETSC_SUCCESS);
     62: }