Files
MeanField_SERiF/docs/xml/newton_8hpp.xml

439 lines
44 KiB
XML
Raw Normal View History

<?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="newton_8hpp" kind="file" language="C++">
<compoundname>newton.hpp</compoundname>
<includes refid="solver_2nonlinear_2observers_8hpp" local="yes">serif/solver/nonlinear/observers.hpp</includes>
<includes refid="steps_8hpp" local="yes">serif/solver/nonlinear/steps.hpp</includes>
<includedby refid="backend__independent_8cpp" local="yes">src/compile_time_checks/serif/backend_independent.cpp</includedby>
<includedby refid="public__contracts_8cpp" local="yes">src/compile_time_checks/serif/solver/public_contracts.cpp</includedby>
<includedby refid="solver_2equilibrium_8hpp" local="yes">src/include/serif/solver/equilibrium.hpp</includedby>
<incdepgraph>
<node id="14">
<label>serif/geometry/deformation/geometry_step.hpp</label>
<link refid="geometry_2deformation_2geometry__step_8hpp"/>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="16" relation="include">
</childnode>
</node>
<node id="35">
<label>serif/meta/enums.hpp</label>
<link refid="enums_8hpp"/>
<childnode refid="36" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
</node>
<node id="20">
<label>serif/solver/linear/linear.hpp</label>
<link refid="linear_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/solver/nonlinear/newton.hpp</label>
<link refid="newton_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="40" relation="include">
</childnode>
</node>
<node id="2">
<label>serif/solver/nonlinear/observers.hpp</label>
<link refid="solver_2nonlinear_2observers_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
</node>
<node id="17">
<label>serif/solver/nonlinear/options.hpp</label>
<link refid="solver_2nonlinear_2options_8hpp"/>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="10" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
</node>
<node id="41">
<label>serif/solver/nonlinear/qualification.hpp</label>
<link refid="qualification_8hpp"/>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="42" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="22" relation="include">
</childnode>
</node>
<node id="6">
<label>serif/solver/nonlinear/result.hpp</label>
<link refid="solver_2nonlinear_2result_8hpp"/>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="9" relation="include">
</childnode>
<childnode refid="10" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="13" relation="include">
</childnode>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="22" relation="include">
</childnode>
</node>
<node id="40">
<label>serif/solver/nonlinear/steps.hpp</label>
<link refid="steps_8hpp"/>
<childnode refid="16" relation="include">
</childnode>
<childnode refid="41" relation="include">
</childnode>
</node>
<node id="34">
<label>serif/utils/error/codes.hpp</label>
<link refid="codes_8hpp"/>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="35" relation="include">
</childnode>
</node>
<node id="22">
<label>serif/utils/error/errors.hpp</label>
<link refid="errors_8hpp"/>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="26" relation="include">
</childnode>
<childnode refid="27" relation="include">
</childnode>
<childnode refid="30" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="38" relation="include">
</childnode>
</node>
<node id="30">
<label>serif/utils/misc/concepts/exceptions.hpp</label>
<link refid="utils_2misc_2concepts_2exceptions_8hpp"/>
<childnode refid="31" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
</node>
<node id="32">
<label>serif/utils/misc/concepts/numeric.hpp</label>
<link refid="numeric_8hpp"/>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
</node>
<node id="27">
<label>serif/utils/misc/terminal/colors.hpp</label>
<link refid="colors_8hpp"/>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="29" relation="include">
</childnode>
</node>
<node id="38">
<label>serif/utils/types/strings.hpp</label>
<link refid="types_2strings_8hpp"/>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
</node>
<node id="7">
<label>algorithm</label>
</node>
<node id="3">
<label>chrono</label>
</node>
<node id="8">
<label>cmath</label>
</node>
<node id="33">
<label>concepts</label>
</node>
<node id="15">
<label>cstddef</label>
</node>
<node id="21">
<label>cstdint</label>
</node>
<node id="25">
<label>cstdio</label>
</node>
<node id="28">
<label>cstdlib</label>
</node>
<node id="31">
<label>exception</label>
</node>
<node id="42">
<label>expected</label>
</node>
<node id="24">
<label>format</label>
</node>
<node id="4">
<label>functional</label>
</node>
<node id="39">
<label>iostream</label>
</node>
<node id="16">
<label>limits</label>
</node>
<node id="37">
<label>magic_enum/magic_enum_all.hpp</label>
</node>
<node id="9">
<label>memory</label>
</node>
<node id="10">
<label>optional</label>
</node>
<node id="18">
<label>span</label>
</node>
<node id="11">
<label>string</label>
</node>
<node id="23">
<label>string_view</label>
</node>
<node id="19">
<label>tuple</label>
</node>
<node id="5">
<label>type_traits</label>
</node>
<node id="29">
<label>unistd.h</label>
</node>
<node id="36">
<label>unordered_map</label>
</node>
<node id="12">
<label>utility</label>
</node>
<node id="13">
<label>vector</label>
</node>
<node id="26">
<label>version</label>
</node>
</incdepgraph>
<invincdepgraph>
<node id="2">
<label>src/compile_time_checks/serif/backend_independent.cpp</label>
<link refid="backend__independent_8cpp"/>
</node>
<node id="3">
<label>src/compile_time_checks/serif/solver/public_contracts.cpp</label>
<link refid="public__contracts_8cpp"/>
</node>
<node id="5">
<label>src/include/serif/solver/continuation/equilibrium.hpp</label>
<link refid="solver_2continuation_2equilibrium_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
</node>
<node id="4">
<label>src/include/serif/solver/equilibrium.hpp</label>
<link refid="solver_2equilibrium_8hpp"/>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/solver/nonlinear/newton.hpp</label>
<link refid="newton_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="6">
<label>src/include/serif/solver/solver.hpp</label>
<link refid="solver_2solver_8hpp"/>
</node>
</invincdepgraph>
<innernamespace refid="namespaceserif">serif</innernamespace>
<innernamespace refid="namespaceserif_1_1solver">serif::solver</innernamespace>
<innernamespace refid="namespaceserif_1_1solver_1_1detail">serif::solver::detail</innernamespace>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
<programlisting>
<codeline lineno="1"><highlight class="preprocessor">#pragma<sp/>once</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
<codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="solver_2nonlinear_2observers_8hpp" kindref="compound">serif/solver/nonlinear/observers.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="steps_8hpp" kindref="compound">serif/solver/nonlinear/steps.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="5"><highlight class="normal"></highlight></codeline>
<codeline lineno="6"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1solver" kindref="compound">serif::solver</ref><sp/>{</highlight></codeline>
<codeline lineno="7" refid="namespaceserif_1_1solver_1_1detail" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1solver_1_1detail" kindref="compound">detail</ref><sp/>{</highlight></codeline>
<codeline lineno="9"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Options&gt;</highlight></codeline>
<codeline lineno="10" refid="conceptserif_1_1solver_1_1detail_1_1_newton_strategy_for" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">concept<sp/></highlight><highlight class="normal"><ref refid="conceptserif_1_1solver_1_1detail_1_1_newton_strategy_for" kindref="compound">NewtonStrategyFor</ref><sp/>=<sp/></highlight><highlight class="keyword">requires</highlight><highlight class="normal">(Problem&amp;<sp/>problem,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>State&amp;<sp/>state,<sp/>Options&amp;<sp/>options,</highlight></codeline>
<codeline lineno="11"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">decltype</highlight><highlight class="normal">(problem.prepare(state))::value_type&amp;<sp/>prepared,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem::Vector&amp;<sp/>vector)<sp/>{</highlight></codeline>
<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>{<sp/>options.strategies.solve(problem,<sp/>state,<sp/>prepared,<sp/>vector,<sp/>vector,<sp/>options)<sp/>}<sp/>-&gt;<sp/>std::same_as&lt;linear::Report&gt;;</highlight></codeline>
<codeline lineno="13"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="14"><highlight class="normal"></highlight></codeline>
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Options,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Observer&gt;</highlight></codeline>
<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1ad84838af2c61fd8a7ff1143ed6e30e07" kindref="member">run_newton</ref>(Problem&amp;<sp/>problem,<sp/>State<sp/>initial_state,<sp/>Options<sp/>options,<sp/>Observer<sp/>observer,</highlight></codeline>
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::optional&lt;NewtonProgress&gt;<sp/>restart)<sp/>{</highlight></codeline>
<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1ab7690da8665e9d9bd2fa8e8534cd6e57" kindref="member">Vector</ref><sp/>=<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem::Vector;</highlight></codeline>
<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Prepared<sp/>=<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">decltype</highlight><highlight class="normal">(problem.prepare(initial_state))::value_type;</highlight></codeline>
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Result<sp/>=<sp/><ref refid="classserif_1_1solver_1_1_solve_result" kindref="compound">SolveResult&lt;State, typename Problem::System, typename Problem::Model&gt;</ref>;</highlight></codeline>
<codeline lineno="26"><highlight class="normal"></highlight></codeline>
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1a07717377a241ffd25e63aa977ff4f554" kindref="member">validate_start</ref>(options,<sp/>restart,<sp/>initial_state.values().size());</highlight></codeline>
<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Result<sp/>result(problem.model_owner());</highlight></codeline>
<codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref><sp/>diagnostics<sp/>=<sp/>restart<sp/>?<sp/>restart-&gt;diagnostics<sp/>:<sp/><ref refid="structserif_1_1solver_1_1_solve_diagnostics" kindref="compound">SolveDiagnostics</ref>{};</highlight></codeline>
<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>SolveObservation<sp/>observation(observer,<sp/>options.strategies,<sp/>diagnostics);</highlight></codeline>
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref><sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1detail_1a6791c39e3a55c271764d9926c97956e0" kindref="member">evaluate_start</ref>(problem,<sp/>initial_state,<sp/>options,<sp/>restart,<sp/>diagnostics);</highlight></codeline>
<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>)<sp/>{</highlight></codeline>
<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>.error().status,<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>.error().message);</highlight></codeline>
<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>MetricEvaluation<sp/>accepted_metric<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>-&gt;metric;</highlight></codeline>
<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accept(std::move(initial_state),<sp/>std::move(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>-&gt;system));</highlight></codeline>
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>size<sp/>=<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(result.state().values().size());</highlight></codeline>
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1ab7690da8665e9d9bd2fa8e8534cd6e57" kindref="member">Vector</ref><sp/>correction(size),<sp/>physical_direction(size);</highlight></codeline>
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1ab7690da8665e9d9bd2fa8e8534cd6e57" kindref="member">Vector</ref><sp/>rhs(</highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="keywordtype">int</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(result.system()-&gt;residual().size()));</highlight></codeline>
<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::ranges::fill(correction,<sp/>0.0);</highlight></codeline>
<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>next_step<sp/>=<sp/>options.line_search.initial_step;</highlight></codeline>
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(restart)<sp/>{</highlight></codeline>
<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::ranges::copy(restart-&gt;correction,<sp/>correction.begin());</highlight></codeline>
<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>next_step<sp/>=<sp/>restart-&gt;next_step;</highlight></codeline>
<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1a94057867583afc7737886a2cc9cb27d3" kindref="member">save_progress</ref>(result,<sp/>options,<sp/>diagnostics,<sp/>accepted_metric,<sp/>std::span(correction),<sp/>next_step);</highlight></codeline>
<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observation.notify(restart<sp/>?<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464a121ad2eb76415d284215a4c9deddf79c" kindref="member">EventKind::resumed</ref><sp/>:<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">EventKind::initial</ref>,<sp/>result.state(),<sp/>result.system(),</highlight></codeline>
<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1a97fea022621b1636c6d98d44e4acf17c" kindref="member">attempted_iterations</ref>,<sp/>0,<sp/>0.0,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="49"><highlight class="normal"></highlight></codeline>
<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Check<sp/>terminal<sp/>states<sp/>before<sp/>preparing<sp/>an<sp/>inverse:<sp/>a<sp/>root<sp/>may<sp/>have<sp/>a<sp/>singular<sp/>Jacobian.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::optional&lt;Prepared&gt;<sp/>prepared;</highlight></codeline>
<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">true</highlight><highlight class="normal">)<sp/>{</highlight></codeline>
<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(accepted_metric.residual_norm<sp/>&lt;=<sp/>*diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1afdc11a73dadf6aed3581326eeca980b6" kindref="member">convergence_threshold</ref>)<sp/>{</highlight></codeline>
<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/><ref refid="namespaceserif_1_1solver_1a0c5b4c0a272429c1c5807ebb757aad64a7de33615d7fbc1cb7bc608d12f1993d2" kindref="member">SolveStatus::converged</ref>,<sp/></highlight><highlight class="stringliteral">&quot;The<sp/>star<sp/>satisfies<sp/>the<sp/>equilibrium<sp/>tolerance.&quot;</highlight><highlight class="normal">,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(observation.stop_requested())<sp/>{</highlight></codeline>
<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/><ref refid="namespaceserif_1_1solver_1a0c5b4c0a272429c1c5807ebb757aad64af0a0bfe6bc7d2c58d2989034f83183e0" kindref="member">SolveStatus::stopped</ref>,<sp/></highlight><highlight class="stringliteral">&quot;Newton<sp/>stopped<sp/>at<sp/>an<sp/>accepted<sp/>boundary<sp/>at<sp/>the<sp/>observer&apos;s<sp/>request.&quot;</highlight><highlight class="normal">,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1a97fea022621b1636c6d98d44e4acf17c" kindref="member">attempted_iterations</ref><sp/>&gt;=<sp/>options.method.maximum_iterations)<sp/>{</highlight></codeline>
<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/><ref refid="namespaceserif_1_1solver_1a0c5b4c0a272429c1c5807ebb757aad64af9cc715fb6ecde5fea080ac57ad0dfaf" kindref="member">SolveStatus::maximum_iterations</ref>,<sp/></highlight><highlight class="stringliteral">&quot;Newton<sp/>reached<sp/>its<sp/>iteration<sp/>budget;<sp/>the<sp/>result<sp/>retains<sp/>the<sp/>last<sp/>accepted<sp/>star.&quot;</highlight><highlight class="normal">,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!prepared)<sp/>{</highlight></codeline>
<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>preparation<sp/>=<sp/>problem.prepare(result.state());</highlight></codeline>
<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>failure<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1detail_1abcb4ab5dca0460589f2989c776a641d7" kindref="member">preparation_rejection</ref>(problem,<sp/>preparation))<sp/>{</highlight></codeline>
<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/><ref refid="namespaceserif_1_1solver_1a0c5b4c0a272429c1c5807ebb757aad64ae9f49c7af9b0c06e5e2481ec84cdf9aa" kindref="member">SolveStatus::preparation_failure</ref>,<sp/>*failure,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="67"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>prepared<sp/>=<sp/>std::move(*preparation);</highlight></codeline>
<codeline lineno="68"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="69"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>iteration<sp/>=<sp/>diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1a97fea022621b1636c6d98d44e4acf17c" kindref="member">attempted_iterations</ref>++;</highlight></codeline>
<codeline lineno="70"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observation.notify(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464a57054ff3283d5f50b905c8d1a492c8a3" kindref="member">EventKind::before_iteration</ref>,<sp/>result.state(),<sp/>result.system(),<sp/>iteration,<sp/>0,<sp/>0.0,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="71"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>direction<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1detail_1a5961bb80a48f170cb4e90a77dcb039ec" kindref="member">compute_direction</ref>(problem,<sp/>result,<sp/>*prepared,<sp/>options,<sp/>diagnostics,</highlight></codeline>
<codeline lineno="72"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>rhs,<sp/>correction,<sp/>std::span(physical_direction));</highlight></codeline>
<codeline lineno="73"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!direction)<sp/>{</highlight></codeline>
<codeline lineno="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/>direction.error().status,<sp/>direction.error().message,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="75"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="76"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>trial<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1detail_1ad9c44d75fd77ec596f5d512dc3508bd1" kindref="member">find_acceptable_step</ref>(problem,<sp/>result,<sp/>accepted_metric,<sp/>correction,<sp/>std::span(physical_direction),</highlight></codeline>
<codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>*direction,<sp/>next_step,<sp/>options,<sp/>diagnostics,<sp/>observation);</highlight></codeline>
<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!trial)<sp/>{</highlight></codeline>
<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>observation.finish(result,<sp/>trial.error().status,<sp/>trial.error().message,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="81"><highlight class="normal"></highlight></codeline>
<codeline lineno="82"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Nothing<sp/>becomes<sp/>accepted<sp/>until<sp/>the<sp/>candidate<sp/>and<sp/>its<sp/>nonterminal<sp/>inverse<sp/>are<sp/>both<sp/>usable.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="83"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observation.notify(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464a6e563563af598fa7575b0944e785a7d5" kindref="member">EventKind::before_accept</ref>,<sp/>trial-&gt;state,<sp/>trial-&gt;system,<sp/>iteration,<sp/>trial-&gt;trial,<sp/>trial-&gt;step,<sp/>trial-&gt;metric);</highlight></codeline>
<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accept(std::move(trial-&gt;state),<sp/>std::move(trial-&gt;system));</highlight></codeline>
<codeline lineno="85"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>prepared<sp/>=<sp/>std::move(trial-&gt;preparation);</highlight></codeline>
<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>accepted_metric<sp/>=<sp/>trial-&gt;metric;</highlight></codeline>
<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>++diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1a54ba495e8544da884ae1cd183b00b02e" kindref="member">accepted_iterations</ref>;</highlight></codeline>
<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1abd33d959132ccbd0c0119e0bbfc3c6a2" kindref="member">final_residual_norm</ref><sp/>=<sp/>accepted_metric.residual_norm;</highlight></codeline>
<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>diagnostics.<ref refid="structserif_1_1solver_1_1_solve_diagnostics_1a962bf9dff1931e4adb65a4ed992cd6b7" kindref="member">last_accepted_step</ref><sp/>=<sp/>trial-&gt;step;</highlight></codeline>
<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">double</highlight><highlight class="normal">&amp;<sp/>value<sp/>:<sp/>correction)<sp/>{</highlight></codeline>
<codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1discretization_1_1backend_1_1mfem_1af75f98db90618153ea4ca169945733f7a2063c1608d6e0baf80249c42e2be5804" kindref="member">value</ref><sp/>*=<sp/>1.0<sp/>-<sp/>trial-&gt;step;</highlight></codeline>
<codeline lineno="92"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="93"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!<ref refid="namespaceserif_1_1solver_1_1detail_1af66d3dcd2f2fc1b4e4858dcd4e23be8f" kindref="member">finite_correction</ref>(std::span(correction),<sp/>size))<sp/>{</highlight></codeline>
<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::ranges::fill(correction,<sp/>0.0);</highlight></codeline>
<codeline lineno="95"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="96"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>next_step<sp/>=<sp/>std::min(options.line_search.initial_step,<sp/>trial-&gt;step<sp/>/<sp/>options.line_search.contraction);</highlight></codeline>
<codeline lineno="97"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1a94057867583afc7737886a2cc9cb27d3" kindref="member">save_progress</ref>(result,<sp/>options,<sp/>diagnostics,<sp/>accepted_metric,<sp/>std::span(correction),<sp/>next_step);</highlight></codeline>
<codeline lineno="98"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>observation.notify(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464a3e4d891a5df3d6d0d7dd9432a1bc6470" kindref="member">EventKind::accepted</ref>,<sp/>result.state(),<sp/>result.system(),<sp/>iteration,<sp/>trial-&gt;trial,<sp/>trial-&gt;step,<sp/>accepted_metric);</highlight></codeline>
<codeline lineno="99"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="100"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="101"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="102"><highlight class="normal"></highlight></codeline>
<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Options<sp/>=<sp/>SolverOptions&lt;&gt;,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Observer<sp/>=<sp/>NoObserver&gt;</highlight></codeline>
<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">requires</highlight><highlight class="normal"><sp/><ref refid="conceptserif_1_1solver_1_1detail_1_1_newton_strategy_for" kindref="compound">detail::NewtonStrategyFor&lt;Problem, State, Options&gt;</ref></highlight></codeline>
<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1a50d481ced4213cc6414d163eff898df9" kindref="member">solve_newton</ref>(Problem&amp;<sp/>problem,<sp/>State<sp/>initial_state,<sp/>Options<sp/>options<sp/>=<sp/>{},<sp/>Observer<sp/>observer<sp/>=<sp/>{})<sp/>{</highlight></codeline>
<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1ad84838af2c61fd8a7ff1143ed6e30e07" kindref="member">detail::run_newton</ref>(problem,<sp/>std::move(initial_state),<sp/>std::move(options),<sp/>std::move(observer),<sp/>std::nullopt);</highlight></codeline>
<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="112"><highlight class="normal"></highlight></codeline>
<codeline lineno="114"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;</highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Problem,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Options<sp/>=<sp/>SolverOptions&lt;&gt;,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Observer<sp/>=<sp/>NoObserver&gt;</highlight></codeline>
<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">requires</highlight><highlight class="normal"><sp/><ref refid="conceptserif_1_1solver_1_1detail_1_1_newton_strategy_for" kindref="compound">detail::NewtonStrategyFor&lt;Problem, State, Options&gt;</ref></highlight></codeline>
<codeline lineno="116"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1aa3cdbadff61a171e313e316fdf26909d" kindref="member">resume_newton</ref>(Problem&amp;<sp/>problem,<sp/><ref refid="structserif_1_1solver_1_1_newton_checkpoint" kindref="compound">NewtonCheckpoint&lt;State&gt;</ref><sp/>checkpoint,<sp/>Options<sp/>options<sp/>=<sp/>{},<sp/>Observer<sp/>observer<sp/>=<sp/>{})<sp/>{</highlight></codeline>
<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1detail_1ad84838af2c61fd8a7ff1143ed6e30e07" kindref="member">detail::run_newton</ref>(problem,<sp/>std::move(checkpoint.state),<sp/>std::move(options),<sp/>std::move(observer),<sp/>std::move(checkpoint.progress));</highlight></codeline>
<codeline lineno="118"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="119"><highlight class="normal">}</highlight></codeline>
</programlisting>
<location file="src/include/serif/solver/nonlinear/newton.hpp"/>
</compounddef>
</doxygen>