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, 13853ec3c6SDave May DMSWARM_MIGRATE_DMCELLNSCATTER, 14853ec3c6SDave May DMSWARM_MIGRATE_DMCELLEXACT, 15853ec3c6SDave May DMSWARM_MIGRATE_USER 16480eef7bSDave May } DMSwarmMigrateType; 17480eef7bSDave May 18480eef7bSDave May typedef enum { 19480eef7bSDave May DMSWARM_COLLECT_BASIC=0, 20480eef7bSDave May DMSWARM_COLLECT_DMDABOUNDINGBOX, 21853ec3c6SDave May DMSWARM_COLLECT_GENERAL, 22853ec3c6SDave May DMSWARM_COLLECT_USER 23480eef7bSDave May } DMSwarmCollectType; 24480eef7bSDave May 250e2ec84fSDave May /*J 260e2ec84fSDave May DMSwarmPICLayoutType - Defines the method used to define particle coordinates within each cell. The layouts are constructured using the reference cell geometry 270e2ec84fSDave May 280e2ec84fSDave May DMSWARMPIC_LAYOUT_REGULAR defines points on a regular ijk mesh. 290e2ec84fSDave May When using DMSWARMPIC_LAYOUT_REGULAR, the fill_param defines the number of points in each spatial direction. 300e2ec84fSDave May 310e2ec84fSDave May DMSWARMPIC_LAYOUT_GAUSS defines points using an npoint Gauss-Legendre tensor product quadrature rule. 320e2ec84fSDave May When using DMSWARMPIC_LAYOUT_GAUSS, the fill_param defines the number of quadrature points in each spatial direction. 330e2ec84fSDave May 340e2ec84fSDave May DMSWARMPIC_LAYOUT_SUBDIVISION defines points on the centroid of a sub-divided reference cell. 350e2ec84fSDave May When using DMSWARMPIC_LAYOUT_SUBDIVISION, the fill_param defines the number times the reference cell is sub-divided. 360e2ec84fSDave May 370e2ec84fSDave May Level: beginner 380e2ec84fSDave May 390e2ec84fSDave May .seealso DMSwarmInsertPointsUsingCellDM() 400e2ec84fSDave May J*/ 41e2d107dbSDave May typedef enum { 42e2d107dbSDave May DMSWARMPIC_LAYOUT_REGULAR=0, 43e2d107dbSDave May DMSWARMPIC_LAYOUT_GAUSS, 44e2d107dbSDave May DMSWARMPIC_LAYOUT_SUBDIVISION, 45e2d107dbSDave May } DMSwarmPICLayoutType; 46e2d107dbSDave May 47853ec3c6SDave May PETSC_EXTERN const char* DMSwarmTypeNames[]; 48853ec3c6SDave May PETSC_EXTERN const char* DMSwarmMigrateTypeNames[]; 49853ec3c6SDave May PETSC_EXTERN const char* DMSwarmCollectTypeNames[]; 50853ec3c6SDave May 51853ec3c6SDave May PETSC_EXTERN const char DMSwarmField_pid[]; 52853ec3c6SDave May PETSC_EXTERN const char DMSwarmField_rank[]; 53853ec3c6SDave May PETSC_EXTERN const char DMSwarmPICField_coor[]; 54e2d107dbSDave May PETSC_EXTERN const char DMSwarmPICField_cellid[]; 55853ec3c6SDave May 56934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmCreateGlobalVectorFromField(DM,const char[],Vec*); 57934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmDestroyGlobalVectorFromField(DM,const char[],Vec*); 58fb1bcc12SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmCreateLocalVectorFromField(DM,const char[],Vec*); 59fb1bcc12SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmDestroyLocalVectorFromField(DM,const char[],Vec*); 60853ec3c6SDave May 61934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmInitializeFieldRegister(DM); 62934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmFinalizeFieldRegister(DM); 63934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmSetLocalSizes(DM,PetscInt,PetscInt); 64934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRegisterPetscDatatypeField(DM,const char[],PetscInt,PetscDataType); 65934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserStructField(DM,const char[],size_t); 66934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRegisterUserDatatypeField(DM,const char[],size_t,PetscInt); 67934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmGetField(DM,const char[],PetscInt*,PetscDataType*,void**); 68934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRestoreField(DM,const char[],PetscInt*,PetscDataType*,void**); 69934315b8SMatthew G. Knepley 70934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmVectorDefineField(DM,const char[]); 71934315b8SMatthew G. Knepley 72934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmAddPoint(DM); 73934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmAddNPoints(DM,PetscInt); 74934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRemovePoint(DM); 75934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmRemovePointAtIndex(DM,PetscInt); 76934315b8SMatthew G. Knepley 77934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmGetLocalSize(DM,PetscInt*); 78934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmGetSize(DM,PetscInt*); 79934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmMigrate(DM,PetscBool); 80934315b8SMatthew G. Knepley 81934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmCollectViewCreate(DM); 82934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmCollectViewDestroy(DM); 83934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmSetCellDM(DM,DM); 84934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmGetCellDM(DM,DM*); 85934315b8SMatthew G. Knepley 86934315b8SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMSwarmSetType(DM,DMSwarmType); 87934315b8SMatthew G. Knepley 880e2ec84fSDave May PETSC_EXTERN PetscErrorCode DMSwarmSetPointsUniformCoordinates(DM,PetscReal*,PetscReal*,PetscInt*,InsertMode); 89*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSetPointCoordinates(DM,PetscInt,PetscReal*,PetscBool,InsertMode); 900e2ec84fSDave May PETSC_EXTERN PetscErrorCode DMSwarmInsertPointsUsingCellDM(DM,DMSwarmPICLayoutType,PetscInt); 910e2ec84fSDave May PETSC_EXTERN PetscErrorCode DMSwarmViewFieldsXDMF(DM,const char*,PetscInt,const char**); 92*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmViewXDMF(DM,const char*); 930e2ec84fSDave May 94*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortGetAccess(DM); 95*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortRestoreAccess(DM); 96*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortGetPointsPerCell(DM,PetscInt,PetscInt*,PetscInt**); 97*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortGetNumberOfPointsPerCell(DM,PetscInt,PetscInt*); 98*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortGetIsValid(DM,PetscBool*); 99*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmSortGetSizes(DM,PetscInt*,PetscInt*); 100*94f7d2dcSDave May 101*94f7d2dcSDave May PETSC_EXTERN PetscErrorCode DMSwarmProjectFields(DM,PetscInt,const char**,Vec**,PetscBool); 102dc5f5ce9SDave May 1033d5c7219SDave May #endif 1043d5c7219SDave May 105