268 lines
25 KiB
XML
268 lines
25 KiB
XML
|
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||
|
|
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
|
||
|
|
<compounddef id="options_8cpp" kind="file" language="C++">
|
||
|
|
<compoundname>options.cpp</compoundname>
|
||
|
|
<includes refid="solver_2nonlinear_2options_8hpp" local="yes">serif/solver/nonlinear/options.hpp</includes>
|
||
|
|
<includes local="no">algorithm</includes>
|
||
|
|
<includes refid="errors_8hpp" local="yes">serif/utils/error/errors.hpp</includes>
|
||
|
|
<incdepgraph>
|
||
|
|
<node id="26">
|
||
|
|
<label>serif/meta/enums.hpp</label>
|
||
|
|
<link refid="enums_8hpp"/>
|
||
|
|
<childnode refid="27" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="22" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="28" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="9">
|
||
|
|
<label>serif/solver/linear/linear.hpp</label>
|
||
|
|
<link refid="linear_8hpp"/>
|
||
|
|
<childnode refid="10" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="2">
|
||
|
|
<label>serif/solver/nonlinear/options.hpp</label>
|
||
|
|
<link refid="solver_2nonlinear_2options_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>
|
||
|
|
<childnode refid="7" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="8" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="9" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="25">
|
||
|
|
<label>serif/utils/error/codes.hpp</label>
|
||
|
|
<link refid="codes_8hpp"/>
|
||
|
|
<childnode refid="10" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="26" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="12">
|
||
|
|
<label>serif/utils/error/errors.hpp</label>
|
||
|
|
<link refid="errors_8hpp"/>
|
||
|
|
<childnode refid="13" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="14" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="15" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="6" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="10" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="11" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="16" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="17" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="20" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="25" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="29" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="20">
|
||
|
|
<label>serif/utils/misc/concepts/exceptions.hpp</label>
|
||
|
|
<link refid="utils_2misc_2concepts_2exceptions_8hpp"/>
|
||
|
|
<childnode refid="21" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="22" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="23" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="23">
|
||
|
|
<label>serif/utils/misc/concepts/numeric.hpp</label>
|
||
|
|
<link refid="numeric_8hpp"/>
|
||
|
|
<childnode refid="24" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="22" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="17">
|
||
|
|
<label>serif/utils/misc/terminal/colors.hpp</label>
|
||
|
|
<link refid="colors_8hpp"/>
|
||
|
|
<childnode refid="13" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="15" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="18" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="8" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="19" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="29">
|
||
|
|
<label>serif/utils/types/strings.hpp</label>
|
||
|
|
<link refid="types_2strings_8hpp"/>
|
||
|
|
<childnode refid="11" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="30" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="13" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="1">
|
||
|
|
<label>src/lib/serif/solver/nonlinear/options.cpp</label>
|
||
|
|
<link refid="options_8cpp"/>
|
||
|
|
<childnode refid="2" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="11" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="12" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="11">
|
||
|
|
<label>algorithm</label>
|
||
|
|
</node>
|
||
|
|
<node id="3">
|
||
|
|
<label>cmath</label>
|
||
|
|
</node>
|
||
|
|
<node id="24">
|
||
|
|
<label>concepts</label>
|
||
|
|
</node>
|
||
|
|
<node id="10">
|
||
|
|
<label>cstdint</label>
|
||
|
|
</node>
|
||
|
|
<node id="15">
|
||
|
|
<label>cstdio</label>
|
||
|
|
</node>
|
||
|
|
<node id="18">
|
||
|
|
<label>cstdlib</label>
|
||
|
|
</node>
|
||
|
|
<node id="21">
|
||
|
|
<label>exception</label>
|
||
|
|
</node>
|
||
|
|
<node id="14">
|
||
|
|
<label>format</label>
|
||
|
|
</node>
|
||
|
|
<node id="30">
|
||
|
|
<label>iostream</label>
|
||
|
|
</node>
|
||
|
|
<node id="28">
|
||
|
|
<label>magic_enum/magic_enum_all.hpp</label>
|
||
|
|
</node>
|
||
|
|
<node id="5">
|
||
|
|
<label>optional</label>
|
||
|
|
</node>
|
||
|
|
<node id="4">
|
||
|
|
<label>span</label>
|
||
|
|
</node>
|
||
|
|
<node id="6">
|
||
|
|
<label>string</label>
|
||
|
|
</node>
|
||
|
|
<node id="13">
|
||
|
|
<label>string_view</label>
|
||
|
|
</node>
|
||
|
|
<node id="7">
|
||
|
|
<label>tuple</label>
|
||
|
|
</node>
|
||
|
|
<node id="22">
|
||
|
|
<label>type_traits</label>
|
||
|
|
</node>
|
||
|
|
<node id="19">
|
||
|
|
<label>unistd.h</label>
|
||
|
|
</node>
|
||
|
|
<node id="27">
|
||
|
|
<label>unordered_map</label>
|
||
|
|
</node>
|
||
|
|
<node id="8">
|
||
|
|
<label>utility</label>
|
||
|
|
</node>
|
||
|
|
<node id="16">
|
||
|
|
<label>version</label>
|
||
|
|
</node>
|
||
|
|
</incdepgraph>
|
||
|
|
<innernamespace refid="namespaceserif">serif</innernamespace>
|
||
|
|
<innernamespace refid="namespaceserif_1_1solver">serif::solver</innernamespace>
|
||
|
|
<briefdescription>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
</detaileddescription>
|
||
|
|
<programlisting>
|
||
|
|
<codeline lineno="1"><highlight class="preprocessor">#include<sp/>"<ref refid="solver_2nonlinear_2options_8hpp" kindref="compound">serif/solver/nonlinear/options.hpp</ref>"</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/><algorithm></highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"<ref refid="errors_8hpp" kindref="compound">serif/utils/error/errors.hpp</ref>"</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"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1_newton_1a4123b39d2ef3dfdd9e5ca8d8fef43892" kindref="member">Newton::validate</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
|
||
|
|
<codeline lineno="8"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal">utils::errors;</highlight></codeline>
|
||
|
|
<codeline lineno="9"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure<SERiFErrorCode::INVALID_ARGUMENT>(std::isfinite(<ref refid="structserif_1_1solver_1_1_newton_1a0f0f39dd50491d41a52256f9f6d7a397" kindref="member">relative_tolerance</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_newton_1a0f0f39dd50491d41a52256f9f6d7a397" kindref="member">relative_tolerance</ref><sp/>>=<sp/>0.0<sp/>&&</highlight></codeline>
|
||
|
|
<codeline lineno="10"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(<ref refid="structserif_1_1solver_1_1_newton_1ad898cfc3de115a418fc6782e31bb53fa" kindref="member">absolute_tolerance</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_newton_1ad898cfc3de115a418fc6782e31bb53fa" kindref="member">absolute_tolerance</ref><sp/>>=<sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_newton_1a673a168331c73603a181f66f23487759" kindref="member">maximum_iterations</ref><sp/>>=<sp/>0,</highlight></codeline>
|
||
|
|
<codeline lineno="11"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">"Newton<sp/>tolerances<sp/>must<sp/>be<sp/>finite<sp/>and<sp/>nonnegative,<sp/>and<sp/>its<sp/>iteration<sp/>budget<sp/>must<sp/>be<sp/>nonnegative."</highlight><highlight class="normal">);</highlight></codeline>
|
||
|
|
<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1_newton_1ad7ad5d765234464e957ba660aa0253ff" kindref="member">linear_solve</ref>.validate();</highlight></codeline>
|
||
|
|
<codeline lineno="13"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="14"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="15"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1_newton_1a3b45548b6d188740685d4c38c4c1feda" kindref="member">Newton::convergence_threshold</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>initial_norm)</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
|
||
|
|
<codeline lineno="16"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal">utils::errors;</highlight></codeline>
|
||
|
|
<codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1_newton_1a4123b39d2ef3dfdd9e5ca8d8fef43892" kindref="member">validate</ref>();</highlight></codeline>
|
||
|
|
<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>relative<sp/>=<sp/><ref refid="structserif_1_1solver_1_1_newton_1a0f0f39dd50491d41a52256f9f6d7a397" kindref="member">relative_tolerance</ref><sp/>*<sp/>initial_norm;</highlight></codeline>
|
||
|
|
<codeline lineno="19"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure<SERiFErrorCode::INVALID_ARGUMENT>(std::isfinite(initial_norm)<sp/>&&<sp/>initial_norm<sp/>>=<sp/>0.0<sp/>&&<sp/>std::isfinite(relative),</highlight></codeline>
|
||
|
|
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">"Newton<sp/>requires<sp/>a<sp/>finite<sp/>initial<sp/>norm<sp/>and<sp/>representable<sp/>relative<sp/>convergence<sp/>threshold."</highlight><highlight class="normal">);</highlight></codeline>
|
||
|
|
<codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>std::max(<ref refid="structserif_1_1solver_1_1_newton_1ad898cfc3de115a418fc6782e31bb53fa" kindref="member">absolute_tolerance</ref>,<sp/>relative);</highlight></codeline>
|
||
|
|
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="23"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1_backtracking_1abf0928f3cb06fbb4b5449d795b0d49f0" kindref="member">Backtracking::validate</ref>()</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
|
||
|
|
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">using<sp/>namespace<sp/></highlight><highlight class="normal">utils::errors;</highlight></codeline>
|
||
|
|
<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>serif_ensure<SERiFErrorCode::INVALID_ARGUMENT>(std::isfinite(<ref refid="structserif_1_1solver_1_1_backtracking_1aebcf24ae783fc9ff3ad60d99a2ec6c66" kindref="member">initial_step</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1aebcf24ae783fc9ff3ad60d99a2ec6c66" kindref="member">initial_step</ref><sp/>><sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1aebcf24ae783fc9ff3ad60d99a2ec6c66" kindref="member">initial_step</ref><sp/><=<sp/>1.0<sp/>&&</highlight></codeline>
|
||
|
|
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(<ref refid="structserif_1_1solver_1_1_backtracking_1a7911ba8308c60432c6de212dfd695e8f" kindref="member">contraction</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a7911ba8308c60432c6de212dfd695e8f" kindref="member">contraction</ref><sp/>><sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a7911ba8308c60432c6de212dfd695e8f" kindref="member">contraction</ref><sp/><<sp/>1.0<sp/>&&</highlight></codeline>
|
||
|
|
<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(<ref refid="structserif_1_1solver_1_1_backtracking_1a367c1a51e0b8d12774708d13c9094a8a" kindref="member">fraction_to_boundary</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a367c1a51e0b8d12774708d13c9094a8a" kindref="member">fraction_to_boundary</ref><sp/>><sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a367c1a51e0b8d12774708d13c9094a8a" kindref="member">fraction_to_boundary</ref><sp/><<sp/>1.0<sp/>&&</highlight></codeline>
|
||
|
|
<codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(<ref refid="structserif_1_1solver_1_1_backtracking_1abf45ecd4ec4a59442d45bca50a8d10ef" kindref="member">sufficient_decrease</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1abf45ecd4ec4a59442d45bca50a8d10ef" kindref="member">sufficient_decrease</ref><sp/>><sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1abf45ecd4ec4a59442d45bca50a8d10ef" kindref="member">sufficient_decrease</ref><sp/><<sp/>1.0<sp/>&&</highlight></codeline>
|
||
|
|
<codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>std::isfinite(<ref refid="structserif_1_1solver_1_1_backtracking_1a53406b3dd0cdd6e269f8e7269ec02d03" kindref="member">minimum_step</ref>)<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a53406b3dd0cdd6e269f8e7269ec02d03" kindref="member">minimum_step</ref><sp/>><sp/>0.0<sp/>&&<sp/><ref refid="structserif_1_1solver_1_1_backtracking_1a53406b3dd0cdd6e269f8e7269ec02d03" kindref="member">minimum_step <= initial_step && maximum_trials ></ref><sp/>0,</highlight></codeline>
|
||
|
|
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="stringliteral">"Backtracking<sp/>needs<sp/>0<sp/><<sp/>minimum<sp/>step<sp/><=<sp/>initial<sp/>step<sp/><=<sp/>1,<sp/>contraction,<sp/>boundary<sp/>safety<sp/>and<sp/>sufficient<sp/>decrease<sp/>in<sp/>(0,1),<sp/>and<sp/>a<sp/>positive<sp/>trial<sp/>budget."</highlight><highlight class="normal">);</highlight></codeline>
|
||
|
|
<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="33"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/><ref refid="structserif_1_1solver_1_1_metric_evaluation" kindref="compound">MetricEvaluation</ref><sp/><ref refid="structserif_1_1solver_1_1_normalized_residual_metric_1a66b41c0e236869b0c75af344de15b101" kindref="member">NormalizedResidualMetric::operator()</ref>(std::span<const<sp/>double><sp/>residual)</highlight><highlight class="keyword"><sp/>const<sp/></highlight><highlight class="normal">{</highlight></codeline>
|
||
|
|
<codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>norm<sp/>=<sp/>0.0;</highlight></codeline>
|
||
|
|
<codeline lineno="36"><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="keywordtype">double</highlight><highlight class="normal"><sp/>value<sp/>:<sp/>residual)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>norm<sp/>=<sp/>std::hypot(norm,<sp/>value);</highlight></codeline>
|
||
|
|
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>{.residual_norm<sp/>=<sp/>norm,<sp/>.merit<sp/>=<sp/>0.5<sp/>*<sp/>norm<sp/>*<sp/>norm};</highlight></codeline>
|
||
|
|
<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="41"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1solver_1a4ae15221b9aded0dc3ec787898984462" kindref="member">next_backtracking_step</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>rejected_step,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>accepted_determinant,</highlight></codeline>
|
||
|
|
<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>rejected_determinant,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">bool</highlight><highlight class="normal"><sp/>inverted,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/><ref refid="structserif_1_1solver_1_1_backtracking" kindref="compound">Backtracking</ref>&<sp/>options)<sp/></highlight><highlight class="keyword">noexcept</highlight><highlight class="normal"><sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>contracted<sp/>=<sp/>rejected_step<sp/>*<sp/>options.contraction;</highlight></codeline>
|
||
|
|
<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!inverted<sp/>||<sp/>!std::isfinite(accepted_determinant)<sp/>||<sp/>accepted_determinant<sp/><=<sp/>0.0<sp/>||</highlight></codeline>
|
||
|
|
<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>!std::isfinite(rejected_determinant)<sp/>||<sp/>rejected_determinant<sp/>><sp/>0.0)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="47"><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/>contracted;</highlight></codeline>
|
||
|
|
<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>change<sp/>=<sp/>accepted_determinant<sp/>-<sp/>rejected_determinant;</highlight></codeline>
|
||
|
|
<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!std::isfinite(change)<sp/>||<sp/>change<sp/><=<sp/>0.0)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="51"><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/>contracted;</highlight></codeline>
|
||
|
|
<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>safe_step<sp/>=<sp/>options.fraction_to_boundary<sp/>*<sp/>rejected_step<sp/>*<sp/>accepted_determinant<sp/>/<sp/>change;</highlight></codeline>
|
||
|
|
<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!std::isfinite(safe_step)<sp/>||<sp/>safe_step<sp/><=<sp/>0.0<sp/>||<sp/>contracted<sp/><=<sp/>safe_step)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="55"><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/>contracted;</highlight></codeline>
|
||
|
|
<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>rung<sp/>=<sp/>std::ceil(std::log(safe_step<sp/>/<sp/>rejected_step)<sp/>/<sp/>std::log(options.contraction));</highlight></codeline>
|
||
|
|
<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">double</highlight><highlight class="normal"><sp/>skipped<sp/>=<sp/>rejected_step<sp/>*<sp/>std::pow(options.contraction,<sp/>rung);</highlight></codeline>
|
||
|
|
<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(!std::isfinite(skipped)<sp/>||<sp/>skipped<sp/><=<sp/>0.0<sp/>||<sp/>skipped<sp/>>=<sp/>rejected_step)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="60"><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/>contracted;</highlight></codeline>
|
||
|
|
<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(skipped<sp/>><sp/>safe_step)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>skipped<sp/>*=<sp/>options.contraction;</highlight></codeline>
|
||
|
|
<codeline lineno="64"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="65"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>skipped;</highlight></codeline>
|
||
|
|
<codeline lineno="66"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="67"><highlight class="normal">}</highlight></codeline>
|
||
|
|
</programlisting>
|
||
|
|
<location file="src/lib/serif/solver/nonlinear/options.cpp"/>
|
||
|
|
</compounddef>
|
||
|
|
</doxygen>
|