Files
MeanField_SERiF/docs/xml/namespaceserif_1_1solver_1_1detail.xml
Emily Boudreaux 6b57738330 docs(docs): built docs
Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
2026-11-09 14:09:44 -05:00

407 lines
21 KiB
XML

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
<compounddef id="namespaceserif_1_1solver_1_1detail" kind="namespace" language="C++">
<compoundname>serif::solver::detail</compoundname>
<innerclass refid="structserif_1_1solver_1_1detail_1_1_initial_evaluation" prot="public">serif::solver::detail::InitialEvaluation</innerclass>
<innerclass refid="structserif_1_1solver_1_1detail_1_1_newton_failure" prot="public">serif::solver::detail::NewtonFailure</innerclass>
<innerclass refid="structserif_1_1solver_1_1detail_1_1_qualified_step" prot="public">serif::solver::detail::QualifiedStep</innerclass>
<innerclass refid="classserif_1_1solver_1_1detail_1_1_solve_observation" prot="public">serif::solver::detail::SolveObservation</innerclass>
<sectiondef kind="var">
<memberdef kind="variable" id="namespaceserif_1_1solver_1_1detail_1aca34a8e5074029c302fd5d3fc9d35244" prot="public" static="no" constexpr="yes" mutable="no">
<templateparamlist>
<param>
<type>typename Options</type>
</param>
</templateparamlist>
<type>bool</type>
<definition>bool serif::solver::detail::checkpointable_options</definition>
<argsstring></argsstring>
<name>checkpointable_options</name>
<qualifiedname>serif::solver::detail::checkpointable_options</qualifiedname>
<initializer>=
std::same_as&lt;std::remove_cvref_t&lt;decltype(std::declval&lt;Options&gt;().strategies)&gt;, <ref refid="structserif_1_1solver_1_1_standard_newton" kindref="compound">StandardNewton</ref>&gt; &amp;&amp;
std::same_as&lt;std::remove_cvref_t&lt;decltype(std::declval&lt;Options&gt;().metric)&gt;, <ref refid="structserif_1_1solver_1_1_normalized_residual_metric" kindref="compound">NormalizedResidualMetric</ref>&gt; &amp;&amp;
std::same_as&lt;std::remove_cvref_t&lt;decltype(std::declval&lt;Options&gt;().linear_solver)&gt;, <ref refid="structserif_1_1solver_1_1linear_1_1_f_g_m_r_e_s" kindref="compound">linear::FGMRES</ref>&gt;</initializer>
<briefdescription>
<para>Only built-in stateless numerical policies currently have a complete restart contract. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/result.hpp" line="40" column="31" bodyfile="src/include/serif/solver/nonlinear/result.hpp" bodystart="40" bodyend="-1"/>
</memberdef>
</sectiondef>
<sectiondef kind="func">
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1ad84838af2c61fd8a7ff1143ed6e30e07" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
<templateparamlist>
<param>
<type>typename Problem</type>
</param>
<param>
<type>typename State</type>
</param>
<param>
<type>typename Options</type>
</param>
<param>
<type>typename Observer</type>
</param>
</templateparamlist>
<type>auto</type>
<definition>auto serif::solver::detail::run_newton</definition>
<argsstring>(Problem &amp;problem, State initial_state, Options options, Observer observer, std::optional&lt; NewtonProgress &gt; restart)</argsstring>
<name>run_newton</name>
<qualifiedname>serif::solver::detail::run_newton</qualifiedname>
<param>
<type>Problem &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>State</type>
<declname>initial_state</declname>
</param>
<param>
<type>Options</type>
<declname>options</declname>
</param>
<param>
<type>Observer</type>
<declname>observer</declname>
</param>
<param>
<type>std::optional&lt; <ref refid="structserif_1_1solver_1_1_newton_progress" kindref="compound">NewtonProgress</ref> &gt;</type>
<declname>restart</declname>
</param>
<briefdescription>
<para>Find equilibrium while retaining the last fully qualified physical state. </para>
</briefdescription>
<detaileddescription>
<para><simplesect kind="note"><para>Preparation belongs to the problem; this driver alone publishes accepted steps. Scratch vectors use the problem&apos;s native storage. Timing belongs entirely to observers. </para>
</simplesect>
</para>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/newton.hpp" line="21" column="15" bodyfile="src/include/serif/solver/nonlinear/newton.hpp" bodystart="21" bodyend="100"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1abcb4ab5dca0460589f2989c776a641d7" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
<type>std::optional&lt; std::string &gt;</type>
<definition>std::optional&lt; std::string &gt; serif::solver::detail::preparation_rejection</definition>
<argsstring>(const auto &amp;problem, const auto &amp;evaluation)</argsstring>
<name>preparation_rejection</name>
<qualifiedname>serif::solver::detail::preparation_rejection</qualifiedname>
<param>
<type>const auto &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>evaluation</declname>
</param>
<briefdescription>
<para>Preserve numerical preparation failures while propagating invalid physical configurations. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/qualification.hpp" line="13" column="27" bodyfile="src/include/serif/solver/nonlinear/qualification.hpp" bodystart="13" bodyend="20"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1a20193e65f854a97472b6a4f1602798e8" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
<type>std::expected&lt; <ref refid="structserif_1_1solver_1_1_metric_evaluation" kindref="compound">MetricEvaluation</ref>, <ref refid="structserif_1_1solver_1_1detail_1_1_newton_failure" kindref="compound">NewtonFailure</ref> &gt;</type>
<definition>std::expected&lt; MetricEvaluation, NewtonFailure &gt; serif::solver::detail::qualify_candidate</definition>
<argsstring>(auto &amp;problem, const auto &amp;state, const auto &amp;evaluation, auto &amp;metric_function, auto &amp;strategy, TrialAssessment assessment={})</argsstring>
<name>qualify_candidate</name>
<qualifiedname>serif::solver::detail::qualify_candidate</qualifiedname>
<param>
<type>auto &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>state</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>evaluation</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>metric_function</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>strategy</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_trial_assessment" kindref="compound">TrialAssessment</ref></type>
<declname>assessment</declname>
<defval>{}</defval>
</param>
<briefdescription>
<para>Qualify one already evaluated candidate through the same physical and metric gates everywhere. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/qualification.hpp" line="29" column="27" bodyfile="src/include/serif/solver/nonlinear/qualification.hpp" bodystart="29" bodyend="46"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1af66d3dcd2f2fc1b4e4858dcd4e23be8f" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="yes" virt="non-virtual">
<type>bool</type>
<definition>bool serif::solver::detail::finite_correction</definition>
<argsstring>(std::span&lt; const double &gt; correction, const int expected_size)</argsstring>
<name>finite_correction</name>
<qualifiedname>serif::solver::detail::finite_correction</qualifiedname>
<param>
<type>std::span&lt; const double &gt;</type>
<declname>correction</declname>
</param>
<param>
<type>const int</type>
<declname>expected_size</declname>
</param>
<briefdescription>
<para>Every custom backend must preserve the correction dimensions and finite coefficients. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/qualification.hpp" line="49" column="18" bodyfile="src/include/serif/solver/nonlinear/qualification.hpp" bodystart="49" bodyend="54"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1a07717377a241ffd25e63aa977ff4f554" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type>void</type>
<definition>void serif::solver::detail::validate_start</definition>
<argsstring>(const auto &amp;options, const std::optional&lt; NewtonProgress &gt; &amp;restart, std::size_t size)</argsstring>
<name>validate_start</name>
<qualifiedname>serif::solver::detail::validate_start</qualifiedname>
<param>
<type>const auto &amp;</type>
<declname>options</declname>
</param>
<param>
<type>const std::optional&lt; <ref refid="structserif_1_1solver_1_1_newton_progress" kindref="compound">NewtonProgress</ref> &gt; &amp;</type>
<declname>restart</declname>
</param>
<param>
<type>std::size_t</type>
<declname>size</declname>
</param>
<briefdescription>
<para>Validate controls and restored history before any physical preparation. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/steps.hpp" line="9" column="10" bodyfile="src/include/serif/solver/nonlinear/steps.hpp" bodystart="9" bodyend="28"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1a6791c39e3a55c271764d9926c97956e0" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
<templateparamlist>
<param>
<type>typename Problem</type>
</param>
</templateparamlist>
<type>std::expected&lt; <ref refid="structserif_1_1solver_1_1detail_1_1_initial_evaluation" kindref="compound">InitialEvaluation</ref>&lt; typename Problem::System &gt;, <ref refid="structserif_1_1solver_1_1detail_1_1_newton_failure" kindref="compound">NewtonFailure</ref> &gt;</type>
<definition>std::expected&lt; InitialEvaluation&lt; typename Problem::System &gt;, NewtonFailure &gt; serif::solver::detail::evaluate_start</definition>
<argsstring>(Problem &amp;problem, auto &amp;state, auto &amp;options, const std::optional&lt; NewtonProgress &gt; &amp;restart, SolveDiagnostics &amp;diagnostics)</argsstring>
<name>evaluate_start</name>
<qualifiedname>serif::solver::detail::evaluate_start</qualifiedname>
<param>
<type>Problem &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>state</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>options</declname>
</param>
<param>
<type>const std::optional&lt; <ref refid="structserif_1_1solver_1_1_newton_progress" kindref="compound">NewtonProgress</ref> &gt; &amp;</type>
<declname>restart</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref> &amp;</type>
<declname>diagnostics</declname>
</param>
<briefdescription>
<para>Qualify the initial state and verify a restart against its original convergence reference. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/steps.hpp" line="39" column="20" bodyfile="src/include/serif/solver/nonlinear/steps.hpp" bodystart="39" bodyend="64"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1a5961bb80a48f170cb4e90a77dcb039ec" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
<type>std::expected&lt; <ref refid="structserif_1_1solver_1_1_direction_assessment" kindref="compound">DirectionAssessment</ref>, <ref refid="structserif_1_1solver_1_1detail_1_1_newton_failure" kindref="compound">NewtonFailure</ref> &gt;</type>
<definition>std::expected&lt; DirectionAssessment, NewtonFailure &gt; serif::solver::detail::compute_direction</definition>
<argsstring>(auto &amp;problem, const auto &amp;accepted, const auto &amp;prepared, auto &amp;options, SolveDiagnostics &amp;diagnostics, auto &amp;rhs, auto &amp;correction, std::span&lt; double &gt; physical_direction)</argsstring>
<name>compute_direction</name>
<qualifiedname>serif::solver::detail::compute_direction</qualifiedname>
<param>
<type>auto &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>accepted</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>prepared</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>options</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref> &amp;</type>
<declname>diagnostics</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>rhs</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>correction</declname>
</param>
<param>
<type>std::span&lt; double &gt;</type>
<declname>physical_direction</declname>
</param>
<briefdescription>
<para>Solve and qualify a normalized correction before exposing its physical direction to backtracking. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/steps.hpp" line="67" column="20" bodyfile="src/include/serif/solver/nonlinear/steps.hpp" bodystart="67" bodyend="91"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1ad9c44d75fd77ec596f5d512dc3508bd1" prot="public" static="no" nodiscard="yes" const="no" explicit="no" inline="no" virt="non-virtual">
<templateparamlist>
<param>
<type>typename Problem</type>
</param>
<param>
<type>typename State</type>
</param>
<param>
<type>typename System</type>
</param>
<param>
<type>typename Model</type>
</param>
</templateparamlist>
<type>auto</type>
<definition>auto serif::solver::detail::find_acceptable_step</definition>
<argsstring>(Problem &amp;problem, const SolveResult&lt; State, System, Model &gt; &amp;accepted, MetricEvaluation accepted_metric, const auto &amp;correction, std::span&lt; const double &gt; physical_direction, const DirectionAssessment &amp;direction, double step, auto &amp;options, SolveDiagnostics &amp;diagnostics, auto &amp;observation)</argsstring>
<name>find_acceptable_step</name>
<qualifiedname>serif::solver::detail::find_acceptable_step</qualifiedname>
<param>
<type>Problem &amp;</type>
<declname>problem</declname>
</param>
<param>
<type>const <ref refid="classserif_1_1solver_1_1_solve_result" kindref="compound">SolveResult</ref>&lt; State, System, Model &gt; &amp;</type>
<declname>accepted</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_metric_evaluation" kindref="compound">MetricEvaluation</ref></type>
<declname>accepted_metric</declname>
</param>
<param>
<type>const auto &amp;</type>
<declname>correction</declname>
</param>
<param>
<type>std::span&lt; const double &gt;</type>
<declname>physical_direction</declname>
</param>
<param>
<type>const <ref refid="structserif_1_1solver_1_1_direction_assessment" kindref="compound">DirectionAssessment</ref> &amp;</type>
<declname>direction</declname>
</param>
<param>
<type>double</type>
<declname>step</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>options</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref> &amp;</type>
<declname>diagnostics</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>observation</declname>
</param>
<briefdescription>
<para>Find a safe, sufficiently decreasing candidate without changing the accepted state. </para>
</briefdescription>
<detaileddescription>
<para><simplesect kind="note"><para>A nonterminal candidate must prepare its inverse before publication. Preparation failure terminates this attempt; the caller still owns the previously accepted physical star. </para>
</simplesect>
</para>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/steps.hpp" line="110" column="11" bodyfile="src/include/serif/solver/nonlinear/steps.hpp" bodystart="110" bodyend="177"/>
</memberdef>
<memberdef kind="function" id="namespaceserif_1_1solver_1_1detail_1a94057867583afc7737886a2cc9cb27d3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type>void</type>
<definition>void serif::solver::detail::save_progress</definition>
<argsstring>(auto &amp;result, auto &amp;options, SolveDiagnostics &amp;diagnostics, MetricEvaluation metric, std::span&lt; const double &gt; correction, double next_step)</argsstring>
<name>save_progress</name>
<qualifiedname>serif::solver::detail::save_progress</qualifiedname>
<param>
<type>auto &amp;</type>
<declname>result</declname>
</param>
<param>
<type>auto &amp;</type>
<declname>options</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref> &amp;</type>
<declname>diagnostics</declname>
</param>
<param>
<type><ref refid="structserif_1_1solver_1_1_metric_evaluation" kindref="compound">MetricEvaluation</ref></type>
<declname>metric</declname>
</param>
<param>
<type>std::span&lt; const double &gt;</type>
<declname>correction</declname>
</param>
<param>
<type>double</type>
<declname>next_step</declname>
</param>
<briefdescription>
<para>Snapshot only fully committed numerical history; reporting has no influence on restart. </para>
</briefdescription>
<detaileddescription>
</detaileddescription>
<inbodydescription>
</inbodydescription>
<location file="src/include/serif/solver/nonlinear/steps.hpp" line="180" column="10" bodyfile="src/include/serif/solver/nonlinear/steps.hpp" bodystart="180" bodyend="187"/>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
<location file="src/include/serif/solver/nonlinear/newton.hpp" line="7" column="5"/>
</compounddef>
</doxygen>