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
AtomMatrix eigenvector
std::shared_ptr< Mattersaddle
int status

Private Attributes

double reactantEnergy
eonc::log::Scoped log

Additional Inherited Members

Protected Attributes inherited from eonc::SaddleSearchMethod
std::shared_ptr< Potentialpot
const Parametersparams

Detailed Description

Definition at line 23 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 25 of file BiasedGradientSquaredDescent.h.

28 : SaddleSearchMethod(matterPassed->getPotential(), parametersPassed),
29 saddle{matterPassed} {
30 reactantEnergy = reactantEnergyPassed;
31 saddle = matterPassed;
32 eigenvector.resize(saddle->numberOfAtoms(), 3);
33 eigenvector.setZero();
34 }
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 40 of file BiasedGradientSquaredDescent.h.

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

◆ getEigenvalue()

double BiasedGradientSquaredDescent::getEigenvalue ( )
virtual

◆ getEigenvector()

AtomMatrix BiasedGradientSquaredDescent::getEigenvector ( )
virtual

Implements eonc::SaddleSearchMethod.

Definition at line 165 of file BiasedGradientSquaredDescent.cpp.

165 {
166 return eigenvector;
167}

◆ getStatus()

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

Reimplemented from eonc::SaddleSearchMethod.

Definition at line 43 of file BiasedGradientSquaredDescent.h.

43{ return status; }

◆ run()

int 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 QUILL_LOG_DEBUG(
110 log,
111 "starting optimization of H with params alpha and beta: {:.2f} {:.2f}",
112 params.bgsd_options.alpha, params.bgsd_options.beta);
113 while (!objf->isConvergedH() || iteration == 0) {
114 optim->step(params.optimizer_options.max_move);
115 QUILL_LOG_DEBUG(log,
116 "iteration {} Henergy, gradientHnorm, and Venergy: "
117 "{:.8f} {:.8f} {:.8f}",
118 iteration, objf->getEnergy(), objf->getGradientnorm(),
119 saddle->getPotentialEnergy());
120 iteration++;
121 }
122 auto objf2 = std::make_shared<BGSDObjectiveFunction>(*saddle, reactantEnergy,
123 0.0, params);
124 auto optim2 = eonc::helpers::create::mkOptim(
125 objf2, params.optimizer_options.method, params);
126 while (!objf2->isConvergedV() || iteration == 0) {
127 if (objf2->isConvergedIP()) {
128 break;
129 };
130 optim2->step(params.optimizer_options.max_move);
131 QUILL_LOG_DEBUG(log,
132 "gradient squared iteration {} Henergy, gradientHnorm, "
133 "and Venergy: {:.8f} {:.8f} {:.8f}",
134 iteration, objf2->getEnergy(), objf2->getGradientnorm(),
135 saddle->getPotentialEnergy());
136 iteration++;
137 }
138
139 auto minModeMethod = eonc::buildEigenmodeStrategy(saddle, params, pot);
140
141 eigenvector.setRandom();
142 for (int i = 0; i < saddle->numberOfAtoms(); i++) {
143 for (int j = 0; j < 3; j++) {
144 if (saddle->getFixed(i)) {
145 eigenvector(i, j) = 0.0;
146 };
147 }
148 }
149 eigenvector.normalize();
150 eonc::eigenmodeCompute(*minModeMethod, saddle, eigenvector);
153 QUILL_LOG_DEBUG(log, "lowest eigenvalue {:.8f}", eigenvalue);
154 if (objf2->isConvergedV()) {
155 return 0;
156 } else if (objf2->isConvergedIP()) {
157 return 1;
158 } else {
159 return 1;
160 };
161}
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:21
AtomMatrix eigenmodeGetEigenvector(EigenmodeStrategy &s)
Dispatch getEigenvector() to the active variant.
std::shared_ptr< EigenmodeStrategy > buildEigenmodeStrategy(std::shared_ptr< Matter > matter, const Parameters &params, std::shared_ptr< Potential > pot)
Build the eigenmode solver from parameters.
void eigenmodeCompute(EigenmodeStrategy &s, std::shared_ptr< Matter > matter, AtomMatrix direction)
Dispatch compute() to the active variant.
double eigenmodeGetEigenvalue(EigenmodeStrategy &s)
Dispatch getEigenvalue() to the active variant.

Member Data Documentation

◆ eigenvalue

double eonc::BiasedGradientSquaredDescent::eigenvalue

Definition at line 45 of file BiasedGradientSquaredDescent.h.

◆ eigenvector

AtomMatrix eonc::BiasedGradientSquaredDescent::eigenvector

Definition at line 46 of file BiasedGradientSquaredDescent.h.

◆ log

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

Definition at line 54 of file BiasedGradientSquaredDescent.h.

◆ reactantEnergy

double eonc::BiasedGradientSquaredDescent::reactantEnergy
private

Definition at line 53 of file BiasedGradientSquaredDescent.h.

◆ saddle

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

Definition at line 48 of file BiasedGradientSquaredDescent.h.

◆ status

int eonc::BiasedGradientSquaredDescent::status

Definition at line 50 of file BiasedGradientSquaredDescent.h.


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