Thermal-FIST 1.5
Package for hadron resonance gas model applications
Loading...
Searching...
No Matches
Broyden.h
Go to the documentation of this file.
1/*
2 * Thermal-FIST package
3 *
4 * Copyright (c) 2018-2019 Volodymyr Vovchenko
5 *
6 * GNU General Public License (GPLv3 or later)
7 */
8
14#ifndef BROYDEN_H
15#define BROYDEN_H
16
17#include <cstddef>
18#include <vector>
19
20namespace thermalfist {
21
32 {
33 public:
35 BroydenEquations() = default;
36
38 virtual ~BroydenEquations(void) = default;
39
41 virtual int Dimension() const { return m_N; }
42
48 void SetDimension(int dim);
49
62 virtual std::vector<double> Equations(const std::vector<double> &x) = 0;
63
64 protected:
66 int m_N;
67 };
68
69
77 {
78 public:
81 static const double EPS;
89 BroydenJacobian(BroydenEquations *eqs = NULL) : m_Equations(eqs), m_dx(EPS) { }
90
92 virtual ~BroydenJacobian(void) = default;
93
106 virtual std::vector<double> Jacobian(const std::vector<double> &x);
107
114 void SetDx(double dx) { m_dx = dx; }
115
119 double CurrentDx() const { return m_dx; }
120
121 private:
123 BroydenEquations *m_Equations;
125 double m_dx;
126 };
127
132 {
133 public:
145 public:
153 BroydenSolutionCriterium(double maximum_error = TOL) : m_MaximumError(maximum_error) { }
154
159 virtual ~BroydenSolutionCriterium() = default;
160
172 virtual bool IsSolved(const std::vector<double>& x, const std::vector<double>& f, const std::vector<double>& xdelta = std::vector<double>()) const;
173 protected:
180 };
181 public:
183 static const double TOL;
185 static const int MAX_ITERS;
186
197 Broyden(BroydenEquations *eqs = NULL, BroydenJacobian *jaco = NULL) : m_Equations(eqs), m_Jacobian(jaco), m_Iterations(0), m_MaxDifference(0.), m_UseNewton(false) { }
198
203 virtual ~Broyden(void) = default;
204
217 virtual std::vector<double> Solve(const std::vector<double> &x0, BroydenSolutionCriterium *solcrit = NULL, int max_iterations = MAX_ITERS);
218
229 int Iterations() const { return m_Iterations; }
230
234 int MaxIterations() const { return m_MaxIterations; }
235
239 double MaxDifference() const { return m_MaxDifference; }
240
249 void UseNewton(bool flag) { m_UseNewton = flag; }
250
255 bool UseNewton() const { return m_UseNewton; }
256
257 protected:
264 };
265
266} // namespace thermalfist
267
268#endif
Sub-class where it is determined whether the required accuracy is achieved in the Broyden's method.
Definition Broyden.h:144
virtual ~BroydenSolutionCriterium()=default
Destroy the BroydenSolutionCriterium object.
BroydenSolutionCriterium(double maximum_error=TOL)
Definition Broyden.h:153
virtual bool IsSolved(const std::vector< double > &x, const std::vector< double > &f, const std::vector< double > &xdelta=std::vector< double >()) const
Definition Broyden.cpp:181
Abstract class which defines the system of non-linear equations to be solved by the Broyden's method.
Definition Broyden.h:32
virtual ~BroydenEquations(void)=default
Destructor.
int m_N
The number of equations.
Definition Broyden.h:66
virtual int Dimension() const
Number of equations.
Definition Broyden.h:41
BroydenEquations()=default
Default constructor. Does nothing.
virtual std::vector< double > Equations(const std::vector< double > &x)=0
bool UseNewton() const
Definition Broyden.h:255
BroydenJacobian * m_Jacobian
Definition Broyden.h:259
virtual ~Broyden(void)=default
Destroy the Broyden object.
void UseNewton(bool flag)
Definition Broyden.h:249
BroydenEquations * m_Equations
Definition Broyden.h:258
double MaxDifference() const
Definition Broyden.h:239
static const int MAX_ITERS
Maximum number of Broyden iterations before terminating.
Definition Broyden.h:185
virtual std::vector< double > Solve(const std::vector< double > &x0, BroydenSolutionCriterium *solcrit=NULL, int max_iterations=MAX_ITERS)
Definition Broyden.cpp:83
Broyden(BroydenEquations *eqs=NULL, BroydenJacobian *jaco=NULL)
Construct a new Broyden object.
Definition Broyden.h:197
int Iterations() const
Definition Broyden.h:229
static const double TOL
Default desired solution accuracy.
Definition Broyden.h:183
int MaxIterations() const
Definition Broyden.h:234
Class which implements calculation of the Jacobian needed for the Broyden's method.
Definition Broyden.h:77
double CurrentDx() const
Definition Broyden.h:119
virtual std::vector< double > Jacobian(const std::vector< double > &x)
Evaluates the Jacobian for given values of the variables.
Definition Broyden.cpp:35
BroydenJacobian(BroydenEquations *eqs=NULL)
Construct a new BroydenJacobian object.
Definition Broyden.h:89
void SetDx(double dx)
Set the finite variable difference value used for calculating the Jacobian numerically.
Definition Broyden.h:114
virtual ~BroydenJacobian(void)=default
Destructor.
static const double EPS
Definition Broyden.h:81
The main namespace where all classes and functions of the Thermal-FIST library reside.
Definition CosmicEoS.h:9