GridFire 0.6.0
General Purpose Nuclear Network
Loading...
Searching...
No Matches
gridfire::MultiscalePartitioningEngineView::EigenFunctor Struct Reference

Functor for solving QSE abundances using Eigen's nonlinear optimization. More...

Public Types

enum  { InputsAtCompileTime = Eigen::Dynamic , ValuesAtCompileTime = Eigen::Dynamic }
 
using InputType = Eigen::Matrix<double, Eigen::Dynamic, 1>
 
using OutputType = Eigen::Matrix<double, Eigen::Dynamic, 1>
 
using JacobianType = Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>
 

Public Member Functions

 EigenFunctor (MultiscalePartitioningEngineView &view, const std::vector< size_t > &qse_solve_indices, const std::vector< double > &Y_full_initial, const double T9, const double rho, const Eigen::VectorXd &Y_scale)
 Constructs an EigenFunctor.
 
int values () const
 Gets the number of output values from the functor (size of the residual vector).
 
int inputs () const
 Gets the number of input values to the functor (size of the variable vector).
 
int operator() (const InputType &v_qse, OutputType &f_qse) const
 Evaluates the functor's residual vector f_qse = dY_alg/dt.
 
int df (const InputType &v_qse, JacobianType &J_qse) const
 Evaluates the Jacobian of the functor, J_qse = d(f_qse)/d(v_qse).
 

Public Attributes

MultiscalePartitioningEngineViewm_view
 Pointer to the MultiscalePartitioningEngineView instance.
 
const std::vector< size_t > & m_qse_solve_indices
 Indices of the species to solve for in the QSE group.
 
const std::vector< double > & m_Y_full_initial
 Initial abundances of all species in the full network.
 
const double m_T9
 Temperature in units of 10^9 K.
 
const double m_rho
 Density in g/cm^3.
 
const Eigen::VectorXd & m_Y_scale
 Scaling factors for the species abundances, used to improve solver stability.
 

Detailed Description

Functor for solving QSE abundances using Eigen's nonlinear optimization.

Purpose
This struct provides the objective function (operator()) and its Jacobian (df) to Eigen's Levenberg-Marquardt solver. The goal is to find the abundances of algebraic species that make their time derivatives (dY/dt) equal to zero.

@how

  • operator(): Takes a vector v_qse (scaled abundances of algebraic species) as input. It constructs a full trial abundance vector y_trial, calls the base engine's calculateRHSAndEnergy, and returns the dY/dt values for the algebraic species. The solver attempts to drive this return vector to zero.
  • df: Computes the Jacobian of the objective function. It calls the base engine's generateJacobianMatrix and extracts the sub-matrix corresponding to the algebraic species. It applies the chain rule to account for the asinh scaling used on the abundances.

The abundances are scaled using asinh to handle the large dynamic range and ensure positivity.

Member Typedef Documentation

◆ InputType

using gridfire::MultiscalePartitioningEngineView::EigenFunctor::InputType = Eigen::Matrix<double, Eigen::Dynamic, 1>

◆ JacobianType

using gridfire::MultiscalePartitioningEngineView::EigenFunctor::JacobianType = Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>

◆ OutputType

using gridfire::MultiscalePartitioningEngineView::EigenFunctor::OutputType = Eigen::Matrix<double, Eigen::Dynamic, 1>

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
InputsAtCompileTime 
ValuesAtCompileTime 

Constructor & Destructor Documentation

◆ EigenFunctor()

gridfire::MultiscalePartitioningEngineView::EigenFunctor::EigenFunctor ( MultiscalePartitioningEngineView & view,
const std::vector< size_t > & qse_solve_indices,
const std::vector< double > & Y_full_initial,
const double T9,
const double rho,
const Eigen::VectorXd & Y_scale )
inline

Constructs an EigenFunctor.

Parameters
viewThe MultiscalePartitioningEngineView instance.
qse_solve_indicesIndices of the species to solve for in the QSE group.
Y_full_initialInitial abundances of all species.
T9Temperature in units of 10^9 K.
rhoDensity in g/cm^3.
Y_scaleScaling factors for the species abundances.

Member Function Documentation

◆ df()

int gridfire::MultiscalePartitioningEngineView::EigenFunctor::df ( const InputType & v_qse,
JacobianType & J_qse ) const

Evaluates the Jacobian of the functor, J_qse = d(f_qse)/d(v_qse).

Parameters
v_qseThe input vector of scaled algebraic abundances.
J_qseThe output Jacobian matrix.
Returns
0 on success.

◆ inputs()

int gridfire::MultiscalePartitioningEngineView::EigenFunctor::inputs ( ) const
inlinenodiscard

Gets the number of input values to the functor (size of the variable vector).

Returns
The number of algebraic species being solved.

◆ operator()()

int gridfire::MultiscalePartitioningEngineView::EigenFunctor::operator() ( const InputType & v_qse,
OutputType & f_qse ) const

Evaluates the functor's residual vector f_qse = dY_alg/dt.

Parameters
v_qseThe input vector of scaled algebraic abundances.
f_qseThe output residual vector.
Returns
0 on success.

◆ values()

int gridfire::MultiscalePartitioningEngineView::EigenFunctor::values ( ) const
inlinenodiscard

Gets the number of output values from the functor (size of the residual vector).

Returns
The number of algebraic species being solved.

Member Data Documentation

◆ m_qse_solve_indices

const std::vector<size_t>& gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_qse_solve_indices

Indices of the species to solve for in the QSE group.

◆ m_rho

const double gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_rho

Density in g/cm^3.

◆ m_T9

const double gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_T9

Temperature in units of 10^9 K.

◆ m_view

MultiscalePartitioningEngineView* gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_view

Pointer to the MultiscalePartitioningEngineView instance.

◆ m_Y_full_initial

const std::vector<double>& gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_Y_full_initial

Initial abundances of all species in the full network.

◆ m_Y_scale

const Eigen::VectorXd& gridfire::MultiscalePartitioningEngineView::EigenFunctor::m_Y_scale

Scaling factors for the species abundances, used to improve solver stability.


The documentation for this struct was generated from the following files: