xref: /petsc/src/dm/impls/da/dareg.c (revision a69119a591a03a9d906b29c0a4e9802e4d7c9795) !
1 #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h"  I*/
2 
3 extern PetscErrorCode DMSetUp_DA_1D(DM);
4 extern PetscErrorCode DMSetUp_DA_2D(DM);
5 extern PetscErrorCode DMSetUp_DA_3D(DM);
6 
7 PetscErrorCode DMSetUp_DA(DM da) {
8   DM_DA *dd = (DM_DA *)da->data;
9 
10   PetscFunctionBegin;
11   PetscValidHeaderSpecific(da, DM_CLASSID, 1);
12   PetscCheck(dd->w >= 1, PetscObjectComm((PetscObject)da), PETSC_ERR_ARG_OUTOFRANGE, "Must have 1 or more degrees of freedom per node: %" PetscInt_FMT, dd->w);
13   PetscCheck(dd->s >= 0, PetscObjectComm((PetscObject)da), PETSC_ERR_ARG_OUTOFRANGE, "Stencil width cannot be negative: %" PetscInt_FMT, dd->s);
14 
15   PetscCall(PetscCalloc1(dd->w + 1, &dd->fieldname));
16   PetscCall(PetscCalloc1(da->dim, &dd->coordinatename));
17   if (da->dim == 1) {
18     PetscCall(DMSetUp_DA_1D(da));
19   } else if (da->dim == 2) {
20     PetscCall(DMSetUp_DA_2D(da));
21   } else if (da->dim == 3) {
22     PetscCall(DMSetUp_DA_3D(da));
23   } else SETERRQ(PetscObjectComm((PetscObject)da), PETSC_ERR_SUP, "DMs only supported for 1, 2, and 3d");
24   PetscCall(DMViewFromOptions(da, NULL, "-dm_view"));
25   PetscFunctionReturn(0);
26 }
27