chombo-discharge
Loading...
Searching...
No Matches
CD_KMCSolver.H
Go to the documentation of this file.
1/* chombo-discharge
2 * Copyright © 2022 SINTEF Energy Research.
3 * Please refer to Copyright.txt and LICENSE in the chombo-discharge root directory.
4 */
5
12#ifndef CD_KMCSolver_H
13#define CD_KMCSolver_H
14
15// Std includes
16#include <vector>
17#include <memory>
18
19// Chombo includes
20#include <REAL.H>
21
22// Our includes
23#include <CD_NamespaceHeader.H>
24
33{
34 ExplicitEuler,
35 Midpoint,
36 PRC,
37 ImplicitEuler
38};
39
53template <typename R, typename State, typename T = long long>
55{
56public:
57 using ReactionList = std::vector<std::shared_ptr<const R>>;
58
62 KMCSolver() noexcept;
63
67 KMCSolver(const KMCSolver&) = default;
68
72 KMCSolver(const KMCSolver&&) = delete;
73
78 inline KMCSolver(const ReactionList& a_reactions) noexcept;
79
83 virtual ~KMCSolver() noexcept;
84
90
96
101 inline void
102 define(const ReactionList& a_reactions) noexcept;
103
113 inline void
115 const T a_numSSA,
120
128 getNu(const State& a_state, const ReactionList& a_reactions) const noexcept;
129
137
145
153
161
168 inline std::pair<ReactionList, ReactionList>
170
177 inline std::pair<ReactionList, ReactionList>
179
187
196
203
210
218
227
236 const ReactionList& a_nonCriticalReactions,
238
248 computeDt(const State& a_state,
249 const ReactionList& a_reactions,
252
258 inline void
260
267 inline void
268 stepSSA(State& a_state, const ReactionList& a_reactions) const noexcept;
269
276 inline void
278
285 inline void
287
294 inline void
296
303 inline void
305
312 inline void
314
321 inline void
323
330 inline void
332
339 inline void
341
348 inline void
349 stepPRC(State& a_state, const ReactionList& a_reactions, const Real a_dt) const noexcept;
350
357 inline void
359
366 inline void
368
376 inline void
377 advanceTau(State& a_state,
378 const Real& a_dt,
380
390 inline void
391 advanceTau(State& a_state,
392 const ReactionList& a_reactions,
393 const Real& a_dt,
395
403 inline void
404 advanceHybrid(State& a_state,
407
416 inline void
417 advanceHybrid(State& a_state,
418 const ReactionList& a_reactions,
421
429 inline void
431 State& a_state,
432 const ReactionList& a_reactions,
434 const std::function<void(State&, const ReactionList& a_reactions, const Real a_dt)>& a_propagator) const noexcept;
435
440 ReactionList m_reactions;
441
447
452
457
462
467
472
479};
480
481#include <CD_NamespaceFooter.H>
482
483#include <CD_KMCSolverImplem.H>
484
485#endif
Implementation of CD_KMCSolver.H.
KMCLeapPropagator
Supported propagators for hybrid tau leaping.
Definition CD_KMCSolver.H:33
Class for running Kinetic Monte-Carlo simulations.
Definition CD_KMCSolver.H:55
KMCSolver(const KMCSolver &)=default
Disallowed copy constructor.
Real m_eps
Maximum permitted change in propensities for non-critical reactions.
Definition CD_KMCSolver.H:461
virtual ~KMCSolver() noexcept
Destructor.
Definition CD_KMCSolverImplem.H:45
void advanceHybrid(State &a_state, const Real a_dt, const KMCLeapPropagator &a_leapPropagator=KMCLeapPropagator::ExplicitEuler) const noexcept
Advance using Cao et. al. hybrid algorithm over the input time. This can end up using substepping.
Definition CD_KMCSolverImplem.H:958
void stepPRC(State &a_state, const Real a_dt) const noexcept
Perform one leaping step using the PRC method for ALL reactions over a time step a_dt.
Definition CD_KMCSolverImplem.H:612
std::vector< std::vector< int > > m_nu
List of state changes for each reaction.
Definition CD_KMCSolver.H:478
void stepMidpoint(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:567
Real computeDt(const State &a_state, const ReactionList &a_reactions, const std::vector< Real > &a_propensities, const Real a_epsilon) const noexcept
Compute a time step, using the leap condition on the mean value with eps = 1.
Definition CD_KMCSolverImplem.H:361
void define(const ReactionList &a_reactions) noexcept
Define function. Sets the reactions.
Definition CD_KMCSolverImplem.H:52
void setSolverParameters(const T a_numCrit, const T a_numSSA, const T a_maxIter, const Real a_eps, const Real a_SSAlim, const Real a_exitTol) noexcept
Set solver parameters.
Definition CD_KMCSolverImplem.H:64
KMCSolver() noexcept
Default constructor – must subsequently define the object.
Definition CD_KMCSolverImplem.H:29
KMCSolver(const KMCSolver &&)=delete
Disallowed move constructor.
std::vector< std::vector< T > > getNu(const State &a_state, const ReactionList &a_reactions) const noexcept
Compute the state vector changes for all reactions.
Definition CD_KMCSolverImplem.H:83
ReactionList m_reactions
List of reactions used when advancing states.
Definition CD_KMCSolver.H:440
Real m_exitTol
Exit tolerance for implicit solvers.
Definition CD_KMCSolver.H:471
Real getCriticalTimeStep(const State &a_state) const noexcept
Get the time to the next critical reaction.
Definition CD_KMCSolverImplem.H:204
void stepExplicitEuler(State &a_state, const Real a_dt) const noexcept
Perform one plain tau-leaping step using ALL reactions.
Definition CD_KMCSolverImplem.H:534
T m_maxIter
Maximum number of iterations for implicit solvers.
Definition CD_KMCSolver.H:456
T m_numSSA
Maximum number of SSA steps to run when switching into SSA-based advancement for non-critical reactio...
Definition CD_KMCSolver.H:451
T m_Ncrit
Definition of critical reactions.
Definition CD_KMCSolver.H:446
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:495
std::pair< ReactionList, ReactionList > partitionReactions(const State &a_state) const noexcept
Partition reactions into critical and non-critical reactions.
Definition CD_KMCSolverImplem.H:170
void stepSSA(State &a_state) const noexcept
Perform a single SSA step.
Definition CD_KMCSolverImplem.H:430
void advanceTau(State &a_state, const Real &a_dt, const KMCLeapPropagator &a_leapPropagator=KMCLeapPropagator::ExplicitEuler) const noexcept
Advance using a specified tau-leaping algorithm.
Definition CD_KMCSolverImplem.H:879
Real getNonCriticalTimeStep(const State &a_state) const noexcept
Get the non-critical time step.
Definition CD_KMCSolverImplem.H:260
Real totalPropensity(const State &a_state) const noexcept
Compute the total propensity for ALL reactions.
Definition CD_KMCSolverImplem.H:144
Real m_SSAlim
Threshold for switching to SSA-based algorithm within the Cao algorithm.
Definition CD_KMCSolver.H:466
void stepImplicitEuler(State &a_state, const Real a_dt) const noexcept
Perform one implicit Euler tau-leaping step using ALL reactions.
Definition CD_KMCSolverImplem.H:661
std::vector< Real > propensities(const State &a_state) const noexcept
Compute propensities for ALL reactions.
Definition CD_KMCSolverImplem.H:118
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:37
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:25