GQCP
Loading...
Searching...
No Matches
JacobiOrbitalOptimizer.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
23
24
25namespace GQCP {
26
27
32protected:
33 size_t dim; // the dimension of the orbital space that should be scanned. The valid orbital indices then are 0 ... dim (not included)
34
35 using pair_type = std::pair<JacobiRotation, double>;
36 pair_type optimal_jacobi_with_scalar; // holds the optimal Jacobi parameters and the corresponding value for the scalar function trying to optimize
37
38
39public:
40 // CONSTRUCTORS
41
47 JacobiOrbitalOptimizer(const size_t dim, const double convergence_threshold = 1.0e-08, const size_t maximum_number_of_iterations = 128);
48
49
50 // DESTRUCTOR
51
55 virtual ~JacobiOrbitalOptimizer() = default;
56
57
58 // PUBLIC PURE VIRTUAL METHODS
59
66 virtual void calculateJacobiCoefficients(const RSQHamiltonian<double>& sq_hamiltonian, const size_t p, const size_t q) = 0;
67
75 virtual double calculateOptimalRotationAngle(const RSQHamiltonian<double>& sq_hamiltonian, const size_t p, const size_t q) const = 0;
76
83 virtual double calculateScalarFunctionChange(const RSQHamiltonian<double>& sq_hamiltonian, const JacobiRotation& jacobi_rot_par) const = 0;
84
89
90
91 // PUBLIC OVERRIDDEN METHODS
92
99
105 bool checkForConvergence(const RSQHamiltonian<double>& sq_hamiltonian) const override;
106
110 void prepareConvergenceChecking(const RSQHamiltonian<double>& sq_hamiltonian) override;
111
112
113 // PUBLIC METHODS
114
120 std::pair<JacobiRotation, double> calculateOptimalJacobiParameters(const RSQHamiltonian<double>& sq_hamiltonian);
121
125 std::function<bool(const pair_type&, const pair_type&)> comparer() const;
126};
127
128
129} // namespace GQCP
Definition: BaseOrbitalOptimizer.hpp:32
double convergence_threshold
Definition: BaseOrbitalOptimizer.hpp:35
size_t maximum_number_of_iterations
Definition: BaseOrbitalOptimizer.hpp:36
Definition: JacobiOrbitalOptimizer.hpp:31
virtual void calculateJacobiCoefficients(const RSQHamiltonian< double > &sq_hamiltonian, const size_t p, const size_t q)=0
std::pair< JacobiRotation, double > calculateOptimalJacobiParameters(const RSQHamiltonian< double > &sq_hamiltonian)
Definition: JacobiOrbitalOptimizer.cpp:94
std::function< bool(const pair_type &, const pair_type &)> comparer() const
Definition: JacobiOrbitalOptimizer.cpp:119
virtual ~JacobiOrbitalOptimizer()=default
void prepareConvergenceChecking(const RSQHamiltonian< double > &sq_hamiltonian) override
Definition: JacobiOrbitalOptimizer.cpp:75
bool checkForConvergence(const RSQHamiltonian< double > &sq_hamiltonian) const override
Definition: JacobiOrbitalOptimizer.cpp:60
std::pair< JacobiRotation, double > pair_type
Definition: JacobiOrbitalOptimizer.hpp:35
RTransformation< double > calculateNewRotationMatrix(const RSQHamiltonian< double > &sq_hamiltonian) const override
Definition: JacobiOrbitalOptimizer.cpp:49
virtual double calculateOptimalRotationAngle(const RSQHamiltonian< double > &sq_hamiltonian, const size_t p, const size_t q) const =0
virtual void prepareJacobiSpecificConvergenceChecking(const RSQHamiltonian< double > &sq_hamiltonian)=0
pair_type optimal_jacobi_with_scalar
Definition: JacobiOrbitalOptimizer.hpp:36
virtual double calculateScalarFunctionChange(const RSQHamiltonian< double > &sq_hamiltonian, const JacobiRotation &jacobi_rot_par) const =0
size_t dim
Definition: JacobiOrbitalOptimizer.hpp:33
Definition: JacobiRotation.hpp:33
Definition: RTransformation.hpp:41
Definition: SQHamiltonian.hpp:54
Definition: BaseOneElectronIntegralBuffer.hpp:25