ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
bfgs_basic.h
Go to the documentation of this file.
1#ifndef BFGS_BASIC
2#define BFGS_BASIC
3
5
6// references
7// 1) Roger Fletcher, Practical Methods of Optimization, John Wiley and
8// Sons, Chichester, 2nd edn, 1987.
9// 2) Salomon R. Billeter, Alexander J. Turner, Walter Thiel,
10// Phys. Chem. Chem. Phys. 2, 2177 (2000).
11// 3) Salomon R. Billeter, Alessandro Curioni, Wanda Andreoni,
12// Comput. Mat. Science 27, 437, (2003).
13// 4) Ren Weiqing, PhD Thesis: Numerical Methods for the Study of Energy
14// Landscapes and Rare Events.
15
17{
18
19 public:
20 BFGS_Basic();
22
23 protected:
24 void allocate_basic(void);
25 void new_step(const double& lat0);
26 void reset_hessian(void);
27 void save_bfgs(void);
28
29 double* pos; // std::vector containing 3N coordinates of the system ( x )
30 double* grad; // std::vector containing 3N components of ( grad( V(x) ) )
31 double* move; // pos = pos_p + move.
32
33 double* pos_p; // p: previous
34 double* grad_p; // p: previous
35 double* move_p;
36
37 public: // mohan update 2011-06-12
38 static double relax_bfgs_w1; // fixed: parameters for Wolfe conditions.
39 static double relax_bfgs_w2; // fixed: parameters for Wolfe conditions.
40
41 protected:
42 bool save_flag=false;
43 bool tr_min_hit=false; //.TRUE. if the trust_radius has already been set
44 // to the minimum value at the previous step
45
46 // mohan add 2010-07-27
47 double check_move(const double& lat0, const double& pos, const double& pos_p);
48
49 private:
50 bool wolfe_flag=false;
52
54
55 void update_inverse_hessian(const double& lat0);
56 void check_wolfe_conditions(void);
57 void compute_trust_radius(void);
58};
59
60#endif
Definition bfgs_basic.h:17
int bfgs_ndim
Definition bfgs_basic.h:53
void save_bfgs(void)
Definition bfgs_basic.cpp:199
static double relax_bfgs_w1
Definition bfgs_basic.h:38
double * move_p
Definition bfgs_basic.h:35
void compute_trust_radius(void)
Definition bfgs_basic.cpp:311
ModuleBase::matrix inv_hess
Definition bfgs_basic.h:51
void check_wolfe_conditions(void)
Definition bfgs_basic.cpp:135
bool wolfe_flag
Definition bfgs_basic.h:50
void reset_hessian(void)
Definition bfgs_basic.cpp:184
double * move
Definition bfgs_basic.h:31
static double relax_bfgs_w2
Definition bfgs_basic.h:39
double * pos_p
Definition bfgs_basic.h:33
double * grad_p
Definition bfgs_basic.h:34
bool tr_min_hit
Definition bfgs_basic.h:43
void update_inverse_hessian(const double &lat0)
Definition bfgs_basic.cpp:66
~BFGS_Basic()
Definition bfgs_basic.cpp:25
bool save_flag
Definition bfgs_basic.h:42
double check_move(const double &lat0, const double &pos, const double &pos_p)
Definition bfgs_basic.cpp:392
double * pos
Definition bfgs_basic.h:29
double * grad
Definition bfgs_basic.h:30
void allocate_basic(void)
Definition bfgs_basic.cpp:35
void new_step(const double &lat0)
Definition bfgs_basic.cpp:214
BFGS_Basic()
Definition bfgs_basic.cpp:13
Definition matrix.h:19