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