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