flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester > Class Template Reference

Does fixed point iteration. More...

#include <fixed_point_iterator.hpp>

Inheritance diagram for flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >:
Inheritance graph
Collaboration diagram for flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >:
Collaboration graph

Public Types

using Function_t = std::function< Vector_t(const Vector_t &)>
 
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_fixed_point (const Eigen::VectorXd &)
 
 Fixed_point_iterator ()=default
 
 Fixed_point_iterator (const Function_t &, std::size_t, const Convergence_tester &)
 
virtual Eigen::VectorXd get_solution () const override
 
virtual std::string name () const override
 
void set_function (const Function_t &f)
 
void set_max_iterations (std::size_t n)
 
virtual int solve (const Eigen::VectorXd &start) override
 
virtual ~Fixed_point_iterator ()=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

int fixed_point_iterator_iterate ()
 
void print_state (std::size_t) const
 

Static Private Member Functions

static bool is_finite (const Vector_t &v)
 

Private Attributes

Convergence_tester convergence_tester {}
 convergence tester More...
 
Vector_t fixed_point {Vector_t::Zero()}
 vector of fixed point estimate More...
 
Function_t function {nullptr}
 function defining fixed point More...
 
std::size_t max_iterations {100}
 maximum number of iterations More...
 
Vector_t xn {Vector_t::Zero()}
 current iteration point More...
 

Detailed Description

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
class flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >

Does fixed point iteration.

Author
Dylan Harries, Alexander Voigt
Template Parameters
dimensiondimension of function
Convergence_testerfunction for relative comparison of subsequent iteration steps

The user has to provide the function (of which a fixed point should be found) of the type Function_t. This function gets as arguments a Eigen vector of length dimension and returns a vector with the next point.

Note
The standard relative convergence criterion may not be suitable in all situations, for example not when the iteration converges slowly. In this case subsequent steps are very close to each other, but $x_n$ might not be close to the true fixed point.
Todo:
implement check for no progress towards solution

Definition at line 173 of file fixed_point_iterator.hpp.

Member Typedef Documentation

◆ Function_t

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
using flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::Function_t = std::function<Vector_t(const Vector_t&)>

Definition at line 176 of file fixed_point_iterator.hpp.

◆ Vector_t

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
using flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::Vector_t = Eigen::Matrix<double,dimension,1>

Definition at line 175 of file fixed_point_iterator.hpp.

Constructor & Destructor Documentation

◆ Fixed_point_iterator() [1/2]

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::Fixed_point_iterator ( )
default

◆ Fixed_point_iterator() [2/2]

template<std::size_t dimension, class Convergence_tester >
flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::Fixed_point_iterator ( const Function_t function_,
std::size_t  max_iterations_,
const Convergence_tester convergence_tester_ 
)

Constructor

Parameters
function_pointer to the function to find fixed point for
max_iterations_maximum number of iterations
convergence_tester_convergence tester

Definition at line 215 of file fixed_point_iterator.hpp.

◆ ~Fixed_point_iterator()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
virtual flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::~Fixed_point_iterator ( )
virtualdefault

Member Function Documentation

◆ find_fixed_point()

template<std::size_t dimension, class Convergence_tester >
int flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::find_fixed_point ( const Eigen::VectorXd &  start)

Start the iteration

Parameters
startstarting point
Returns
status code (SUCCESS if fixed point found)

Definition at line 234 of file fixed_point_iterator.hpp.

References flexiblesusy::EWSB_solver::FAIL, and VERBOSE_MSG.

Referenced by flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::solve().

◆ fixed_point_iterator_iterate()

template<std::size_t dimension, class Convergence_tester >
int flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::fixed_point_iterator_iterate
private

Perform a single step of the fixed point iteration

Returns
status

Definition at line 274 of file fixed_point_iterator.hpp.

References flexiblesusy::EWSB_solver::FAIL, flexiblesusy::is_finite(), and flexiblesusy::EWSB_solver::SUCCESS.

◆ get_solution()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
virtual Eigen::VectorXd flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::get_solution ( ) const
inlineoverridevirtual

◆ is_finite()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
static bool flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::is_finite ( const Vector_t v)
inlinestaticprivate

Definition at line 201 of file fixed_point_iterator.hpp.

◆ name()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
virtual std::string flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::name ( ) const
inlineoverridevirtual

◆ print_state()

template<std::size_t dimension, class Convergence_tester >
void flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::print_state ( std::size_t  iteration) const
private

Print state of the fixed point iterator

Parameters
iterationiteration number

Definition at line 299 of file fixed_point_iterator.hpp.

References VERBOSE_MSG.

◆ set_function()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
void flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::set_function ( const Function_t f)
inline

◆ set_max_iterations()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
void flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::set_max_iterations ( std::size_t  n)
inline

◆ solve()

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
virtual int flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::solve ( const Eigen::VectorXd &  start)
inlineoverridevirtual

Member Data Documentation

◆ convergence_tester

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
Convergence_tester flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::convergence_tester {}
private

◆ fixed_point

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
Vector_t flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::fixed_point {Vector_t::Zero()}
private

vector of fixed point estimate

Definition at line 194 of file fixed_point_iterator.hpp.

Referenced by flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::get_solution().

◆ function

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
Function_t flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::function {nullptr}
private

function defining fixed point

Definition at line 195 of file fixed_point_iterator.hpp.

Referenced by flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::set_function().

◆ max_iterations

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
std::size_t flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::max_iterations {100}
private

◆ xn

template<std::size_t dimension, class Convergence_tester = fixed_point_iterator::Convergence_tester_relative<dimension>>
Vector_t flexiblesusy::Fixed_point_iterator< dimension, Convergence_tester >::xn {Vector_t::Zero()}
private

current iteration point

Definition at line 193 of file fixed_point_iterator.hpp.


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