15552b385SBrandon #pragma once 25552b385SBrandon 35552b385SBrandon #include <petscdmplex.h> 45552b385SBrandon 5*1850900dSBarry Smith /* MANSEC = DM */ 6*1850900dSBarry Smith /* SUBMANSEC = DMPlex */ 7*1850900dSBarry Smith 85552b385SBrandon #if !defined(PETSC_HAVE_EGADS) 95552b385SBrandon #error "PETSc not configured for EGADS; reconfigrue --with-egads or --download-egads" 105552b385SBrandon #endif 115552b385SBrandon 125552b385SBrandon /* Declarations below provide an interface to the EGADS/EGADSlite libraries, that can be automatically installed 135552b385SBrandon by PETSc. These functions enable the creation, interrogation, and manipulation of CAD geometries attached to 145552b385SBrandon a DMPlex. */ 155552b385SBrandon #include <egads.h> 165552b385SBrandon #include <egads_lite.h> 175552b385SBrandon typedef ego PetscGeom; 185552b385SBrandon 195552b385SBrandon #define PetscCallEGADS(func, args) \ 205552b385SBrandon do { \ 215552b385SBrandon int _status; \ 225552b385SBrandon PetscStackPushExternal(#func); \ 235552b385SBrandon _status = func args; \ 245552b385SBrandon PetscStackPop; \ 255552b385SBrandon PetscCheck(_status >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "Error in EGADS call %s() Status %d", #func, (int)_status); \ 265552b385SBrandon } while (0) 275552b385SBrandon 285552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGeomDataAndGrads(DM, PetscBool); 295552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexModifyGeomModel(DM, MPI_Comm, PetscScalar[], PetscScalar[], PetscBool, PetscBool, const char[]); 305552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexInflateToGeomModelUseXYZ(DM); 315552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelTUV(DM); 325552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexInflateToGeomModelUseTUV(DM); 335552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodies(DM, PetscGeom **, PetscInt *); 345552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyShells(DM, PetscGeom, PetscGeom **, PetscInt *); 355552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyFaces(DM, PetscGeom, PetscGeom **, PetscInt *); 365552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyLoops(DM, PetscGeom, PetscGeom **, PetscInt *); 375552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyEdges(DM, PetscGeom, PetscGeom **, PetscInt *); 385552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelBodyNodes(DM, PetscGeom, PetscGeom **, PetscInt *); 395552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelShellFaces(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *); 405552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelFaceLoops(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *); 415552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelFaceEdges(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *); 425552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomModelEdgeNodes(DM, PetscGeom, PetscGeom, PetscGeom **, PetscInt *); 435552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomBodyMassProperties(DM, PetscGeom, PetscScalar *, PetscScalar *, PetscScalar **, PetscInt *, PetscScalar **, PetscInt *); 445552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomBodyMassProperties(DM, PetscGeom, PetscScalar *, PetscScalar *, PetscScalar **, PetscInt *, PetscScalar **, PetscInt *); 455552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomID(DM, PetscGeom, PetscGeom, PetscInt *); 465552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomObject(DM, PetscGeom, PetscInt, PetscInt, PetscGeom *); 475552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomFaceNumOfControlPoints(DM, PetscGeom, PetscInt *); 485552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexFreeGeomObject(DM, PetscGeom *); 495552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomCntrlPntAndWeightData(DM, PetscHMapI *, PetscInt *, PetscScalar **, PetscInt *, Mat *, PetscHMapI *, PetscInt *, PetscScalar **); 505552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomCntrlPntAndWeightData(DM, PetscHMapI *, PetscInt *, PetscScalar **, PetscInt *, Mat *, PetscHMapI *, PetscInt *, PetscScalar **); 515552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomGradData(DM, PetscHMapI *, Mat *, PetscInt *, PetscScalar **, PetscScalar **, PetscInt *, PetscScalar **, PetscScalar **); 525552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexRestoreGeomGradData(DM, PetscHMapI *, Mat *, PetscInt *, PetscScalar **, PetscScalar **, PetscInt *, PetscScalar **, PetscScalar **); 535552b385SBrandon PETSC_EXTERN PetscErrorCode DMPlexGetGeomCntrlPntMaps(DM, PetscInt *, PetscInt **, PetscInt **, PetscInt **, PetscInt **, PetscInt **, PetscInt **); 54