26#ifndef BERTINI_AMP_CRITERIA_HPP
27#define BERTINI_AMP_CRITERIA_HPP
70 template<
typename NumT>
73 return NumTraits<NumT>::NumDigits() >
CriterionARHS(norm_J, norm_J_inverse, AMP_config);
90 return log10(norm_J_inverse*( (2+AMP_config.
epsilon)*norm_J+AMP_config.
epsilon*AMP_config.
Phi)+1);
108 double CriterionBRHS(
double const& norm_J,
double const& norm_J_inverse,
unsigned num_newton_iterations_remaining,
double const& tracking_tolerance,
double const& norm_of_latest_newton_residual,
AdaptiveMultiplePrecisionConfig const& AMP_config)
110 return AMP_config.
safety_digits_1 +
D(norm_J, norm_J_inverse, AMP_config) + (-log10(tracking_tolerance) + log10(norm_of_latest_newton_residual)) / (num_newton_iterations_remaining);
131 template<
typename NumT>
133 double const& norm_J_inverse,
134 unsigned num_newton_iterations_remaining,
135 double const& tracking_tolerance,
136 double const& norm_of_latest_newton_residual,
139 return NumTraits<NumT>::NumDigits() >
CriterionBRHS(norm_J, norm_J_inverse, num_newton_iterations_remaining, tracking_tolerance, norm_of_latest_newton_residual, AMP_config);
160 double const& norm_z,
161 double const& tracking_tolerance,
164 return AMP_config.
safety_digits_2 + -log10(tracking_tolerance) + log10(norm_J_inverse*AMP_config.
Psi + norm_z);
181 template<
typename Derived>
183 const Eigen::MatrixBase<Derived>& z,
184 double tracking_tolerance,
187 return CriterionCRHS(norm_J_inverse,
double(z.norm()), tracking_tolerance, AMP_config);
205 template<
typename NumT,
typename Derived>
208 return NumTraits<NumT>::NumDigits() >
CriterionCRHS(norm_J_inverse, z, tracking_tolerance, AMP_config);
bool CriterionC(double const &norm_J_inverse, const Eigen::MatrixBase< Derived > &z, double tracking_tolerance, AdaptiveMultiplePrecisionConfig const &_config)
Check AMP Criterion C.
Definition amp_criteria.hpp:206
double CriterionCRHS(double const &norm_J_inverse, double const &norm_z, double const &tracking_tolerance, AdaptiveMultiplePrecisionConfig const &_config)
Evaluate the right hand side of Criterion C.
Definition amp_criteria.hpp:159
double D(double const &norm_J, double const &norm_J_inverse, AdaptiveMultiplePrecisionConfig const &_config)
Compute the expression from the AMP papers amp1, amp2.
Definition amp_criteria.hpp:88
bool CriterionB(double const &norm_J, double const &norm_J_inverse, unsigned num_newton_iterations_remaining, double const &tracking_tolerance, double const &norm_of_latest_newton_residual, AdaptiveMultiplePrecisionConfig const &_config)
Check AMP Criterion B.
Definition amp_criteria.hpp:132
double CriterionBRHS(double const &norm_J, double const &norm_J_inverse, unsigned num_newton_iterations_remaining, double const &tracking_tolerance, double const &norm_of_latest_newton_residual, AdaptiveMultiplePrecisionConfig const &_config)
Evaluate the right hand side of the inequality of Criterion B.
Definition amp_criteria.hpp:108
double CriterionARHS(double const &norm_J, double const &norm_J_inverse, AdaptiveMultiplePrecisionConfig const &_config)
The right hand side of Criterion A, from amp1, amp2.
Definition amp_criteria.hpp:50
bool CriterionA(double const &norm_J, double const &norm_J_inverse, AdaptiveMultiplePrecisionConfig const &_config)
Check AMP Criterion A.
Definition amp_criteria.hpp:71
Definition trackers/config.hpp:154
int safety_digits_2
User-chosen setting for the number of safety digits used during Criterion C.
Definition trackers/config.hpp:170
int safety_digits_1
User-chosen setting for the number of safety digits used during Criteria A & B.
Definition trackers/config.hpp:169
NumErrorT Phi
Bound on (an error bound). Used for AMP criteria A, B.
Definition trackers/config.hpp:161
NumErrorT Psi
Bound on (an error bound). Used for AMP criterion C.
Definition trackers/config.hpp:165
NumErrorT epsilon
Bound on growth in error from linear solves. This is in amp1, amp2, and is used for AMP criteria A a...
Definition trackers/config.hpp:158
Configs and settings for tracking.