Files
GridFire/docs/html/classgridfire_1_1solver_1_1_point_solver.html

822 lines
55 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>GridFire: gridfire::solver::PointSolver Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">GridFire<span id="projectnumber">&#160;v0.7.6rc4.0</span>
</div>
<div id="projectbrief">General Purpose Nuclear Network</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('classgridfire_1_1solver_1_1_point_solver.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-static-methods">Static Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classgridfire_1_1solver_1_1_point_solver-members.html">List of all members</a> </div>
<div class="headertitle"><div class="title">gridfire::solver::PointSolver Class Reference<span class="mlabels"><span class="mlabel final">final</span></span></div></div>
</div><!--header-->
<div class="contents">
<p>Stiff ODE integrator backed by SUNDIALS CVODE (BDF) for network + energy.
<a href="#details">More...</a></p>
<p><code>#include &lt;PointSolver.h&gt;</code></p>
<div class="dynheader">
Inheritance diagram for gridfire::solver::PointSolver:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classgridfire_1_1solver_1_1_point_solver__inherit__graph.svg" width="199" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for gridfire::solver::PointSolver:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classgridfire_1_1solver_1_1_point_solver__coll__graph.svg" width="199" height="126"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_r_h_s_output_data.html">CVODERHSOutputData</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html">CVODEUserData</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A helper struct to pass C++ context to C-style CVODE callbacks. <a href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2f6ca4d9a525746c4e037bc3df66096c" id="r_a2f6ca4d9a525746c4e037bc3df66096c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2f6ca4d9a525746c4e037bc3df66096c">PointSolver</a> (const <a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html">engine::DynamicEngine</a> &amp;engine)</td></tr>
<tr class="memdesc:a2f6ca4d9a525746c4e037bc3df66096c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct the CVODE strategy and create a SUNDIALS context. <br /></td></tr>
<tr class="separator:a2f6ca4d9a525746c4e037bc3df66096c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af67b6bebef730dcd201f4a7f99545d60" id="r_af67b6bebef730dcd201f4a7f99545d60"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af67b6bebef730dcd201f4a7f99545d60">PointSolver</a> (const <a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html">engine::DynamicEngine</a> &amp;engine, const <a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a> &amp;config)</td></tr>
<tr class="separator:af67b6bebef730dcd201f4a7f99545d60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7bff4ac62f118bb51adba9dee62d6874" id="r_a7bff4ac62f118bb51adba9dee62d6874"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7bff4ac62f118bb51adba9dee62d6874">getConfig</a> () const</td></tr>
<tr class="separator:a7bff4ac62f118bb51adba9dee62d6874"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56440c3329be6e245274e612a6048b92" id="r_a56440c3329be6e245274e612a6048b92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a56440c3329be6e245274e612a6048b92">evaluate</a> (<a class="el" href="structgridfire_1_1solver_1_1_solver_context_base.html">SolverContextBase</a> &amp;solver_ctx, const <a class="el" href="structgridfire_1_1_net_in.html">NetIn</a> &amp;netIn) const override</td></tr>
<tr class="memdesc:a56440c3329be6e245274e612a6048b92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Integrate from t=0 to netIn.tMax and return final composition and energy. <br /></td></tr>
<tr class="separator:a56440c3329be6e245274e612a6048b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a017888703ce6de13d4340a268898b7fd" id="r_a017888703ce6de13d4340a268898b7fd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a017888703ce6de13d4340a268898b7fd">evaluate</a> (<a class="el" href="structgridfire_1_1solver_1_1_solver_context_base.html">SolverContextBase</a> &amp;solver_ctx, const <a class="el" href="structgridfire_1_1_net_in.html">NetIn</a> &amp;netIn, bool displayTrigger, bool forceReinitialize=false) const</td></tr>
<tr class="memdesc:a017888703ce6de13d4340a268898b7fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call to evaluate which will let the user control if the trigger reasoning is displayed. <br /></td></tr>
<tr class="separator:a017888703ce6de13d4340a268898b7fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html">gridfire::solver::SingleZoneNetworkSolver&lt; engine::DynamicEngine &gt;</a></td></tr>
<tr class="memitem:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a73803c687b93d07f5c148662cc972e70"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a73803c687b93d07f5c148662cc972e70">SingleZoneNetworkSolver</a> (const EngineT &amp;engine)</td></tr>
<tr class="memdesc:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor for the NetworkSolverStrategy. <br /></td></tr>
<tr class="separator:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a2a7c2cff73a98cdae3ef3f6eda7a2c3a"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a2a7c2cff73a98cdae3ef3f6eda7a2c3a">~SingleZoneNetworkSolver</a> ()=default</td></tr>
<tr class="memdesc:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a73803c687b93d07f5c148662cc972e70"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a73803c687b93d07f5c148662cc972e70">SingleZoneNetworkSolver</a> (const EngineT &amp;engine)</td></tr>
<tr class="memdesc:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor for the NetworkSolverStrategy. <br /></td></tr>
<tr class="separator:a73803c687b93d07f5c148662cc972e70 inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a2a7c2cff73a98cdae3ef3f6eda7a2c3a"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a2a7c2cff73a98cdae3ef3f6eda7a2c3a">~SingleZoneNetworkSolver</a> ()=default</td></tr>
<tr class="memdesc:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a2a7c2cff73a98cdae3ef3f6eda7a2c3a inherit pub_methods_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a866bd58075b05c95222dd95abb86ca25" id="r_a866bd58075b05c95222dd95abb86ca25"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_r_h_s_output_data.html">CVODERHSOutputData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a866bd58075b05c95222dd95abb86ca25">calculate_rhs</a> (sunrealtype t, N_Vector y, N_Vector ydot, const <a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html">CVODEUserData</a> *data) const</td></tr>
<tr class="memdesc:a866bd58075b05c95222dd95abb86ca25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute RHS into ydot at time t from the engine and current state y. <br /></td></tr>
<tr class="separator:a866bd58075b05c95222dd95abb86ca25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f0ae9414dec5e9764b3b20592420a5a" id="r_a0f0ae9414dec5e9764b3b20592420a5a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0f0ae9414dec5e9764b3b20592420a5a">initialize_cvode_integration_resources</a> (<a class="el" href="structgridfire_1_1solver_1_1_point_solver_context.html">PointSolverContext</a> *ctx, uint64_t N, size_t numSpecies, double current_time, const fourdst::composition::Composition &amp;composition, double absTol, double relTol, double accumulatedEnergy) const</td></tr>
<tr class="memdesc:a0f0ae9414dec5e9764b3b20592420a5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocate and initialize CVODE vectors, linear algebra, tolerances, and constraints. <br /></td></tr>
<tr class="separator:a0f0ae9414dec5e9764b3b20592420a5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11c00afbad3e94d036e18c9312263091" id="r_a11c00afbad3e94d036e18c9312263091"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a11c00afbad3e94d036e18c9312263091">log_step_diagnostics</a> (<a class="el" href="structgridfire_1_1solver_1_1_point_solver_context.html">PointSolverContext</a> *sctx_p, <a class="el" href="classgridfire_1_1engine_1_1scratch_1_1_state_blob.html">engine::scratch::StateBlob</a> &amp;ctx, const <a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html">CVODEUserData</a> &amp;user_data, bool displayJacobianStiffness, bool displaySpeciesBalance, bool to_file, std::optional&lt; std::string &gt; filename) const</td></tr>
<tr class="memdesc:a11c00afbad3e94d036e18c9312263091"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute and print per-component error ratios; run diagnostic helpers. <br /></td></tr>
<tr class="separator:a11c00afbad3e94d036e18c9312263091"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-static-methods" name="pri-static-methods"></a>
Static Private Member Functions</h2></td></tr>
<tr class="memitem:acbfc90a7439f7a8a377d98571bade26b" id="r_acbfc90a7439f7a8a377d98571bade26b"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#acbfc90a7439f7a8a377d98571bade26b">cvode_rhs_wrapper</a> (sunrealtype t, N_Vector y, N_Vector ydot, void *user_data)</td></tr>
<tr class="memdesc:acbfc90a7439f7a8a377d98571bade26b"><td class="mdescLeft">&#160;</td><td class="mdescRight">CVODE RHS C-wrapper that delegates to calculate_rhs and captures exceptions. <br /></td></tr>
<tr class="separator:acbfc90a7439f7a8a377d98571bade26b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0eb347e114510de0dfeb9d86fb40c9d" id="r_ab0eb347e114510de0dfeb9d86fb40c9d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab0eb347e114510de0dfeb9d86fb40c9d">cvode_jac_wrapper</a> (sunrealtype t, N_Vector y, N_Vector ydot, SUNMatrix J, void *user_data, N_Vector tmp1, N_Vector tmp2, N_Vector tmp3)</td></tr>
<tr class="memdesc:ab0eb347e114510de0dfeb9d86fb40c9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">CVODE dense Jacobian C-wrapper that fills SUNDenseMatrix using the engine. <br /></td></tr>
<tr class="separator:ab0eb347e114510de0dfeb9d86fb40c9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a153f72c17a795f220ac6f674d2ad4ab6" id="r_a153f72c17a795f220ac6f674d2ad4ab6"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a153f72c17a795f220ac6f674d2ad4ab6">cvode_error_handler</a> (int line, const char *func, const char *file, const char *msg, SUNErrCode err_code, void *err_user_data, SUNContext sunctx)</td></tr>
<tr class="memdesc:a153f72c17a795f220ac6f674d2ad4ab6"><td class="mdescLeft">&#160;</td><td class="mdescRight">CVODE error handler that logs errors and warnings from SUNDIALS using the solver's logger. <br /></td></tr>
<tr class="separator:a153f72c17a795f220ac6f674d2ad4ab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:adfc110027e6e2cc6013c5792bc907a89" id="r_adfc110027e6e2cc6013c5792bc907a89"><td class="memItemLeft" align="right" valign="top">fourdst::config::Config&lt; <a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#adfc110027e6e2cc6013c5792bc907a89">m_config</a></td></tr>
<tr class="separator:adfc110027e6e2cc6013c5792bc907a89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac561ab3f8d2fdcf0f4ddcdd2dc8025c6" id="r_ac561ab3f8d2fdcf0f4ddcdd2dc8025c6"><td class="memItemLeft" align="right" valign="top">quill::Logger *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac561ab3f8d2fdcf0f4ddcdd2dc8025c6">m_logger</a> = fourdst::logging::LogManager::getInstance().getLogger(&quot;log&quot;)</td></tr>
<tr class="separator:ac561ab3f8d2fdcf0f4ddcdd2dc8025c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html">gridfire::solver::SingleZoneNetworkSolver&lt; engine::DynamicEngine &gt;</a></td></tr>
<tr class="memitem:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a7bde224299d4cce01f60a85ec2b0f621"><td class="memItemLeft" align="right" valign="top">const EngineT &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a7bde224299d4cce01f60a85ec2b0f621">m_engine</a></td></tr>
<tr class="memdesc:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">The engine used by this solver strategy. <br /></td></tr>
<tr class="separator:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver" id="r_a7bde224299d4cce01f60a85ec2b0f621"><td class="memItemLeft" align="right" valign="top">const EngineT &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#a7bde224299d4cce01f60a85ec2b0f621">m_engine</a></td></tr>
<tr class="memdesc:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="mdescLeft">&#160;</td><td class="mdescRight">The engine used by this solver strategy. <br /></td></tr>
<tr class="separator:a7bde224299d4cce01f60a85ec2b0f621 inherit pro_attribs_classgridfire_1_1solver_1_1_single_zone_network_solver"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Stiff ODE integrator backed by SUNDIALS CVODE (BDF) for network + energy. </p>
<p>Integrates the nuclear network abundances along with a final accumulator entry for specific energy using CVODE's BDF method and a dense linear solver. The state vector layout is: [y_0, y_1, ..., y_{N-1}, eps], where eps is the accumulated specific energy (erg/g).</p>
<p>Implementation summary:</p><ul>
<li>Creates a SUNContext and CVODE memory; initializes the state from a Composition.</li>
<li>Enforces non-negativity on species via CVodeSetConstraints (&gt;= 0 for all species slots).</li>
<li>Uses a user-provided <a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html" title="Abstract class for engines supporting Jacobian and stoichiometry operations.">DynamicEngine</a> to compute RHS and to fill the dense Jacobian.</li>
<li>The Jacobian is assembled column-major into a SUNDenseMatrix; the energy row/column is currently set to zero (decoupled from abundances in the linearization).</li>
<li>An internal trigger can rebuild the engine/network; when triggered, CVODE resources are torn down and recreated with the new network size, preserving the energy accumulator.</li>
<li>The CVODE RHS wrapper captures exceptions::StaleEngineTrigger from the engine evaluation path as recoverable (return code 1) and stores a copy in user-data for the driver loop.</li>
</ul>
<dl class="section user"><dt>Example</dt><dd><div class="fragment"><div class="line"><span class="keyword">using </span>gridfire::solver::CVODESolverStrategy;</div>
<div class="line"><span class="keyword">using </span>gridfire::solver::NetIn;</div>
<div class="line"> </div>
<div class="line">CVODESolverStrategy <a class="code hl_namespace" href="namespacegridfire_1_1solver.html">solver</a>(<a class="code hl_namespace" href="namespacegridfire_1_1engine.html">engine</a>);</div>
<div class="line"><a class="code hl_struct" href="structgridfire_1_1_net_in.html">NetIn</a> in;</div>
<div class="line">in.<a class="code hl_variable" href="structgridfire_1_1_net_in.html#a5be0f5195a5cd1dd177b9fc5ab83a7be">temperature</a> = 1.0e9; <span class="comment">// K</span></div>
<div class="line">in.<a class="code hl_variable" href="structgridfire_1_1_net_in.html#a06f0dff9f8927b7cf2da3004c8fa1577">density</a> = 1.0e6; <span class="comment">// g/cm^3</span></div>
<div class="line">in.<a class="code hl_variable" href="structgridfire_1_1_net_in.html#a0a8d820cfeaa92ee31f253795c57e0d1">tMax</a> = 1.0; <span class="comment">// s</span></div>
<div class="line">in.<a class="code hl_variable" href="structgridfire_1_1_net_in.html#a13058f4929e72c1187abbebcddb8aed1">composition</a> = initialComposition;</div>
<div class="line"><span class="keyword">auto</span> out = <a class="code hl_namespace" href="namespacegridfire_1_1solver.html">solver</a>.evaluate(in);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Final energy: &quot;</span> &lt;&lt; out.energy &lt;&lt; <span class="stringliteral">&quot; erg/g\n&quot;</span>;</div>
<div class="ttc" id="anamespacegridfire_1_1engine_html"><div class="ttname"><a href="namespacegridfire_1_1engine.html">gridfire::engine</a></div><div class="ttdef"><b>Definition</b> dynamic_engine_diagnostics.h:39</div></div>
<div class="ttc" id="anamespacegridfire_1_1solver_html"><div class="ttname"><a href="namespacegridfire_1_1solver.html">gridfire::solver</a></div><div class="ttdef"><b>Definition</b> GridSolver.h:7</div></div>
<div class="ttc" id="astructgridfire_1_1_net_in_html"><div class="ttname"><a href="structgridfire_1_1_net_in.html">gridfire::NetIn</a></div><div class="ttdef"><b>Definition</b> types.h:27</div></div>
<div class="ttc" id="astructgridfire_1_1_net_in_html_a06f0dff9f8927b7cf2da3004c8fa1577"><div class="ttname"><a href="structgridfire_1_1_net_in.html#a06f0dff9f8927b7cf2da3004c8fa1577">gridfire::NetIn::density</a></div><div class="ttdeci">double density</div><div class="ttdoc">Density in g/cm^3.</div><div class="ttdef"><b>Definition</b> types.h:32</div></div>
<div class="ttc" id="astructgridfire_1_1_net_in_html_a0a8d820cfeaa92ee31f253795c57e0d1"><div class="ttname"><a href="structgridfire_1_1_net_in.html#a0a8d820cfeaa92ee31f253795c57e0d1">gridfire::NetIn::tMax</a></div><div class="ttdeci">double tMax</div><div class="ttdoc">Maximum time.</div><div class="ttdef"><b>Definition</b> types.h:29</div></div>
<div class="ttc" id="astructgridfire_1_1_net_in_html_a13058f4929e72c1187abbebcddb8aed1"><div class="ttname"><a href="structgridfire_1_1_net_in.html#a13058f4929e72c1187abbebcddb8aed1">gridfire::NetIn::composition</a></div><div class="ttdeci">fourdst::composition::Composition composition</div><div class="ttdoc">Composition of the network.</div><div class="ttdef"><b>Definition</b> types.h:28</div></div>
<div class="ttc" id="astructgridfire_1_1_net_in_html_a5be0f5195a5cd1dd177b9fc5ab83a7be"><div class="ttname"><a href="structgridfire_1_1_net_in.html#a5be0f5195a5cd1dd177b9fc5ab83a7be">gridfire::NetIn::temperature</a></div><div class="ttdeci">double temperature</div><div class="ttdoc">Temperature in Kelvin.</div><div class="ttdef"><b>Definition</b> types.h:31</div></div>
</div><!-- fragment --> </dd></dl>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a2f6ca4d9a525746c4e037bc3df66096c" name="a2f6ca4d9a525746c4e037bc3df66096c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f6ca4d9a525746c4e037bc3df66096c">&#9670;&#160;</a></span>PointSolver() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">gridfire::solver::PointSolver::PointSolver </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html">engine::DynamicEngine</a> &amp;</td> <td class="paramname"><span class="paramname"><em>engine</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel explicit">explicit</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Construct the CVODE strategy and create a SUNDIALS context. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">engine</td><td><a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html" title="Abstract class for engines supporting Jacobian and stoichiometry operations.">DynamicEngine</a> used for RHS/Jacobian evaluation and network access. </td></tr>
</table>
</dd>
</dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>If SUNContext_Create fails. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="af67b6bebef730dcd201f4a7f99545d60" name="af67b6bebef730dcd201f4a7f99545d60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af67b6bebef730dcd201f4a7f99545d60">&#9670;&#160;</a></span>PointSolver() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">gridfire::solver::PointSolver::PointSolver </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgridfire_1_1engine_1_1_dynamic_engine.html">engine::DynamicEngine</a> &amp;</td> <td class="paramname"><span class="paramname"><em>engine</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a> &amp;</td> <td class="paramname"><span class="paramname"><em>config</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a866bd58075b05c95222dd95abb86ca25" name="a866bd58075b05c95222dd95abb86ca25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a866bd58075b05c95222dd95abb86ca25">&#9670;&#160;</a></span>calculate_rhs()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_r_h_s_output_data.html">PointSolver::CVODERHSOutputData</a> gridfire::solver::PointSolver::calculate_rhs </td>
<td>(</td>
<td class="paramtype">sunrealtype</td> <td class="paramname"><span class="paramname"><em>t</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>y</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>ydot</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html">CVODEUserData</a> *</td> <td class="paramname"><span class="paramname"><em>data</em></span>&#160;) const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute RHS into ydot at time t from the engine and current state y. </p>
<p>Converts the CVODE state to a Composition (mass fractions) and calls engine.calculateRHSAndEnergy(T9, rho). Negative small abundances are clamped to zero before constructing Composition. On stale engine, throws exceptions::StaleEngineTrigger. </p>
</div>
</div>
<a id="a153f72c17a795f220ac6f674d2ad4ab6" name="a153f72c17a795f220ac6f674d2ad4ab6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a153f72c17a795f220ac6f674d2ad4ab6">&#9670;&#160;</a></span>cvode_error_handler()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void gridfire::solver::PointSolver::cvode_error_handler </td>
<td>(</td>
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>line</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>func</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>file</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *</td> <td class="paramname"><span class="paramname"><em>msg</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">SUNErrCode</td> <td class="paramname"><span class="paramname"><em>err_code</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>err_user_data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">SUNContext</td> <td class="paramname"><span class="paramname"><em>sunctx</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>CVODE error handler that logs errors and warnings from SUNDIALS using the solver's logger. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">line</td><td></td></tr>
<tr><td class="paramname">func</td><td></td></tr>
<tr><td class="paramname">file</td><td></td></tr>
<tr><td class="paramname">msg</td><td></td></tr>
<tr><td class="paramname">err_code</td><td></td></tr>
<tr><td class="paramname">err_user_data</td><td></td></tr>
<tr><td class="paramname">sunctx</td><td></td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ab0eb347e114510de0dfeb9d86fb40c9d" name="ab0eb347e114510de0dfeb9d86fb40c9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0eb347e114510de0dfeb9d86fb40c9d">&#9670;&#160;</a></span>cvode_jac_wrapper()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int gridfire::solver::PointSolver::cvode_jac_wrapper </td>
<td>(</td>
<td class="paramtype">sunrealtype</td> <td class="paramname"><span class="paramname"><em>t</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>y</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>ydot</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">SUNMatrix</td> <td class="paramname"><span class="paramname"><em>J</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>user_data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>tmp1</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>tmp2</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>tmp3</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>CVODE dense Jacobian C-wrapper that fills SUNDenseMatrix using the engine. </p>
<p>Assembles J(i,j) = d(f_i)/d(y_j) for all species using engine-&gt;getJacobianMatrixEntry, then zeros the last row and column corresponding to the energy variable. </p>
</div>
</div>
<a id="acbfc90a7439f7a8a377d98571bade26b" name="acbfc90a7439f7a8a377d98571bade26b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbfc90a7439f7a8a377d98571bade26b">&#9670;&#160;</a></span>cvode_rhs_wrapper()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int gridfire::solver::PointSolver::cvode_rhs_wrapper </td>
<td>(</td>
<td class="paramtype">sunrealtype</td> <td class="paramname"><span class="paramname"><em>t</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>y</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">N_Vector</td> <td class="paramname"><span class="paramname"><em>ydot</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>user_data</em></span>&#160;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>CVODE RHS C-wrapper that delegates to calculate_rhs and captures exceptions. </p>
<dl class="section return"><dt>Returns</dt><dd>0 on success; 1 on recoverable StaleEngineTrigger; -1 on other failures. </dd></dl>
</div>
</div>
<a id="a56440c3329be6e245274e612a6048b92" name="a56440c3329be6e245274e612a6048b92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56440c3329be6e245274e612a6048b92">&#9670;&#160;</a></span>evaluate() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a> gridfire::solver::PointSolver::evaluate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structgridfire_1_1solver_1_1_solver_context_base.html">SolverContextBase</a> &amp;</td> <td class="paramname"><span class="paramname"><em>solver_ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structgridfire_1_1_net_in.html">NetIn</a> &amp;</td> <td class="paramname"><span class="paramname"><em>netIn</em></span>&#160;) const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel override">override</span><span class="mlabel virtual">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Integrate from t=0 to netIn.tMax and return final composition and energy. </p>
<p>Implementation summary:</p><ul>
<li>Converts temperature to T9, initializes CVODE memory and state (size = numSpecies + 1).</li>
<li>Repeatedly calls CVode in single-step or normal mode depending on stdout logging.</li>
<li>Wraps RHS to capture exceptions::StaleEngineTrigger as a recoverable step failure; if present after a step, it is rethrown for upstream handling.</li>
<li>Prints/collects diagnostics per step (step size, energy, solver iterations).</li>
<li>On trigger activation, rebuilds CVODE resources to reflect a changed network and reinitialized the state using the latest engine composition, preserving energy.</li>
<li>At the end, converts molar abundances to mass fractions and assembles <a class="el" href="structgridfire_1_1_net_out.html">NetOut</a>, including derivatives of energy w.r.t. T and rho from the engine.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">solver_ctx</td><td></td></tr>
<tr><td class="paramname">netIn</td><td>Inputs: temperature [K], density [g cm^-3], tMax [s], composition. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a> containing final Composition, accumulated energy [erg/g], step count, and dEps/dT, dEps/dRho. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>If any CVODE or SUNDIALS call fails (negative return codes), or if internal consistency checks fail during engine updates. </td></tr>
<tr><td class="paramname">exceptions::StaleEngineTrigger</td><td>Propagated if the engine signals a stale state during RHS evaluation (captured in the wrapper then rethrown here). </td></tr>
</table>
</dd>
</dl>
<p>Implements <a class="el" href="classgridfire_1_1solver_1_1_single_zone_network_solver.html#abc4e0a88955a1bbac7886132240ca02d">gridfire::solver::SingleZoneNetworkSolver&lt; engine::DynamicEngine &gt;</a>.</p>
</div>
</div>
<a id="a017888703ce6de13d4340a268898b7fd" name="a017888703ce6de13d4340a268898b7fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a017888703ce6de13d4340a268898b7fd">&#9670;&#160;</a></span>evaluate() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a> gridfire::solver::PointSolver::evaluate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structgridfire_1_1solver_1_1_solver_context_base.html">SolverContextBase</a> &amp;</td> <td class="paramname"><span class="paramname"><em>solver_ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structgridfire_1_1_net_in.html">NetIn</a> &amp;</td> <td class="paramname"><span class="paramname"><em>netIn</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool</td> <td class="paramname"><span class="paramname"><em>displayTrigger</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool</td> <td class="paramname"><span class="paramname"><em>forceReinitialize</em></span><span class="paramdefsep"> = </span><span class="paramdefval">false</span>&#160;) const</td>
</tr>
</table>
</div><div class="memdoc">
<p>Call to evaluate which will let the user control if the trigger reasoning is displayed. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">solver_ctx</td><td></td></tr>
<tr><td class="paramname">netIn</td><td>Inputs: temperature [K], density [g cm^-3], tMax [s], composition. </td></tr>
<tr><td class="paramname">displayTrigger</td><td>Boolean flag to control if trigger reasoning is displayed </td></tr>
<tr><td class="paramname">forceReinitialize</td><td>Boolean flag to force reinitialization of CVODE resources at the start </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="structgridfire_1_1_net_out.html">NetOut</a> containing final Composition, accumulated energy [erg/g], step count, and dEps/dT, dEps/dRho. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>If any CVODE or SUNDIALS call fails (negative return codes), or if internal consistency checks fail during engine updates. </td></tr>
<tr><td class="paramname">exceptions::StaleEngineTrigger</td><td>Propagated if the engine signals a stale state during RHS evaluation (captured in the wrapper then rethrown here). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a7bff4ac62f118bb51adba9dee62d6874" name="a7bff4ac62f118bb51adba9dee62d6874"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7bff4ac62f118bb51adba9dee62d6874">&#9670;&#160;</a></span>getConfig()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a> gridfire::solver::PointSolver::getConfig </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a0f0ae9414dec5e9764b3b20592420a5a" name="a0f0ae9414dec5e9764b3b20592420a5a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0f0ae9414dec5e9764b3b20592420a5a">&#9670;&#160;</a></span>initialize_cvode_integration_resources()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void gridfire::solver::PointSolver::initialize_cvode_integration_resources </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_context.html">PointSolverContext</a> *</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint64_t</td> <td class="paramname"><span class="paramname"><em>N</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>numSpecies</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double</td> <td class="paramname"><span class="paramname"><em>current_time</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const fourdst::composition::Composition &amp;</td> <td class="paramname"><span class="paramname"><em>composition</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double</td> <td class="paramname"><span class="paramname"><em>absTol</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double</td> <td class="paramname"><span class="paramname"><em>relTol</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double</td> <td class="paramname"><span class="paramname"><em>accumulatedEnergy</em></span>&#160;) const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocate and initialize CVODE vectors, linear algebra, tolerances, and constraints. </p>
<p>State vector m_Y is sized to N (numSpecies + 1). Species slots are initialized from Composition molar abundances when present, otherwise a tiny positive value; the last slot is set to accumulatedEnergy. Sets scalar tolerances, non-negativity constraints for species, maximum step size, creates a dense matrix and dense linear solver, and registers the Jacobian. </p>
</div>
</div>
<a id="a11c00afbad3e94d036e18c9312263091" name="a11c00afbad3e94d036e18c9312263091"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11c00afbad3e94d036e18c9312263091">&#9670;&#160;</a></span>log_step_diagnostics()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void gridfire::solver::PointSolver::log_step_diagnostics </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structgridfire_1_1solver_1_1_point_solver_context.html">PointSolverContext</a> *</td> <td class="paramname"><span class="paramname"><em>sctx_p</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classgridfire_1_1engine_1_1scratch_1_1_state_blob.html">engine::scratch::StateBlob</a> &amp;</td> <td class="paramname"><span class="paramname"><em>ctx</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structgridfire_1_1solver_1_1_point_solver_1_1_c_v_o_d_e_user_data.html">CVODEUserData</a> &amp;</td> <td class="paramname"><span class="paramname"><em>user_data</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool</td> <td class="paramname"><span class="paramname"><em>displayJacobianStiffness</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool</td> <td class="paramname"><span class="paramname"><em>displaySpeciesBalance</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool</td> <td class="paramname"><span class="paramname"><em>to_file</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::optional&lt; std::string &gt;</td> <td class="paramname"><span class="paramname"><em>filename</em></span>&#160;) const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Compute and print per-component error ratios; run diagnostic helpers. </p>
<p>Gathers CVODE's estimated local errors, converts the state to a Composition, and prints a sorted table of species with the highest error ratios; then invokes diagnostic routines to inspect Jacobian stiffness and species balance. </p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="adfc110027e6e2cc6013c5792bc907a89" name="adfc110027e6e2cc6013c5792bc907a89"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adfc110027e6e2cc6013c5792bc907a89">&#9670;&#160;</a></span>m_config</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">fourdst::config::Config&lt;<a class="el" href="structgridfire_1_1config_1_1_grid_fire_config.html">config::GridFireConfig</a>&gt; gridfire::solver::PointSolver::m_config</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ac561ab3f8d2fdcf0f4ddcdd2dc8025c6" name="ac561ab3f8d2fdcf0f4ddcdd2dc8025c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac561ab3f8d2fdcf0f4ddcdd2dc8025c6">&#9670;&#160;</a></span>m_logger</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">quill::Logger* gridfire::solver::PointSolver::m_logger = fourdst::logging::LogManager::getInstance().getLogger(&quot;log&quot;)</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel private">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/include/gridfire/solver/strategies/<a class="el" href="_point_solver_8h.html">PointSolver.h</a></li>
<li>src/lib/solver/strategies/<a class="el" href="_point_solver_8cpp.html">PointSolver.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacegridfire.html">gridfire</a></li><li class="navelem"><a class="el" href="namespacegridfire_1_1solver.html">solver</a></li><li class="navelem"><a class="el" href="classgridfire_1_1solver_1_1_point_solver.html">PointSolver</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>