flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY

Function root finder. More...

#include <root_finder.hpp>

Inheritance diagram for flexiblesusy::Root_finder< dimension >:
Inheritance graph
Collaboration diagram for flexiblesusy::Root_finder< dimension >:
Collaboration graph

Public Types

using Function_t = std::function< Vector_t(const Vector_t &)>
 
enum  Solver_type { GSLHybrid , GSLHybridS , GSLBroyden , GSLNewton }
 
using Vector_t = Eigen::Matrix< double, dimension, 1 >
 
- Public Types inherited from flexiblesusy::EWSB_solver
enum  Status : int { SUCCESS = 0 , FAIL = 1 }
 

Public Member Functions

int find_root (const Vector_t &)
 
virtual Eigen::VectorXd get_solution () const override
 
virtual std::string name () const override
 
 Root_finder ()=default
 
 Root_finder (const Function_t &, std::size_t, double, Solver_type solver_type_=GSLHybrid)
 
void set_function (const Function_t &f)
 
void set_max_iterations (std::size_t n)
 
void set_precision (double p)
 
void set_solver_type (Solver_type t)
 
virtual int solve (const Eigen::VectorXd &) override
 
virtual ~Root_finder ()=default
 
- Public Member Functions inherited from flexiblesusy::EWSB_solver
virtual Eigen::VectorXd get_solution () const =0
 
virtual std::string name () const =0
 
virtual int solve (const Eigen::VectorXd &)=0
 
virtual ~EWSB_solver ()=default
 

Private Member Functions

const char * solver_type_name () const
 
const gsl_multiroot_fsolver_type * solver_type_to_gsl_pointer () const
 

Static Private Member Functions

static int gsl_function (const gsl_vector *, void *, gsl_vector *)
 
static bool is_finite (const Vector_t &v)
 

Private Attributes

Function_t function {nullptr}
 function to minimize More...
 
std::size_t max_iterations {100}
 maximum number of iterations More...
 
double precision {1.e-2}
 precision goal More...
 
Vector_t root {Vector_t::Zero()}
 the root More...
 
Solver_type solver_type {GSLHybrid}
 solver type More...
 

Detailed Description

template<std::size_t dimension>
class flexiblesusy::Root_finder< dimension >

Function root finder.

The user has to provide the function (of which the root should be found) of the type Function_t. This function gets as arguments an Eigen vector of lenght ‘dimension’ and returns an Eigen vector of the same length.

Example:

auto parabola = [](const Eigen::Matrix<double,2,1>& x) {
const double y = x(0);
const double z = x(1);
Eigen::Matrix<double,2,1> f;
f << y*(y - 5.0), z*(z - 1.0);
return f;
};
Root_finder<2> root_finder(parabola, 100, 1.0e-5);
const double start[2] = { 10, 10 };
const int status = root_finder.find_root(start);
Function root finder.
Definition: root_finder.hpp:64
std::complex< double > f(double tau) noexcept

Definition at line 64 of file root_finder.hpp.

Member Typedef Documentation

◆ Function_t

template<std::size_t dimension>
using flexiblesusy::Root_finder< dimension >::Function_t = std::function<Vector_t(const Vector_t&)>

Definition at line 67 of file root_finder.hpp.

◆ Vector_t

template<std::size_t dimension>
using flexiblesusy::Root_finder< dimension >::Vector_t = Eigen::Matrix<double,dimension,1>

Definition at line 66 of file root_finder.hpp.

Member Enumeration Documentation

◆ Solver_type

template<std::size_t dimension>
enum flexiblesusy::Root_finder::Solver_type
Enumerator
GSLHybrid 
GSLHybridS 
GSLBroyden 
GSLNewton 

Definition at line 68 of file root_finder.hpp.

Constructor & Destructor Documentation

◆ Root_finder() [1/2]

template<std::size_t dimension>
flexiblesusy::Root_finder< dimension >::Root_finder ( )
default

◆ Root_finder() [2/2]

template<std::size_t dimension>
flexiblesusy::Root_finder< dimension >::Root_finder ( const Function_t function_,
std::size_t  max_iterations_,
double  precision_,
Solver_type  solver_type_ = GSLHybrid 
)

Constructor

Parameters
function_pointer to the function to minimize
max_iterations_maximum number of iterations
precision_precision goal
solver_type_GSL multiroot solver type

Definition at line 111 of file root_finder.hpp.

◆ ~Root_finder()

template<std::size_t dimension>
virtual flexiblesusy::Root_finder< dimension >::~Root_finder ( )
virtualdefault

Member Function Documentation

◆ find_root()

template<std::size_t dimension>
int flexiblesusy::Root_finder< dimension >::find_root ( const Vector_t start)

◆ get_solution()

template<std::size_t dimension>
virtual Eigen::VectorXd flexiblesusy::Root_finder< dimension >::get_solution ( ) const
inlineoverridevirtual

◆ gsl_function()

template<std::size_t dimension>
int flexiblesusy::Root_finder< dimension >::gsl_function ( const gsl_vector *  x,
void *  params,
gsl_vector *  f 
)
staticprivate

◆ is_finite()

template<std::size_t dimension>
static bool flexiblesusy::Root_finder< dimension >::is_finite ( const Vector_t v)
inlinestaticprivate

Definition at line 96 of file root_finder.hpp.

◆ name()

template<std::size_t dimension>
virtual std::string flexiblesusy::Root_finder< dimension >::name ( ) const
inlineoverridevirtual

◆ set_function()

template<std::size_t dimension>
void flexiblesusy::Root_finder< dimension >::set_function ( const Function_t f)
inline

◆ set_max_iterations()

template<std::size_t dimension>
void flexiblesusy::Root_finder< dimension >::set_max_iterations ( std::size_t  n)
inline

◆ set_precision()

template<std::size_t dimension>
void flexiblesusy::Root_finder< dimension >::set_precision ( double  p)
inline

Definition at line 75 of file root_finder.hpp.

References flexiblesusy::Root_finder< dimension >::precision.

◆ set_solver_type()

template<std::size_t dimension>
void flexiblesusy::Root_finder< dimension >::set_solver_type ( Solver_type  t)
inline

◆ solve()

template<std::size_t dimension>
int flexiblesusy::Root_finder< dimension >::solve ( const Eigen::VectorXd &  start)
overridevirtual

◆ solver_type_name()

template<std::size_t dimension>
const char * flexiblesusy::Root_finder< dimension >::solver_type_name
private

Definition at line 195 of file root_finder.hpp.

References flexiblesusy::to_string().

Referenced by flexiblesusy::Root_finder< dimension >::name().

◆ solver_type_to_gsl_pointer()

template<std::size_t dimension>
const gsl_multiroot_fsolver_type * flexiblesusy::Root_finder< dimension >::solver_type_to_gsl_pointer
private

Definition at line 211 of file root_finder.hpp.

References flexiblesusy::to_string().

Member Data Documentation

◆ function

template<std::size_t dimension>
Function_t flexiblesusy::Root_finder< dimension >::function {nullptr}
private

function to minimize

Definition at line 89 of file root_finder.hpp.

Referenced by flexiblesusy::Root_finder< dimension >::set_function().

◆ max_iterations

template<std::size_t dimension>
std::size_t flexiblesusy::Root_finder< dimension >::max_iterations {100}
private

maximum number of iterations

Definition at line 86 of file root_finder.hpp.

Referenced by flexiblesusy::Root_finder< dimension >::set_max_iterations().

◆ precision

template<std::size_t dimension>
double flexiblesusy::Root_finder< dimension >::precision {1.e-2}
private

precision goal

Definition at line 87 of file root_finder.hpp.

Referenced by flexiblesusy::Root_finder< dimension >::set_precision().

◆ root

template<std::size_t dimension>
Vector_t flexiblesusy::Root_finder< dimension >::root {Vector_t::Zero()}
private

the root

Definition at line 88 of file root_finder.hpp.

Referenced by flexiblesusy::Root_finder< dimension >::get_solution().

◆ solver_type

template<std::size_t dimension>
Solver_type flexiblesusy::Root_finder< dimension >::solver_type {GSLHybrid}
private

solver type

Definition at line 90 of file root_finder.hpp.

Referenced by flexiblesusy::Root_finder< dimension >::set_solver_type().


The documentation for this class was generated from the following file: