Loading...
Searching...
No Matches
eonc::BiasedGradientSquaredDescent Class Reference

#include <BiasedGradientSquaredDescent.h>

Inheritance diagram for eonc::BiasedGradientSquaredDescent:

Public Member Functions

 BiasedGradientSquaredDescent (std::shared_ptr< Matter > matterPassed, double reactantEnergyPassed, const Parameters &parametersPassed)
 ~BiasedGradientSquaredDescent ()=default
int run ()
double getEigenvalue ()
AtomMatrix getEigenvector ()
std::string_view describeStatus (int status) const override
int getStatus () const override
Public Member Functions inherited from eonc::SaddleSearchMethod
 SaddleSearchMethod (std::shared_ptr< Potential > potPassed, const Parameters &paramsPassed)
virtual ~SaddleSearchMethod ()
virtual int getIterationCount () const
virtual int getForceCalls () const

Public Attributes

double eigenvalue {0.0}
AtomMatrix eigenvector
std::shared_ptr< Matter > saddle
int status {0}

Private Attributes

double reactantEnergy
eonc::log::Scoped log

Additional Inherited Members

Protected Attributes inherited from eonc::SaddleSearchMethod
std::shared_ptr< Potential > pot
const Parameters & params

Detailed Description

Definition at line 24 of file BiasedGradientSquaredDescent.h.

Constructor & Destructor Documentation

◆ BiasedGradientSquaredDescent()

eonc::BiasedGradientSquaredDescent::BiasedGradientSquaredDescent ( std::shared_ptr< Matter > matterPassed,
double reactantEnergyPassed,
const Parameters & parametersPassed )
inline

Definition at line 26 of file BiasedGradientSquaredDescent.h.

29 : SaddleSearchMethod(matterPassed->getPotential(), parametersPassed),
30 saddle{std::move(matterPassed)}, reactantEnergy{reactantEnergyPassed} {
31 eigenvector.resize(saddle->numberOfAtoms(), 3);
32 eigenvector.setZero();
33 }
SaddleSearchMethod(std::shared_ptr< Potential > potPassed, const Parameters &paramsPassed)

◆ ~BiasedGradientSquaredDescent()

eonc::BiasedGradientSquaredDescent::~BiasedGradientSquaredDescent ( )
default

Member Function Documentation

◆ describeStatus()

std::string_view eonc::BiasedGradientSquaredDescent::describeStatus ( int status) const
inlineoverridevirtual

Implements eonc::SaddleSearchMethod.

Definition at line 39 of file BiasedGradientSquaredDescent.h.

39 {
41 }
static constexpr std::string_view statusMessage(int status)
Human-readable message for a status code.

◆ getEigenvalue()

double eonc::BiasedGradientSquaredDescent::getEigenvalue ( )
virtual

◆ getEigenvector()

AtomMatrix eonc::BiasedGradientSquaredDescent::getEigenvector ( )
virtual

Implements eonc::SaddleSearchMethod.

Definition at line 166 of file BiasedGradientSquaredDescent.cpp.

166 {
167 return eigenvector;
168}

◆ getStatus()

int eonc::BiasedGradientSquaredDescent::getStatus ( ) const
inlineoverridevirtual

Reimplemented from eonc::SaddleSearchMethod.

Definition at line 42 of file BiasedGradientSquaredDescent.h.

42{ return status; }

◆ run()

int eonc::BiasedGradientSquaredDescent::run ( void )
virtual

Implements eonc::SaddleSearchMethod.

Definition at line 103 of file BiasedGradientSquaredDescent.cpp.

103 {
104 auto objf = std::make_shared<BGSDObjectiveFunction>(
105 *saddle, reactantEnergy, params.bgsd_options().alpha, params);
107 objf, params.optimizer_options().method, params);
108 int iteration = 0;
109 const int max_iter = params.optimizer_options().max_iterations;
110 QUILL_LOG_DEBUG(
111 log,
112 "starting optimization of H with params alpha and beta: {:.2f} {:.2f}",
113 params.bgsd_options().alpha, params.bgsd_options().beta);
114 while (iteration < max_iter && (!objf->isConvergedH() || iteration == 0)) {
115 if (!std::isfinite(objf->getEnergy())) {
116 break;
117 }
118 optim->step(params.optimizer_options().max_move);
119 QUILL_LOG_DEBUG(log,
120 "iteration {} Henergy, gradientHnorm, and Venergy: "
121 "{:.8f} {:.8f} {:.8f}",
122 iteration, objf->getEnergy(), objf->getGradientnorm(),
123 saddle->getPotentialEnergy());
124 iteration++;
125 }
126 auto objf2 = std::make_shared<BGSDObjectiveFunction>(*saddle, reactantEnergy,
127 0.0, params);
128 auto optim2 = eonc::helpers::create::mkOptim(
129 objf2, params.optimizer_options().method, params);
130 int iter2 = 0;
131 while (iter2 < max_iter && (!objf2->isConvergedV() || iter2 == 0)) {
132 if (objf2->isConvergedIP() || !std::isfinite(objf2->getEnergy())) {
133 break;
134 }
135 optim2->step(params.optimizer_options().max_move);
136 QUILL_LOG_DEBUG(log,
137 "gradient squared iteration {} Henergy, gradientHnorm, "
138 "and Venergy: {:.8f} {:.8f} {:.8f}",
139 iteration, objf2->getEnergy(), objf2->getGradientnorm(),
140 saddle->getPotentialEnergy());
141 ++iteration;
142 ++iter2;
143 }
144
145 auto minModeMethod = eonc::buildEigenmodeStrategy(saddle, params, pot);
146
147 eigenvector.setRandom();
148 for (int i = 0; i < saddle->numberOfAtoms(); i++) {
149 for (int j = 0; j < 3; j++) {
150 if (saddle->getFixed(i)) {
151 eigenvector(i, j) = 0.0;
152 };
153 }
154 }
155 eonc::safemath::safe_normalize_inplace(eigenvector);
156 eonc::eigenmodeCompute(*minModeMethod, saddle, eigenvector);
159 QUILL_LOG_DEBUG(log, "lowest eigenvalue {:.8f}", eigenvalue);
160 status = objf2->isConvergedV() ? 0 : 1;
161 return status;
162}
std::shared_ptr< Potential > pot
std::unique_ptr< Optimizer > mkOptim(std::shared_ptr< ObjectiveFunction > a_objf, OptType a_otype, const Parameters &a_params)
Definition Optimizer.cpp:24
void eigenmodeCompute(LowestEigenmode &s, std::shared_ptr< Matter > matter, AtomMatrix direction)
std::shared_ptr< LowestEigenmode > buildEigenmodeStrategy(std::shared_ptr< Matter > matter, const Parameters &params, std::shared_ptr< Potential > pot)
double eigenmodeGetEigenvalue(LowestEigenmode &s)
AtomMatrix eigenmodeGetEigenvector(LowestEigenmode &s)

Member Data Documentation

◆ eigenvalue

double eonc::BiasedGradientSquaredDescent::eigenvalue {0.0}

Definition at line 44 of file BiasedGradientSquaredDescent.h.

44{0.0};

◆ eigenvector

AtomMatrix eonc::BiasedGradientSquaredDescent::eigenvector

Definition at line 45 of file BiasedGradientSquaredDescent.h.

◆ log

eonc::log::Scoped eonc::BiasedGradientSquaredDescent::log
private

Definition at line 53 of file BiasedGradientSquaredDescent.h.

◆ reactantEnergy

double eonc::BiasedGradientSquaredDescent::reactantEnergy
private

Definition at line 52 of file BiasedGradientSquaredDescent.h.

◆ saddle

std::shared_ptr<Matter> eonc::BiasedGradientSquaredDescent::saddle

Definition at line 47 of file BiasedGradientSquaredDescent.h.

◆ status

int eonc::BiasedGradientSquaredDescent::status {0}

Definition at line 49 of file BiasedGradientSquaredDescent.h.

49{0};

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