xref: /petsc/include/petsc/private/dmswarmimpl.h (revision df4cd43f92eaa320656440c40edb1046daee8f75)
1 
2 #ifndef _SWARMIMPL_H
3 #define _SWARMIMPL_H
4 
5 #include <petscvec.h>     /*I "petscvec.h" I*/
6 #include <petscmat.h>     /*I      "petscmat.h"          I*/
7 #include <petscdmswarm.h> /*I      "petscdmswarm.h"    I*/
8 #include <petsc/private/dmimpl.h>
9 
10 PETSC_EXTERN PetscLogEvent DMSWARM_Migrate;
11 PETSC_EXTERN PetscLogEvent DMSWARM_SetSizes;
12 PETSC_EXTERN PetscLogEvent DMSWARM_AddPoints;
13 PETSC_EXTERN PetscLogEvent DMSWARM_RemovePoints;
14 PETSC_EXTERN PetscLogEvent DMSWARM_Sort;
15 PETSC_EXTERN PetscLogEvent DMSWARM_DataExchangerTopologySetup;
16 PETSC_EXTERN PetscLogEvent DMSWARM_DataExchangerBegin;
17 PETSC_EXTERN PetscLogEvent DMSWARM_DataExchangerEnd;
18 PETSC_EXTERN PetscLogEvent DMSWARM_DataExchangerSendCount;
19 PETSC_EXTERN PetscLogEvent DMSWARM_DataExchangerPack;
20 
21 typedef struct _p_DMSwarmDataField  *DMSwarmDataField;
22 typedef struct _p_DMSwarmDataBucket *DMSwarmDataBucket;
23 typedef struct _p_DMSwarmSort       *DMSwarmSort;
24 
25 typedef struct {
26   DMSwarmDataBucket db;
27   PetscInt          refct;
28   PetscBool         field_registration_initialized;
29   PetscBool         field_registration_finalized;
30   /* DMSwarmProjectMethod *swarm_project;*/ /* swarm, geometry, result */
31 
32   /* PetscInt overlap; */
33   /* PetscErrorCode (*update_overlap)(void); */
34 
35   char      vec_field_name[PETSC_MAX_PATH_LEN];
36   PetscBool vec_field_set;
37   PetscInt  vec_field_bs, vec_field_nlocal;
38 
39   PetscBool          issetup;
40   DMSwarmType        swarm_type;
41   DMSwarmMigrateType migrate_type;
42   DMSwarmCollectType collect_type;
43 
44   DM dmcell;
45 
46   PetscBool migrate_error_on_missing_point;
47 
48   PetscBool   collect_view_active;
49   PetscInt    collect_view_reset_nlocal;
50   DMSwarmSort sort_context;
51 
52   /* Support for PIC */
53   PetscInt Ns; /* The number of particle species */
54 
55   PetscSimplePointFunc coordFunc; /* Function to set particle coordinates */
56   PetscSimplePointFunc velFunc;   /* Function to set particle velocities */
57 } DM_Swarm;
58 
59 typedef struct {
60   PetscInt point_index;
61   PetscInt cell_index;
62 } SwarmPoint;
63 
64 struct _p_DMSwarmSort {
65   PetscBool   isvalid;
66   PetscInt    ncells, npoints;
67   PetscInt   *pcell_offsets;
68   SwarmPoint *list;
69 };
70 
71 PETSC_INTERN PetscErrorCode DMSwarmMigrate_Push_Basic(DM, PetscBool);
72 PETSC_INTERN PetscErrorCode DMSwarmMigrate_CellDMScatter(DM, PetscBool);
73 PETSC_INTERN PetscErrorCode DMSwarmMigrate_CellDMExact(DM, PetscBool);
74 
75 #endif /* _SWARMIMPL_H */
76