53 std::vector<std::vector<double>>
H;
55 std::vector<ModuleBase::Vector3<double>>
force;
57 std::vector<ModuleBase::Vector3<double>>
pos;
59 std::vector<ModuleBase::Vector3<double>>
pos_taud;
60 std::vector<ModuleBase::Vector3<double>>
dpos;
61 std::vector<std::vector<double>>
s;
62 std::vector<std::vector<double>>
y;
63 std::vector<double>
rho;
70 std::vector<std::vector<double>>&
H,
71 std::vector<double>&
pos0,
72 std::vector<double>&
force0,
122 std::vector<double>&
force,
123 std::vector<double>&
force0,
127 std::vector<std::vector<double>>&
s,
128 std::vector<std::vector<double>>&
y,
129 std::vector<double>&
rho);
Implements L-BFGS optimization algorithm for structural relaxation.
Definition lbfgs.h:21
std::vector< double > rho
Scalar products for L-BFGS update.
Definition lbfgs.h:63
std::vector< ModuleBase::Vector3< double > > pos
Definition lbfgs.h:57
std::vector< double > steplength
Definition lbfgs.h:52
std::vector< std::vector< double > > y
Force difference vectors.
Definition lbfgs.h:62
int memory
Number of previous steps to store.
Definition lbfgs.h:45
std::vector< ModuleBase::Vector3< double > > pos_taud
Definition lbfgs.h:59
void is_restrain()
Judge if the cell is restrain.
Definition lbfgs.cpp:254
void update_pos(UnitCell &ucell)
Update atomic positions in unit cell.
Definition lbfgs.cpp:240
std::vector< ModuleBase::Vector3< double > > force
Definition lbfgs.h:55
std::vector< double > pos_taud0
Definition lbfgs.h:58
ModuleESolver::ESolver * solver
Structure solver.
Definition lbfgs.h:51
std::vector< std::vector< double > > H
Definition lbfgs.h:53
double H0
Initial inverse Hessian approximation.
Definition lbfgs.h:46
void relax_step(const ModuleBase::matrix _force, UnitCell &ucell, const double &etot)
Perform one L-BFGS relaxation step.
Definition lbfgs.cpp:28
void calculate_largest_grad(const ModuleBase::matrix &_force, UnitCell &ucell)
Calculate maximum gradient component.
Definition lbfgs.cpp:259
double alpha_k
Step size parameter.
Definition lbfgs.h:49
void update(std::vector< ModuleBase::Vector3< double > > &pos_taud, std::vector< double > &pos_taud0, std::vector< double > &force, std::vector< double > &force0, UnitCell &ucell, int iteration, int memory, std::vector< std::vector< double > > &s, std::vector< std::vector< double > > &y, std::vector< double > &rho)
Update L-BFGS history buffers.
Definition lbfgs.cpp:152
int iteration
Current iteration count.
Definition lbfgs.h:47
void get_pos(UnitCell &ucell, std::vector< ModuleBase::Vector3< double > > &pos)
Extract atomic positions from unit cell.
Definition lbfgs.cpp:71
void allocate(const int _size)
Initialize L-BFGS parameters.
Definition lbfgs.cpp:8
std::vector< double > force0
Definition lbfgs.h:54
std::vector< double > pos0
Definition lbfgs.h:56
void get_pos_taud(UnitCell &ucell, std::vector< ModuleBase::Vector3< double > > &pos_taud)
Get fractional positions from unit cell.
Definition lbfgs.cpp:86
std::vector< std::vector< double > > s
Position difference vectors.
Definition lbfgs.h:61
int size
Number of atoms in system.
Definition lbfgs.h:44
double maxstep
Maximum allowed step length.
Definition lbfgs.h:43
void prepare_step(std::vector< ModuleBase::Vector3< double > > &force, std::vector< ModuleBase::Vector3< double > > &pos, std::vector< std::vector< double > > &H, std::vector< double > &pos0, std::vector< double > &force0, std::vector< ModuleBase::Vector3< double > > &dpos, UnitCell &ucell, const double &etot)
Prepare optimization step parameters.
Definition lbfgs.cpp:101
double alpha
Initial Hessian diagonal element.
Definition lbfgs.h:42
std::vector< ModuleBase::Vector3< double > > dpos
Definition lbfgs.h:60
double energy
Current system energy.
Definition lbfgs.h:48
void determine_step(std::vector< double > &steplength, std::vector< ModuleBase::Vector3< double > > &dpos, double &maxstep)
Determine optimal step lengths.
Definition lbfgs.cpp:224
3 elements vector
Definition vector3.h:22