45#ifndef LM_RDME_MPDRDMESOLVER_H_
46#define LM_RDME_MPDRDMESOLVER_H_
52#define OVERFLOW_MODE_CLASSIC 0
53#define OVERFLOW_MODE_RELAXED 1
86 const uint numberReactionsA,
87 const uint* initialSpeciesCountsA,
88 const uint* reactionTypeA,
92 const uint kCols = 1);
101 const unsigned int bytes_per_particle,
103 const uint8_t* latticeData,
104 const uint8_t* latticeSitesData,
105 bool rowMajorData =
true);
126#ifdef MPD_GLOBAL_S_MATRIX
131#ifdef MPD_GLOBAL_T_MATRIX
135#ifdef MPD_GLOBAL_R_MATRIX
136 float* reactionRatesG;
137 unsigned int* reactionOrdersG;
138 unsigned int* reactionSitesG;
156 const unsigned int bytes_per_particle,
161 lm::io::Lattice* latticeDataSet);
166 lm::io::SpeciesCounts* speciesCountsDataSet);
178#ifdef MPD_CUDA_3D_GRID_LAUNCH
180 const unsigned int maxXBlockSize,
181 const unsigned int latticeXSize,
182 const unsigned int latticeYSize,
183 const unsigned int latticeZSize);
186 const unsigned int blockXSize,
187 const unsigned int blockYSize,
188 const unsigned int latticeXSize,
189 const unsigned int latticeYSize,
190 const unsigned int latticeZSize);
193 const unsigned int blockXSize,
194 const unsigned int blockZSize,
195 const unsigned int latticeXSize,
196 const unsigned int latticeYSize,
197 const unsigned int latticeZSize);
200 const unsigned int blockXSize,
201 const unsigned int blockYSize,
202 const unsigned int latticeXSize,
203 const unsigned int latticeYSize,
204 const unsigned int latticeZSize);
207 dim3* gridSize, dim3* threadBlockSize,
208 const unsigned int maxXBlockSize,
209 const unsigned int latticeXSize,
210 const unsigned int latticeYSize,
211 const unsigned int latticeZSize);
214 dim3* gridSize, dim3* threadBlockSize,
215 const unsigned int blockXSize,
216 const unsigned int blockYSize,
217 const unsigned int latticeXSize,
218 const unsigned int latticeYSize,
219 const unsigned int latticeZSize);
222 dim3* gridSize, dim3* threadBlockSize,
223 const unsigned int blockXSize,
224 const unsigned int blockZSize,
225 const unsigned int latticeXSize,
226 const unsigned int latticeYSize,
227 const unsigned int latticeZSize);
230 dim3* gridSize, dim3* threadBlockSize,
231 const unsigned int blockXSize,
232 const unsigned int blockYSize,
233 const unsigned int latticeXSize,
234 const unsigned int latticeYSize,
235 const unsigned int latticeZSize);
244 #ifdef MPD_GLOBAL_R_MATRIX
245 __global__
void precomp_reaction_kernel(
const unsigned int* inLattice,
246 const uint8_t* inSites,
247 unsigned int* outLattice,
248 const unsigned long long timestepHash,
249 unsigned int* siteOverflowList,
250 const __restrict__ int8_t* SG,
251 const __restrict__ uint8_t* RLG,
252 const unsigned int* __restrict__ reactionOrdersG,
253 const unsigned int* __restrict__ reactionSitesG,
254 const unsigned int* __restrict__ D1G,
255 const unsigned int* __restrict__ D2G,
256 const float* reactionRatesG,
257 const float* __restrict__ qp0,
258 const float* __restrict__ qp1,
259 const float* __restrict__ qp2);
261 __global__
void precomp_reaction_kernel(
const unsigned int* inLattice,
262 const uint8_t* inSites,
263 unsigned int* outLattice,
264 const unsigned long long timestepHash,
265 unsigned int* siteOverflowList,
266 const __restrict__ int8_t* SG,
267 const __restrict__ uint8_t* RLG,
268 const float* __restrict__ qp0,
269 const float* __restrict__ qp1,
270 const float* __restrict__ qp2);
274#ifdef MPD_CUDA_3D_GRID_LAUNCH
275 __global__
void mpd_x_kernel(
const unsigned int* inLattice,
276 const uint8_t* inSites,
277 unsigned int* outLattice,
278 const unsigned long long timestepHash,
279 unsigned int* siteOverflowList);
281 __global__
void mpd_y_kernel(
const unsigned int* inLattice,
282 const uint8_t* inSites,
283 unsigned int* outLattice,
284 const unsigned long long timestepHash,
285 unsigned int* siteOverflowList);
287 __global__
void mpd_z_kernel(
const unsigned int* inLattice,
288 const uint8_t* inSites,
289 unsigned int* outLattice,
290 const unsigned long long timestepHash,
291 unsigned int* siteOverflowList);
293 #ifdef MPD_GLOBAL_S_MATRIX
294 #ifdef MPD_GLOBAL_R_MATRIX
296 const uint8_t* inSites,
297 unsigned int* outLattice,
298 const unsigned long long timestepHash,
299 unsigned int* siteOverflowList,
300 const int8_t* __restrict__ SG,
301 const uint8_t* __restrict__ RLG,
302 const unsigned int* __restrict__ reactionOrdersG,
303 const unsigned int* __restrict__ reactionSitesG,
304 const unsigned int* __restrict__ D1G,
305 const unsigned int* __restrict__ D2G,
306 const float* __restrict__ reactionRatesG);
309 const uint8_t* inSites,
310 unsigned int* outLattice,
311 const unsigned long long timestepHash,
312 unsigned int* siteOverflowList,
313 const int8_t* __restrict__ SG,
314 const uint8_t* __restrict__ RLG);
318 const uint8_t* inSites,
319 unsigned int* outLattice,
320 const unsigned long long timestepHash,
321 unsigned int* siteOverflowList);
325 const uint8_t* inSites,
326 unsigned int* outLattice,
327 const unsigned int gridXSize,
328 const unsigned long long timestepHash,
329 unsigned int* siteOverflowList);
332 const uint8_t* inSites,
333 unsigned int* outLattice,
334 const unsigned int gridXSize,
335 const unsigned long long timestepHash,
336 unsigned int* siteOverflowList);
339 const uint8_t* inSites,
340 unsigned int* outLattice,
341 const unsigned int gridXSize,
342 const unsigned long long timestepHash,
343 unsigned int* siteOverflowList);
345 #ifdef MPD_GLOBAL_S_MATRIX
346 #ifdef MPD_GLOBAL_R_MATRIX
348 const uint8_t* inSites,
349 unsigned int* outLattice,
350 const unsigned int gridXSize,
351 const unsigned long long timestepHash,
352 unsigned int* siteOverflowList,
353 const int8_t* __restrict__ SG,
354 const uint8_t* __restrict__ RLG,
355 const unsigned int* __restrict__ reactionOrdersG,
356 const unsigned int* __restrict__ reactionSitesG,
357 const unsigned int* __restrict__ D1G,
358 const unsigned int* __restrict__ D2G,
359 const float* __restrict__ reactionRatesG);
362 const uint8_t* inSites,
363 unsigned int* outLattice,
364 const unsigned int gridXSize,
365 const unsigned long long timestepHash,
366 unsigned int* siteOverflowList,
367 const int8_t* __restrict__ SG,
368 const uint8_t* __restrict__ RLG);
372 const uint8_t* inSites,
373 unsigned int* outLattice,
374 const unsigned int gridXSize,
375 const unsigned long long timestepHash,
376 unsigned int* siteOverflowList);
381__global__
void correct_overflowsEV(
unsigned int* inLattice,
const float* evData,
unsigned int* siteOverflowList);
382__global__
void sanity_check(
const unsigned int* L1,
const unsigned int* L2);
uint32_t site_size_t
Definition ByteLatticeExtended.h:23
uint32_t lattice_size_t
Definition Lattice.h:55
double si_dist_t
Definition Types.h:63
unsigned int uint
Definition Types.h:52
virtual int onEndTrajectory()
Definition CMESolver.cpp:1256
virtual int hookSimulation(double time)
Definition CMESolver.cpp:1242
virtual int onBeginTrajectory()
Definition CMESolver.cpp:1251
A representation for the resources for a given node.
Definition ResourceAllocator.h:62
map< string, string > * parameters
Definition CMESolver.h:266
ResourceAllocator::ComputeResources * resources
Definition CMESolver.h:267
unsigned int replicate
Definition CMESolver.h:265
Definition CudaByteLattice.h:54
Base class for lattice type objects.
Definition Lattice.h:132
size_t firstOrderSize
Definition MpdRdmeSolver.h:123
virtual void writeSpeciesCounts(lm::io::SpeciesCounts *speciesCountsDataSet)
double tau
Definition MpdRdmeSolver.h:112
uint32_t overflowListUses
Definition MpdRdmeSolver.h:119
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)
virtual void generateTrajectory()
Actually run the simulation.
virtual void initialize(unsigned int replicate, map< string, string > *parameters, ResourceAllocator::ComputeResources *resources)
Initialize the simulation.
float * secondOrder
Definition MpdRdmeSolver.h:124
virtual void copyModelsToDevice()
virtual bool needsDiffusionModel()
Tells whether the solver needs a reaction model.
Definition MpdRdmeSolver.h:83
float * firstOrder
Definition MpdRdmeSolver.h:124
virtual int onWriteLattice(double time, CudaByteLattice *lattice)
int overflow_handling
Definition MpdRdmeSolver.h:120
virtual void hookCheckSimulation(double time, CudaByteLattice *lattice)
float * zeroOrder
Definition MpdRdmeSolver.h:124
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 int onEndTrajectory(CudaByteLattice *lattice)
virtual void recordSpeciesCounts(double time, CudaByteLattice *lattice, lm::io::SpeciesCounts *speciesCountsDataSet)
uint32_t seed
Definition MpdRdmeSolver.h:111
virtual int onBeginTrajectory(CudaByteLattice *lattice)
float * model_reactionRates
Definition MpdRdmeSolver.h:122
virtual void calculateZLaunchParameters(unsigned int *gridXSize, dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockZSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
size_t secondOrderSize
Definition MpdRdmeSolver.h:123
float * propFirstOrder
Definition MpdRdmeSolver.h:145
virtual int hookSimulation(double time, CudaByteLattice *lattice)
uint32_t overflowTimesteps
Definition MpdRdmeSolver.h:118
cudaStream_t cudaStream
Definition MpdRdmeSolver.h:116
virtual void calculateXLaunchParameters(unsigned int *gridXSize, dim3 *gridSize, dim3 *threadBlockSize, const unsigned int maxXBlockSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
bool reactionModelModified
Definition MpdRdmeSolver.h:113
size_t zeroOrderSize
Definition MpdRdmeSolver.h:123
virtual void runTimestep(CudaByteLattice *lattice, uint32_t timestep)
float * propZeroOrder
Definition MpdRdmeSolver.h:144
virtual void setReactionRate(unsigned int rxid, float rate)
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 void writeLatticeSites(double time, CudaByteLattice *lattice)
float * propSecondOrder
Definition MpdRdmeSolver.h:146
void * cudaOverflowList
Definition MpdRdmeSolver.h:115
virtual void calculateYLaunchParameters(unsigned int *gridXSize, dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockYSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
virtual void writeLatticeData(double time, CudaByteLattice *lattice, lm::io::Lattice *latticeDataSet)
virtual void computePropensities()
virtual uint64_t getTimestepSeed(uint32_t timestep, uint32_t substep)
virtual void calculateReactionLaunchParameters(unsigned int *gridXSize, dim3 *gridSize, dim3 *threadBlockSize, const unsigned int blockXSize, const unsigned int blockYSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
virtual bool needsReactionModel()
Tells whether the solver needs a reaction model.
Definition MpdRdmeSolver.h:82
Definition RDMESolver.h:55
Lattice * lattice
Definition RDMESolver.h:73
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)
Definition RDMESolver.cpp:110
RDMESolver(RandomGenerator::Distributions neededDists)
Definition RDMESolver.cpp:58
Definition MpdRdmeSolver.h:241
__global__ void reaction_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned int gridXSize, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void sanity_check(const unsigned int *L1, const unsigned int *L2)
__global__ void mpd_y_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned int gridXSize, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void mpd_x_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned int gridXSize, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void correct_overflowsEV(unsigned int *inLattice, const float *evData, unsigned int *siteOverflowList)
__global__ void mpd_z_kernel(const unsigned int *inLattice, const uint8_t *inSites, unsigned int *outLattice, const unsigned int gridXSize, const unsigned long long timestepHash, unsigned int *siteOverflowList)
__global__ void correct_overflows(unsigned int *inLattice, unsigned int *siteOverflowList)
Definition Capsule.cpp:46