1 /* "Unintrusive" multi-physics DM */ 2 #if !defined(__PETSCDMCOMPOSITE_H) 3 #define __PETSCDMCOMPOSITE_H 4 5 #include <petscdm.h> 6 7 PETSC_EXTERN PetscErrorCode DMCompositeCreate(MPI_Comm,DM*); 8 PETSC_EXTERN PetscErrorCode DMCompositeAddDM(DM,DM); 9 PETSC_EXTERN PetscErrorCode DMCompositeSetCoupling(DM,PetscErrorCode (*)(DM,Mat,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt,PetscInt)); 10 PETSC_EXTERN PetscErrorCode DMCompositeAddVecScatter(DM,VecScatter); 11 PETSC_EXTERN PetscErrorCode DMCompositeScatter(DM,Vec,...); 12 PETSC_EXTERN PetscErrorCode DMCompositeScatterArray(DM,Vec,Vec*); 13 PETSC_EXTERN PetscErrorCode DMCompositeGather(DM,InsertMode,Vec,...); 14 PETSC_EXTERN PetscErrorCode DMCompositeGatherArray(DM,InsertMode,Vec,Vec*); 15 PETSC_EXTERN PetscErrorCode DMCompositeGetNumberDM(DM,PetscInt*); 16 PETSC_EXTERN PetscErrorCode DMCompositeGetAccess(DM,Vec,...); 17 PETSC_EXTERN PetscErrorCode DMCompositeRestoreAccess(DM,Vec,...); 18 PETSC_EXTERN PetscErrorCode DMCompositeGetAccessArray(DM,Vec,PetscInt,const PetscInt*,Vec*); 19 PETSC_EXTERN PetscErrorCode DMCompositeRestoreAccessArray(DM,Vec,PetscInt,const PetscInt*,Vec*); 20 PETSC_EXTERN PetscErrorCode DMCompositeGetLocalAccessArray(DM,Vec,PetscInt,const PetscInt*,Vec*); 21 PETSC_EXTERN PetscErrorCode DMCompositeRestoreLocalAccessArray(DM,Vec,PetscInt,const PetscInt*,Vec*); 22 PETSC_EXTERN PetscErrorCode DMCompositeGetLocalVectors(DM,...); 23 PETSC_EXTERN PetscErrorCode DMCompositeGetEntries(DM,...); 24 PETSC_EXTERN PetscErrorCode DMCompositeGetEntriesArray(DM,DM[]); 25 PETSC_EXTERN PetscErrorCode DMCompositeRestoreLocalVectors(DM,...); 26 PETSC_EXTERN PetscErrorCode DMCompositeGetGlobalISs(DM,IS*[]); 27 PETSC_EXTERN PetscErrorCode DMCompositeGetLocalISs(DM,IS**); 28 PETSC_EXTERN PetscErrorCode DMCompositeGetISLocalToGlobalMappings(DM,ISLocalToGlobalMapping**); 29 30 #endif 31