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

Henkelman & Jonsson, JCP 113:9978, 2000. More...

#include <NEBTangent.h>

Public Member Functions

AtomMatrix compute (const AtomMatrix &posDiffNext, const AtomMatrix &posDiffPrev, double energy, double energyPrev, double energyNext) const

Detailed Description

Henkelman & Jonsson, JCP 113:9978, 2000.

Improved tangent that selects uphill direction at monotonic points and uses energy-weighted interpolation at extrema.

Definition at line 32 of file NEBTangent.h.

Member Function Documentation

◆ compute()

AtomMatrix eonc::neb::ImprovedTangent::compute ( const AtomMatrix & posDiffNext,
const AtomMatrix & posDiffPrev,
double energy,
double energyPrev,
double energyNext ) const

Definition at line 43 of file NEBTangent.cpp.

46 {
47 AtomMatrix tang;
48
49 if (energyNext > energy && energy > energyPrev) {
50 tang = posDiffNext;
51 } else if (energy > energyNext && energyPrev > energy) {
52 tang = posDiffPrev;
53 } else {
54 // Extremum: energy-weighted combination
55 double energyDiffPrev = energyPrev - energy;
56 double energyDiffNext = energyNext - energy;
57 double minDiffEnergy =
58 std::min(std::abs(energyDiffPrev), std::abs(energyDiffNext));
59 double maxDiffEnergy =
60 std::max(std::abs(energyDiffPrev), std::abs(energyDiffNext));
61
62 if (energyDiffPrev > energyDiffNext) {
63 tang = posDiffNext * minDiffEnergy + posDiffPrev * maxDiffEnergy;
64 } else {
65 tang = posDiffNext * maxDiffEnergy + posDiffPrev * minDiffEnergy;
66 }
67 }
68
69 return normalizeTangent(tang, posDiffNext);
70}
Eigen::Matrix< double, Eigen::Dynamic, 3, eOnStorageOrder > AtomMatrix
Definition Eigen.h:37

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