xref: /petsc/src/dm/impls/da/dapreallocate.c (revision 2971ee689451696b9a4f220d5834ed6a552b9fb6)
1 #include <petsc/private/dmdaimpl.h> /*I      "petscdmda.h"   I*/
2 #include <petsc/private/isimpl.h>
3 #include <petscsf.h>
4 
5 /*@
6   DMDASetPreallocationCenterDimension - Determine the topology used to determine adjacency
7 
8   Input Parameters:
9 + dm                - The `DMDA` object
10 - preallocCenterDim - The dimension of points which connect adjacent entries
11 
12   Level: developer
13 
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
20 
21 .seealso: [](sec_struct), `DM`, `DMDA`, `DMCreateMatrix()`, `DMDAPreallocateOperator()`
22 @*/
DMDASetPreallocationCenterDimension(DM dm,PetscInt preallocCenterDim)23 PetscErrorCode DMDASetPreallocationCenterDimension(DM dm, PetscInt preallocCenterDim)
24 {
25   DM_DA *mesh = (DM_DA *)dm->data;
26 
27   PetscFunctionBegin;
28   PetscValidHeaderSpecificType(dm, DM_CLASSID, 1, DMDA);
29   mesh->preallocCenterDim = preallocCenterDim;
30   PetscFunctionReturn(PETSC_SUCCESS);
31 }
32 
33 /*@
34   DMDAGetPreallocationCenterDimension - Return the topology used to determine adjacency
35 
36   Input Parameter:
37 . dm - The `DMDA` object
38 
39   Output Parameter:
40 . preallocCenterDim - The dimension of points which connect adjacent entries
41 
42   Level: developer
43 
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
50 
51 .seealso: [](sec_struct), `DM`, `DMDA`, `DMCreateMatrix()`, `DMDAPreallocateOperator()`, `DMDASetPreallocationCenterDimension()`
52 @*/
DMDAGetPreallocationCenterDimension(DM dm,PetscInt * preallocCenterDim)53 PetscErrorCode DMDAGetPreallocationCenterDimension(DM dm, PetscInt *preallocCenterDim)
54 {
55   DM_DA *mesh = (DM_DA *)dm->data;
56 
57   PetscFunctionBegin;
58   PetscValidHeaderSpecificType(dm, DM_CLASSID, 1, DMDA);
59   PetscAssertPointer(preallocCenterDim, 2);
60   *preallocCenterDim = mesh->preallocCenterDim;
61   PetscFunctionReturn(PETSC_SUCCESS);
62 }
63