1 
2 #if !defined(_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 
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 } DM_Swarm;
52 
53 typedef struct {
54   PetscInt point_index;
55   PetscInt cell_index;
56 } SwarmPoint;
57 
58 struct _p_DMSwarmSort {
59   PetscBool isvalid;
60   PetscInt ncells,npoints;
61   PetscInt *pcell_offsets;
62   SwarmPoint *list;
63 };
64 
65 
66 PETSC_INTERN PetscErrorCode DMSwarmMigrate_Push_Basic(DM, PetscBool);
67 PETSC_INTERN PetscErrorCode DMSwarmMigrate_CellDMScatter(DM,PetscBool);
68 PETSC_INTERN PetscErrorCode DMSwarmMigrate_CellDMExact(DM,PetscBool);
69 
70 #endif /* _SWARMIMPL_H */
71