2: #ifndef _SWARMIMPL_H 3: #define _SWARMIMPL_H 5: #include <petscvec.h> 6: #include <petscmat.h> 7: #include <petscdmswarm.h> 8: #include <petsc/private/dmimpl.h> 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; 21: typedef struct _p_DMSwarmDataField *DMSwarmDataField; 22: typedef struct _p_DMSwarmDataBucket *DMSwarmDataBucket; 23: typedef struct _p_DMSwarmSort *DMSwarmSort; 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 */ 32: /* PetscInt overlap; */ 33: /* PetscErrorCode (*update_overlap)(void); */ 35: char vec_field_name[PETSC_MAX_PATH_LEN]; 36: PetscBool vec_field_set; 37: PetscInt vec_field_bs, vec_field_nlocal; 39: PetscBool issetup; 40: DMSwarmType swarm_type; 41: DMSwarmMigrateType migrate_type; 42: DMSwarmCollectType collect_type; 44: DM dmcell; 46: PetscBool migrate_error_on_missing_point; 48: PetscBool collect_view_active; 49: PetscInt collect_view_reset_nlocal; 50: DMSwarmSort sort_context; 52: /* Support for PIC */ 53: PetscInt Ns; /* The number of particle species */ 55: PetscSimplePointFunc coordFunc; /* Function to set particle coordinates */ 56: PetscSimplePointFunc velFunc; /* Function to set particle velocities */ 57: } DM_Swarm; 59: typedef struct { 60: PetscInt point_index; 61: PetscInt cell_index; 62: } SwarmPoint; 64: struct _p_DMSwarmSort { 65: PetscBool isvalid; 66: PetscInt ncells, npoints; 67: PetscInt *pcell_offsets; 68: SwarmPoint *list; 69: }; 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); 75: #endif /* _SWARMIMPL_H */