1 #if !defined(__PETSCDMSWARM_H) 2 #define __PETSCDMSWARM_H 3 4 #include <petscdm.h> 5 6 typedef enum { 7 DMSWARM_BASIC=0, 8 DMSWARM_PIC 9 } DMSwarmType; 10 11 typedef enum { 12 DMSWARM_MIGRATE_BASIC=0, 13 DMSWARM_MIGRATE_DMCELLNSCATTER, 14 DMSWARM_MIGRATE_DMCELLEXACT, 15 DMSWARM_MIGRATE_USER 16 } DMSwarmMigrateType; 17 18 typedef enum { 19 DMSWARM_COLLECT_BASIC=0, 20 DMSWARM_COLLECT_DMDABOUNDINGBOX, 21 DMSWARM_COLLECT_GENERAL, 22 DMSWARM_COLLECT_USER 23 } DMSwarmCollectType; 24 25 PETSC_EXTERN const char* DMSwarmTypeNames[]; 26 PETSC_EXTERN const char* DMSwarmMigrateTypeNames[]; 27 PETSC_EXTERN const char* DMSwarmCollectTypeNames[]; 28 29 PETSC_EXTERN const char DMSwarmField_pid[]; 30 PETSC_EXTERN const char DMSwarmField_rank[]; 31 PETSC_EXTERN const char DMSwarmPICField_coor[]; 32 33 34 PETSC_EXTERN PetscErrorCode DMSwarmCreateGlobalVectorFromField(DM dm,const char fieldname[],Vec *vec); 35 PETSC_EXTERN PetscErrorCode DMSwarmDestroyGlobalVectorFromField(DM dm,const char fieldname[],Vec *vec); 36 37 PETSC_EXTERN PetscErrorCode DMSwarmInitializeFieldRegister(DM dm); 38 PETSC_EXTERN PetscErrorCode DMSwarmFinalizeFieldRegister(DM dm); 39 PETSC_EXTERN PetscErrorCode DMSwarmSetLocalSizes(DM dm,PetscInt nlocal,PetscInt buffer); 40 PETSC_EXTERN PetscErrorCode DMSwarmRegisterPetscDatatypeField(DM dm,const char fieldname[],PetscInt blocksize,PetscDataType type); 41 PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserStructField(DM dm,const char fieldname[],size_t size); 42 PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserDatatypeField(DM dm,const char fieldname[],size_t size,PetscInt blocksize); 43 PETSC_EXTERN PetscErrorCode DMSwarmGetField(DM dm,const char fieldname[],PetscInt *blocksize,PetscDataType *type,void **data); 44 PETSC_EXTERN PetscErrorCode DMSwarmRestoreField(DM dm,const char fieldname[],PetscInt *blocksize,PetscDataType *type,void **data); 45 46 PETSC_EXTERN PetscErrorCode DMSwarmVectorDefineField(DM dm,const char fieldname[]); 47 48 PETSC_EXTERN PetscErrorCode DMSwarmAddPoint(DM dm); 49 PETSC_EXTERN PetscErrorCode DMSwarmAddNPoints(DM dm,PetscInt npoints); 50 PETSC_EXTERN PetscErrorCode DMSwarmRemovePoint(DM dm); 51 PETSC_EXTERN PetscErrorCode DMSwarmRemovePointAtIndex(DM dm,PetscInt idx); 52 53 PETSC_EXTERN PetscErrorCode DMSwarmGetLocalSize(DM dm,PetscInt *nlocal); 54 PETSC_EXTERN PetscErrorCode DMSwarmGetSize(DM dm,PetscInt *n); 55 PETSC_EXTERN PetscErrorCode DMSwarmMigrate(DM dm,PetscBool remove_sent_points); 56 57 PETSC_EXTERN PetscErrorCode DMSwarmCollectViewCreate(DM dm); 58 PETSC_EXTERN PetscErrorCode DMSwarmCollectViewDestroy(DM dm); 59 PETSC_EXTERN PetscErrorCode DMSwarmSetCellDM(DM dm,DM dmcell); 60 PETSC_EXTERN PetscErrorCode DMSwarmGetCellDM(DM dm,DM *dmcell); 61 62 PETSC_EXTERN PetscErrorCode DMSwarmSetType(DM dm,DMSwarmType stype); 63 64 #endif 65 66