Actual source code: dmadaptorimpl.h
1: #pragma once
3: #include <petscdmadaptor.h>
4: #include <petsc/private/petscimpl.h>
6: #define MAXDMADAPTORMONITORS 16
8: typedef struct _DMAdaptorOps *DMAdaptorOps;
9: struct _DMAdaptorOps {
10: PetscErrorCode (*setfromoptions)(DMAdaptor);
11: PetscErrorCode (*setup)(DMAdaptor);
12: PetscErrorCode (*view)(DMAdaptor, PetscViewer);
13: PetscErrorCode (*destroy)(DMAdaptor);
14: PetscErrorCode (*transfersolution)(DMAdaptor, DM, Vec, DM, Vec, void *);
15: PetscErrorCode (*mixedsetup)(DMAdaptor, DM);
16: PetscErrorCode (*computeerrorindicator)(DMAdaptor, Vec, Vec);
17: PetscErrorCode (*computecellerrorindicator)(DMAdaptor, PetscInt, PetscInt, const PetscScalar *, const PetscScalar *, const PetscFVCellGeom *, PetscReal *, void *);
18: };
20: struct _p_DMAdaptor {
21: PETSCHEADER(struct _DMAdaptorOps);
22: void *data;
24: /* Inputs */
25: DM idm; /* Initial grid */
26: SNES snes; /* Solver */
27: VecTagger refineTag, coarsenTag; /* Criteria for adaptivity */
28: /* control */
29: DMAdaptationCriterion adaptCriterion;
30: PetscBool femType;
31: PetscInt numSeq; /* Number of sequential adaptations */
32: PetscInt Nadapt; /* Target number of vertices */
33: PetscReal refinementFactor; /* N_adapt = r^dim N_orig */
34: /* FVM support */
35: PetscBool computeGradient;
36: DM cellDM, gradDM;
37: Vec cellGeom, faceGeom, cellGrad; /* Local vectors */
38: const PetscScalar *cellGeomArray, *cellGradArray;
39: // Monitors
40: PetscErrorCode (*monitor[MAXDMADAPTORMONITORS])(DMAdaptor, PetscInt, DM, DM, PetscInt, PetscReal[], Vec, void *);
41: PetscCtxDestroyFn *monitordestroy[MAXDMADAPTORMONITORS];
42: void *monitorcontext[MAXDMADAPTORMONITORS];
43: PetscInt numbermonitors;
44: /* Auxiliary objects */
45: PetscLimiter limiter;
46: PetscErrorCode (**exactSol)(PetscInt, PetscReal, const PetscReal[], PetscInt, PetscScalar[], void *);
47: void **exactCtx;
48: };