13#ifndef OPTIMIST_SCALAR_ROOT_FINDER_CHANDRUPATLA_HH
14#define OPTIMIST_SCALAR_ROOT_FINDER_CHANDRUPATLA_HH
20 namespace ScalarRootFinder
41 template <
typename Real>
65 std::string
name_impl()
const {
return "Chandrupatla";}
75 #define CMD "Optimist::ScalarRootfinder::Chandrupatla::find_root_impl(...): "
85 this->
m_e = QUIET_NAN;
86 this->
m_fe = QUIET_NAN;
89 while (!(std::isfinite(this->
m_fa) && std::isfinite(this->
m_fb))) {
104 Real abs_fa{std::abs(this->
m_fa)};
105 Real abs_fb{std::abs(this->
m_fb)};
107 abs_fa < tolerance_function ||abs_fb < tolerance_function;
115 Real direction{this->
m_b - this->
m_a};
116 Real
tolerance{tolerance_step/(2.0*std::abs(direction))};
120 Real abs_fa{std::abs(this->
m_fa)};
121 Real abs_fb{std::abs(this->
m_fb)};
122 this->
m_converged = abs_fa < tolerance_function || abs_fb < tolerance_function;
128 Real c{this->
m_a + t * direction};
142 if ((0.0 < fc) == (0.0 < this->
m_fa)) {
144 d = this->
m_a; fd = this->
m_fa;
147 d = this->
m_b; fd = this->
m_fb;
151 this->
m_a = c; this->
m_fa = fc;
154 Real ba{this->
m_b - this->
m_a};
156 Real bd{this->
m_b - d};
157 Real fbd{this->
m_fb - fd};
161 Real fl{1.0 - std::sqrt(1.0 - xi)};
162 Real fh{std::sqrt(xi)};
164 if (fl < ph && ph < fh) {
165 Real da{d - this->
m_a};
166 Real fda{fd - this->
m_fa};
167 t = (this->
m_fa/fba) * (fd/fbd) - (this->
m_fa/fda) * (this->
m_fb/fbd) * (da/ba);
172 if (this->
m_a > this->
m_b) {std::swap(this->
m_a, this->
m_b); std::swap(this->
m_fa, this->
m_fb);}
173 return std::abs(this->
m_fa) < std::abs(this->
m_fb) ? this->
m_a : this->
m_b;;
#define OPTIMIST_BASIC_CONSTANTS(Real)
Definition Optimist.hh:70
#define OPTIMIST_ASSERT(COND, MSG)
Definition Optimist.hh:43
Bracketing()
Definition Bracketing.hh:69
Real m_fb
Definition Bracketing.hh:60
Real m_fc
Definition Bracketing.hh:61
Real m_c
Definition Bracketing.hh:61
Real m_a
Definition Bracketing.hh:59
Real m_tolerance_bracketing
Definition Bracketing.hh:55
Real m_b
Definition Bracketing.hh:60
Real m_fa
Definition Bracketing.hh:59
Real m_e
Definition Bracketing.hh:63
Real m_fe
Definition Bracketing.hh:63
std::string name_impl() const
Definition Chandrupatla.hh:65
Chandrupatla()
Definition Chandrupatla.hh:59
static constexpr bool requires_second_derivative
Definition Chandrupatla.hh:47
static constexpr bool requires_function
Definition Chandrupatla.hh:45
Real find_root_impl(FunctionWrapper function)
Definition Chandrupatla.hh:73
static constexpr bool requires_first_derivative
Definition Chandrupatla.hh:46
typename ScalarRootFinder< Real, Chandrupatla >::SecondDerivativeWrapper SecondDerivativeWrapper
Definition Chandrupatla.hh:54
typename ScalarRootFinder< Real, Chandrupatla >::FunctionWrapper FunctionWrapper
Definition Chandrupatla.hh:52
typename ScalarRootFinder< Real, Chandrupatla >::FirstDerivativeWrapper FirstDerivativeWrapper
Definition Chandrupatla.hh:53
Class container for the scalar scalar root-finder.
Definition ScalarRootFinder.hh:46
bool m_verbose
Definition Solver.hh:93
bool m_converged
Definition Solver.hh:99
Real tolerance() const
Definition Solver.hh:377
void evaluate_function(FunctionWrapper function, const InputType &x, OutputType &out)
Definition Solver.hh:710
void info(Real residuals, std::string const ¬es="-")
Definition Solver.hh:853
Integer m_iterations
Definition Solver.hh:85
Integer m_max_iterations
Definition Solver.hh:86
Namespace for the Optimist library.
Definition Optimist.hh:87