GQCP
Loading...
Searching...
No Matches
NewtonOrbitalOptimizer.hpp
Go to the documentation of this file.
1// This file is part of GQCG-GQCP.
2//
3// Copyright (C) 2017-2020 the GQCG developers
4//
5// GQCG-GQCP is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Lesser General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// GQCG-GQCP is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU Lesser General Public License for more details.
14//
15// You should have received a copy of the GNU Lesser General Public License
16// along with GQCG-GQCP. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19
20
27
28#include <utility>
29
30
31namespace GQCP {
32
33
38protected:
39 std::shared_ptr<BaseHessianModifier> hessian_modifier; // the modifier functor that should be used when an indefinite Hessian is encountered
40
43
44
45public:
46 // CONSTRUCTORS
47
48 /*
49 * @param hessian_modifier the modifier functor that should be used when an indefinite Hessian is encountered
50 * @param convergence_threshold the threshold used to check for convergence
51 * @param maximum_number_of_iterations the maximum number of iterations that may be used to achieve convergence
52 */
53 NewtonOrbitalOptimizer(std::shared_ptr<BaseHessianModifier> hessian_modifier, const double convergence_threshold = 1.0e-08, const size_t maximum_number_of_iterations = 128);
54
55
56 // DESTRUCTOR
57
61 virtual ~NewtonOrbitalOptimizer() = default;
62
63
64 // PUBLIC PURE VIRTUAL METHODS
65
72
79
88
92 virtual void prepareOrbitalDerivativesCalculation(const RSQHamiltonian<double>& sq_hamiltonian) = 0;
93
94
95 // PUBLIC OVERRIDDEN METHODS
96
107
118 bool checkForConvergence(const RSQHamiltonian<double>& sq_hamiltonian) const override;
119
123 virtual void prepareConvergenceChecking(const RSQHamiltonian<double>& sq_hamiltonian) override;
124
125
126 // PUBLIC METHODS
127
134
141
150
157
161 bool newtonStepIsWellDefined() const;
162};
163
164
165} // namespace GQCP
Definition: BaseOrbitalOptimizer.hpp:32
double convergence_threshold
Definition: BaseOrbitalOptimizer.hpp:35
size_t maximum_number_of_iterations
Definition: BaseOrbitalOptimizer.hpp:36
Definition: Matrix.hpp:47
Definition: NewtonOrbitalOptimizer.hpp:37
virtual ROrbitalRotationGenerators< double > calculateNewFullOrbitalGenerators(const RSQHamiltonian< double > &sq_hamiltonian) const =0
SquareMatrix< double > calculateHessianMatrix(const RSQHamiltonian< double > &sq_hamiltonian) const
Definition: NewtonOrbitalOptimizer.cpp:128
SquareMatrix< double > hessian
Definition: NewtonOrbitalOptimizer.hpp:42
virtual void prepareOrbitalDerivativesCalculation(const RSQHamiltonian< double > &sq_hamiltonian)=0
VectorX< double > gradient
Definition: NewtonOrbitalOptimizer.hpp:41
virtual void prepareConvergenceChecking(const RSQHamiltonian< double > &sq_hamiltonian) override
Definition: NewtonOrbitalOptimizer.cpp:99
VectorX< double > directionFromIndefiniteHessian() const
Definition: NewtonOrbitalOptimizer.cpp:169
virtual SquareRankFourTensor< double > calculateHessianTensor(const RSQHamiltonian< double > &sq_hamiltonian) const =0
bool checkForConvergence(const RSQHamiltonian< double > &sq_hamiltonian) const override
Definition: NewtonOrbitalOptimizer.cpp:79
virtual ~NewtonOrbitalOptimizer()=default
RTransformation< double > calculateNewRotationMatrix(const RSQHamiltonian< double > &sq_hamiltonian) const override
Definition: NewtonOrbitalOptimizer.cpp:56
std::shared_ptr< BaseHessianModifier > hessian_modifier
Definition: NewtonOrbitalOptimizer.hpp:39
bool newtonStepIsWellDefined() const
Definition: NewtonOrbitalOptimizer.cpp:179
ROrbitalRotationGenerators< double > calculateNewFreeOrbitalGenerators(const RSQHamiltonian< double > &sq_hamiltonian) const
Definition: NewtonOrbitalOptimizer.cpp:140
virtual SquareMatrix< double > calculateGradientMatrix(const RSQHamiltonian< double > &sq_hamiltonian) const =0
VectorX< double > calculateGradientVector(const RSQHamiltonian< double > &sq_hamiltonian) const
Definition: NewtonOrbitalOptimizer.cpp:118
Definition: ROrbitalRotationGenerators.hpp:38
Definition: RTransformation.hpp:41
Definition: SQHamiltonian.hpp:54
Definition: SquareMatrix.hpp:39
Definition: SquareRankFourTensor.hpp:36
Definition: BaseOneElectronIntegralBuffer.hpp:25