xref: /petsc/include/petscdmswarm.h (revision 94f7d2dc2cd9280e3d3b4516abfcb703cfdf61a5)
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