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