Actual source code: petscdmplexegads.h

  1: #pragma once

  3: #include <petscdmplex.h>

  5: /* MANSEC = DM */
  6: /* SUBMANSEC = DMPlex */

  8: #if !defined(PETSC_HAVE_EGADS)
  9:   #error "PETSc not configured for EGADS; reconfigrue --with-egads or --download-egads"
 10: #endif

 12: /* Declarations below provide an interface to the EGADS/EGADSlite libraries, that can be automatically installed
 13:    by PETSc. These functions enable the creation, interrogation, and manipulation of CAD geometries attached to
 14:    a DMPlex. */
 15: #include <egads.h>
 16: #include <egads_lite.h>

 18: /*S
 19:    PetscGeom - Handle for an EGADS geometric entity (body, shell, face, loop, edge, or node) attached to a `DMPLEX`

 21:    Level: intermediate

 23:    Note:
 24:    `PetscGeom` is a typedef for the EGADS `ego` handle. It is used by the `DMPlexGetGeom...()` family of routines to navigate the CAD model that PETSc associates with a mesh.

 26: .seealso: `DMPlexGetGeomModelBodies()`, `DMPlexGetGeomObject()`, `DMPlexFreeGeomObject()`, `DMPlexGeomDataAndGrads()`
 27: S*/
 28: typedef ego PetscGeom;

 30: /*MC
 31:   PetscCallEGADS - Calls an EGADS function and then checks the resulting error code, if it is
 32:   non-zero it calls the error handler and returns from the current function with the error
 33:   code `PETSC_ERR_LIB`.

 35:   Synopsis:
 36: #include <petscdmplexegads.h>
 37:   void PetscCallEGADS(func, args)

 39:   Not Collective

 41:   Input Parameters:
 42: + func - any EGADS function that returns an error code
 43: - args - the arguments to the function

 45:   Level: beginner

 47: .seealso: `PetscCall()`, `SETERRQ()`, `PetscCheck()`, `PetscAssert()`, `PetscTraceBackErrorHandler()`, `PetscCallMPI()`,
 48:           `PetscPushErrorHandler()`, `PetscError()`, `CHKMEMQ`, `CHKERRA()`,
 49:           `CHKERRMPI()`, `PetscCallBack()`, `PetscCallAbort()`, `PetscCallVoid()`, `PetscCallNull()`
 50: M*/
 51: #define PetscCallEGADS(func, args) \
 52:   do { \
 53:     int _status; \
 54:     PetscStackPushExternal(#func); \
 55:     _status = func args; \
 56:     PetscStackPop; \
 57:     PetscCheck(_status >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "Error in EGADS call %s() Status %d", #func, (int)_status); \
 58:   } while (0)

 60: PETSC_EXTERN PetscErrorCode DMPlexGeomDataAndGrads(DM, PetscBool);
 61: PETSC_EXTERN PetscErrorCode DMPlexModifyGeomModel(DM, MPI_Comm, PetscScalar[], PetscScalar[], PetscBool, PetscBool, const char[]);
 62: PETSC_EXTERN PetscErrorCode DMPlexInflateToGeomModelUseXYZ(DM);
 63: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelTUV(DM);
 64: PETSC_EXTERN PetscErrorCode DMPlexInflateToGeomModelUseTUV(DM);
 65: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodies(DM, PetscGeom **, PetscInt *);
 66: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyShells(DM, PetscGeom, PetscGeom **, PetscInt *);
 67: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyFaces(DM, PetscGeom, PetscGeom **, PetscInt *);
 68: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyLoops(DM, PetscGeom, PetscGeom **, PetscInt *);
 69: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyEdges(DM, PetscGeom, PetscGeom **, PetscInt *);
 70: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyNodes(DM, PetscGeom, PetscGeom **, PetscInt *);
 71: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelShellFaces(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *);
 72: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelFaceLoops(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *);
 73: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelFaceEdges(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *);
 74: PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelEdgeNodes(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *);
 75: PETSC_EXTERN PetscErrorCode DMPlexGetGeomBodyMassProperties(DM, PetscGeom, PetscScalar *, PetscScalar *, PetscScalar **, PetscInt *, PetscScalar **, PetscInt *);
 76: PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomBodyMassProperties(DM, PetscGeom, PetscScalar *, PetscScalar *, PetscScalar **, PetscInt *, PetscScalar **, PetscInt *);
 77: PETSC_EXTERN PetscErrorCode DMPlexGetGeomID(DM, PetscGeom, PetscGeom, PetscInt *);
 78: PETSC_EXTERN PetscErrorCode DMPlexGetGeomObject(DM, PetscGeom, PetscInt, PetscInt, PetscGeom *);
 79: PETSC_EXTERN PetscErrorCode DMPlexGetGeomFaceNumOfControlPoints(DM, PetscGeom, PetscInt *);
 80: PETSC_EXTERN PetscErrorCode DMPlexFreeGeomObject(DM, PetscGeom *);
 81: PETSC_EXTERN PetscErrorCode DMPlexGetGeomCntrlPntAndWeightData(DM, PetscHMapI *, PetscInt *, PetscScalar **, PetscInt *, Mat *, PetscHMapI *, PetscInt *, PetscScalar **);
 82: PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomCntrlPntAndWeightData(DM, PetscHMapI *, PetscInt *, PetscScalar **, PetscInt *, Mat *, PetscHMapI *, PetscInt *, PetscScalar **);
 83: PETSC_EXTERN PetscErrorCode DMPlexGetGeomGradData(DM, PetscHMapI *, Mat *, PetscInt *, PetscScalar **, PetscScalar **, PetscInt *, PetscScalar **, PetscScalar **);
 84: PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomGradData(DM, PetscHMapI *, Mat *, PetscInt *, PetscScalar **, PetscScalar **, PetscInt *, PetscScalar **, PetscScalar **);
 85: PETSC_EXTERN PetscErrorCode DMPlexGetGeomCntrlPntMaps(DM, PetscInt *, PetscInt **, PetscInt **, PetscInt **, PetscInt **, PetscInt **, PetscInt **);