12 #ifndef CD_KMCSolver_H
13 #define CD_KMCSolver_H
23 #include <CD_NamespaceHeader.H>
47 template <
typename R,
typename State,
typename T =
long long>
51 using ReactionList = std::vector<std::shared_ptr<const R>>;
72 inline KMCSolver(
const ReactionList& a_reactions) noexcept;
96 define(const ReactionList& a_reactions) noexcept;
106 setSolverParameters(const T a_numCrit, const T a_numSSA, const Real a_eps, const Real a_SSAlim) noexcept;
113 inline std::vector<Real>
121 inline std::vector<Real>
122 propensities(const State& a_state, const ReactionList& a_reactions) const noexcept;
138 totalPropensity(const State& a_state, const ReactionList& a_reactions) const noexcept;
146 inline std::pair<ReactionList, ReactionList>
155 inline std::pair<ReactionList, ReactionList>
156 partitionReactions(const State& a_state, const ReactionList& a_reactions) const noexcept;
173 getCriticalTimeStep(const State& a_state, const ReactionList& a_criticalReactions) const noexcept;
214 const ReactionList& a_nonCriticalReactions,
215 const std::vector<Real>& a_nonCriticalPropensities) const noexcept;
224 stepTauPlain(State& a_state, const Real a_dt) const noexcept;
234 stepTauPlain(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
245 const ReactionList& a_reactions,
246 const std::vector<Real>& a_propensities,
247 const Real a_dt) const noexcept;
265 advanceTauPlain(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
283 stepTauMidpoint(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
301 advanceTauMidpoint(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
309 stepSSA(State& a_state) const noexcept;
318 stepSSA(State& a_state, const ReactionList& a_reactions) const noexcept;
327 stepSSA(State& a_state, const ReactionList& a_reactions, const std::vector<Real>& a_propensities) const noexcept;
336 advanceSSA(State& a_state, const Real a_dt) const noexcept;
345 advanceSSA(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
369 const ReactionList& a_reactions,
383 const ReactionList& a_reactions,
385 const std::function<
void(State&, const ReactionList& a_reactions, const Real a_dt)>& a_propagator) const noexcept;
415 #include <CD_NamespaceFooter.H>
Implementation of CD_KMCSolver.H.
KMCLeapPropagator
Supported propagators for hybrid tau leaping.
Definition: CD_KMCSolver.H:29
Class for running Kinetic Monte-Carlo simulations.
Definition: CD_KMCSolver.H:49
KMCSolver(const KMCSolver &)=default
Disallowed copy constructor.
Real m_eps
Maximum permitted change in propensities for non-critical reactions.
Definition: CD_KMCSolver.H:407
void setSolverParameters(const T a_numCrit, const T a_numSSA, const Real a_eps, const Real a_SSAlim) noexcept
Set solver parameters.
Definition: CD_KMCSolverImplem.H:59
virtual ~KMCSolver() noexcept
Destructor.
Definition: CD_KMCSolverImplem.H:40
void advanceTauMidpoint(State &a_state, const Real a_dt) const noexcept
Perform one leaping step using the midpoint method all reactions over a time step a_dt.
Definition: CD_KMCSolverImplem.H:445
void define(const ReactionList &a_reactions) noexcept
Define function. Sets the reactions.
Definition: CD_KMCSolverImplem.H:47
KMCSolver() noexcept
Default constructor – must subsequently define the object.
Definition: CD_KMCSolverImplem.H:28
KMCSolver(const KMCSolver &&)=delete
Disallowed move constructor.
ReactionList m_reactions
List of reactions used when advancing states.
Definition: CD_KMCSolver.H:391
Real getCriticalTimeStep(const State &a_state) const noexcept
Get the time to the next critical reaction.
Definition: CD_KMCSolverImplem.H:160
void stepTauMidpoint(State &a_state, const Real a_dt) const noexcept
Perform one leaping step using the midpoint method for ALL reactions over a time step a_dt.
Definition: CD_KMCSolverImplem.H:408
void stepTauPlain(State &a_state, const Real a_dt) const noexcept
Perform one plain tau-leaping step using ALL reactions.
Definition: CD_KMCSolverImplem.H:315
T m_numSSA
Maximum number of SSA steps to run when switching into SSA-based advancement for non-critical reactio...
Definition: CD_KMCSolver.H:402
T m_Ncrit
Definition of critical reactions.
Definition: CD_KMCSolver.H:397
void advanceSSA(State &a_state, const Real a_dt) const noexcept
Advance with the SSA over the input time. This can end up using substepping.
Definition: CD_KMCSolverImplem.H:562
std::pair< ReactionList, ReactionList > partitionReactions(const State &a_state) const noexcept
Partition reactions into critical and non-critical reactions.
Definition: CD_KMCSolverImplem.H:126
void advanceTauPlain(State &a_state, const Real a_dt) const noexcept
Advance with plain tau-leaping step over the input time. This can end up using substepping.
Definition: CD_KMCSolverImplem.H:358
void stepSSA(State &a_state) const noexcept
Perform a single SSA step.
Definition: CD_KMCSolverImplem.H:497
Real getNonCriticalTimeStep(const State &a_state) const noexcept
Get the non-critical time step.
Definition: CD_KMCSolverImplem.H:216
void advanceHybrid(State &a_state, const Real a_dt, const KMCLeapPropagator &a_leapPropagator=KMCLeapPropagator::TauPlain) const noexcept
Advance using Cao et. al. hybrid algorithm over the input time. This can end up using substepping.
Definition: CD_KMCSolverImplem.H:601
Real totalPropensity(const State &a_state) const noexcept
Compute the total propensity for ALL reactions.
Definition: CD_KMCSolverImplem.H:100
Real m_SSAlim
Threshold for switching to SSA-based algorithm within the Cao algorithm.
Definition: CD_KMCSolver.H:412
std::vector< Real > propensities(const State &a_state) const noexcept
Compute propensities for ALL reactions.
Definition: CD_KMCSolverImplem.H:74