eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
SteepestDescent.cpp
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
**
6
** Copyright (c) 2010--present, eOn Development Team
7
** All rights reserved.
8
**
9
** Repo:
10
** https://github.com/TheochemUI/eOn
11
*/
12
13
// Based on the SteepestDescent minimizer written in ASE.
14
15
#include "
eon/SteepestDescent.h
"
16
#include "
eon/SafeMath.h
"
17
18
namespace
eonc
{
19
20
int
SteepestDescent::step
(
double
a_maxMove) {
21
Eigen::VectorXd r =
m_objf
->getPositions();
22
Eigen::VectorXd f = -
m_objf
->getGradient();
23
24
Eigen::VectorXd dr;
25
double
alpha =
m_optConfig
.opts.sd.alpha;
26
if
(
m_optConfig
.opts.sd.two_point &&
iteration
> 0) {
27
Eigen::VectorXd dx =
m_objf
->difference(r,
m_rPrev
);
28
Eigen::VectorXd dg = -f +
m_fPrev
;
29
alpha =
eonc::safemath::safe_div
(dx.dot(dx), dx.dot(dg), 0.0);
30
if
(alpha < 0) {
31
alpha =
m_optConfig
.opts.sd.alpha;
32
}
33
QUILL_LOG_DEBUG(
m_log
,
"[SD] alpha: {:.4e}"
, alpha);
34
}
35
36
dr = alpha * f;
37
dr =
eonc::geometry::maxAtomMotionAppliedV
(dr, a_maxMove);
38
39
m_objf
->setPositions(r + dr);
40
41
m_rPrev
= r;
42
m_fPrev
= f;
43
44
iteration
++;
45
46
return
m_objf
->isConverged() ? 1 : 0;
47
}
48
49
int
SteepestDescent::run
(
size_t
a_maxIteration,
double
a_maxMove) {
50
while
(!
m_objf
->isConverged() &&
iteration
< a_maxIteration) {
51
step
(a_maxMove);
52
}
53
return
m_objf
->isConverged() ? 1 : 0;
54
}
55
56
}
// namespace eonc
SafeMath.h
SteepestDescent.h
eonc::Optimizer::m_optConfig
const OptimizerConfig m_optConfig
Definition
Optimizer.h:69
eonc::Optimizer::m_objf
std::shared_ptr< ObjectiveFunction > m_objf
Definition
Optimizer.h:70
eonc::SteepestDescent::run
int run(size_t a_maxIterations, double a_maxMove) override
Definition
SteepestDescent.cpp:49
eonc::SteepestDescent::iteration
size_t iteration
Definition
SteepestDescent.h:39
eonc::SteepestDescent::m_fPrev
Eigen::VectorXd m_fPrev
Definition
SteepestDescent.h:41
eonc::SteepestDescent::m_log
eonc::log::FileScoped m_log
Definition
SteepestDescent.h:37
eonc::SteepestDescent::m_rPrev
Eigen::VectorXd m_rPrev
Definition
SteepestDescent.h:40
eonc::SteepestDescent::step
int step(double a_maxMove) override
Definition
SteepestDescent.cpp:20
eonc::geometry::maxAtomMotionAppliedV
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)
Definition
GeometryAnalysis.cpp:319
eonc::safemath::safe_div
constexpr double safe_div(double num, double denom, double fallback=0.0)
Definition
SafeMath.h:21
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
client
SteepestDescent.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf