21#ifndef VOTCA_XTP_KMCENGINE_H
22#define VOTCA_XTP_KMCENGINE_H
82 static std::vector<double>
InjectionTimes(
const std::vector<Pulse>& pulses,
91 const Eigen::Vector3d& ,
double ) {}
99 const std::vector<double>*
rates =
nullptr;
106 double max_time = std::numeric_limits<double>::infinity();
144 void setDecay(
const DecaySettings& decay);
149 RunStatus
Run(
const std::vector<double>& injection_times,
Random& random,
150 Observer& observer,
const Limits& limits)
const;
virtual void Absorb(Index, Index, double)
virtual void Hop(Index, Index, Index, const Eigen::Vector3d &, double)
virtual ~Observer()=default
virtual void Decay(Index, Index, double)
virtual void Inject(Index, Index, double)
static std::vector< double > InjectionTimes(const std::vector< Pulse > &pulses, Random &random)
RunStatus Run(const std::vector< double > &injection_times, Random &random, Observer &observer, const Limits &limits) const
static Pulse::Shape ShapeFromString(const std::string &name)
void setDecay(const DecaySettings &decay)
per-site decay; rates must be >= 0 and finite, one per site
KMCEngine(const ToFGraph &graph, const WaitingTimeStrategy &strategy)
const WaitingTimeStrategy & strategy_
Random numbers for kinetic Monte Carlo: one independent stream per (seed, stream) pair....
Hopping graph for time-of-flight (ToF) transport.
How a carrier's next hop is drawn: the waiting time and the destination. The pluggable part of the KM...
Provides a means for comparing floating point numbers.
const std::vector< double > * rates
bool replace
inject a new carrier at the time of every decay
Index max_events
candidate events (hops and null events)
double max_wall_time
wall-clock time of the run, s (checked every 4096 events)
Index max_decays
stop after this many decays
double max_time
simulated time, s
Index blocked_injections
injections dropped because all source sites were occupied
Index events
candidate events processed