|
GridFire 0.0.1a
General Purpose Nuclear Network
|
An engine view that dynamically adapts the reaction network based on runtime conditions. More...
#include <engine_adaptive.h>
Classes | |
| struct | ReactionFlow |
| A struct to hold a reaction and its flow rate. More... | |
Public Member Functions | |
| AdaptiveEngineView (DynamicEngine &baseEngine) | |
| Constructs an AdaptiveEngineView. | |
| void | update (const NetIn &netIn) override |
| Updates the active species and reactions based on the current conditions. | |
| const std::vector< fourdst::atomic::Species > & | getNetworkSpecies () const override |
| Gets the list of active species in the network. | |
| StepDerivatives< double > | calculateRHSAndEnergy (const std::vector< double > &Y_culled, const double T9, const double rho) const override |
| Calculates the right-hand side (dY/dt) and energy generation for the active species. | |
| void | generateJacobianMatrix (const std::vector< double > &Y_culled, const double T9, const double rho) override |
| Generates the Jacobian matrix for the active species. | |
| double | getJacobianMatrixEntry (const int i_culled, const int j_culled) const override |
| Gets an entry from the Jacobian matrix for the active species. | |
| void | generateStoichiometryMatrix () override |
| Generates the stoichiometry matrix for the active reactions and species. | |
| int | getStoichiometryMatrixEntry (const int speciesIndex_culled, const int reactionIndex_culled) const override |
| Gets an entry from the stoichiometry matrix for the active species and reactions. | |
| double | calculateMolarReactionFlow (const reaction::Reaction &reaction, const std::vector< double > &Y_culled, double T9, double rho) const override |
| Calculates the molar reaction flow for a given reaction in the active network. | |
| const reaction::LogicalReactionSet & | getNetworkReactions () const override |
| Gets the set of active logical reactions in the network. | |
| std::unordered_map< fourdst::atomic::Species, double > | getSpeciesTimescales (const std::vector< double > &Y_culled, double T9, double rho) const override |
| Computes timescales for all active species in the network. | |
| const DynamicEngine & | getBaseEngine () const override |
| Gets the base engine. | |
| void | setScreeningModel (screening::ScreeningType model) override |
| screening::ScreeningType | getScreeningModel () const override |
Public Member Functions inherited from gridfire::Engine | |
| virtual | ~Engine ()=default |
| Virtual destructor. | |
Public Member Functions inherited from gridfire::EngineView< DynamicEngine > | |
| virtual | ~EngineView ()=default |
| Virtual destructor. | |
Private Types | |
| using | Config = fourdst::config::Config |
| using | LogManager = fourdst::logging::LogManager |
Private Member Functions | |
| std::vector< size_t > | constructSpeciesIndexMap () const |
| Constructs the species index map. | |
| std::vector< size_t > | constructReactionIndexMap () const |
| Constructs the reaction index map. | |
| std::vector< double > | mapCulledToFull (const std::vector< double > &culled) const |
| Maps a vector of culled abundances to a vector of full abundances. | |
| std::vector< double > | mapFullToCulled (const std::vector< double > &full) const |
| Maps a vector of full abundances to a vector of culled abundances. | |
| size_t | mapCulledToFullSpeciesIndex (size_t culledSpeciesIndex) const |
| Maps a culled species index to a full species index. | |
| size_t | mapCulledToFullReactionIndex (size_t culledReactionIndex) const |
| Maps a culled reaction index to a full reaction index. | |
| void | validateState () const |
| Validates that the AdaptiveEngineView is not stale. | |
| std::vector< ReactionFlow > | calculateAllReactionFlows (const NetIn &netIn, std::vector< double > &out_Y_Full) const |
| std::unordered_set< fourdst::atomic::Species > | findReachableSpecies (const NetIn &netIn) const |
| std::vector< const reaction::LogicalReaction * > | cullReactionsByFlow (const std::vector< ReactionFlow > &allFlows, const std::unordered_set< fourdst::atomic::Species > &reachableSpecies, const std::vector< double > &Y_full, double maxFlow) const |
| void | finalizeActiveSet (const std::vector< const reaction::LogicalReaction * > &finalReactions) |
Private Attributes | |
| Config & | m_config = Config::getInstance() |
| quill::Logger * | m_logger = LogManager::getInstance().getLogger("log") |
| DynamicEngine & | m_baseEngine |
| std::vector< fourdst::atomic::Species > | m_activeSpecies |
| reaction::LogicalReactionSet | m_activeReactions |
| std::vector< size_t > | m_speciesIndexMap |
| std::vector< size_t > | m_reactionIndexMap |
| bool | m_isStale = true |
An engine view that dynamically adapts the reaction network based on runtime conditions.
This class implements an EngineView that dynamically culls species and reactions from the full reaction network based on their reaction flow rates and connectivity. This allows for efficient simulation of reaction networks by focusing computational effort on the most important species and reactions.
The AdaptiveEngineView maintains a subset of "active" species and reactions, and maps between the full network indices and the active subset indices. This allows the base engine to operate on the full network data, while the AdaptiveEngineView provides a reduced view for external clients.
The adaptation process is driven by the update() method, which performs the following steps:
<DynamicEngine>
Definition at line 47 of file engine_adaptive.h.
|
private |
Definition at line 232 of file engine_adaptive.h.
|
private |
Definition at line 233 of file engine_adaptive.h.
|
explicit |
Constructs an AdaptiveEngineView.
| baseEngine | The underlying DynamicEngine to which this view delegates calculations. |
Initializes the active species and reactions to the full network, and constructs the initial index maps.
Definition at line 13 of file engine_adaptive.cpp.
|
private |
Definition at line 268 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Calculates the molar reaction flow for a given reaction in the active network.
| reaction | The reaction for which to calculate the flow. |
| Y_culled | Vector of current abundances for the active species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method maps the culled abundances to the full network abundances and calls the base engine to calculate the molar reaction flow.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
| std::runtime_error | If the reaction is not part of the active reactions in the adaptive engine view. |
Implements gridfire::DynamicEngine.
Definition at line 175 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Calculates the right-hand side (dY/dt) and energy generation for the active species.
| Y_culled | A vector of abundances for the active species. |
| T9 | The temperature in units of 10^9 K. |
| rho | The density in g/cm^3. |
This method maps the culled abundances to the full network abundances, calls the base engine to calculate the RHS and energy generation, and then maps the full network derivatives back to the culled derivatives.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
Implements gridfire::Engine.
Definition at line 120 of file engine_adaptive.cpp.
|
nodiscardprivate |
Constructs the reaction index map.
This method creates a map from the indices of the active reactions to the indices of the corresponding reactions in the full network.
Definition at line 53 of file engine_adaptive.cpp.
|
nodiscardprivate |
Constructs the species index map.
This method creates a map from the indices of the active species to the indices of the corresponding species in the full network.
Definition at line 24 of file engine_adaptive.cpp.
|
nodiscardprivate |
Definition at line 342 of file engine_adaptive.cpp.
|
private |
Definition at line 385 of file engine_adaptive.cpp.
|
nodiscardprivate |
Definition at line 299 of file engine_adaptive.cpp.
|
overridevirtual |
Generates the Jacobian matrix for the active species.
| Y_culled | A vector of abundances for the active species. |
| T9 | The temperature in units of 10^9 K. |
| rho | The density in g/cm^3. |
This method maps the culled abundances to the full network abundances and calls the base engine to generate the Jacobian matrix.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
Implements gridfire::DynamicEngine.
Definition at line 138 of file engine_adaptive.cpp.
|
overridevirtual |
Generates the stoichiometry matrix for the active reactions and species.
This method calls the base engine to generate the stoichiometry matrix.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
Implements gridfire::DynamicEngine.
Definition at line 160 of file engine_adaptive.cpp.
|
inlinenodiscardoverridevirtual |
Gets the base engine.
Implements gridfire::EngineView< DynamicEngine >.
Definition at line 226 of file engine_adaptive.h.
|
nodiscardoverridevirtual |
Gets an entry from the Jacobian matrix for the active species.
| i_culled | The row index (species index) in the culled matrix. |
| j_culled | The column index (species index) in the culled matrix. |
This method maps the culled indices to the full network indices and calls the base engine to get the Jacobian matrix entry.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
| std::out_of_range | If the culled index is out of bounds for the species index map. |
Implements gridfire::DynamicEngine.
Definition at line 149 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Gets the set of active logical reactions in the network.
Implements gridfire::DynamicEngine.
Definition at line 192 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Gets the list of active species in the network.
Implements gridfire::Engine.
Definition at line 116 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Implements gridfire::DynamicEngine.
Definition at line 220 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Computes timescales for all active species in the network.
| Y_culled | Vector of current abundances for the active species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method maps the culled abundances to the full network abundances and calls the base engine to compute the species timescales.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
Implements gridfire::DynamicEngine.
Definition at line 196 of file engine_adaptive.cpp.
|
nodiscardoverridevirtual |
Gets an entry from the stoichiometry matrix for the active species and reactions.
| speciesIndex_culled | The index of the species in the culled species list. |
| reactionIndex_culled | The index of the reaction in the culled reaction list. |
This method maps the culled indices to the full network indices and calls the base engine to get the stoichiometry matrix entry.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
| std::out_of_range | If the culled index is out of bounds for the species or reaction index map. |
Implements gridfire::DynamicEngine.
Definition at line 165 of file engine_adaptive.cpp.
|
nodiscardprivate |
Maps a vector of culled abundances to a vector of full abundances.
| culled | A vector of abundances for the active species. |
Definition at line 224 of file engine_adaptive.cpp.
|
nodiscardprivate |
Maps a culled reaction index to a full reaction index.
| culledReactionIndex | The index of the reaction in the culled reaction list. |
| std::out_of_range | If the culled index is out of bounds for the reaction index map. |
Definition at line 251 of file engine_adaptive.cpp.
|
nodiscardprivate |
Maps a culled species index to a full species index.
| culledSpeciesIndex | The index of the species in the culled species list. |
| std::out_of_range | If the culled index is out of bounds for the species index map. |
Definition at line 242 of file engine_adaptive.cpp.
|
nodiscardprivate |
Maps a vector of full abundances to a vector of culled abundances.
| full | A vector of abundances for the full network. |
Definition at line 233 of file engine_adaptive.cpp.
|
overridevirtual |
Implements gridfire::DynamicEngine.
Definition at line 216 of file engine_adaptive.cpp.
|
overridevirtual |
Updates the active species and reactions based on the current conditions.
| netIn | The current network input, containing temperature, density, and composition. |
This method performs the reaction flow calculation, reaction culling, connectivity analysis, and index map construction steps described above.
The culling thresholds are read from the configuration using the following keys:
gridfire:AdaptiveEngineView:RelativeCullingThreshold (default: 1e-75)| std::runtime_error | If there is a mismatch between the active reactions and the base engine. |
Implements gridfire::DynamicEngine.
Definition at line 85 of file engine_adaptive.cpp.
|
private |
Validates that the AdaptiveEngineView is not stale.
| std::runtime_error | If the AdaptiveEngineView is stale (i.e., update() has not been called). |
Definition at line 260 of file engine_adaptive.cpp.
|
private |
Definition at line 240 of file engine_adaptive.h.
|
private |
Definition at line 239 of file engine_adaptive.h.
|
private |
Definition at line 237 of file engine_adaptive.h.
|
private |
Definition at line 234 of file engine_adaptive.h.
|
private |
Definition at line 245 of file engine_adaptive.h.
|
private |
Definition at line 235 of file engine_adaptive.h.
|
private |
Definition at line 243 of file engine_adaptive.h.
|
private |
Definition at line 242 of file engine_adaptive.h.