class dimer::Dimer

Overview

Dimer method. More…

#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.