Initialization and Restart¶
Cyclus has built-in functionality for simulation snapshotting and restart.
All simulations are initialized from the database. In order to support
running from XML input files, the Cyclus kernel translates the input file
contents into the database and then initializes the simulation from the
database. In order for this to work correctly, agents must be able to record
the entirety of their internal state to the database and able to restore that
state exactly. The cyclus::Agent
class provides a group of functions in
support of this functionality that must all be implemented carefully and
consistently. If possible, the Cyclus preprocessor should be
used to automate the generation of code for the following functions:
void InfileToDb(InfileTree* tree, DbInit di);
void InitFrom(cyclus::QueryableBackend*);
void InitInv(cyclus::Inventories& invs);
cyclus::Inventories SnapshotInv();
void Snapshot(cyclus::Agent*);
std::string schema();
Json::Value annotations();
cyclus::Agent* Clone();
void InitFrom(cyclus::Agent*);
When the preprocessor isn’t sufficient, read the API documents for the functions listed above VERY CAREFULLY. There are also a few other functions related to initialization that are important to understand well:
void Build(cyclus::Agent* parent);
void EnterNotify();
void BuildNotify(cyclus::Agent* child);
void Decommission(cyclus::Agent* child);
Warning
The functions mentioned on this page (except void InitFrom(cyclus::Agent*)
)
should NEVER be invoked directly by agents.