45#ifndef LM_RDME_MPIMPDRDMESOLVER_H_ 
   46#define LM_RDME_MPIMPDRDMESOLVER_H_ 
   80    virtual void buildModel(
const uint numberSpeciesA, 
const uint numberReactionsA, 
const uint * initialSpeciesCountsA, 
const uint * reactionTypeA, 
const double * kA, 
const int * SA, 
const uint * DA, 
const uint kCols=1);
 
   81    virtual void buildDiffusionModel(
const uint numberSiteTypesA, 
const double * DFA, 
const uint * RLA, 
lattice_size_t latticeXSize, 
lattice_size_t latticeYSize, 
lattice_size_t latticeZSize, 
site_size_t particlesPerSite, 
const unsigned int bytes_per_particle, 
si_dist_t latticeSpacing, 
const uint8_t * latticeData, 
const uint8_t * latticeSitesData, 
bool rowMajorData=
true);
 
   97    virtual void calculateXLaunchParameters(dim3 * gridSize, dim3 * threadBlockSize, 
const unsigned int maxXBlockSize, 
const unsigned int latticeXSize, 
const unsigned int latticeYSize, 
const unsigned int latticeZSize);
 
   98    virtual void calculateYLaunchParameters(dim3 * gridSize, dim3 * threadBlockSize, 
const unsigned int blockXSize, 
const unsigned int blockYSize, 
const unsigned int latticeXSize, 
const unsigned int latticeYSize, 
const unsigned int latticeZSize);
 
   99    virtual void calculateZLaunchParameters(dim3 * gridSize, dim3 * threadBlockSize, 
const unsigned int blockXSize, 
const unsigned int blockZSize, 
const unsigned int latticeXSize, 
const unsigned int latticeYSize, 
const unsigned int latticeZSize);
 
  100    virtual void calculateReactionLaunchParameters(dim3 * gridSize, dim3 * threadBlockSize, 
const unsigned int blockXSize, 
const unsigned int blockYSize, 
const unsigned int latticeXSize, 
const unsigned int latticeYSize, 
const unsigned int latticeZSize);
 
  121#ifdef MPD_GLOBAL_S_MATRIX 
  126#ifdef MPD_GLOBAL_T_MATRIX 
 
  155__device__ 
inline size_t local_to_global(
unsigned int x, 
unsigned int y, 
unsigned int z);
 
  156__device__ 
inline size_t local_index(
unsigned int x, 
unsigned int y, 
unsigned int z);
 
  157__global__ 
void MPI_x_kernel(
const unsigned int* inLattice, 
const uint8_t * inSites, 
unsigned int* outLattice, 
const unsigned int z_start, 
const unsigned long long timestepHash, 
unsigned int* siteOverflowList);
 
  158__global__ 
void MPI_y_kernel(
const unsigned int* inLattice, 
const uint8_t * inSites, 
unsigned int* outLattice, 
const unsigned long long timestepHash, 
unsigned int* siteOverflowList);
 
  159__global__ 
void MPI_z_kernel(
const unsigned int* inLattice, 
const uint8_t * inSites, 
unsigned int* outLattice, 
const unsigned long long timestepHash, 
unsigned int* siteOverflowList, 
const unsigned int z_start);
 
  160#ifdef MPD_GLOBAL_S_MATRIX 
  161__global__ 
void MPI_reaction_kernel(
const unsigned int* inLattice, 
const uint8_t * inSites, 
unsigned int* outLattice, 
const unsigned long long timestepHash, 
unsigned int* siteOverflowList, 
const unsigned int z_start,   
const __restrict__ int8_t *SG, 
const __restrict__ uint8_t *RLG);
 
  163__global__ 
void MPI_reaction_kernel(
const unsigned int* inLattice, 
const uint8_t * inSites, 
unsigned int* outLattice, 
const unsigned long long timestepHash, 
unsigned int* siteOverflowList, 
const unsigned int z_start);
 
uint32_t site_size_t
Definition ByteLatticeExtended.h:23
uint32_t lattice_size_t
Definition Lattice.h:55
struct segmentDescriptor SegmentDescriptor_s
Definition SegmentDescriptor.h:57
double si_dist_t
Definition Types.h:63
unsigned int uint
Definition Types.h:52
A representation for the resources for a given node.
Definition ResourceAllocator.h:62
Definition ZDivMPIGPUMapper.h:59
map< string, string > * parameters
Definition CMESolver.h:266
unsigned int replicate
Definition CMESolver.h:265
An object that tracks the available resources for the main simulation runner.
Definition ResourceAllocator.h:57
A Lattice that is based on packed bytes of memory, i.e. one byte per lattice site to hold particles.
Definition ByteLattice.h:53
Base class for lattice type objects.
Definition Lattice.h:132
uint32_t seed
Definition MPIMpdRdmeSolver.h:103
virtual void calculateReactionLaunchParameters(dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockYSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
uint32_t absolute_timestep
Definition MPIMpdRdmeSolver.h:134
virtual void initialize(unsigned int replicate, map< string, string > *parameters, ResourceAllocator::ComputeResources *resources)
Initialize the simulation.
virtual void allocateLattice(lattice_size_t latticeXSize, lattice_size_t latticeYSize, lattice_size_t latticeZSize, site_size_t particlesPerSite, const unsigned int bytes_per_particle, si_dist_t latticeSpacing)
virtual bool needsDiffusionModel()
Tells whether the solver needs a reaction model.
Definition MPIMpdRdmeSolver.h:79
virtual void prepare_gpu()
cudaEvent_t x_finish
Definition MPIMpdRdmeSolver.h:144
uint32_t overflowTimesteps
Definition MPIMpdRdmeSolver.h:106
int ngpus
Definition MPIMpdRdmeSolver.h:137
virtual ~MPIMpdRdmeSolver()
virtual void recordSpeciesCounts(double time, ByteLattice *lattice, lm::io::SpeciesCounts *speciesCountsDataSet)
virtual void buildDiffusionModel(const uint numberSiteTypesA, const double *DFA, const uint *RLA, lattice_size_t latticeXSize, lattice_size_t latticeYSize, lattice_size_t latticeZSize, site_size_t particlesPerSite, const unsigned int bytes_per_particle, si_dist_t latticeSpacing, const uint8_t *latticeData, const uint8_t *latticeSitesData, bool rowMajorData=true)
unsigned int * h_overflows
Definition MPIMpdRdmeSolver.h:145
cudaEvent_t rx_finish
Definition MPIMpdRdmeSolver.h:144
virtual void buildModel(const uint numberSpeciesA, const uint numberReactionsA, const uint *initialSpeciesCountsA, const uint *reactionTypeA, const double *kA, const int *SA, const uint *DA, const uint kCols=1)
virtual void writeLatticeData(double time, ByteLattice *lattice, lm::io::Lattice *latticeDataSet)
double tau
Definition MPIMpdRdmeSolver.h:105
dim3 threads_z
Definition MPIMpdRdmeSolver.h:149
dim3 grid_r
Definition MPIMpdRdmeSolver.h:148
virtual void initialize_decomposition()
int gpu
Definition MPIMpdRdmeSolver.h:136
uint8_t * dSites
Definition MPIMpdRdmeSolver.h:142
cudaStream_t stream1
Definition MPIMpdRdmeSolver.h:143
dim3 grid_y
Definition MPIMpdRdmeSolver.h:148
virtual void copyModelsToDevice()
virtual void calculateXLaunchParameters(dim3 *gridSize, dim3 *threadBlockSize, const unsigned int maxXBlockSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
int8_t * model_S
Definition MPIMpdRdmeSolver.h:114
virtual bool needsReactionModel()
Tells whether the solver needs a reaction model.
Definition MPIMpdRdmeSolver.h:78
dim3 grid_x
Definition MPIMpdRdmeSolver.h:148
dim3 threads_x
Definition MPIMpdRdmeSolver.h:149
unsigned int * model_reactionOrders
Definition MPIMpdRdmeSolver.h:110
virtual void calculateZLaunchParameters(dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockZSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
unsigned int * model_D1
Definition MPIMpdRdmeSolver.h:112
int timesteps_to_run
Definition MPIMpdRdmeSolver.h:133
unsigned int * model_reactionSites
Definition MPIMpdRdmeSolver.h:111
dim3 grid_z
Definition MPIMpdRdmeSolver.h:148
unsigned int * model_D2
Definition MPIMpdRdmeSolver.h:113
float * model_reactionRates
Definition MPIMpdRdmeSolver.h:117
uint8_t * model_RL
Definition MPIMpdRdmeSolver.h:116
virtual uint64_t getTimestepSeed(uint32_t timestep, uint32_t substep)
cudaEvent_t diffusion_finished
Definition MPIMpdRdmeSolver.h:144
dim3 threads_y
Definition MPIMpdRdmeSolver.h:149
ResourceAllocator::ComputeResources * resources
Definition MPIMpdRdmeSolver.h:131
ZDivMPIGPUMapper * mapper
Definition MPIMpdRdmeSolver.h:130
bool lattice_synched
Definition MPIMpdRdmeSolver.h:138
void * cudaOverflowList
Definition MPIMpdRdmeSolver.h:104
uint32_t overflowListUses
Definition MPIMpdRdmeSolver.h:107
float * model_T
Definition MPIMpdRdmeSolver.h:115
unsigned int * d_overflows
Definition MPIMpdRdmeSolver.h:145
virtual void writeSpeciesCounts(lm::io::SpeciesCounts *speciesCountsDataSet)
cudaStream_t stream2
Definition MPIMpdRdmeSolver.h:143
virtual void calculateYLaunchParameters(dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockYSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
unsigned int * dLattice
Definition MPIMpdRdmeSolver.h:141
virtual int run_next_timestep(uint32_t timestep)
int rank
Definition MPIMpdRdmeSolver.h:119
SegmentDescriptor_s * segment
Definition MPIMpdRdmeSolver.h:152
virtual void generateTrajectory()
Actually run the simulation.
dim3 threads_r
Definition MPIMpdRdmeSolver.h:149
int world_size
Definition MPIMpdRdmeSolver.h:119
unsigned int * dLatticeTmp
Definition MPIMpdRdmeSolver.h:141
Definition RDMESolver.h:55
Lattice * lattice
Definition RDMESolver.h:73
RDMESolver(RandomGenerator::Distributions neededDists)
Definition RDMESolver.cpp:58
Definition LatticeBuilder.h:56
Definition LatticeBuilder.h:60
__global__ void mpi_correct_overflows(unsigned int *inLattice, unsigned int *siteOverflowList)
__global__ void MPI_y_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void MPI_x_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned int z_start, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void MPI_reaction_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned long long timestepHash, unsigned int *siteOverflowList, const unsigned int z_start)
__device__ size_t local_index(unsigned int x, unsigned int y, unsigned int z)
__global__ void MPI_z_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned long long timestepHash, unsigned int *siteOverflowList, const unsigned int z_start)
__device__ size_t local_to_global(unsigned int x, unsigned int y, unsigned int z)
Definition Capsule.cpp:46