eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
Quickmin.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
#include "
eon/Quickmin.h
"
13
#include "
eon/HelperFunctions.h
"
14
15
#include <cmath>
16
17
namespace
eonc
{
18
19
int
Quickmin::step
(
double
a_maxMove) {
20
Eigen::VectorXd force = -
m_objf
->getGradient();
21
const
double
fn = force.norm();
22
if
(!(fn > 0.0) || !std::isfinite(fn)) {
23
++
m_iteration
;
24
return
1;
25
}
26
if
(
m_optConfig
.opts.quickmin.steepest_descent) {
27
m_vel
.setZero();
28
}
else
{
29
if
(
m_vel
.dot(force) < 0) {
30
m_vel
.setZero();
31
}
else
{
32
const
Eigen::VectorXd f_unit = force / fn;
33
m_vel
=
m_vel
.dot(f_unit) * f_unit;
34
}
35
}
36
37
m_vel
+= force *
m_dt
;
38
Eigen::VectorXd dr =
eonc::geometry::maxAtomMotionAppliedV
(
39
m_vel
*
m_dt
,
40
a_maxMove);
// used to be m_optConfig.opts.max_time_step
41
QUILL_LOG_INFO(
m_log
,
"{} M_Vel.norm() is {}"
,
m_iteration
,
m_vel
.norm());
42
m_objf
->setPositions(
m_objf
->getPositions() + dr);
43
m_iteration
++;
44
return
m_objf
->isConverged() ? 1 : 0;
45
}
46
47
int
Quickmin::run
(
size_t
a_maxSteps,
double
a_maxMove) {
48
while
(!
m_objf
->isConverged() &&
m_iteration
< a_maxSteps) {
49
step
(a_maxMove);
50
}
51
return
m_objf
->isConverged() ? 1 : 0;
52
}
53
54
}
// namespace eonc
HelperFunctions.h
Quickmin.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::Quickmin::m_dt
double m_dt
Definition
Quickmin.h:40
eonc::Quickmin::m_vel
Eigen::VectorXd m_vel
Definition
Quickmin.h:41
eonc::Quickmin::m_log
eonc::log::FileScoped m_log
Definition
Quickmin.h:43
eonc::Quickmin::run
int run(size_t a_maxIterations, double a_maxMove) override
Definition
Quickmin.cpp:47
eonc::Quickmin::m_iteration
size_t m_iteration
Definition
Quickmin.h:42
eonc::Quickmin::step
int step(double a_maxMove) override
Definition
Quickmin.cpp:19
eonc::geometry::maxAtomMotionAppliedV
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)
Definition
GeometryAnalysis.cpp:319
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
client
Quickmin.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf