class dimer::Dimer¶
Overview¶
#include <Dimer.h>
class Dimer {
public:
// construction
Dimer(double separation, bool is_subsystem = false);
virtual ~Dimer();
// methods
void translate(const gpr::Coord& R, const gpr::Coord& orient, const gpr::Coord& F, const double curv, const gpr::TransitionParameters& param_trans, gpr::LBFGSInfo& transinfo, gpr::Coord& R_new);
void rotate(const gpr::Coord& R, const gpr::Coord& orient, const gpr::Coord& G01, const uint8_t potential, const double T_anglerot, const bool estim_Curv, const gpr::Observation& all_obs, gpr::GaussianProcessRegression* gpr_model, gpr::LBFGSInfo& rotinfo, gpr::Coord& orient_new, double& Curv, gpr::Observation& image1);
void rotateForce(const gpr::Coord& G01, const gpr::Coord& orient, gpr::Coord& F_rot);
void translateForce(const gpr::Coord& F, const gpr::Coord& orient, gpr::Coord& F_trans);
double estimateRotationalAngle(const gpr::Coord& orient, const gpr::Coord& G01, const gpr::Coord& F_rot_oriented);
};
Detailed Documentation¶
Dimer method.
Construction¶
Dimer(double separation, bool is_subsystem = false)
Default constructor.
Parameters:
separation |
Dimer separation |
has_frozen_atoms |
Flag to indicate if the system is a subset of a larger system |
Methods¶
void translate(const gpr::Coord& R, const gpr::Coord& orient, const gpr::Coord& F, const double curv, const gpr::TransitionParameters& param_trans, gpr::LBFGSInfo& transinfo, gpr::Coord& R_new)
Translate dimer.
The dimer is translated one step towards saddle point according to the L-BFGS method.
Parameters:
R |
Coordinates of the middle point of the dimer. |
orient |
Unit vector along the direction of the dimer. |
F |
Force at the middle point of the dimer. |
curv |
Curvature of energy along the direction of the dimer. |
param_trans |
Predefined step length for convex regions, maximum step length. |
transinfo |
Structure with information on previous external iterations. |
R_new |
Coordinates of the new middle point of the dimer. |
void rotate(const gpr::Coord& R, const gpr::Coord& orient, const gpr::Coord& G01, const uint8_t potential, const double T_anglerot, const bool estim_Curv, const gpr::Observation& all_obs, gpr::GaussianProcessRegression* gpr_model, gpr::LBFGSInfo& rotinfo, gpr::Coord& orient_new, double& Curv, gpr::Observation& image1)
Rotate dimer.
The dimer is rotated one step towards its minimum energy orientation according to the modified Newton method on a rotation plane chosen based on the L-BFGS method. The rotation angle is then optimized according to the modified Newton method based on a finite difference estimation of the scalar rotational force along the direction of the rotation.
Parameters:
R |
Coordinates of the middle point of the dimer. |
orient |
Unit vector along the direction of the dimer. |
G01 |
Gradient at the middle point and image 1 of the dimer. |
potential |
Potential and gradient function. |
T_anglerot |
Convergence threshold for the rotation angle. |
estim_Curv |
If true, an estimate for the curvature along the direction of the dimer after the rotation is calculated. |
all_obs |
Object of all observed points. |
gpr_model |
Pointer to the GPR model. |
rotinfo |
Structure with information on previous external iterations. |
orient_new |
Unit vector along the direction of the dimer after optimal rotation. |
Curv |
Estimate for the curvature along the direction of the dimer after the rotation (0 if estim_Curv = 0 or no rotation). |
image1 |
Observation of the new observed location. |
void rotateForce(const gpr::Coord& G01, const gpr::Coord& orient, gpr::Coord& F_rot)
Calculate rotational force acting on image 1 of the dimer.
Parameters:
G01 |
Gradient vectors at the middle point and image 1 of the dimer. |
orient |
Unit vector along the direction of the dimer. |
F_rot |
Rotational force acting on image 1 of the dimer. |
void translateForce(const gpr::Coord& F, const gpr::Coord& orient, gpr::Coord& F_trans)
Calculate translational force acting on image 1 of the dimer.
Parameters:
F |
Force at the middle point of the dimer. |
orient |
Unit vector along the direction of the dimer. |
F_trans |
Translational force acting on image 1 of the dimer. |
double estimateRotationalAngle(const gpr::Coord& orient, const gpr::Coord& G01, const gpr::Coord& F_rot_oriented)
Calculate a rough estimate of the optimal Rotation angle.
Parameters:
orient |
Unit vector along the direction of the dimer (before rotation). |
G01 |
Gradient at the middle point and image 1 of the dimer (before rotation). Each point occupies one row in the field. |
F_rot_oriented |
Oriented rotational force acting on image 1 of the dimer. |
Returns:
Rough estimate of the optimal Rotation angle.