Lattice Microbes 2.5
This is for whole cell modeling
Loading...
Searching...
No Matches
IntMpdRdmeSolverExtended.h
Go to the documentation of this file.
1/*
2 * University of Illinois Open Source License
3 * Copyright 2024 Luthey-Schulten Group,
4 * All rights reserved.
5 *
6 * Developed by: Luthey-Schulten Group
7 * University of Illinois at Urbana-Champaign
8 * http://www.scs.uiuc.edu/~schulten
9 *
10 * Extended IntMpdRdmeSolver with particle size support
11 */
12
13#ifndef LM_RDME_INTMPDRDMESOLVEREXTENDED_H
14#define LM_RDME_INTMPDRDMESOLVEREXTENDED_H
15
16#include <map>
17#include <string>
20#include "core/Types.h"
21
22namespace lm {
23namespace rdme {
24
31{
32public:
35
36 // Override parent methods
37 virtual void buildModel(const uint numberSpeciesA,
38 const uint numberReactionsA,
39 const uint* initialSpeciesCountsA,
40 const uint* reactionTypesA,
41 const double* KA,
42 const int* SA,
43 const uint* DA,
44 const uint kCols) override;
45
46 virtual void buildDiffusionModel(const uint numberSiteTypesA,
47 const double* DFA,
48 const uint* RLA,
49 lattice_size_t latticeXSize,
50 lattice_size_t latticeYSize,
51 lattice_size_t latticeZSize,
52 site_size_t particlesPerSite,
53 const unsigned int bytes_per_particle,
54 si_dist_t latticeSpacing,
55 const uint8_t* latticeData,
56 const uint8_t* latticeSitesData,
57 bool rowMajorData) override;
58
59 virtual void runTimestep(CudaIntLattice* lattice, uint32_t timestep) override;
60
61 // New particle size methods
62 void setParticleSizes(const uint32_t* sizes, uint32_t numTypes);
63 void enableParticleSizeChecking(bool enable = true);
64 bool isParticleSizeCheckingEnabled() const { return particleSizeEnabled; }
65
66 // Validation and statistics
68 void getOccupancyStatistics(CudaIntLattice* lattice, uint32_t* occupancyCounts,
69 uint32_t maxOccupancy);
70
71 // Get particle size info
72 uint32_t getParticleSize(particle_t particleType) const;
73
74private:
75 // Particle size data
76 uint32_t* hostParticleSizes; // Host copy of particle sizes
77 uint32_t numParticleTypes; // Number of particle types
78 bool particleSizeEnabled; // Enable size checking
79 bool particleSizesInitialized; // Flag for initialization
80
81 // GPU memory for extended functionality
82 uint8_t* deviceReactionMatrix; // Device copy of reaction matrix (int8_t -> uint8_t)
83 uint8_t* deviceReactionLocationMatrix; // Device copy of RL matrix
84
85 // Internal methods
86 void initializeParticleSizes();
87 void copyReactionDataToDevice();
88 void runStandardTimestep(CudaIntLattice* lattice, uint32_t timestep);
89 void runSizeAwareTimestep(CudaIntLattice* lattice, uint32_t timestep);
90
91 // Launch parameter calculation for size-aware kernels
92 void calculateSizeAwareLaunchParameters(dim3* gridSize, dim3* blockSize,
93 uint32_t latticeXSize,
94 uint32_t latticeYSize,
95 uint32_t latticeZSize);
96};
97
98} // namespace rdme
99} // namespace lm
100
101#endif // LM_RDME_INTMPDRDMESOLVEREXTENDED_H
uint32_t site_size_t
Definition ByteLatticeExtended.h:23
uint32_t particle_t
Definition ByteLatticeExtended.h:19
uint32_t lattice_size_t
Definition Lattice.h:55
double si_dist_t
Definition Types.h:63
unsigned int uint
Definition Types.h:52
Definition CudaIntLattice.h:54
uint32_t getParticleSize(particle_t particleType) const
bool isParticleSizeCheckingEnabled() const
Definition IntMpdRdmeSolverExtended.h:64
virtual void runTimestep(CudaIntLattice *lattice, uint32_t timestep) override
void setParticleSizes(const uint32_t *sizes, uint32_t numTypes)
uint32_t validateConstraints(CudaIntLattice *lattice)
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) override
virtual void buildModel(const uint numberSpeciesA, const uint numberReactionsA, const uint *initialSpeciesCountsA, const uint *reactionTypesA, const double *KA, const int *SA, const uint *DA, const uint kCols) override
void getOccupancyStatistics(CudaIntLattice *lattice, uint32_t *occupancyCounts, uint32_t maxOccupancy)
void enableParticleSizeChecking(bool enable=true)
Lattice * lattice
Definition RDMESolver.h:73
Definition LatticeBuilder.h:60
Definition Capsule.cpp:46