Bertini 2 d882924 (2026-10-06 19:56 UTC)
Numerical algebraic geometry library (C++ core)
Loading...
Searching...
No Matches
base_tracker.hpp
Go to the documentation of this file.
1//This file is part of Bertini 2.
2//
3//base_tracker.hpp is free software: you can redistribute it and/or modify
4//it under the terms of the GNU General Public License as published by
5//the Free Software Foundation, either version 3 of the License, or
6//(at your option) any later version.
7//
8//base_tracker.hpp is distributed in the hope that it will be useful,
9//but WITHOUT ANY WARRANTY; without even the implied warranty of
10//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11//GNU General Public License for more details.
12//
13//You should have received a copy of the GNU General Public License
14//along with base_tracker.hpp. If not, see <http://www.gnu.org/licenses/>.
15//
16// Copyright(C) Bertini2 Development Team
17//
18// See <http://www.gnu.org/licenses/> for a copy of the license,
19// as well as COPYING. Bertini2 is provided with permitted
20// additional terms in the b2/licenses/ directory.
21
27
28#ifndef BERTINI_BASE_TRACKER_HPP
29#define BERTINI_BASE_TRACKER_HPP
30
31#include <algorithm>
32#include <chrono>
33#include <optional>
34//#include "bertini2/tracking/step.hpp"
37#include "bertini2/logging.hpp"
38
40
41// Must be at the end of the include list
43
47
48namespace bertini{
49
50 namespace tracking{
51
71 inline
76
77
159 template<class D>
160 class Tracker :
161 public Observable,
162 public detail::Configured<
163 typename TrackerTraits< D >::NeededConfigs
164 >
165 {
166 using NeededTypes = typename TrackerTraits< D >::NeededTypes;
167 using BaseComplexT = typename TrackerTraits<D>::BaseComplexT;
168 using BaseRealT = typename TrackerTraits<D>::BaseRealT;
169
170 using ComplexT = BaseComplexT;
171 using RealT = BaseRealT;
172
173
174 public:
179
181 Tracker(System const& sys) : tracked_system_(std::ref(sys)),
182 predictor_(predict::DefaultPredictor(), sys),
183 corrector_(sys)
184 {
186 }
187
188
189
190
196 void Setup(Predictor new_predictor_choice,
197 NumErrorT const& tracking_tolerance,
198 SteppingConfig const& stepping,
199 NewtonConfig const& newton)
200 {
201 SetPredictor(new_predictor_choice);
202 corrector_.Settings(newton);
203
204 SetTrackingTolerance(tracking_tolerance);
205
206 this->template Set<SteppingConfig>(stepping);
207 this->template Set<NewtonConfig>(newton);
208
209 current_stepsize_ = BaseRealT(stepping.initial_step_size);
210 }
211
212
228 void Setup(Predictor new_predictor_choice,
229 NumErrorT const& tracking_tolerance,
230 NumErrorT const& path_truncation_threshold,
231 SteppingConfig const& stepping,
232 NewtonConfig const& newton)
233 {
234 Setup(new_predictor_choice, tracking_tolerance, stepping, newton);
235 SetInfiniteTruncationTolerance(path_truncation_threshold);
236 }
237
238
240 using Config::Get;
241
242
243
251 void SetTrackingTolerance(NumErrorT const& tracking_tolerance)
252 {
253 if (tracking_tolerance <= 0)
254 throw std::runtime_error("tracking tolerance must be strictly positive");
255
256 auto settings = this->template Get<TrackerConfig>();
257 settings.tracking_tolerance = tracking_tolerance;
258 this->Set(settings);
259 }
260
261
265 {
266 if (tol <= 0)
267 throw std::runtime_error("truncation threshold must be strictly positive");
268
269 auto settings = this->template Get<TrackerConfig>();
270 settings.path_truncation_threshold = tol;
271 this->Set(settings);
272 }
273
274
285 {
286 corrector_.RefreshRandomDirection();
287 // Share the SAME per-path probe with the predictor, so the predictor's and
288 // corrector's ||J^{-1}|| estimates use one consistent direction (ADR-0024).
289 predictor_.SetConditionProbe(corrector_.ConditionProbe());
290 }
291
292
304 SuccessCode TrackPath(Vec<ComplexT> & solution_at_endtime,
305 ComplexT const& start_time, ComplexT const& endtime,
306 Vec<ComplexT> const& start_point
307 ) const
308 {
309 if (start_point.size()!=static_cast<Eigen::Index>(GetSystem().NumVariables()))
310 throw std::runtime_error("start point size must match the number of variables in the system to be tracked");
311
312 // whatever route the settings were set by, they take effect here
313 SyncSettings();
314
315 SuccessCode initialization_code = TrackerLoopInitialization(start_time, endtime, start_point);
316 if (initialization_code!=SuccessCode::Success)
317 {
319 return initialization_code;
320 }
321
322 NotifyObservers(TrackingStarted<typename TrackerTraits<D>::EventEmitterType>(static_cast<typename TrackerTraits<D>::EventEmitterType const&>(*this)));
323
324 // as precondition to this while loop, the correct container, either complex_dbl or mpfr, must have the correct data.
325 while (!IsSymmRelDiffSmall(current_time_,endtime_, Eigen::NumTraits<ComplexT>::epsilon()))
326 {
327 // Has somebody outside asked us to stop? Checked FIRST, before the
328 // tracker's own budgets, because it is the only one whose answer is not
329 // about this path: a keyboard interrupt is a statement about the process.
330 // Between steps is the only place we can honour it without threads, so a
331 // stop overruns by at most the step in flight -- which at high precision
332 // is not free, and is the price of not preempting mid-step.
333 if (StopRequested())
334 {
337 }
338
339 // Has our wall-clock deadline passed? A deadline rather than a duration,
340 // because it must survive across TrackPath calls: an endgame issues hundreds
341 // of them for one path, and a per-call budget would restart with each.
342 // Same overrun as the stop above: at most the step in flight.
343 if (wall_clock_deadline_ && std::chrono::steady_clock::now() >= *wall_clock_deadline_)
344 {
347 }
348
349 SuccessCode pre_iteration_code = PreIterationCheck();
350 if (pre_iteration_code!=SuccessCode::Success)
351 {
353 return pre_iteration_code;
354 }
355
356 using std::abs;
357 // compute the next delta_t
360 else
362
363 step_success_code_ = TrackerIteration();
364
366 {
370 }
373 else
374 {
375 OnStepFail();
376 // A terminal failure adjusted nothing, so the next iteration would be
377 // bit-identical to the one that just failed -- an infinite loop that
378 // burns a core forever instead of failing the path.
380 {
382 return step_success_code_;
383 }
384 }
385
386 }// re: while
387
388
389 CopySolution(solution_at_endtime);
392 }
393
394
395
396
408 template<typename C>
410 Vec<C> const& start_point, C const& current_time) const
411 {
412
413 static_assert(detail::IsTemplateParameter<C,NeededTypes>::value,"complex type for refinement must be a used type for the tracker");
414 return this->AsDerived().RefineImpl(new_space, start_point, current_time);
415 }
416
417
418
419
433 template<typename C>
435 Vec<C> const& start_point, C const& current_time, NumErrorT const& tolerance, unsigned max_iterations) const
436 {
437 static_assert(detail::IsTemplateParameter<C,NeededTypes>::value,"complex type for refinement must be a used type for the tracker");
438
439 return this->AsDerived().RefineImpl(new_space, start_point, current_time, tolerance, max_iterations);
440 }
441
442
450 void SetPredictor(Predictor new_predictor_choice)
451 {
452 auto settings = this->template Get<TrackerConfig>();
453 settings.predictor = new_predictor_choice;
454 this->Set(settings);
455 SyncSettings();
456 }
457
458
463 {
464 return this->template Get<TrackerConfig>().predictor;
465 }
466
467
484 void SyncSettings() const
485 {
486 auto const wanted = this->template Get<TrackerConfig>().predictor;
487 if (predictor_.PredictorMethod() == wanted)
488 return;
489 predictor_.PredictorMethod(wanted);
491 }
492
493
497 void SetSystem(const System & new_sys)
498 {
499 tracked_system_ = std::ref(new_sys);
500 predictor_.ChangeSystem(tracked_system_);
501 corrector_.ChangeSystem(tracked_system_);
502 }
503
507 const System& GetSystem() const
508 {
509 return tracked_system_.get();
510 }
511
517 unsigned NumTotalStepsTaken () const
518 {
520 }
521
536
539 {
541 }
542
544 unsigned CumulativeFailedSteps() const
545 {
547 }
548
561 void SetMaxWallClockTime(std::chrono::steady_clock::time_point deadline) const
562 {
563 wall_clock_deadline_ = deadline;
564 }
565
571 template <typename Rep, typename Period>
572 void SetMaxWallClockDuration(std::chrono::duration<Rep, Period> duration) const
573 {
574 using clock = std::chrono::steady_clock;
575 wall_clock_deadline_ = clock::now() + std::chrono::duration_cast<clock::duration>(duration);
576 }
577
580 {
581 wall_clock_deadline_.reset();
582 }
583
585 std::optional<std::chrono::steady_clock::time_point> MaxWallClockTime() const
586 {
588 }
589
595 void SetStepSize(RealT const& new_stepsize) const
596 {
597 current_stepsize_ = new_stepsize;
598 }
599
600
606 void ReinitializeInitialStepSize(bool should_reinitialize_stepsize)
607 {
608 reinitialize_stepsize_ = should_reinitialize_stepsize;
609 }
610
611 virtual ~Tracker() = default;
612
614 auto TrackingTolerance() const
615 {
616 return this->template Get<TrackerConfig>().tracking_tolerance;
617 }
618
626
629 {
630 return this->template Get<TrackerConfig>().path_truncation_threshold;
631 }
632
633 private:
634
635 // convert the base tracker into the derived type.
636 const D& AsDerived() const
637 {
638 return static_cast<const D&>(*this);
639 }
640
648 virtual
649 SuccessCode TrackerLoopInitialization(ComplexT const& start_time, ComplexT const& end_time, Vec<ComplexT> const& start_point) const = 0;
650
651
657 virtual
658 SuccessCode PreIterationCheck() const = 0;
659
665 virtual
666 SuccessCode TrackerIteration() const = 0;
667
673 virtual
674 void CopySolution(Vec<ComplexT> & solution_at_endtime) const = 0;
675
676 // virtual
677 // void CopySolution(Vec<complex_dbl> & solution_at_endtime) const = 0;
678
679
680 protected:
681
682
683
684
685
697 template <typename ComplexT>
699 {
702 else
704 }
705
706
707
711 virtual
712 void PostTrackCleanup() const
713 {}
714
720 virtual
721 void ResetCounters() const = 0;
722
723
724
725
727 void ResetCountersBase() const
728 {
729 // reset a bunch of counters to 0.
734 }
735
736
750
752 virtual
753 void OnStepSuccess() const = 0;
754
755
768
769
771 virtual
772 void OnStepFail() const = 0;
773
779 virtual
781
783 virtual
784 void OnInfiniteTruncation() const = 0;
785
786
787 std::reference_wrapper<const System> tracked_system_;
788
791
792 // tracking the numbers of things
793 // zeroed here as well as in ResetCountersBase: that reset runs at the top of
794 // TrackPath, so until a path has been tracked these would otherwise be read
795 // uninitialized -- NumTotalStepsTaken() on a fresh tracker returned whatever
796 // was in the memory
797 mutable unsigned num_successful_steps_taken_ = 0;
799 mutable unsigned num_consecutive_failed_steps_ = 0;
800 mutable unsigned num_failed_steps_taken_ = 0;
801 mutable unsigned num_successful_steps_cumulative_ = 0;
802 mutable unsigned num_failed_steps_cumulative_ = 0;
803 mutable std::optional<std::chrono::steady_clock::time_point> wall_clock_deadline_;
804
805
806 // configuration for tracking
807 //
808 // predictor and corrector are held BY VALUE so that copying a tracker
809 // deep-copies them. (They were previously shared_ptr, which made every
810 // tracker copy share one predictor/corrector with its source — unusable
811 // from multiple threads.) Both hold only work buffers and settings; they
812 // store no reference to the System, so plain memberwise copy is correct.
813 // They are mutable for the same reason as the state members above: they
814 // hold scratch space mutated during the logically-const TrackPath.
816 mutable unsigned predictor_order_;
817
819
820
821
822 unsigned digits_final_ = 0;
823
824 mutable ComplexT endtime_;
825 mutable ComplexT current_time_;
826 mutable ComplexT delta_t_;
827 mutable RealT current_stepsize_;
828
829
830 // permanent temporaries
831 mutable RealT next_stepsize_;
833
834
835
838
839 using TupOfVec = typename NeededTypes::ToTupleOfVec;
840 using TupOfReal = typename NeededTypes::ToTupleOfReal;
841
845
846
851
852
853
854
855 public:
856
857
860 {
861 return this->last_step_.condition_number_estimate;
862 }
863
864
867 {
868 return this->last_step_.error_estimate;
869 }
870
871
874 {
875 return this->last_step_.norm_delta_z;
876 }
877
880 {
882 }
883
886 {
888 }
889
891 unsigned NumVariables() const
892 {
893 return static_cast<unsigned>(GetSystem().NumVariables());
894 }
895
897 auto CurrentTime() const
898 {
899 return current_time_;
900 }
901
903 auto DeltaT() const
904 {
905 return delta_t_;
906 }
907
909 auto CurrentStepsize() const
910 {
911 return current_stepsize_;
912 }
913
914
916 virtual Vec<ComplexT> CurrentPoint() const = 0;
917
918
920 virtual unsigned CurrentPrecision() const = 0;
921 };
922
923
924
925 } // re: namespace tracking
926} // re: namespace bertini
927
928
929#endif
void NotifyObservers(AnyEvent const &e) const
Sends an event to observers that subscribed to its exact dynamic type, then to all catch-all (untyped...
Definition observable.hpp:185
The fundamental polynomial system class for Bertini2.
Definition system.hpp:106
size_t NumVariables() const
Get the total number of variables in this system, including homogenizing variables.
void ReinitializeInitialStepSize(bool should_reinitialize_stepsize)
Switch resetting of initial step size to that of the stepping settings.
Definition base_tracker.hpp:606
predict::ExplicitRKPredictor predictor_
Definition base_tracker.hpp:815
unsigned num_successful_steps_cumulative_
Definition base_tracker.hpp:801
ComplexT delta_t_
Definition base_tracker.hpp:826
unsigned predictor_order_
Definition base_tracker.hpp:816
typename NeededTypes::ToTupleOfVec TupOfVec
Definition base_tracker.hpp:839
Tracker(System const &sys)
Construct a tracker associated to a system to be tracked.
Definition base_tracker.hpp:181
bool infinite_path_truncation_
Definition base_tracker.hpp:789
SteppingConfig Stepping
Definition base_tracker.hpp:176
Predictor GetPredictor() const
Query the currently set predictor.
Definition base_tracker.hpp:462
void Setup(Predictor new_predictor_choice, NumErrorT const &tracking_tolerance, SteppingConfig const &stepping, NewtonConfig const &newton)
Get the tracker set up for tracking.
Definition base_tracker.hpp:196
auto DeltaT() const
Get the current time-step increment (delta t).
Definition base_tracker.hpp:903
auto InfiniteTruncation()
Query whether the going-to-infinity path truncation check is enabled.
Definition base_tracker.hpp:885
void SetInfiniteTruncationTolerance(NumErrorT const &tol)
Set the threshold beyond which a path is judged to be going to infinity (and truncated).
Definition base_tracker.hpp:264
virtual void PostTrackCleanup() const
Function to be called before exiting the tracker loop.
Definition base_tracker.hpp:712
const System & GetSystem() const
Definition base_tracker.hpp:507
unsigned num_successful_steps_since_stepsize_increase_
Definition base_tracker.hpp:837
virtual Vec< ComplexT > CurrentPoint() const =0
Get the current space point of the track (in the derived tracker's working type).
const T & Get() const
Bring the configuration getter into scope, for querying config settings.
Definition configured.hpp:94
void SetSystem(const System &new_sys)
get a const reference to the system.
Definition base_tracker.hpp:497
SuccessCode Refine(Vec< C > &new_space, Vec< C > const &start_point, C const &current_time, NumErrorT const &tolerance, unsigned max_iterations) const
Refine a point to a given tolerance.
Definition base_tracker.hpp:434
void SetPredictor(Predictor new_predictor_choice)
Change tracker to use a predictor.
Definition base_tracker.hpp:450
virtual void OnInfiniteTruncation() const =0
Hook invoked when a path is truncated for going to infinity; derived types react here.
unsigned digits_final_
Definition base_tracker.hpp:822
unsigned num_consecutive_successful_steps_
Definition base_tracker.hpp:798
void SetInfiniteTruncation(bool b)
Turn the going-to-infinity path truncation check on or off.
Definition base_tracker.hpp:879
correct::NewtonCorrector corrector_
Definition base_tracker.hpp:818
auto CurrentTime() const
Get the current time value of the track.
Definition base_tracker.hpp:897
void SyncSettings() const
Bring state derived from the settings in line with the settings.
Definition base_tracker.hpp:484
ComplexT endtime_
Definition base_tracker.hpp:824
NumErrorT LatestNormOfStep() const
Get the norm of the Newton step from the most recent predict/correct step.
Definition base_tracker.hpp:873
std::optional< std::chrono::steady_clock::time_point > MaxWallClockTime() const
The wall-clock deadline in force, if any.
Definition base_tracker.hpp:585
unsigned CumulativeFailedSteps() const
Failed steps since the last ResetCumulativeStepCounts, across every TrackPath call in between.
Definition base_tracker.hpp:544
NewtonConfig Newton
Definition base_tracker.hpp:177
virtual unsigned CurrentPrecision() const =0
Get the current working precision of the tracker.
unsigned NumTotalStepsTaken() const
See how many steps have been taken.
Definition base_tracker.hpp:517
virtual void OnStepFail() const =0
Hook invoked after a failed tracker iteration; derived types update their own state here.
virtual void ResetCounters() const =0
Reset counters used during tracking.
NumErrorT LatestErrorEstimate() const
Get the error estimate from the most recent predict/correct step.
Definition base_tracker.hpp:866
TupOfVec current_space_
Definition base_tracker.hpp:842
SuccessCode step_success_code_
Definition base_tracker.hpp:832
unsigned CumulativeSuccessfulSteps() const
Successful steps since the last ResetCumulativeStepCounts, across every TrackPath call in between.
Definition base_tracker.hpp:538
unsigned num_failed_steps_taken_
Definition base_tracker.hpp:800
RealT current_stepsize_
Definition base_tracker.hpp:827
auto InfiniteTruncationTolerance() const
Get the currently set infinite-truncation (path) threshold.
Definition base_tracker.hpp:628
virtual void OnStepSuccess() const =0
Hook invoked after a successful tracker iteration; derived types update their own state here.
typename TrackerTraits< AMPTracker >::PrecisionConfig PrecConf
Definition base_tracker.hpp:178
void ClearMaxWallClockTime() const
Remove the wall-clock deadline; tracking is unlimited again.
Definition base_tracker.hpp:579
unsigned num_steps_since_last_condition_number_computation_
Definition base_tracker.hpp:836
void Setup(Predictor new_predictor_choice, NumErrorT const &tracking_tolerance, NumErrorT const &path_truncation_threshold, SteppingConfig const &stepping, NewtonConfig const &newton)
Get the tracker set up for tracking, and set its truncation threshold too.
Definition base_tracker.hpp:228
bool reinitialize_stepsize_
Definition base_tracker.hpp:790
TupOfVec temporary_space_
Definition base_tracker.hpp:844
unsigned num_failed_steps_cumulative_
Definition base_tracker.hpp:802
void SetMaxWallClockTime(std::chrono::steady_clock::time_point deadline) const
Give the tracker a wall-clock deadline: a point in time after which any track in progress is abandone...
Definition base_tracker.hpp:561
void IncrementBaseCountersFail() const
Increment and reset counters after a failed TrackerIteration().
Definition base_tracker.hpp:761
typename NeededTypes::ToTupleOfReal TupOfReal
Definition base_tracker.hpp:840
void ResetCumulativeStepCounts() const
Zero the cumulative step counts.
Definition base_tracker.hpp:531
unsigned num_successful_steps_taken_
Definition base_tracker.hpp:797
TupOfVec tentative_space_
Definition base_tracker.hpp:843
auto TrackingTolerance() const
Get the currently set tracking tolerance.
Definition base_tracker.hpp:614
void RefreshConditionDirection()
(Re)draw the random probe direction used for condition-number estimation.
Definition base_tracker.hpp:284
virtual ~Tracker()=default
RealT next_stepsize_
Definition base_tracker.hpp:831
virtual SuccessCode CheckGoingToInfinity() const =0
Check whether the path is going to infinity, as it tracks.
unsigned NumVariables() const
Get the number of variables in the system being tracked.
Definition base_tracker.hpp:891
std::reference_wrapper< const System > tracked_system_
Definition base_tracker.hpp:787
StepMetadata last_step_
Definition base_tracker.hpp:850
void SetTrackingTolerance(NumErrorT const &tracking_tolerance)
Set how tightly to track the path.
Definition base_tracker.hpp:251
unsigned num_consecutive_failed_steps_
Definition base_tracker.hpp:799
detail::Configured< typename TrackerTraits< AMPTracker >::NeededConfigs > Config
Definition base_tracker.hpp:175
SuccessCode TrackPath(Vec< ComplexT > &solution_at_endtime, ComplexT const &start_time, ComplexT const &endtime, Vec< ComplexT > const &start_point) const
Track a start point through time, from a start time to a target time.
Definition base_tracker.hpp:304
SuccessCode Refine(Vec< C > &new_space, Vec< C > const &start_point, C const &current_time) const
Refine a point to tolerance implicitly internally set.
Definition base_tracker.hpp:409
void ResetCountersBase() const
Reset the base-class step counters (successes, failures, consecutive runs, total) to zero.
Definition base_tracker.hpp:727
void SetStepSize(RealT const &new_stepsize) const
Set how large the stepsize should be.
Definition base_tracker.hpp:595
void SetMaxWallClockDuration(std::chrono::duration< Rep, Period > duration) const
Give the tracker a wall-clock budget counted from now: SetMaxWallClockTime(now + duration).
Definition base_tracker.hpp:572
unsigned DigitsTrackingTolerance() const
The number of digits tracking to the current tolerance demands, condition number notwithstanding.
Definition base_tracker.hpp:622
std::optional< std::chrono::steady_clock::time_point > wall_clock_deadline_
Definition base_tracker.hpp:803
NumErrorT LatestConditionNumber() const
Get the condition-number estimate from the most recent predict/correct step.
Definition base_tracker.hpp:859
void IncrementBaseCountersSuccess() const
Increment and reset counters after a successful TrackerIteration().
Definition base_tracker.hpp:742
auto CurrentStepsize() const
Get the current step size.
Definition base_tracker.hpp:909
ComplexT current_time_
Definition base_tracker.hpp:825
SuccessCode CheckGoingToInfinity() const
Check, at a given complex type, whether the current space value exceeds the truncation threshold.
Definition base_tracker.hpp:698
/class NewtonCorrector
Definition newton_corrector.hpp:46
A class which stores all the explicit single-step multi-stage ODE predictor methods.
Definition explicit_predictors.hpp:178
Contains the detail/configured helper type, for templated getting/setting/storage of config structs.
Contains the detail/is_template_parameter helper, for checking whether a type is a template parameter...
Logging in Bertini using Boost.Log.
Definition configIni_parse.hpp:78
Definition explicit_predictors.hpp:48
Predictor DefaultPredictor()
Get the Bertini2 default predictor.
Definition explicit_predictors.hpp:70
Definition adaptive_precision_utilities.hpp:35
Predictor
The predictor (ODE integration) method used during path tracking.
Definition config.hpp:55
bool StepFailureIsTerminal(SuccessCode c)
Whether a failed step leaves the tracker with no corrective action taken.
Definition base_tracker.hpp:72
Definition algorithm_builder.hpp:36
bool IsSymmRelDiffSmall(T const &a, T const &b, typename Eigen::NumTraits< T >::Real const &e)
Check whether two values are very close to each other.
Definition eigen_extensions.hpp:425
Eigen::Matrix< NumT, Eigen::Dynamic, 1 > Vec
A dynamically-sized column vector of NumT.
Definition eigen_extensions.hpp:296
double NumErrorT
The numeric type used to hold error/tolerance magnitudes throughout Bertini2 – tracking tolerances,...
Definition num_traits.hpp:48
SuccessCode
Definition config.hpp:42
@ FailedToSelectPrecisionAndStepsize
Definition config.hpp:67
@ ExternallyTerminated
Definition config.hpp:63
@ Success
Definition config.hpp:51
@ GoingToInfinity
Definition config.hpp:54
@ WallClockLimitReached
The tracker's wall-clock deadline passed between steps; the path was abandoned where it was....
Definition config.hpp:68
bool StopRequested()
Has somebody asked this process to stop?
Contains the observable base types.
Includes for the suite of ODE predictors.
Asking a long computation to stop, from outside it.
Numeric traits for a bertini number type: digit counts, conversions, and companion types.
Definition num_traits.hpp:57
This templated struct allows one to provide a variable typelist of config structs (or anything else f...
Definition configured.hpp:83
const T & Get() const
Get the held configuration object of type T.
Definition configured.hpp:94
void Set(T const &t)
Definition configured.hpp:101
static constexpr bool value
Whether the queried type appears in the pack (base case: no).
Definition is_template_parameter.hpp:43
Settings governing the Newton corrector's iteration bounds.
Definition config.hpp:119
Metadata produced by a single predict or correct step.
Definition config.hpp:84
NumErrorT error_estimate
embedded-method error estimate (predictor, embedded only).
Definition config.hpp:89
NumErrorT condition_number_estimate
norm_J * norm_J_inverse (refreshed per frequency_of_CN_estimation).
Definition config.hpp:87
NumErrorT norm_delta_z
||latest Newton step|| (corrector only).
Definition config.hpp:90
Settings governing step-size adjustment during tracking.
Definition config.hpp:96
mpq_rational initial_step_size
The length of the first time step when calling TrackPath. StepInitSize.
Definition config.hpp:100
Trait lookup mapping a tracker type to its numeric types, event-emitter type, precision config,...
Definition config.hpp:387
Contains the tracker/events base types.