GQCP
Loading...
Searching...
No Matches
BaseOrbitalOptimizer.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
24
25
26namespace GQCP {
27
28
33protected:
34 bool is_converged = false; // if the algorithm has converged
35 double convergence_threshold = 1.0e-08; // the threshold used to check for convergence
36 size_t maximum_number_of_iterations = 128; // the maximum number of iterations that may be used to achieve convergence
37 size_t number_of_iterations = 0; // the number of performed iterations
38
39
40public:
41 // CONSTRUCTORS
42
43 /*
44 * @param convergence_threshold the threshold used to check for convergence
45 * @param maximum_number_of_iterations the maximum number of iterations that may be used to achieve convergence
46 */
47 BaseOrbitalOptimizer(const double convergence_threshold = 1.0e-08, const size_t maximum_number_of_iterations = 128);
48
49
50 // DESTRUCTOR
51 virtual ~BaseOrbitalOptimizer() = default;
52
53
54 // PUBLIC PURE VIRTUAL METHODS
55
62
68 virtual bool checkForConvergence(const RSQHamiltonian<double>& sq_hamiltonian) const = 0;
69
73 virtual void prepareConvergenceChecking(const RSQHamiltonian<double>& sq_hamiltonian) = 0;
74
75
76 // PUBLIC METHODS
77
81 size_t numberOfIterations() const { return this->number_of_iterations; }
82
91 void optimize(RSpinOrbitalBasis<double, GTOShell>& spinor_basis, RSQHamiltonian<double>& sq_hamiltonian);
92};
93
94
95} // namespace GQCP
Definition: BaseOrbitalOptimizer.hpp:32
virtual bool checkForConvergence(const RSQHamiltonian< double > &sq_hamiltonian) const =0
bool is_converged
Definition: BaseOrbitalOptimizer.hpp:34
size_t numberOfIterations() const
Definition: BaseOrbitalOptimizer.hpp:81
void optimize(RSpinOrbitalBasis< double, GTOShell > &spinor_basis, RSQHamiltonian< double > &sq_hamiltonian)
Definition: BaseOrbitalOptimizer.cpp:51
virtual RTransformation< double > calculateNewRotationMatrix(const RSQHamiltonian< double > &sq_hamiltonian) const =0
virtual void prepareConvergenceChecking(const RSQHamiltonian< double > &sq_hamiltonian)=0
double convergence_threshold
Definition: BaseOrbitalOptimizer.hpp:35
size_t number_of_iterations
Definition: BaseOrbitalOptimizer.hpp:37
virtual ~BaseOrbitalOptimizer()=default
size_t maximum_number_of_iterations
Definition: BaseOrbitalOptimizer.hpp:36
Definition: RSpinOrbitalBasis.hpp:63
Definition: RTransformation.hpp:41
Definition: SQHamiltonian.hpp:54
Definition: BaseOneElectronIntegralBuffer.hpp:25