Actual source code: dmswarmimpl.h


  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 */