eOn client
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
int
Quickmin::step
(
double
a_maxMove) {
16
Eigen::VectorXd force = -
m_objf
->getGradient();
17
if
(
m_optConfig
.opts.quickmin.steepest_descent) {
18
m_vel
.setZero();
19
}
else
{
20
if
(
m_vel
.dot(force) < 0) {
21
m_vel
.setZero();
22
}
else
{
23
Eigen::VectorXd f_unit = force.normalized();
24
m_vel
=
m_vel
.dot(f_unit) * f_unit;
25
}
26
}
27
28
m_vel
+= force *
m_dt
;
29
Eigen::VectorXd dr =
eonc::helpers::maxAtomMotionAppliedV
(
30
m_vel
*
m_dt
,
31
a_maxMove);
// used to be m_optConfig.opts.max_time_step
32
QUILL_LOG_INFO(
m_log
,
"{} M_Vel.norm() is {}"
,
m_iteration
,
m_vel
.norm());
33
m_objf
->setPositions(
m_objf
->getPositions() + dr);
34
m_iteration
++;
35
return
m_objf
->isConverged() ? 1 : 0;
36
}
37
38
int
Quickmin::run
(
size_t
a_maxSteps,
double
a_maxMove) {
39
while
(!
m_objf
->isConverged() &&
m_iteration
< a_maxSteps) {
40
step
(a_maxMove);
41
}
42
return
m_objf
->isConverged() ? 1 : 0;
43
}
HelperFunctions.h
Quickmin.h
Quickmin::step
int step(double a_maxMove) override
Definition
Quickmin.cpp:15
eonc::Optimizer::m_optConfig
const OptimizerConfig m_optConfig
Definition
Optimizer.h:67
eonc::Optimizer::m_objf
std::shared_ptr< ObjectiveFunction > m_objf
Definition
Optimizer.h:68
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::step
int step(double a_maxMove) override
Definition
Quickmin.cpp:15
eonc::Quickmin::m_iteration
size_t m_iteration
Definition
Quickmin.h:42
eonc::Quickmin::run
int run(size_t a_maxIterations, double a_maxMove) override
Definition
Quickmin.cpp:38
eonc::helpers::maxAtomMotionAppliedV
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)
Definition
GeometryAnalysis.cpp:319
client
Quickmin.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf