Files
MeanField_SERiF/docs/xml/driver_8hpp.xml

682 lines
81 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="driver_8hpp" kind="file" language="C++">
<compoundname>driver.hpp</compoundname>
<includes local="no">memory</includes>
<includes local="no">vector</includes>
<includes refid="solver_2continuation_2options_8hpp" local="yes">serif/solver/continuation/options.hpp</includes>
<includedby refid="continuation_8hpp" local="yes">src/include/serif/solver/continuation/continuation.hpp</includedby>
<includedby refid="solver_2continuation_2equilibrium_8hpp" local="yes">src/include/serif/solver/continuation/equilibrium.hpp</includedby>
<incdepgraph>
<node id="21">
<label>serif/dimensions/quantities.hpp</label>
<link refid="quantities_8hpp"/>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="22" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
</node>
<node id="51">
<label>serif/meta/enums.hpp</label>
<link refid="enums_8hpp"/>
<childnode refid="52" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="53" relation="include">
</childnode>
</node>
<node id="34">
<label>serif/model/detail/specification_list.hpp</label>
<link refid="specification__list_8hpp"/>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="35" relation="include">
</childnode>
<childnode refid="38" relation="include">
</childnode>
</node>
<node id="39">
<label>serif/model/equilibrium_equations.hpp</label>
<link refid="equilibrium__equations_8hpp"/>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
</node>
<node id="35">
<label>serif/model/specification.hpp</label>
<link refid="specification_8hpp"/>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="9" relation="include">
</childnode>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="36" relation="include">
</childnode>
<childnode refid="31" relation="include">
</childnode>
</node>
<node id="32">
<label>serif/model/stellar_model.hpp</label>
<link refid="stellar__model_8hpp"/>
<childnode refid="8" relation="include">
</childnode>
<childnode refid="33" relation="include">
</childnode>
<childnode refid="11" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="34" relation="include">
</childnode>
<childnode refid="39" relation="include">
</childnode>
</node>
<node id="54">
<label>serif/solver/continuation/controller.hpp</label>
<link refid="controller_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="7" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="9" relation="include">
</childnode>
<childnode refid="10" relation="include">
</childnode>
<childnode refid="40" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/solver/continuation/driver.hpp</label>
<link refid="driver_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="5">
<label>serif/solver/continuation/family.hpp</label>
<link refid="family_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
<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="3" relation="include">
</childnode>
<childnode refid="13" relation="include">
</childnode>
<childnode refid="32" relation="include">
</childnode>
<childnode refid="40" relation="include">
</childnode>
</node>
<node id="4">
<label>serif/solver/continuation/options.hpp</label>
<link refid="solver_2continuation_2options_8hpp"/>
<childnode refid="5" relation="include">
</childnode>
<childnode refid="54" relation="include">
</childnode>
</node>
<node id="13">
<label>serif/solver/continuation/parameters.hpp</label>
<link refid="parameters_8hpp"/>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="16" relation="include">
</childnode>
<childnode refid="17" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="21" relation="include">
</childnode>
<childnode refid="25" relation="include">
</childnode>
</node>
<node id="29">
<label>serif/utils/dependencies/binding.hpp</label>
<link refid="utils_2dependencies_2binding_8hpp"/>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="30" relation="include">
</childnode>
</node>
<node id="27">
<label>serif/utils/dependencies/detail/type_lists.hpp</label>
<link refid="type__lists_8hpp"/>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="26" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="28" relation="include">
</childnode>
</node>
<node id="28">
<label>serif/utils/dependencies/key_list.hpp</label>
<link refid="key__list_8hpp"/>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="29" relation="include">
</childnode>
<childnode refid="30" relation="include">
</childnode>
<childnode refid="31" relation="include">
</childnode>
</node>
<node id="25">
<label>serif/utils/dependencies/key_list_operations.hpp</label>
<link refid="key__list__operations_8hpp"/>
<childnode refid="26" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="27" relation="include">
</childnode>
</node>
<node id="50">
<label>serif/utils/error/codes.hpp</label>
<link refid="codes_8hpp"/>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="51" relation="include">
</childnode>
</node>
<node id="40">
<label>serif/utils/error/errors.hpp</label>
<link refid="errors_8hpp"/>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="41" relation="include">
</childnode>
<childnode refid="42" relation="include">
</childnode>
<childnode refid="18" relation="include">
</childnode>
<childnode refid="43" relation="include">
</childnode>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="44" relation="include">
</childnode>
<childnode refid="45" relation="include">
</childnode>
<childnode refid="48" relation="include">
</childnode>
<childnode refid="50" relation="include">
</childnode>
<childnode refid="36" relation="include">
</childnode>
</node>
<node id="48">
<label>serif/utils/misc/concepts/exceptions.hpp</label>
<link refid="utils_2misc_2concepts_2exceptions_8hpp"/>
<childnode refid="49" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="24" relation="include">
</childnode>
</node>
<node id="38">
<label>serif/utils/misc/concepts/filter.hpp</label>
<link refid="filter_8hpp"/>
<childnode refid="20" relation="include">
</childnode>
<childnode refid="31" relation="include">
</childnode>
</node>
<node id="24">
<label>serif/utils/misc/concepts/numeric.hpp</label>
<link refid="numeric_8hpp"/>
<childnode refid="15" relation="include">
</childnode>
<childnode refid="20" relation="include">
</childnode>
</node>
<node id="23">
<label>serif/utils/misc/std_helper/cleaning.hpp</label>
<link refid="cleaning_8hpp"/>
<childnode refid="20" relation="include">
</childnode>
</node>
<node id="45">
<label>serif/utils/misc/terminal/colors.hpp</label>
<link refid="colors_8hpp"/>
<childnode refid="19" relation="include">
</childnode>
<childnode refid="42" relation="include">
</childnode>
<childnode refid="46" relation="include">
</childnode>
<childnode refid="12" relation="include">
</childnode>
<childnode refid="47" relation="include">
</childnode>
</node>
<node id="30">
<label>serif/utils/misc/traits/type_uniqueness.hpp</label>
<link refid="traits_2type__uniqueness_8hpp"/>
<childnode refid="14" relation="include">
</childnode>
<childnode refid="23" relation="include">
</childnode>
</node>
<node id="36">
<label>serif/utils/types/strings.hpp</label>
<link refid="types_2strings_8hpp"/>
<childnode refid="6" relation="include">
</childnode>
<childnode refid="37" relation="include">
</childnode>
<childnode refid="19" relation="include">
</childnode>
</node>
<node id="31">
<label>serif/utils/types/type_list.hpp</label>
<link refid="type__list_8hpp"/>
</node>
<node id="6">
<label>algorithm</label>
</node>
<node id="14">
<label>array</label>
</node>
<node id="7">
<label>cmath</label>
</node>
<node id="22">
<label>compare</label>
</node>
<node id="15">
<label>concepts</label>
</node>
<node id="26">
<label>cstddef</label>
</node>
<node id="43">
<label>cstdint</label>
</node>
<node id="42">
<label>cstdio</label>
</node>
<node id="46">
<label>cstdlib</label>
</node>
<node id="49">
<label>exception</label>
</node>
<node id="16">
<label>expected</label>
</node>
<node id="41">
<label>format</label>
</node>
<node id="8">
<label>functional</label>
</node>
<node id="37">
<label>iostream</label>
</node>
<node id="9">
<label>limits</label>
</node>
<node id="53">
<label>magic_enum/magic_enum_all.hpp</label>
</node>
<node id="2">
<label>memory</label>
</node>
<node id="10">
<label>optional</label>
</node>
<node id="17">
<label>ranges</label>
</node>
<node id="33">
<label>span</label>
</node>
<node id="18">
<label>string</label>
</node>
<node id="19">
<label>string_view</label>
</node>
<node id="11">
<label>tuple</label>
</node>
<node id="20">
<label>type_traits</label>
</node>
<node id="47">
<label>unistd.h</label>
</node>
<node id="52">
<label>unordered_map</label>
</node>
<node id="12">
<label>utility</label>
</node>
<node id="3">
<label>vector</label>
</node>
<node id="44">
<label>version</label>
</node>
</incdepgraph>
<invincdepgraph>
<node id="3">
<label>src/compile_time_checks/serif/backend_independent.cpp</label>
<link refid="backend__independent_8cpp"/>
</node>
<node id="2">
<label>src/include/serif/solver/continuation/continuation.hpp</label>
<link refid="continuation_8hpp"/>
<childnode refid="3" relation="include">
</childnode>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="1">
<label>src/include/serif/solver/continuation/driver.hpp</label>
<link refid="driver_8hpp"/>
<childnode refid="2" relation="include">
</childnode>
<childnode refid="5" relation="include">
</childnode>
</node>
<node id="5">
<label>src/include/serif/solver/continuation/equilibrium.hpp</label>
<link refid="solver_2continuation_2equilibrium_8hpp"/>
<childnode refid="4" relation="include">
</childnode>
</node>
<node id="4">
<label>src/include/serif/solver/solver.hpp</label>
<link refid="solver_2solver_8hpp"/>
</node>
</invincdepgraph>
<innerclass refid="structserif_1_1solver_1_1continuation_1_1_correction_controls" prot="public">serif::solver::continuation::CorrectionControls</innerclass>
<innerclass refid="structserif_1_1solver_1_1continuation_1_1_stage_record" prot="public">serif::solver::continuation::StageRecord</innerclass>
<innerclass refid="structserif_1_1solver_1_1continuation_1_1_result" prot="public">serif::solver::continuation::Result</innerclass>
<innerclass refid="structserif_1_1solver_1_1continuation_1_1_starting_star" prot="public">serif::solver::continuation::StartingStar</innerclass>
<innernamespace refid="namespaceserif">serif</innernamespace>
<innernamespace refid="namespaceserif_1_1solver">serif::solver</innernamespace>
<innernamespace refid="namespaceserif_1_1solver_1_1continuation">serif::solver::continuation</innernamespace>
<innernamespace refid="namespaceserif_1_1solver_1_1continuation_1_1detail">serif::solver::continuation::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/>&lt;memory&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&lt;vector&gt;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="5"><highlight class="normal"></highlight></codeline>
<codeline lineno="6"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="solver_2continuation_2options_8hpp" kindref="compound">serif/solver/continuation/options.hpp</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="7"><highlight class="normal"></highlight></codeline>
<codeline lineno="8"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1solver_1_1continuation" kindref="compound">serif::solver::continuation</ref><sp/>{</highlight></codeline>
<codeline lineno="9"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">enum<sp/>class</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516" kindref="member">Status</ref><sp/>{<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a47252c72fe050aa193e34680c008a090" kindref="member">target_reached</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a3b37da8ec952c032b770374dbc6235c1" kindref="member">starting_star_failed</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516acc37d00e5e12d2c8308851308b845222" kindref="member">attempt_limit</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516ab46e5f037ad909fb47d91de634c95004" kindref="member">work_limit</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a43c09831647cc3d85b480f8815f0eef7" kindref="member">no_progress</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a53dbaf63161eadde6786ab8baa54a3e5" kindref="member">invalid_model</ref><sp/>};</highlight></codeline>
<codeline lineno="10"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">enum<sp/>class</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768e" kindref="member">StageDisposition</ref><sp/>{<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea7de33615d7fbc1cb7bc608d12f1993d2" kindref="member">converged</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea21f518858f05ad9436d04f274f2de0ab" kindref="member">not_converged</ref>,<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea53dbaf63161eadde6786ab8baa54a3e5" kindref="member">invalid_model</ref><sp/>};</highlight></codeline>
<codeline lineno="11"><highlight class="normal"></highlight></codeline>
<codeline lineno="12" refid="structserif_1_1solver_1_1continuation_1_1_correction_controls" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1solver_1_1continuation_1_1_correction_controls" kindref="compound">CorrectionControls</ref><sp/>final<sp/>{</highlight></codeline>
<codeline lineno="13"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_correction_controls_1a006114a7d56d79552407ecbd9bc1be3a" kindref="member">absolute_tolerance</ref>{};</highlight></codeline>
<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_correction_controls_1a5e8640247a5b5a1c9aa667d905418913" kindref="member">maximum_work</ref>{};</highlight></codeline>
<codeline lineno="15"><highlight class="normal"><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="16"><highlight class="normal"></highlight></codeline>
<codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">template</highlight><highlight class="normal"><sp/>&lt;std::</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>Count&gt;</highlight></codeline>
<codeline lineno="18" refid="structserif_1_1solver_1_1continuation_1_1_stage_record" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record" kindref="compound">StageRecord</ref><sp/>final<sp/>{</highlight></codeline>
<codeline lineno="19"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::array&lt;double,<sp/>Count&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1a61bc24148c151442344b5133efc5d47d" kindref="member">coordinates</ref>{};</highlight></codeline>
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::optional&lt;std::size_t&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1acbe2a4ef89063ec65e7e4d94912cb662" kindref="member">changed_axis</ref>;</highlight></codeline>
<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1af7834eb848bb39be9d68e07d120aa230" kindref="member">starting_star</ref>{</highlight><highlight class="keyword">false</highlight><highlight class="normal">};</highlight></codeline>
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768e" kindref="member">StageDisposition</ref><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1a78561e6c4c932bec8e0c6f59e3abd49f" kindref="member">disposition</ref>{<ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea21f518858f05ad9436d04f274f2de0ab" kindref="member">StageDisposition::not_converged</ref>};</highlight></codeline>
<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1a7f9e0f207c7c6190e8749ff9a9147d24" kindref="member">work</ref>{};</highlight></codeline>
<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::optional&lt;double&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1aebff75a4fedafb26822bd9e3df287761" kindref="member">residual_norm</ref>;</highlight></codeline>
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::string<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record_1a0dbb803b3a64fff99024e93479c57df1" kindref="member">message</ref>;</highlight></codeline>
<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="27"><highlight class="normal"></highlight></codeline>
<codeline lineno="29"><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/>Report,<sp/>std::</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>Count&gt;</highlight></codeline>
<codeline lineno="30" refid="structserif_1_1solver_1_1continuation_1_1_result" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1solver_1_1continuation_1_1_result" kindref="compound">Result</ref><sp/>final<sp/>{</highlight></codeline>
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516" kindref="member">Status</ref><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1aeda84055c6b9a5b930eba122aff5c3b6" kindref="member">status</ref>{<ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a3b37da8ec952c032b770374dbc6235c1" kindref="member">Status::starting_star_failed</ref>};</highlight></codeline>
<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::string<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a308ffb868b4cbb0a6b46760991798cb0" kindref="member">message</ref>;</highlight></codeline>
<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::array&lt;double,<sp/>Count&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1acbe912302647969b0a803a848ca8d606" kindref="member">target</ref>{};</highlight></codeline>
<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::optional&lt;std::array&lt;double,<sp/>Count&gt;&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a6b5dc95aaacda43ba385b12c526af93c" kindref="member">accepted_coordinates</ref>;</highlight></codeline>
<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::unique_ptr&lt;Report&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a3104175309c9d647459d4d389dabb090" kindref="member">accepted</ref>;</highlight></codeline>
<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::unique_ptr&lt;Report&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a85cf4855d8e00fec824e2035394e6e11" kindref="member">failed</ref>;</highlight></codeline>
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;StageRecord&lt;Count&gt;&gt;<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a4e4e51ea1983fee0ce7af548f287a69a" kindref="member">stages</ref>;</highlight></codeline>
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_coordinate_counters" kindref="compound">CoordinateCounters</ref><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a9c40d626a6685d748165b7e30f5c2f7a" kindref="member">counters</ref>{};</highlight></codeline>
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a2335ea7a940850d9b9a3f52aeffb3c21" kindref="member">starting_attempts</ref>{};</highlight></codeline>
<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a791d075f18df59fe34c6d30505a62339" kindref="member">starting_work</ref>{};</highlight></codeline>
<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a6b1b4aa128c94aec252ce6c63732e2f2" kindref="member">omitted_records</ref>{};</highlight></codeline>
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a213e34e1bbfc56d150902e3091600637" kindref="member">absolute_tolerance</ref>{};</highlight></codeline>
<codeline lineno="43"><highlight class="normal"></highlight></codeline>
<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a332f667a2c2e45a0cda7cfa54c67dfe6" kindref="member">converged</ref>()<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">noexcept</highlight><highlight class="normal"><sp/>{<sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1aeda84055c6b9a5b930eba122aff5c3b6" kindref="member">status</ref><sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a47252c72fe050aa193e34680c008a090" kindref="member">Status::target_reached</ref>;<sp/>}</highlight></codeline>
<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>Report*<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1ae70766e2b6db487b96173f4a1ede3a10" kindref="member">last_converged</ref>()<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">noexcept</highlight><highlight class="normal"><sp/>{<sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a3104175309c9d647459d4d389dabb090" kindref="member">accepted</ref>.get();<sp/>}</highlight></codeline>
<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a2e08fb25f3d572743faea7b8b9a04fac" kindref="member">total_attempts</ref>()<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">noexcept</highlight><highlight class="normal"><sp/>{<sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a2335ea7a940850d9b9a3f52aeffb3c21" kindref="member">starting_attempts</ref><sp/>+<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a9c40d626a6685d748165b7e30f5c2f7a" kindref="member">counters</ref>.attempts;<sp/>}</highlight></codeline>
<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/>std::uint64_t<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a8ab6774e259caab4e5fbf69c481777e8" kindref="member">total_work</ref>()<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">noexcept</highlight><highlight class="normal"><sp/>{<sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a791d075f18df59fe34c6d30505a62339" kindref="member">starting_work</ref><sp/>+<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a9c40d626a6685d748165b7e30f5c2f7a" kindref="member">counters</ref>.work;<sp/>}</highlight></codeline>
<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="53"><highlight class="normal"></highlight></codeline>
<codeline lineno="55"><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/>Model,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State&gt;</highlight></codeline>
<codeline lineno="56" refid="structserif_1_1solver_1_1continuation_1_1_starting_star" refkind="compound"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">struct<sp/></highlight><highlight class="normal"><ref refid="structserif_1_1solver_1_1continuation_1_1_starting_star" kindref="compound">StartingStar</ref><sp/>final<sp/>{</highlight></codeline>
<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Model<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_starting_star_1a57b5ec79e5e41a962a8bfff9850f66dd" kindref="member">model</ref>;</highlight></codeline>
<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>State<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_starting_star_1a61dc8e361bebfa16fd1c5b582f8b2c03" kindref="member">state</ref>;</highlight></codeline>
<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="60"><highlight class="normal"></highlight></codeline>
<codeline lineno="61" refid="namespaceserif_1_1solver_1_1continuation_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_1continuation_1_1detail" kindref="compound">detail</ref><sp/>{</highlight></codeline>
<codeline lineno="63"><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/>Family&gt;</highlight></codeline>
<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/>std::vector&lt;typename<sp/>Family::Coordinates&gt;<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1_1detail_1ad3de2a878384415f7120cc064c723d4f" kindref="member">starting_candidates</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1solver_1_1continuation_1_1_family" kindref="compound">Family</ref>&amp;<sp/>family,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_options" kindref="compound">Options&lt;Family&gt;</ref>&amp;<sp/>options)<sp/>{</highlight></codeline>
<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::vector&lt;typename<sp/>Family::Coordinates&gt;<sp/>result{options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1af002a946c26397f1733b3884e08a2a8d" kindref="member">start</ref>};</highlight></codeline>
<codeline lineno="66"><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/>(!options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1afd65073c045745c274dba709d7cd9761" kindref="member">explicit_start</ref>)<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/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>target<sp/>=<sp/>family.target_coordinates();</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><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(std::size_t<sp/>axis<sp/>=<sp/>0;<sp/>axis<sp/>&lt;<sp/>Family::coordinate_count;<sp/>++axis)<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/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>candidate<sp/>=<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1af002a946c26397f1733b3884e08a2a8d" kindref="member">start</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/><sp/><sp/><sp/><sp/>candidate[axis]<sp/>=<sp/>target[axis];</highlight></codeline>
<codeline lineno="71"><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/>(std::ranges::find(result,<sp/>candidate)<sp/>==<sp/>result.end())<sp/>{</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/><sp/><sp/><sp/><sp/>result.push_back(candidate);</highlight></codeline>
<codeline lineno="73"><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="74"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</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><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(std::ranges::find(result,<sp/>target)<sp/>==<sp/>result.end())<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/><sp/><sp/><sp/><sp/>result.push_back(target);</highlight></codeline>
<codeline lineno="77"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="78"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="79"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>result;</highlight></codeline>
<codeline lineno="80"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="81"><highlight class="normal"></highlight></codeline>
<codeline lineno="83"><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/>Report,<sp/>std::</highlight><highlight class="keywordtype">size_t</highlight><highlight class="normal"><sp/>Count&gt;</highlight></codeline>
<codeline lineno="84"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1_1detail_1a559f8cf10ed2895254c8a895718cec9e" kindref="member">record</ref>(<ref refid="structserif_1_1solver_1_1continuation_1_1_result" kindref="compound">Result&lt;Report, Count&gt;</ref>&amp;<sp/>result,<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record" kindref="compound">StageRecord&lt;Count&gt;</ref><sp/>stage,<sp/>std::size_t<sp/>maximum)<sp/>{</highlight></codeline>
<codeline lineno="85"><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/>(maximum<sp/>==<sp/>0)<sp/>{</highlight></codeline>
<codeline lineno="86"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>++result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a6b1b4aa128c94aec252ce6c63732e2f2" kindref="member">omitted_records</ref>;</highlight></codeline>
<codeline lineno="87"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a4e4e51ea1983fee0ce7af548f287a69a" kindref="member">stages</ref>.size()<sp/>&lt;<sp/>maximum)<sp/>{</highlight></codeline>
<codeline lineno="88"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a4e4e51ea1983fee0ce7af548f287a69a" kindref="member">stages</ref>.push_back(std::move(stage));</highlight></codeline>
<codeline lineno="89"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="90"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a4e4e51ea1983fee0ce7af548f287a69a" kindref="member">stages</ref>.back()<sp/>=<sp/>std::move(stage);</highlight></codeline>
<codeline lineno="91"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>++result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a6b1b4aa128c94aec252ce6c63732e2f2" kindref="member">omitted_records</ref>;</highlight></codeline>
<codeline lineno="92"><highlight class="normal"><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/>}</highlight></codeline>
<codeline lineno="94"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="95"><highlight class="normal"></highlight></codeline>
<codeline lineno="103"><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/>Family,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Corrector&gt;</highlight></codeline>
<codeline lineno="104"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1add798956874a0248752eabf98cc12b4b" kindref="member">run</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1solver_1_1continuation_1_1_family" kindref="compound">Family</ref>&amp;<sp/>family,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>State&amp;<sp/>initial_state,<sp/>Corrector&amp;&amp;<sp/>correct,<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_options" kindref="compound">Options&lt;Family&gt;</ref><sp/>options,<sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>absolute_tolerance)<sp/>{</highlight></codeline>
<codeline lineno="105"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1utils_1_1errors" kindref="compound">utils::errors</ref>;</highlight></codeline>
<codeline lineno="106"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Report<sp/>=<sp/>std::remove_cvref_t&lt;std::invoke_result_t&lt;Corrector&amp;,<sp/>typename<sp/>Family::ModelType,<sp/>State,<sp/>CorrectionControls&gt;&gt;;</highlight></codeline>
<codeline lineno="107"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/></highlight><highlight class="normal">Record<sp/>=<sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_stage_record" kindref="compound">StageRecord&lt;Family::coordinate_count&gt;</ref>;</highlight></codeline>
<codeline lineno="108"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">constexpr</highlight><highlight class="normal"><sp/>std::size_t<sp/>count<sp/>=<sp/>Family::coordinate_count;</highlight></codeline>
<codeline lineno="109"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure&lt;SERiFErrorCode::INVALID_ARGUMENT,<sp/>std::invalid_argument&gt;(std::isfinite(absolute_tolerance)<sp/>&amp;&amp;<sp/>absolute_tolerance<sp/>&gt;<sp/>0.0<sp/>&amp;&amp;<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1aa2480b533629356d72647bb6333dddae" kindref="member">maximum_work</ref><sp/>&gt;<sp/>0,</highlight></codeline>
<codeline lineno="110"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;Continuation<sp/>requires<sp/>a<sp/>fixed<sp/>positive<sp/>absolute<sp/>tolerance<sp/>and<sp/>a<sp/>positive<sp/>total<sp/>work<sp/>budget.&quot;</highlight><highlight class="normal">);</highlight></codeline>
<codeline lineno="111"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1solver_1_1continuation_1_1_coordinate_controller" kindref="compound">CoordinateController&lt;count&gt;</ref><sp/>validation(options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1af002a946c26397f1733b3884e08a2a8d" kindref="member">start</ref>,<sp/>family.target_coordinates(),<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1ac2689536e8bfc0fbc33100737c8003ae" kindref="member">steps</ref>);</highlight></codeline>
<codeline lineno="112"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_result" kindref="compound">Result&lt;Report, count&gt;</ref><sp/>result{.target<sp/>=<sp/>family.target_coordinates(),<sp/>.absolute_tolerance<sp/>=<sp/>absolute_tolerance};</highlight></codeline>
<codeline lineno="113"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.<ref refid="structserif_1_1solver_1_1continuation_1_1_result_1a4e4e51ea1983fee0ce7af548f287a69a" kindref="member">stages</ref>.reserve(std::min&lt;std::uint64_t&gt;(options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1acd738cc25b7f5fe5e97dd4add5632c6e" kindref="member">maximum_records</ref>,<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1ac2689536e8bfc0fbc33100737c8003ae" kindref="member">steps</ref>.<ref refid="structserif_1_1solver_1_1continuation_1_1_coordinate_options_1a39fd0e0baf7fb103d7c1b0c51fac2246" kindref="member">maximum_attempts</ref>));</highlight></codeline>
<codeline lineno="114"><highlight class="normal"></highlight></codeline>
<codeline lineno="115"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Both<sp/>initial<sp/>qualification<sp/>and<sp/>later<sp/>trials<sp/>use<sp/>this<sp/>same<sp/>certification<sp/>rule<sp/>and<sp/>physical-state<sp/>boundary.</highlight><highlight class="normal"></highlight></codeline>
<codeline lineno="116"><highlight class="normal"><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/>attempt<sp/>=<sp/>[&amp;](</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Family::Coordinates&amp;<sp/>coordinates,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>State&amp;<sp/>state,<sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>starting,<sp/>std::optional&lt;std::size_t&gt;<sp/>axis)<sp/>{</highlight></codeline>
<codeline lineno="117"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>Record<sp/>stage{.coordinates<sp/>=<sp/>coordinates,<sp/>.changed_axis<sp/>=<sp/>axis,<sp/>.starting_star<sp/>=<sp/>starting};</highlight></codeline>
<codeline lineno="118"><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_1model" kindref="compound">model</ref><sp/>=<sp/>family.try_model_at(coordinates);</highlight></codeline>
<codeline lineno="119"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::unique_ptr&lt;Report&gt;<sp/>report;</highlight></codeline>
<codeline lineno="120"><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_1model" kindref="compound">model</ref>)<sp/>{</highlight></codeline>
<codeline lineno="121"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.disposition<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea53dbaf63161eadde6786ab8baa54a3e5" kindref="member">StageDisposition::invalid_model</ref>;</highlight></codeline>
<codeline lineno="122"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.message<sp/>=<sp/><ref refid="namespaceserif_1_1model" kindref="compound">model</ref>.error().message;</highlight></codeline>
<codeline lineno="123"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="124"><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/>std::uint64_t<sp/>remaining<sp/>=<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1aa2480b533629356d72647bb6333dddae" kindref="member">maximum_work</ref><sp/>-<sp/>result.total_work();</highlight></codeline>
<codeline lineno="125"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>report<sp/>=<sp/>std::make_unique&lt;Report&gt;(std::invoke(correct,<sp/>std::move(*model),<sp/>State(state),<sp/>CorrectionControls{absolute_tolerance,<sp/>remaining}));</highlight></codeline>
<codeline lineno="126"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.work<sp/>=<sp/></highlight><highlight class="keyword">static_cast&lt;</highlight><highlight class="normal">std::uint64_t</highlight><highlight class="keyword">&gt;</highlight><highlight class="normal">(report-&gt;diagnostics().attempted_iterations);</highlight></codeline>
<codeline lineno="127"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure&lt;SERiFErrorCode::INVALID_ARGUMENT&gt;(stage.work<sp/>&lt;=<sp/>remaining,<sp/></highlight><highlight class="stringliteral">&quot;A<sp/>continuation<sp/>corrector<sp/>exceeded<sp/>its<sp/>supplied<sp/>work<sp/>budget.&quot;</highlight><highlight class="normal">);</highlight></codeline>
<codeline lineno="128"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.residual_norm<sp/>=<sp/>report-&gt;diagnostics().final_residual_norm;</highlight></codeline>
<codeline lineno="129"><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">bool</highlight><highlight class="normal"><sp/>certified<sp/>=<sp/>report-&gt;converged()<sp/>&amp;&amp;<sp/>report-&gt;has_state()<sp/>&amp;&amp;<sp/>stage.residual_norm<sp/>&amp;&amp;</highlight></codeline>
<codeline lineno="130"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(*stage.residual_norm)<sp/>&amp;&amp;<sp/>*stage.residual_norm<sp/>&gt;=<sp/>0.0<sp/>&amp;&amp;<sp/>*stage.residual_norm<sp/>&lt;=<sp/>absolute_tolerance;</highlight></codeline>
<codeline lineno="131"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.disposition<sp/>=<sp/>certified<sp/>?<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea7de33615d7fbc1cb7bc608d12f1993d2" kindref="member">StageDisposition::converged</ref><sp/>:<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea21f518858f05ad9436d04f274f2de0ab" kindref="member">StageDisposition::not_converged</ref>;</highlight></codeline>
<codeline lineno="132"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>stage.message<sp/>=<sp/>report-&gt;message();</highlight></codeline>
<codeline lineno="133"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="134"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>std::pair{std::move(report),<sp/>std::move(stage)};</highlight></codeline>
<codeline lineno="135"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>};</highlight></codeline>
<codeline lineno="136"><highlight class="normal"></highlight></codeline>
<codeline lineno="137"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal">&amp;<sp/>coordinates<sp/>:<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1_1detail_1ad3de2a878384415f7120cc064c723d4f" kindref="member">detail::starting_candidates</ref>(family,<sp/>options))<sp/>{</highlight></codeline>
<codeline lineno="138"><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/>(result.starting_attempts<sp/>==<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1ac2689536e8bfc0fbc33100737c8003ae" kindref="member">steps</ref>.<ref refid="structserif_1_1solver_1_1continuation_1_1_coordinate_options_1a39fd0e0baf7fb103d7c1b0c51fac2246" kindref="member">maximum_attempts</ref><sp/>||<sp/>result.total_work()<sp/>==<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1aa2480b533629356d72647bb6333dddae" kindref="member">maximum_work</ref>)<sp/>{</highlight></codeline>
<codeline lineno="139"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="140"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="141"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>++result.starting_attempts;</highlight></codeline>
<codeline lineno="142"><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/>[report,<sp/>stage]<sp/>=<sp/>attempt(coordinates,<sp/>initial_state,<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">,<sp/>std::nullopt);</highlight></codeline>
<codeline lineno="143"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.starting_work<sp/>+=<sp/>stage.work;</highlight></codeline>
<codeline lineno="144"><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/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768e" kindref="member">StageDisposition</ref><sp/>disposition<sp/>=<sp/>stage.disposition;</highlight></codeline>
<codeline lineno="145"><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/>std::string<sp/>message<sp/>=<sp/>stage.message;</highlight></codeline>
<codeline lineno="146"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1_1detail_1a559f8cf10ed2895254c8a895718cec9e" kindref="member">detail::record</ref>(result,<sp/>std::move(stage),<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1acd738cc25b7f5fe5e97dd4add5632c6e" kindref="member">maximum_records</ref>);</highlight></codeline>
<codeline lineno="147"><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/>(disposition<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea53dbaf63161eadde6786ab8baa54a3e5" kindref="member">StageDisposition::invalid_model</ref>)<sp/>{</highlight></codeline>
<codeline lineno="148"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a53dbaf63161eadde6786ab8baa54a3e5" kindref="member">Status::invalid_model</ref>;</highlight></codeline>
<codeline lineno="149"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.message<sp/>=<sp/>message;</highlight></codeline>
<codeline lineno="150"><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/>result;</highlight></codeline>
<codeline lineno="151"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="152"><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/>(disposition<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea7de33615d7fbc1cb7bc608d12f1993d2" kindref="member">StageDisposition::converged</ref>)<sp/>{</highlight></codeline>
<codeline lineno="153"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accepted.swap(report);</highlight></codeline>
<codeline lineno="154"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accepted_coordinates<sp/>=<sp/>coordinates;</highlight></codeline>
<codeline lineno="155"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="156"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="157"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.failed.swap(report);</highlight></codeline>
<codeline lineno="158"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="159"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!result.accepted)<sp/>{</highlight></codeline>
<codeline lineno="160"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a3b37da8ec952c032b770374dbc6235c1" kindref="member">Status::starting_star_failed</ref>;</highlight></codeline>
<codeline lineno="161"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.message<sp/>=<sp/></highlight><highlight class="stringliteral">&quot;No<sp/>permitted<sp/>starting<sp/>model<sp/>produced<sp/>a<sp/>star<sp/>certified<sp/>at<sp/>the<sp/>fixed<sp/>continuation<sp/>tolerance.&quot;</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="162"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>result;</highlight></codeline>
<codeline lineno="163"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="164"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(*result.accepted_coordinates<sp/>==<sp/>result.target)<sp/>{</highlight></codeline>
<codeline lineno="165"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a47252c72fe050aa193e34680c008a090" kindref="member">Status::target_reached</ref>;</highlight></codeline>
<codeline lineno="166"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>result;</highlight></codeline>
<codeline lineno="167"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="168"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(result.total_attempts()<sp/>==<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1ac2689536e8bfc0fbc33100737c8003ae" kindref="member">steps</ref>.<ref refid="structserif_1_1solver_1_1continuation_1_1_coordinate_options_1a39fd0e0baf7fb103d7c1b0c51fac2246" kindref="member">maximum_attempts</ref>)<sp/>{</highlight></codeline>
<codeline lineno="169"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516acc37d00e5e12d2c8308851308b845222" kindref="member">Status::attempt_limit</ref>;</highlight></codeline>
<codeline lineno="170"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>result;</highlight></codeline>
<codeline lineno="171"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="172"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/>steps<sp/>=<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1ac2689536e8bfc0fbc33100737c8003ae" kindref="member">steps</ref>;</highlight></codeline>
<codeline lineno="173"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>steps.<ref refid="structserif_1_1solver_1_1continuation_1_1_coordinate_options_1a39fd0e0baf7fb103d7c1b0c51fac2246" kindref="member">maximum_attempts</ref><sp/>-=<sp/>result.starting_attempts;</highlight></codeline>
<codeline lineno="174"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="classserif_1_1solver_1_1continuation_1_1_coordinate_controller" kindref="compound">CoordinateController&lt;count&gt;</ref><sp/>controller(*result.accepted_coordinates,<sp/>result.target,<sp/>steps);</highlight></codeline>
<codeline lineno="175"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">while</highlight><highlight class="normal"><sp/>(result.total_work()<sp/>&lt;<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1aa2480b533629356d72647bb6333dddae" kindref="member">maximum_work</ref>)<sp/>{</highlight></codeline>
<codeline lineno="176"><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">auto</highlight><highlight class="normal"><sp/>proposal<sp/>=<sp/>controller.propose();</highlight></codeline>
<codeline lineno="177"><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/>(!proposal)<sp/>{</highlight></codeline>
<codeline lineno="178"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">break</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="179"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="180"><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/>[report,<sp/>stage]<sp/>=<sp/>attempt(proposal-&gt;coordinates,<sp/>result.accepted-&gt;state(),<sp/></highlight><highlight class="keyword">false</highlight><highlight class="normal">,<sp/>proposal-&gt;axis);</highlight></codeline>
<codeline lineno="181"><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/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768e" kindref="member">StageDisposition</ref><sp/>disposition<sp/>=<sp/>stage.disposition;</highlight></codeline>
<codeline lineno="182"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375" kindref="member">AttemptOutcome</ref><sp/>outcome<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375a9d2045acefec47e0dff109bd1309581d" kindref="member">AttemptOutcome::recoverable_rejection</ref>;</highlight></codeline>
<codeline lineno="183"><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/>(disposition<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea7de33615d7fbc1cb7bc608d12f1993d2" kindref="member">StageDisposition::converged</ref>)<sp/>{</highlight></codeline>
<codeline lineno="184"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>outcome<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375a260ca9dd8a4577fc00b7bd5810298076" kindref="member">AttemptOutcome::success</ref>;</highlight></codeline>
<codeline lineno="185"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(disposition<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ae0b82e9c6b756ec2095a5ea1df5f768ea53dbaf63161eadde6786ab8baa54a3e5" kindref="member">StageDisposition::invalid_model</ref>)<sp/>{</highlight></codeline>
<codeline lineno="186"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>outcome<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375a3fa51915e3330498d7b812b8738dd3f4" kindref="member">AttemptOutcome::fatal_failure</ref>;</highlight></codeline>
<codeline lineno="187"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="188"><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/>std::uint64_t<sp/>work<sp/>=<sp/>stage.work;</highlight></codeline>
<codeline lineno="189"><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/>std::string<sp/>message<sp/>=<sp/>stage.message;</highlight></codeline>
<codeline lineno="190"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>controller.validate_resolution(proposal-&gt;id,<sp/>outcome,<sp/>work);</highlight></codeline>
<codeline lineno="191"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1_1detail_1a559f8cf10ed2895254c8a895718cec9e" kindref="member">detail::record</ref>(result,<sp/>std::move(stage),<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1acd738cc25b7f5fe5e97dd4add5632c6e" kindref="member">maximum_records</ref>);</highlight></codeline>
<codeline lineno="192"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>controller.resolve(proposal-&gt;id,<sp/>outcome,<sp/>work);</highlight></codeline>
<codeline lineno="193"><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/>(outcome<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375a260ca9dd8a4577fc00b7bd5810298076" kindref="member">AttemptOutcome::success</ref>)<sp/>{</highlight></codeline>
<codeline lineno="194"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accepted.swap(report);</highlight></codeline>
<codeline lineno="195"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.accepted_coordinates<sp/>=<sp/>controller.accepted();</highlight></codeline>
<codeline lineno="196"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="197"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.failed.swap(report);</highlight></codeline>
<codeline lineno="198"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="199"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.counters<sp/>=<sp/>controller.counters();</highlight></codeline>
<codeline lineno="200"><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/>(outcome<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a888b97a307db6acbca740638be478375a3fa51915e3330498d7b812b8738dd3f4" kindref="member">AttemptOutcome::fatal_failure</ref>)<sp/>{</highlight></codeline>
<codeline lineno="201"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a53dbaf63161eadde6786ab8baa54a3e5" kindref="member">Status::invalid_model</ref>;</highlight></codeline>
<codeline lineno="202"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.message<sp/>=<sp/>message;</highlight></codeline>
<codeline lineno="203"><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/>result;</highlight></codeline>
<codeline lineno="204"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="205"><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/>(controller.status()<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ac833c779d67dfdac0917f38d98020224ad9a22d7a8178d5b42a8750123cbfe5b1" kindref="member">ControllerStatus::complete</ref>)<sp/>{</highlight></codeline>
<codeline lineno="206"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a47252c72fe050aa193e34680c008a090" kindref="member">Status::target_reached</ref>;</highlight></codeline>
<codeline lineno="207"><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/>result;</highlight></codeline>
<codeline lineno="208"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="209"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="210"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.counters<sp/>=<sp/>controller.counters();</highlight></codeline>
<codeline lineno="211"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(result.total_work()<sp/>==<sp/>options.<ref refid="structserif_1_1solver_1_1continuation_1_1_options_1aa2480b533629356d72647bb6333dddae" kindref="member">maximum_work</ref>)<sp/>{</highlight></codeline>
<codeline lineno="212"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516ab46e5f037ad909fb47d91de634c95004" kindref="member">Status::work_limit</ref>;</highlight></codeline>
<codeline lineno="213"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(controller.status()<sp/>==<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1ac833c779d67dfdac0917f38d98020224acc37d00e5e12d2c8308851308b845222" kindref="member">ControllerStatus::attempt_limit</ref>)<sp/>{</highlight></codeline>
<codeline lineno="214"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516acc37d00e5e12d2c8308851308b845222" kindref="member">Status::attempt_limit</ref>;</highlight></codeline>
<codeline lineno="215"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}<sp/></highlight><highlight class="keywordflow">else</highlight><highlight class="normal"><sp/>{</highlight></codeline>
<codeline lineno="216"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>result.status<sp/>=<sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1a0445e530123f4dd3f14954eafeaeb516a43c09831647cc3d85b480f8815f0eef7" kindref="member">Status::no_progress</ref>;</highlight></codeline>
<codeline lineno="217"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="218"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>result;</highlight></codeline>
<codeline lineno="219"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="220"><highlight class="normal"></highlight></codeline>
<codeline lineno="222"><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/>Family,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Model,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>State,<sp/></highlight><highlight class="keyword">typename</highlight><highlight class="normal"><sp/>Corrector&gt;</highlight></codeline>
<codeline lineno="223"><highlight class="normal"><sp/><sp/><sp/><sp/>[[nodiscard]]<sp/></highlight><highlight class="keyword">auto</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1_1continuation_1add798956874a0248752eabf98cc12b4b" kindref="member">run</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="classserif_1_1solver_1_1continuation_1_1_family" kindref="compound">Family</ref>&amp;<sp/>family,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_starting_star" kindref="compound">StartingStar&lt;Model, State&gt;</ref>&amp;<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>,<sp/>Corrector&amp;&amp;<sp/>correct,</highlight></codeline>
<codeline lineno="224"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1continuation_1_1_options" kindref="compound">Options&lt;Family&gt;</ref><sp/>options,<sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>absolute_tolerance)<sp/>{</highlight></codeline>
<codeline lineno="225"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="namespaceserif_1_1utils_1_1errors_1a7fefa3a63ca7895a875f2672026df02d" kindref="member">utils::errors::serif_ensure&lt;utils::errors::SERiFErrorCode::INVALID_ARGUMENT, std::invalid_argument&gt;</ref>(!options.explicit_start,</highlight></codeline>
<codeline lineno="226"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">&quot;A<sp/>supplied<sp/>starting<sp/>star<sp/>determines<sp/>its<sp/>own<sp/>physical<sp/>coordinates.<sp/>Remove<sp/>starting_at<sp/>settings<sp/>when<sp/>continuing<sp/>from<sp/>that<sp/>star.&quot;</highlight><highlight class="normal">);</highlight></codeline>
<codeline lineno="227"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>family.validate_member(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>.model);</highlight></codeline>
<codeline lineno="228"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>options.start<sp/>=<sp/>family.coordinates_of(<ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>.model);</highlight></codeline>
<codeline lineno="229"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>options.explicit_start<sp/>=<sp/></highlight><highlight class="keyword">true</highlight><highlight class="normal">;</highlight></codeline>
<codeline lineno="230"><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_1continuation_1add798956874a0248752eabf98cc12b4b" kindref="member">run</ref>(family,<sp/><ref refid="namespaceserif_1_1solver_1a6fa8bbc306fbf990b16ade9fb7771464acc51b81974287ab79cef9e94fe778cc9" kindref="member">initial</ref>.state,<sp/>std::forward&lt;Corrector&gt;(correct),<sp/>std::move(options),<sp/>absolute_tolerance);</highlight></codeline>
<codeline lineno="231"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
<codeline lineno="232"><highlight class="normal">}</highlight></codeline>
</programlisting>
<location file="src/include/serif/solver/continuation/driver.hpp"/>
</compounddef>
</doxygen>