|
GridFire 0.0.1a
General Purpose Nuclear Network
|
A reaction network engine that uses a graph-based representation. More...
#include <engine_graph.h>
Public Member Functions | |
| GraphEngine (const fourdst::composition::Composition &composition) | |
| Constructs a GraphEngine from a composition. | |
| GraphEngine (reaction::LogicalReactionSet reactions) | |
| Constructs a GraphEngine from a set of reactions. | |
| StepDerivatives< double > | calculateRHSAndEnergy (const std::vector< double > &Y, const double T9, const double rho) const override |
| Calculates the right-hand side (dY/dt) and energy generation rate. | |
| void | generateJacobianMatrix (const std::vector< double > &Y, const double T9, const double rho) override |
| Generates the Jacobian matrix for the current state. | |
| void | generateStoichiometryMatrix () override |
| Generates the stoichiometry matrix for the network. | |
| double | calculateMolarReactionFlow (const reaction::Reaction &reaction, const std::vector< double > &Y, const double T9, const double rho) const override |
| Calculates the molar reaction flow for a given reaction. | |
| const std::vector< fourdst::atomic::Species > & | getNetworkSpecies () const override |
| Gets the list of species in the network. | |
| const reaction::LogicalReactionSet & | getNetworkReactions () const override |
| Gets the set of logical reactions in the network. | |
| double | getJacobianMatrixEntry (const int i, const int j) const override |
| Gets an entry from the previously generated Jacobian matrix. | |
| int | getStoichiometryMatrixEntry (const int speciesIndex, const int reactionIndex) const override |
| Gets an entry from the stoichiometry matrix. | |
| std::unordered_map< fourdst::atomic::Species, double > | getSpeciesTimescales (const std::vector< double > &Y, double T9, double rho) const override |
| Computes timescales for all species in the network. | |
| void | update (const NetIn &netIn) override |
| bool | involvesSpecies (const fourdst::atomic::Species &species) const |
| Checks if a given species is involved in the network. | |
| void | exportToDot (const std::string &filename) const |
| Exports the network to a DOT file for visualization. | |
| void | exportToCSV (const std::string &filename) const |
| Exports the network to a CSV file for analysis. | |
| void | setScreeningModel (screening::ScreeningType) override |
| screening::ScreeningType | getScreeningModel () const override |
Public Member Functions inherited from gridfire::Engine | |
| virtual | ~Engine ()=default |
| Virtual destructor. | |
Static Public Member Functions | |
| static std::unordered_map< fourdst::atomic::Species, int > | getNetReactionStoichiometry (const reaction::Reaction &reaction) |
| Gets the net stoichiometry for a given reaction. | |
Private Member Functions | |
| void | syncInternalMaps () |
| Synchronizes the internal maps. | |
| void | collectNetworkSpecies () |
| Collects the unique species in the network. | |
| void | populateReactionIDMap () |
| Populates the reaction ID map. | |
| void | populateSpeciesToIndexMap () |
| Populates the species-to-index map. | |
| void | reserveJacobianMatrix () |
| Reserves space for the Jacobian matrix. | |
| void | recordADTape () |
| Records the AD tape for the right-hand side of the ODE. | |
| bool | validateConservation () const |
| Validates mass and charge conservation across all reactions. | |
| void | validateComposition (const fourdst::composition::Composition &composition, double culling, double T9) |
| Validates the composition against the current reaction set. | |
| template<IsArithmeticOrAD T> | |
| T | calculateMolarReactionFlow (const reaction::Reaction &reaction, const std::vector< T > &Y, const T T9, const T rho) const |
| Calculates the molar reaction flow for a given reaction. | |
| template<IsArithmeticOrAD T> | |
| StepDerivatives< T > | calculateAllDerivatives (const std::vector< T > &Y_in, T T9, T rho) const |
| Calculates all derivatives (dY/dt) and the energy generation rate. | |
| StepDerivatives< double > | calculateAllDerivatives (const std::vector< double > &Y_in, const double T9, const double rho) const |
| Calculates all derivatives (dY/dt) and the energy generation rate (double precision). | |
| StepDerivatives< ADDouble > | calculateAllDerivatives (const std::vector< ADDouble > &Y_in, const ADDouble &T9, const ADDouble &rho) const |
| Calculates all derivatives (dY/dt) and the energy generation rate (automatic differentiation). | |
Private Attributes | |
| reaction::LogicalReactionSet | m_reactions |
| Set of REACLIB reactions in the network. | |
| std::unordered_map< std::string_view, reaction::Reaction * > | m_reactionIDMap |
| Map from reaction ID to REACLIBReaction. //PERF: This makes copies of REACLIBReaction and could be a performance bottleneck. | |
| std::vector< fourdst::atomic::Species > | m_networkSpecies |
| Vector of unique species in the network. | |
| std::unordered_map< std::string_view, fourdst::atomic::Species > | m_networkSpeciesMap |
| Map from species name to Species object. | |
| std::unordered_map< fourdst::atomic::Species, size_t > | m_speciesToIndexMap |
| Map from species to their index in the stoichiometry matrix. | |
| boost::numeric::ublas::compressed_matrix< int > | m_stoichiometryMatrix |
| Stoichiometry matrix (species x reactions). | |
| boost::numeric::ublas::compressed_matrix< double > | m_jacobianMatrix |
| Jacobian matrix (species x species). | |
| CppAD::ADFun< double > | m_rhsADFun |
| CppAD function for the right-hand side of the ODE. | |
| screening::ScreeningType | m_screeningType = screening::ScreeningType::BARE |
| Screening type for the reaction network. Default to no screening. | |
| std::unique_ptr< screening::ScreeningModel > | m_screeningModel = screening::selectScreeningModel(m_screeningType) |
| Config & | m_config = Config::getInstance() |
| Constants & | m_constants = Constants::getInstance() |
| Access to physical constants. | |
| quill::Logger * | m_logger = LogManager::getInstance().getLogger("log") |
A reaction network engine that uses a graph-based representation.
The GraphEngine class implements the DynamicEngine interface using a graph-based representation of the reaction network. It uses sparse matrices for efficient storage and computation of the stoichiometry and Jacobian matrices. Automatic differentiation (AD) is used to calculate the Jacobian matrix.
The engine supports:
Definition at line 89 of file engine_graph.h.
|
explicit |
Constructs a GraphEngine from a composition.
| composition | The composition of the material. |
This constructor builds the reaction network from the given composition using the build_reaclib_nuclear_network function.
Definition at line 26 of file engine_graph.cpp.
|
explicit |
Constructs a GraphEngine from a set of reactions.
| reactions | The set of reactions to use in the network. |
This constructor uses the given set of reactions to construct the reaction network.
Definition at line 33 of file engine_graph.cpp.
|
nodiscardprivate |
Calculates all derivatives (dY/dt) and the energy generation rate (automatic differentiation).
| Y_in | Vector of current abundances for all species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method calculates the time derivatives of all species and the specific nuclear energy generation rate for the current state using automatic differentiation.
Definition at line 258 of file engine_graph.cpp.
|
nodiscardprivate |
Calculates all derivatives (dY/dt) and the energy generation rate (double precision).
| Y_in | Vector of current abundances for all species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method calculates the time derivatives of all species and the specific nuclear energy generation rate for the current state using double precision arithmetic.
Definition at line 250 of file engine_graph.cpp.
|
nodiscardprivate |
Calculates all derivatives (dY/dt) and the energy generation rate.
| T | The numeric type to use for the calculation. |
| Y_in | Vector of current abundances for all species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method calculates the time derivatives of all species and the specific nuclear energy generation rate for the current state.
Definition at line 487 of file engine_graph.h.
|
nodiscardoverridevirtual |
Calculates the molar reaction flow for a given reaction.
| reaction | The reaction for which to calculate the flow. |
| Y | Vector of current abundances. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method computes the net rate at which the given reaction proceeds under the current state.
Implements gridfire::DynamicEngine.
Definition at line 275 of file engine_graph.cpp.
|
private |
Calculates the molar reaction flow for a given reaction.
| T | The numeric type to use for the calculation. |
| reaction | The reaction for which to calculate the flow. |
| Y | Vector of current abundances. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method computes the net rate at which the given reaction proceeds under the current state.
Definition at line 555 of file engine_graph.h.
|
nodiscardoverridevirtual |
Calculates the right-hand side (dY/dt) and energy generation rate.
| Y | Vector of current abundances for all species. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method calculates the time derivatives of all species and the specific nuclear energy generation rate for the current state.
Implements gridfire::Engine.
Definition at line 38 of file engine_graph.cpp.
|
private |
Collects the unique species in the network.
This method collects the unique species in the network from the reactants and products of all reactions.
Definition at line 57 of file engine_graph.cpp.
| void gridfire::GraphEngine::exportToCSV | ( | const std::string & | filename | ) | const |
Exports the network to a CSV file for analysis.
| filename | The name of the CSV file to create. |
This method generates a CSV file containing information about the reactions in the network, including the reactants, products, Q-value, and reaction rate coefficients.
| std::runtime_error | If the file cannot be opened for writing. |
Example usage:
Definition at line 382 of file engine_graph.cpp.
| void gridfire::GraphEngine::exportToDot | ( | const std::string & | filename | ) | const |
Exports the network to a DOT file for visualization.
| filename | The name of the DOT file to create. |
This method generates a DOT file that can be used to visualize the reaction network as a graph. The DOT file can be converted to a graphical image using Graphviz.
| std::runtime_error | If the file cannot be opened for writing. |
Example usage:
Definition at line 334 of file engine_graph.cpp.
|
overridevirtual |
Generates the Jacobian matrix for the current state.
| Y | Vector of current abundances. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method computes and stores the Jacobian matrix (∂(dY/dt)_i/∂Y_j) for the current state using automatic differentiation. The matrix can then be accessed via getJacobianMatrixEntry().
Implements gridfire::DynamicEngine.
Definition at line 284 of file engine_graph.cpp.
|
overridevirtual |
Generates the stoichiometry matrix for the network.
This method computes and stores the stoichiometry matrix, which encodes the net change of each species in each reaction.
Implements gridfire::DynamicEngine.
Definition at line 209 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Gets an entry from the previously generated Jacobian matrix.
| i | Row index (species index). |
| j | Column index (species index). |
The Jacobian must have been generated by generateJacobianMatrix() before calling this.
Implements gridfire::DynamicEngine.
Definition at line 317 of file engine_graph.cpp.
|
staticnodiscard |
Gets the net stoichiometry for a given reaction.
| reaction | The reaction for which to get the stoichiometry. |
Definition at line 321 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Gets the set of logical reactions in the network.
Implements gridfire::DynamicEngine.
Definition at line 119 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Gets the list of species in the network.
Implements gridfire::Engine.
Definition at line 113 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Implements gridfire::DynamicEngine.
Definition at line 271 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Computes timescales for all species in the network.
| Y | Vector of current abundances. |
| T9 | Temperature in units of 10^9 K. |
| rho | Density in g/cm^3. |
This method estimates the timescale for abundance change of each species, which can be used for timestep control or diagnostics.
Implements gridfire::DynamicEngine.
Definition at line 436 of file engine_graph.cpp.
|
nodiscardoverridevirtual |
Gets an entry from the stoichiometry matrix.
| speciesIndex | Index of the species. |
| reactionIndex | Index of the reaction. |
The stoichiometry matrix must have been generated by generateStoichiometryMatrix().
Implements gridfire::DynamicEngine.
Definition at line 327 of file engine_graph.cpp.
|
nodiscard |
Checks if a given species is involved in the network.
| species | The species to check. |
Definition at line 125 of file engine_graph.cpp.
|
private |
Populates the reaction ID map.
This method populates the reaction ID map, which maps reaction IDs to REACLIBReaction objects.
Definition at line 86 of file engine_graph.cpp.
|
private |
Populates the species-to-index map.
This method populates the species-to-index map, which maps species to their index in the stoichiometry matrix.
Definition at line 95 of file engine_graph.cpp.
|
private |
Records the AD tape for the right-hand side of the ODE.
This method records the AD tape for the right-hand side of the ODE, which is used to calculate the Jacobian matrix using automatic differentiation.
| std::runtime_error | If there are no species in the network. |
Definition at line 456 of file engine_graph.cpp.
|
private |
Reserves space for the Jacobian matrix.
This method reserves space for the Jacobian matrix, which is used to store the partial derivatives of the right-hand side of the ODE with respect to the species abundances.
Definition at line 102 of file engine_graph.cpp.
|
overridevirtual |
Implements gridfire::DynamicEngine.
Definition at line 266 of file engine_graph.cpp.
|
private |
Synchronizes the internal maps.
This method synchronizes the internal maps used by the engine, including the species map, reaction ID map, and species-to-index map. It also generates the stoichiometry matrix and records the AD tape.
Definition at line 47 of file engine_graph.cpp.
|
overridevirtual |
Implements gridfire::DynamicEngine.
Definition at line 452 of file engine_graph.cpp.
|
private |
Validates the composition against the current reaction set.
| composition | The composition to validate. |
| culling | The culling threshold to use. |
| T9 | The temperature to use. |
This method validates the composition against the current reaction set. If the composition is not compatible with the reaction set, the reaction set is rebuilt from the composition.
Definition at line 188 of file engine_graph.cpp.
|
nodiscardprivate |
Validates mass and charge conservation across all reactions.
This method checks that all reactions in the network conserve mass and charge. If any reaction does not conserve mass or charge, an error message is logged and false is returned.
Definition at line 133 of file engine_graph.cpp.
|
private |
Definition at line 322 of file engine_graph.h.
|
private |
Access to physical constants.
Definition at line 323 of file engine_graph.h.
|
private |
Jacobian matrix (species x species).
Definition at line 315 of file engine_graph.h.
|
private |
Definition at line 324 of file engine_graph.h.
|
private |
Vector of unique species in the network.
Definition at line 310 of file engine_graph.h.
|
private |
Map from species name to Species object.
Definition at line 311 of file engine_graph.h.
|
private |
Map from reaction ID to REACLIBReaction. //PERF: This makes copies of REACLIBReaction and could be a performance bottleneck.
Definition at line 308 of file engine_graph.h.
|
private |
Set of REACLIB reactions in the network.
Definition at line 307 of file engine_graph.h.
|
private |
CppAD function for the right-hand side of the ODE.
Definition at line 317 of file engine_graph.h.
|
private |
Definition at line 320 of file engine_graph.h.
|
private |
Screening type for the reaction network. Default to no screening.
Definition at line 319 of file engine_graph.h.
|
private |
Map from species to their index in the stoichiometry matrix.
Definition at line 312 of file engine_graph.h.
|
private |
Stoichiometry matrix (species x reactions).
Definition at line 314 of file engine_graph.h.