45#ifndef LM_RDME_INTMPDRDMESOLVER_H_
46#define LM_RDME_INTMPDRDMESOLVER_H_
81 const uint numberReactionsA,
82 const uint* initialSpeciesCountsA,
83 const uint* reactionTypeA,
87 const uint kCols = 1);
96 const unsigned int bytes_per_particle,
98 const uint8_t* latticeData,
99 const uint8_t* latticeSitesData,
100 bool rowMajorData =
true);
120#ifdef MPD_GLOBAL_S_MATRIX
125#ifdef MPD_GLOBAL_T_MATRIX
129#ifdef MPD_GLOBAL_R_MATRIX
130 float* reactionRatesG;
131 unsigned int* reactionOrdersG;
132 unsigned int* reactionSitesG;
146 const unsigned int bytes_per_particle,
151 lm::io::Lattice* latticeDataSet);
156 lm::io::SpeciesCounts* speciesCountsDataSet);
169#ifdef MPD_CUDA_3D_GRID_LAUNCH
171 const unsigned int maxXBlockSize,
172 const unsigned int latticeXSize,
173 const unsigned int latticeYSize,
174 const unsigned int latticeZSize);
177 const unsigned int blockXSize,
178 const unsigned int blockYSize,
179 const unsigned int latticeXSize,
180 const unsigned int latticeYSize,
181 const unsigned int latticeZSize);
184 const unsigned int blockXSize,
185 const unsigned int blockZSize,
186 const unsigned int latticeXSize,
187 const unsigned int latticeYSize,
188 const unsigned int latticeZSize);
191 const unsigned int blockXSize,
192 const unsigned int blockYSize,
193 const unsigned int latticeXSize,
194 const unsigned int latticeYSize,
195 const unsigned int latticeZSize);
198 dim3* gridSize, dim3* threadBlockSize,
199 const unsigned int maxXBlockSize,
200 const unsigned int latticeXSize,
201 const unsigned int latticeYSize,
202 const unsigned int latticeZSize);
205 dim3* gridSize, dim3* threadBlockSize,
206 const unsigned int blockXSize,
207 const unsigned int blockYSize,
208 const unsigned int latticeXSize,
209 const unsigned int latticeYSize,
210 const unsigned int latticeZSize);
213 dim3* gridSize, dim3* threadBlockSize,
214 const unsigned int blockXSize,
215 const unsigned int blockZSize,
216 const unsigned int latticeXSize,
217 const unsigned int latticeYSize,
218 const unsigned int latticeZSize);
221 dim3* gridSize, dim3* threadBlockSize,
222 const unsigned int blockXSize,
223 const unsigned int blockYSize,
224 const unsigned int latticeXSize,
225 const unsigned int latticeYSize,
226 const unsigned int latticeZSize);
234 #ifdef MPD_GLOBAL_R_MATRIX
235 __global__
void precomp_reaction_kernel(
const unsigned int* inLattice,
236 const uint8_t* inSites,
237 unsigned int* outLattice,
238 const unsigned long long timestepHash,
239 unsigned int* siteOverflowList,
240 const __restrict__ int8_t* SG,
241 const __restrict__ uint8_t* RLG,
242 const unsigned int* __restrict__ reactionOrdersG,
243 const unsigned int* __restrict__ reactionSitesG,
244 const unsigned int* __restrict__ D1G,
245 const unsigned int* __restrict__ D2G,
246 const float* reactionRatesG,
247 const float* __restrict__ qp0,
248 const float* __restrict__ qp1,
249 const float* __restrict__ qp2);
251 __global__
void precomp_reaction_kernel(
const unsigned int* inLattice,
252 const uint8_t* inSites,
253 unsigned int* outLattice,
254 const unsigned long long timestepHash,
255 unsigned int* siteOverflowList,
256 const __restrict__ int8_t* SG,
257 const __restrict__ uint8_t* RLG,
258 const float* __restrict__ qp0,
259 const float* __restrict__ qp1,
260 const float* __restrict__ qp2);
264#ifdef MPD_CUDA_3D_GRID_LAUNCH
265 __global__
void mpd_x_kernel(
const unsigned int* inLattice,
266 const uint8_t* inSites,
267 unsigned int* outLattice,
268 const unsigned long long timestepHash,
269 unsigned int* siteOverflowList);
271 __global__
void mpd_y_kernel(
const unsigned int* inLattice,
272 const uint8_t* inSites,
273 unsigned int* outLattice,
274 const unsigned long long timestepHash,
275 unsigned int* siteOverflowList);
277 __global__
void mpd_z_kernel(
const unsigned int* inLattice,
278 const uint8_t* inSites,
279 unsigned int* outLattice,
280 const unsigned long long timestepHash,
281 unsigned int* siteOverflowList);
283 #ifdef MPD_GLOBAL_S_MATRIX
284 #ifdef MPD_GLOBAL_R_MATRIX
286 const uint8_t* inSites,
287 unsigned int* outLattice,
288 const unsigned long long timestepHash,
289 unsigned int* siteOverflowList,
290 const int8_t* __restrict__ SG,
291 const uint8_t* __restrict__ RLG,
292 const unsigned int* __restrict__ reactionOrdersG,
293 const unsigned int* __restrict__ reactionSitesG,
294 const unsigned int* __restrict__ D1G,
295 const unsigned int* __restrict__ D2G,
296 const float* __restrict__ reactionRatesG);
299 const uint8_t* inSites,
300 unsigned int* outLattice,
301 const unsigned long long timestepHash,
302 unsigned int* siteOverflowList,
303 const int8_t* __restrict__ SG,
304 const uint8_t* __restrict__ RLG);
308 const uint8_t* inSites,
309 unsigned int* outLattice,
310 const unsigned long long timestepHash,
311 unsigned int* siteOverflowList);
315 const uint8_t* inSites,
316 unsigned int* outLattice,
317 const unsigned int gridXSize,
318 const unsigned long long timestepHash,
319 unsigned int* siteOverflowList);
322 const uint8_t* inSites,
323 unsigned int* outLattice,
324 const unsigned int gridXSize,
325 const unsigned long long timestepHash,
326 unsigned int* siteOverflowList);
329 const uint8_t* inSites,
330 unsigned int* outLattice,
331 const unsigned int gridXSize,
332 const unsigned long long timestepHash,
333 unsigned int* siteOverflowList);
335 #ifdef MPD_GLOBAL_S_MATRIX
336 #ifdef MPD_GLOBAL_R_MATRIX
338 const uint8_t* inSites,
339 unsigned int* outLattice,
340 const unsigned int gridXSize,
341 const unsigned long long timestepHash,
342 unsigned int* siteOverflowList,
343 const int8_t* __restrict__ SG,
344 const uint8_t* __restrict__ RLG,
345 const unsigned int* __restrict__ reactionOrdersG,
346 const unsigned int* __restrict__ reactionSitesG,
347 const unsigned int* __restrict__ D1G,
348 const unsigned int* __restrict__ D2G,
349 const float* __restrict__ reactionRatesG);
352 const uint8_t* inSites,
353 unsigned int* outLattice,
354 const unsigned int gridXSize,
355 const unsigned long long timestepHash,
356 unsigned int* siteOverflowList,
357 const int8_t* __restrict__ SG,
358 const uint8_t* __restrict__ RLG);
362 const uint8_t* inSites,
363 unsigned int* outLattice,
364 const unsigned int gridXSize,
365 const unsigned long long timestepHash,
366 unsigned int* siteOverflowList);
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 hookSimulation(double time)
Definition CMESolver.cpp:1242
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 CudaIntLattice.h:54
virtual void writeSpeciesCounts(lm::io::SpeciesCounts *speciesCountsDataSet)
virtual bool needsReactionModel()
Tells whether the solver needs a reaction model.
Definition IntMpdRdmeSolver.h:77
size_t firstOrderSize
Definition IntMpdRdmeSolver.h:117
float * propFirstOrder
Definition IntMpdRdmeSolver.h:139
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)
float * propZeroOrder
Definition IntMpdRdmeSolver.h:138
uint32_t overflowTimesteps
Definition IntMpdRdmeSolver.h:113
size_t zeroOrderSize
Definition IntMpdRdmeSolver.h:117
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 void setLatticeData(const uint8_t *latticeData)
virtual void copyModelsToDevice()
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 runTimestep(CudaIntLattice *lattice, uint32_t timestep)
size_t secondOrderSize
Definition IntMpdRdmeSolver.h:117
virtual void setReactionRate(unsigned int rxid, float rate)
virtual ~IntMpdRdmeSolver()
uint32_t overflowListUses
Definition IntMpdRdmeSolver.h:114
void * cudaOverflowList
Definition IntMpdRdmeSolver.h:110
uint32_t seed
Definition IntMpdRdmeSolver.h:106
virtual void writeLatticeSites(double time, CudaIntLattice *lattice)
virtual uint64_t getTimestepSeed(uint32_t timestep, uint32_t substep)
cudaStream_t cudaStream
Definition IntMpdRdmeSolver.h:111
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 calculateXLaunchParameters(unsigned int *gridXSize, dim3 *gridSize, dim3 *threadBlockSize, const unsigned int maxXBlockSize, const unsigned int latticeXSize, const unsigned int latticeYSize, const unsigned int latticeZSize)
float * zeroOrder
Definition IntMpdRdmeSolver.h:118
virtual void writeLatticeData(double time, CudaIntLattice *lattice, lm::io::Lattice *latticeDataSet)
float * secondOrder
Definition IntMpdRdmeSolver.h:118
float * propSecondOrder
Definition IntMpdRdmeSolver.h:140
virtual int hookSimulation(double time, CudaIntLattice *lattice)
float * firstOrder
Definition IntMpdRdmeSolver.h:118
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 computePropensities()
virtual void initialize(unsigned int replicate, map< string, string > *parameters, ResourceAllocator::ComputeResources *resources)
Initialize the simulation.
virtual void recordSpeciesCounts(double time, CudaIntLattice *lattice, lm::io::SpeciesCounts *speciesCountsDataSet)
double tau
Definition IntMpdRdmeSolver.h:107
virtual void hookCheckSimulation(double time, CudaIntLattice *lattice)
virtual bool needsDiffusionModel()
Tells whether the solver needs a reaction model.
Definition IntMpdRdmeSolver.h:78
virtual void generateTrajectory()
Actually run the simulation.
float * model_reactionRates
Definition IntMpdRdmeSolver.h:116
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)
bool reactionModelModified
Definition IntMpdRdmeSolver.h:108
Base class for lattice type objects.
Definition Lattice.h:132
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 LatticeBuilder.h:56
Definition IntMpdRdmeSolver.h:231
__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 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 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 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)
Definition LatticeBuilder.h:60
Definition Capsule.cpp:46