perf(EigenFunctor): Jacobian Cachine

FOr QSE solving the Jacobian does not change meaninfully between steps.
We have introduced caching so that it does not need to be reevaluated
every step
This commit is contained in:
2025-11-19 07:17:57 -05:00
parent 90629992d3
commit 80dba50330
2 changed files with 6 additions and 1 deletions

View File

@@ -670,6 +670,8 @@ namespace gridfire {
*/ */
const std::unordered_map<fourdst::atomic::Species, size_t> m_qse_solve_species_index_map; const std::unordered_map<fourdst::atomic::Species, size_t> m_qse_solve_species_index_map;
mutable std::optional<JacobianType> m_cached_jacobian = std::nullopt;
/** /**
* @brief Constructs an EigenFunctor. * @brief Constructs an EigenFunctor.
* *

View File

@@ -1091,7 +1091,8 @@ namespace gridfire {
const double rho const double rho
) const { ) const {
const fourdst::composition::Composition result = m_baseEngine.collectComposition(comp, T9, rho); const fourdst::composition::Composition result = m_baseEngine.collectComposition(comp, T9, rho);
fourdst::composition::Composition qseComposition = solveQSEAbundances(result, T9, rho);
fourdst::composition::Composition qseComposition = getNormalizedEquilibratedComposition(result, T9, rho);
return qseComposition; return qseComposition;
} }
@@ -1903,6 +1904,8 @@ namespace gridfire {
} }
} }
m_cached_jacobian = J_qse; // Cache the computed Jacobian for future use
return 0; // Success return 0; // Success
} }