Actual source code: petscdmnetwork.h

  1: /*
  2:   DMNetwork, for parallel unstructured network problems.
  3: */
  4: #if !defined(PETSCDMNETWORK_H)
  5: #define PETSCDMNETWORK_H

  7: #include <petscdmplex.h>
  8: #include <petscviewer.h>

 10: #define ALL_COMPONENTS -1

 12: /*
 13:   DMNetworkComponentGenericDataType - This is the data type that PETSc uses for storing the component data.
 14:             For compatibility with PetscSF, which is used for data distribution, its declared as PetscInt.
 15:             To get the user-specific data type, one needs to cast it to the appropriate type.
 16: */
 17: typedef PetscInt DMNetworkComponentGenericDataType;

 19: PETSC_EXTERN PetscErrorCode DMNetworkCreate(MPI_Comm,DM*);
 20: PETSC_EXTERN PetscErrorCode DMNetworkSetNumSubNetworks(DM,PetscInt,PetscInt);
 21: PETSC_EXTERN PetscErrorCode DMNetworkGetNumSubNetworks(DM,PetscInt*,PetscInt*);
 22: PETSC_EXTERN PetscErrorCode DMNetworkLayoutSetUp(DM);
 23: PETSC_EXTERN PetscErrorCode DMNetworkRegisterComponent(DM,const char*,size_t,PetscInt*);
 24: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexRange(DM,PetscInt*,PetscInt*);
 25: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeRange(DM,PetscInt*,PetscInt*);

 27: PETSC_EXTERN PetscErrorCode DMNetworkAddComponent(DM,PetscInt,PetscInt,void*,PetscInt);
 28: PETSC_EXTERN PetscErrorCode DMNetworkGetComponent(DM,PetscInt,PetscInt,PetscInt*,void**,PetscInt*);
 29: PETSC_EXTERN PetscErrorCode DMNetworkGetNumComponents(DM,PetscInt,PetscInt*);
 30: PETSC_EXTERN PetscErrorCode DMNetworkGetLocalVecOffset(DM,PetscInt,PetscInt,PetscInt*);
 31: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVecOffset(DM,PetscInt,PetscInt,PetscInt*);

 33: PETSC_EXTERN PetscErrorCode DMNetworkGetEdgeOffset(DM,PetscInt,PetscInt*);
 34: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexOffset(DM,PetscInt,PetscInt*);

 36: PETSC_EXTERN PetscErrorCode DMNetworkAssembleGraphStructures(DM);
 37: PETSC_EXTERN PetscErrorCode DMNetworkSetVertexLocalToGlobalOrdering(DM);
 38: PETSC_EXTERN PetscErrorCode DMNetworkGetVertexLocalToGlobalOrdering(DM,PetscInt,PetscInt*);
 39: PETSC_EXTERN PetscErrorCode PetscSFGetSubSF(PetscSF,ISLocalToGlobalMapping,PetscSF*);
 40: PETSC_EXTERN PetscErrorCode DMNetworkDistribute(DM*,PetscInt);
 41: PETSC_EXTERN PetscErrorCode DMNetworkGetSupportingEdges(DM,PetscInt,PetscInt*,const PetscInt*[]);
 42: PETSC_EXTERN PetscErrorCode DMNetworkGetConnectedVertices(DM,PetscInt,const PetscInt*[]);
 43: PETSC_EXTERN PetscErrorCode DMNetworkIsGhostVertex(DM,PetscInt,PetscBool*);
 44: PETSC_EXTERN PetscErrorCode DMNetworkIsSharedVertex(DM,PetscInt,PetscBool*);
 45: PETSC_EXTERN PetscErrorCode DMNetworkEdgeSetMatrix(DM,PetscInt,Mat[]);
 46: PETSC_EXTERN PetscErrorCode DMNetworkVertexSetMatrix(DM,PetscInt,Mat[]);
 47: PETSC_EXTERN PetscErrorCode DMNetworkHasJacobian(DM,PetscBool,PetscBool);
 48: PETSC_EXTERN PetscErrorCode DMNetworkGetPlex(DM,DM*);
 49: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalEdgeIndex(DM,PetscInt,PetscInt*);
 50: PETSC_EXTERN PetscErrorCode DMNetworkGetGlobalVertexIndex(DM,PetscInt,PetscInt*);

 52: PETSC_EXTERN PetscErrorCode DMNetworkAddSubnetwork(DM,const char*,PetscInt,PetscInt[],PetscInt*);
 53: PETSC_EXTERN PetscErrorCode DMNetworkGetSubnetwork(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**,const PetscInt**);
 54: PETSC_EXTERN PetscErrorCode DMNetworkAddSharedVertices(DM,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[]);
 55: PETSC_EXTERN PetscErrorCode DMNetworkGetSharedVertices(DM,PetscInt*,const PetscInt**);
 56: PETSC_EXTERN PetscErrorCode DMNetworkSharedVertexGetInfo(DM,PetscInt,PetscInt*,PetscInt*,const PetscInt**);
 57: PETSC_EXTERN PetscErrorCode DMNetworkCreateIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);
 58: PETSC_EXTERN PetscErrorCode DMNetworkCreateLocalIS(DM,PetscInt,PetscInt[],PetscInt[],PetscInt[],PetscInt*[],IS*);

 60: typedef struct _p_DMNetworkMonitorList *DMNetworkMonitorList;
 61: struct _p_DMNetworkMonitorList
 62: {
 63:   PetscViewer viewer;
 64:   Vec         v;
 65:   PetscInt    element;
 66:   PetscInt    nodes;
 67:   PetscInt    start;
 68:   PetscInt    blocksize;
 69:   DMNetworkMonitorList next;
 70: };

 72: typedef struct _p_DMNetworkMonitor *DMNetworkMonitor;
 73: struct _p_DMNetworkMonitor
 74: {
 75:   MPI_Comm             comm;
 76:   DM                   network;
 77:   DMNetworkMonitorList firstnode;
 78: };

 80: PETSC_EXTERN PetscErrorCode DMNetworkMonitorCreate(DM,DMNetworkMonitor*);
 81: PETSC_EXTERN PetscErrorCode DMNetworkMonitorDestroy(DMNetworkMonitor*);
 82: PETSC_EXTERN PetscErrorCode DMNetworkMonitorPop(DMNetworkMonitor);
 83: PETSC_EXTERN PetscErrorCode DMNetworkMonitorAdd(DMNetworkMonitor,const char*,PetscInt,PetscInt,PetscInt,PetscInt,PetscReal,PetscReal,PetscReal,PetscReal,PetscBool);
 84: PETSC_EXTERN PetscErrorCode DMNetworkMonitorView(DMNetworkMonitor,Vec);

 86: #endif