Actual source code: petscdmfield.h

  1: #pragma once

  3: #include <petscdm.h>
  4: #include <petscdt.h>
  5: #include <petscfe.h>

  7: /* SUBMANSEC = DM */

  9: PETSC_EXTERN PetscErrorCode DMFieldInitializePackage(void);
 10: PETSC_EXTERN PetscErrorCode DMFieldFinalizePackage(void);

 12: PETSC_EXTERN PetscClassId DMFIELD_CLASSID;

 14: /*J
 15:   DMFieldType - String with the name of a `DMField` implementation

 17:   Values:
 18: + `DMFIELDDA`    - a field defined only by its values at the corners of a `DMDA`
 19: . `DMFIELDDS`    - a field defined by a discretization over a mesh set with `DMSetField()`
 20: - `DMFIELDSHELL` - a field defined by arbitrary callbacks

 22:   Level: intermediate

 24: .seealso: [](ch_dmbase), `DMField`, `DMFieldSetType()`, `DMFieldGetType()`, `DMFieldRegister()`
 25: J*/
 26: typedef const char *DMFieldType;
 27: #define DMFIELDDA    "da"
 28: #define DMFIELDDS    "ds"
 29: #define DMFIELDSHELL "shell"

 31: PETSC_EXTERN PetscFunctionList DMFieldList;
 32: PETSC_EXTERN PetscErrorCode    DMFieldSetType(DMField, DMFieldType);
 33: PETSC_EXTERN PetscErrorCode    DMFieldGetType(DMField, DMFieldType *);
 34: PETSC_EXTERN PetscErrorCode    DMFieldRegister(const char[], PetscErrorCode (*)(DMField));

 36: /*E
 37:    DMFieldContinuity - Indicates the smallest mesh entity across which a `DMField` is continuous; equivalently, the largest entity at which the field may be discontinuous

 39:    Values:
 40: +   `DMFIELD_VERTEX` - continuous across vertices (i.e., everywhere on the mesh; standard $H^1$ finite elements)
 41: .   `DMFIELD_EDGE`   - continuous across edges, but may jump at vertices
 42: .   `DMFIELD_FACET`  - continuous across facets (faces in 3D, edges in 2D); may jump at lower-dimensional points
 43: -   `DMFIELD_CELL`   - field is defined per cell, with no continuity between adjacent cells (cell-centered finite volume)

 45:    Level: intermediate

 47: .seealso: `DMField`, `DMFieldCreateShell()`, `DMFieldEvaluate()`, `DMFieldEvaluateFE()`, `DMFieldEvaluateFV()`
 48: E*/
 49: typedef enum {
 50:   DMFIELD_VERTEX,
 51:   DMFIELD_EDGE,
 52:   DMFIELD_FACET,
 53:   DMFIELD_CELL
 54: } DMFieldContinuity;
 55: PETSC_EXTERN const char *const DMFieldContinuities[];

 57: PETSC_EXTERN PetscErrorCode DMFieldDestroy(DMField *);
 58: PETSC_EXTERN PetscErrorCode DMFieldView(DMField, PetscViewer);

 60: PETSC_EXTERN PetscErrorCode DMFieldGetDM(DMField, DM *);
 61: PETSC_EXTERN PetscErrorCode DMFieldGetNumComponents(DMField, PetscInt *);

 63: PETSC_EXTERN PetscErrorCode DMFieldEvaluate(DMField, Vec, PetscDataType, void *, void *, void *);
 64: PETSC_EXTERN PetscErrorCode DMFieldEvaluateFE(DMField, IS, PetscQuadrature, PetscDataType, void *, void *, void *);
 65: PETSC_EXTERN PetscErrorCode DMFieldEvaluateFV(DMField, IS, PetscDataType, void *, void *, void *);
 66: PETSC_EXTERN PetscErrorCode DMFieldCreateFEGeom(DMField, IS, PetscQuadrature, PetscFEGeomMode, PetscFEGeom **);

 68: PETSC_EXTERN PetscErrorCode DMFieldCreateDefaultQuadrature(DMField, IS, PetscQuadrature *);
 69: PETSC_EXTERN PetscErrorCode DMFieldCreateDefaultFaceQuadrature(DMField, IS, PetscQuadrature *);

 71: PETSC_EXTERN PetscErrorCode DMFieldGetDegree(DMField, IS, PetscInt *, PetscInt *);

 73: PETSC_EXTERN PetscErrorCode DMFieldCreateDA(DM, PetscInt, const PetscScalar *, DMField *);
 74: PETSC_EXTERN PetscErrorCode DMFieldCreateDS(DM, PetscInt, Vec, DMField *);
 75: PETSC_EXTERN PetscErrorCode DMFieldCreateDSWithDG(DM, DM, PetscInt, Vec, Vec, DMField *);

 77: PETSC_EXTERN PetscErrorCode DMFieldCreateShell(DM, PetscInt, DMFieldContinuity, PetscCtx, DMField *);
 78: PETSC_EXTERN PetscErrorCode DMFieldShellSetDestroy(DMField, PetscErrorCode (*)(DMField));
 79: PETSC_EXTERN PetscErrorCode DMFieldShellGetContext(DMField, PetscCtxRt);
 80: PETSC_EXTERN PetscErrorCode DMFieldShellSetEvaluate(DMField, PetscErrorCode (*)(DMField, Vec, PetscDataType, void *, void *, void *));
 81: PETSC_EXTERN PetscErrorCode DMFieldShellSetEvaluateFE(DMField, PetscErrorCode (*)(DMField, IS, PetscQuadrature, PetscDataType, void *, void *, void *));
 82: PETSC_EXTERN PetscErrorCode DMFieldShellEvaluateFEDefault(DMField, IS, PetscQuadrature, PetscDataType, void *, void *, void *);
 83: PETSC_EXTERN PetscErrorCode DMFieldShellSetEvaluateFV(DMField, PetscErrorCode (*)(DMField, IS, PetscDataType, void *, void *, void *));
 84: PETSC_EXTERN PetscErrorCode DMFieldShellEvaluateFVDefault(DMField, IS, PetscDataType, void *, void *, void *);
 85: PETSC_EXTERN PetscErrorCode DMFieldShellSetGetDegree(DMField, PetscErrorCode (*)(DMField, IS, PetscInt *, PetscInt *));
 86: PETSC_EXTERN PetscErrorCode DMFieldShellSetCreateDefaultQuadrature(DMField, PetscErrorCode (*)(DMField, IS, PetscQuadrature *));