13d5c7219SDave May #if !defined(__PETSCDMSWARM_H) 23d5c7219SDave May #define __PETSCDMSWARM_H 33d5c7219SDave May 43d5c7219SDave May #include <petscdm.h> 53d5c7219SDave May 6480eef7bSDave May typedef enum { 7480eef7bSDave May DMSWARM_BASIC=0, 8480eef7bSDave May DMSWARM_PIC 9480eef7bSDave May } DMSwarmType; 10480eef7bSDave May 11480eef7bSDave May typedef enum { 12480eef7bSDave May DMSWARM_MIGRATE_BASIC=0, 13*853ec3c6SDave May DMSWARM_MIGRATE_DMCELLNSCATTER, 14*853ec3c6SDave May DMSWARM_MIGRATE_DMCELLEXACT, 15*853ec3c6SDave May DMSWARM_MIGRATE_USER 16480eef7bSDave May } DMSwarmMigrateType; 17480eef7bSDave May 18480eef7bSDave May typedef enum { 19480eef7bSDave May DMSWARM_COLLECT_BASIC=0, 20480eef7bSDave May DMSWARM_COLLECT_DMDABOUNDINGBOX, 21*853ec3c6SDave May DMSWARM_COLLECT_GENERAL, 22*853ec3c6SDave May DMSWARM_COLLECT_USER 23480eef7bSDave May } DMSwarmCollectType; 24480eef7bSDave May 25*853ec3c6SDave May PETSC_EXTERN const char* DMSwarmTypeNames[]; 26*853ec3c6SDave May PETSC_EXTERN const char* DMSwarmMigrateTypeNames[]; 27*853ec3c6SDave May PETSC_EXTERN const char* DMSwarmCollectTypeNames[]; 28*853ec3c6SDave May 29*853ec3c6SDave May PETSC_EXTERN const char DMSwarmField_pid[]; 30*853ec3c6SDave May PETSC_EXTERN const char DMSwarmField_rank[]; 31*853ec3c6SDave May PETSC_EXTERN const char DMSwarmPICField_coor[]; 32*853ec3c6SDave May 33*853ec3c6SDave May 34b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmCreateGlobalVectorFromField(DM dm,const char fieldname[],Vec *vec); 35b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmDestroyGlobalVectorFromField(DM dm,const char fieldname[],Vec *vec); 36b5bcf523SDave May 37b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmInitializeFieldRegister(DM dm); 38b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmFinalizeFieldRegister(DM dm); 39b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmSetLocalSizes(DM dm,PetscInt nlocal,PetscInt buffer); 40b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmRegisterPetscDatatypeField(DM dm,const char fieldname[],PetscInt blocksize,PetscDataType type); 41b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserStructField(DM dm,const char fieldname[],size_t size); 42320740a0SDave May PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserDatatypeField(DM dm,const char fieldname[],size_t size,PetscInt blocksize); 43b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmGetField(DM dm,const char fieldname[],PetscInt *blocksize,PetscDataType *type,void **data); 44b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmRestoreField(DM dm,const char fieldname[],PetscInt *blocksize,PetscDataType *type,void **data); 45b5bcf523SDave May 46b5bcf523SDave May PETSC_EXTERN PetscErrorCode DMSwarmVectorDefineField(DM dm,const char fieldname[]); 473d5c7219SDave May 48cb1d1399SDave May PETSC_EXTERN PetscErrorCode DMSwarmAddPoint(DM dm); 49cb1d1399SDave May PETSC_EXTERN PetscErrorCode DMSwarmAddNPoints(DM dm,PetscInt npoints); 50cb1d1399SDave May PETSC_EXTERN PetscErrorCode DMSwarmRemovePoint(DM dm); 51cb1d1399SDave May PETSC_EXTERN PetscErrorCode DMSwarmRemovePointAtIndex(DM dm,PetscInt idx); 52cb1d1399SDave May 53dcf43ee8SDave May PETSC_EXTERN PetscErrorCode DMSwarmGetLocalSize(DM dm,PetscInt *nlocal); 54dcf43ee8SDave May PETSC_EXTERN PetscErrorCode DMSwarmGetSize(DM dm,PetscInt *n); 55dcf43ee8SDave May PETSC_EXTERN PetscErrorCode DMSwarmMigrate(DM dm,PetscBool remove_sent_points); 56dcf43ee8SDave May 57fe39f135SDave May PETSC_EXTERN PetscErrorCode DMSwarmCollectViewCreate(DM dm); 58fe39f135SDave May PETSC_EXTERN PetscErrorCode DMSwarmCollectViewDestroy(DM dm); 59b16650c8SDave May PETSC_EXTERN PetscErrorCode DMSwarmSetCellDM(DM dm,DM dmcell); 60fe39f135SDave May PETSC_EXTERN PetscErrorCode DMSwarmGetCellDM(DM dm,DM *dmcell); 612712d1f2SDave May 62*853ec3c6SDave May PETSC_EXTERN PetscErrorCode DMSwarmSetType(DM dm,DMSwarmType stype); 63*853ec3c6SDave May 643d5c7219SDave May #endif 653d5c7219SDave May 66