Loading...
Searching...
No Matches
eonc::neb::OnsagerMachlupSpring Struct Reference

Onsager-Machlup action-based springs (Mandelli & Parrinello 2021). More...

#include <NEBSpringForce.h>

Public Member Functions

SpringResult compute (long i, const AtomMatrix &tangent, const AtomMatrix &posNext, const AtomMatrix &posPrev, const AtomMatrix &pos, const std::shared_ptr< Matter > &image) const

Public Attributes

double base_k
std::vector< AtomMatrixL_vecs

Detailed Description

Onsager-Machlup action-based springs (Mandelli & Parrinello 2021).

Definition at line 48 of file NEBSpringForce.h.

Member Function Documentation

◆ compute()

SpringResult eonc::neb::OnsagerMachlupSpring::compute ( long i,
const AtomMatrix & tangent,
const AtomMatrix & posNext,
const AtomMatrix & posPrev,
const AtomMatrix & pos,
const std::shared_ptr< Matter > & image ) const

Definition at line 46 of file NEBSpringForce.cpp.

49 {
50 // Mandelli Eq. 13: k * ( R(i+1) + R(i-1) - 2R(i) + L(i+1) - L(i) )
51 AtomMatrix diff =
52 image->pbc(posNext + posPrev - 2.0 * pos + L_vecs[i + 1] - L_vecs[i]);
53 AtomMatrix f_om_vec = base_k * diff;
54
55 // Mandelli Eq. 15: Project onto tangent
56 SpringResult result;
57 result.forceSpringPar = matDot(f_om_vec, tangent) * tangent;
58 result.forceSpring = AtomMatrix::Zero(tangent.rows(), tangent.cols());
59 return result;
60}
double matDot(const AtomMatrix &a, const AtomMatrix &b)
SIMD-optimized dot product for contiguous Eigen matrices.
Definition Eigen.h:50
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37
std::vector< AtomMatrix > L_vecs

Member Data Documentation

◆ base_k

double eonc::neb::OnsagerMachlupSpring::base_k

Definition at line 49 of file NEBSpringForce.h.

◆ L_vecs

std::vector<AtomMatrix> eonc::neb::OnsagerMachlupSpring::L_vecs

Definition at line 50 of file NEBSpringForce.h.


The documentation for this struct was generated from the following files: