chombo-discharge
Loading...
Searching...
No Matches
CD_KMCSolver.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_KMCSOLVER_H
14#define CD_KMCSOLVER_H
15
16// Std includes
17#include <functional>
18#include <memory>
19#include <vector>
20
21// Chombo includes
22#include <REAL.H>
23
24// Our includes
25#include <CD_NamespaceHeader.H>
26
35{
37 Midpoint,
38 PRC,
40};
41
56template <typename R, typename State, typename T = long long>
58{
59public:
64
69
74
79
85
90
98
102 KMCSolver&
104
109 inline void
111
121 inline void
123
133
142
151
160
169
179
189
198
208
216
224
233
243
255
266 computeDt(const State& a_state,
270
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
350
357 inline void
359
366 inline void
368
375 inline void
377
384 inline void
386
394 inline void
395 advanceTau(State& a_state,
396 const Real& a_dt,
398
407 inline void
408 advanceTau(State& a_state,
410 const Real& a_dt,
412
420 inline void
421 advanceHybrid(State& a_state,
422 Real a_dt,
424
433 inline void
434 advanceHybrid(State& a_state,
436 Real a_dt,
438
446 inline void
448 State& a_state,
450 Real a_dt,
452
458
464
469
474
479
484
489
496};
497
498#include <CD_NamespaceFooter.H>
499
500#include <CD_KMCSolverImplem.H>
501
502#endif
Implementation of CD_KMCSolver.H.
KMCLeapPropagator
Supported propagators for hybrid tau leaping.
Definition CD_KMCSolver.H:35
@ ImplicitEuler
Implicit Euler tau leaping.
@ Midpoint
Gillespie's midpoint method.
@ ExplicitEuler
Regular tau leaping.
@ PRC
Hu and Li's Poisson random correction method.
Class for running Kinetic Monte-Carlo simulations.
Definition CD_KMCSolver.H:58
std::vector< std::shared_ptr< const R > > ReactionList
Alias for the list of reactions.
Definition CD_KMCSolver.H:63
Real m_eps
Maximum permitted change in propensities for non-critical reactions.
Definition CD_KMCSolver.H:478
void setSolverParameters(T a_numCrit, T a_numSSA, T a_maxIter, Real a_eps, Real a_SSAlim, Real a_exitTol) noexcept
Set solver parameters.
Definition CD_KMCSolverImplem.H:65
Real computeDt(const State &a_state, const ReactionList &a_reactions, const std::vector< Real > &a_propensities, Real a_epsilon) const noexcept
Compute a time step using the leap condition on the mean value.
Definition CD_KMCSolverImplem.H:369
std::vector< std::vector< int > > m_nu
List of state changes for each reaction.
Definition CD_KMCSolver.H:495
void define(const ReactionList &a_reactions) noexcept
Define function. Sets the reactions.
Definition CD_KMCSolverImplem.H:53
KMCSolver() noexcept
Default constructor. Must subsequently call define.
Definition CD_KMCSolverImplem.H:30
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:84
ReactionList m_reactions
List of reactions used when advancing states.
Definition CD_KMCSolver.H:457
Real m_exitTol
Exit tolerance for implicit solvers.
Definition CD_KMCSolver.H:488
Real getCriticalTimeStep(const State &a_state) const noexcept
Get the time to the next critical reaction.
Definition CD_KMCSolverImplem.H:210
T m_maxIter
Maximum number of iterations for implicit solvers.
Definition CD_KMCSolver.H:473
void advanceSSA(State &a_state, Real a_dt) const noexcept
Advance with the SSA over the input time. This can end up using substepping.
Definition CD_KMCSolverImplem.H:507
T m_numSSA
Maximum number of SSA steps to run when switching into SSA-based advancement for non-critical reactio...
Definition CD_KMCSolver.H:468
T m_Ncrit
Definition of critical reactions.
Definition CD_KMCSolver.H:463
void stepImplicitEuler(State &a_state, Real a_dt) const noexcept
Perform one implicit Euler tau-leaping step using ALL reactions.
Definition CD_KMCSolverImplem.H:673
void advanceHybrid(State &a_state, 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:954
void stepPRC(State &a_state, Real a_dt) const noexcept
Perform one leaping step using the PRC method for ALL reactions.
Definition CD_KMCSolverImplem.H:624
void stepMidpoint(State &a_state, Real a_dt) const noexcept
Perform one leaping step using the midpoint method for ALL reactions.
Definition CD_KMCSolverImplem.H:579
std::pair< ReactionList, ReactionList > partitionReactions(const State &a_state) const noexcept
Partition reactions into critical and non-critical reactions.
Definition CD_KMCSolverImplem.H:171
void stepSSA(State &a_state) const noexcept
Perform a single SSA step.
Definition CD_KMCSolverImplem.H:440
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:875
Real getNonCriticalTimeStep(const State &a_state) const noexcept
Get the non-critical time step.
Definition CD_KMCSolverImplem.H:266
Real totalPropensity(const State &a_state) const noexcept
Compute the total propensity for ALL reactions.
Definition CD_KMCSolverImplem.H:145
Real m_SSAlim
Threshold for switching to SSA-based algorithm within the Cao algorithm.
Definition CD_KMCSolver.H:483
void stepExplicitEuler(State &a_state, Real a_dt) const noexcept
Perform one plain tau-leaping step using ALL reactions.
Definition CD_KMCSolverImplem.H:546
std::vector< Real > propensities(const State &a_state) const noexcept
Compute propensities for ALL reactions.
Definition CD_KMCSolverImplem.H:119
Base class for a tracer particle solver. This solver can advance particles in a pre-defined velocity ...
Definition CD_TracerParticleSolver.H:38
TracerParticleSolver()
Default constructor.
Definition CD_TracerParticleSolverImplem.H:26