GQCP
Loading...
Searching...
No Matches
CCSDSolver.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
29
30
31namespace GQCP {
32
33
39template <typename _Scalar>
41public:
42 using Scalar = _Scalar;
43
44
45public:
46 /*
47 * PUBLIC STATIC METHODS
48 */
49
56 static IterativeAlgorithm<CCSDEnvironment<Scalar>> Plain(const double threshold = 1.0e-08, const size_t maximum_number_of_iterations = 128) {
57
58 // Create the iteration cycle that effectively 'defines' a plain CCSD solver.
59 StepCollection<CCSDEnvironment<Scalar>> plain_ccsd_cycle {};
60 plain_ccsd_cycle
64
65
66 // Create a compound convergence criterion on the norm of subsequent T1- and T2-amplitudes, which is facilitated by the .norm() API of the T1- and T2-amplitudes.
68 const auto t1_extractor = [](const CCSDEnvironment<Scalar>& environment) { return environment.t1_amplitudes; };
69 const T1ConvergenceType t1_convergence_criterion {threshold, t1_extractor, "the T1 amplitudes"};
70
72 const auto t2_extractor = [](const CCSDEnvironment<Scalar>& environment) { return environment.t2_amplitudes; };
73 const T2ConvergenceType t2_convergence_criterion {threshold, t2_extractor, "the T2 amplitudes"};
74
75 const CompoundConvergenceCriterion<CCSDEnvironment<Scalar>> convergence_criterion {t1_convergence_criterion, t2_convergence_criterion};
76
77
78 // Put together the pieces of the algorithm.
79 return IterativeAlgorithm<CCSDEnvironment<Scalar>>(plain_ccsd_cycle, convergence_criterion, maximum_number_of_iterations);
80 }
81};
82
83
84} // namespace GQCP
Definition: CCSDAmplitudesUpdate.hpp:35
Definition: CCSDEnergyCalculation.hpp:35
Definition: CCSDEnvironment.hpp:39
std::deque< T2Amplitudes< Scalar > > t2_amplitudes
Definition: CCSDEnvironment.hpp:49
std::deque< T1Amplitudes< Scalar > > t1_amplitudes
Definition: CCSDEnvironment.hpp:48
Definition: CCSDIntermediatesUpdate.hpp:35
Definition: CCSDSolver.hpp:40
static IterativeAlgorithm< CCSDEnvironment< Scalar > > Plain(const double threshold=1.0e-08, const size_t maximum_number_of_iterations=128)
Definition: CCSDSolver.hpp:56
_Scalar Scalar
Definition: CCSDSolver.hpp:42
Definition: CompoundConvergenceCriterion.hpp:39
Definition: ConsecutiveIteratesNormConvergence.hpp:40
Definition: IterativeAlgorithm.hpp:38
Definition: StepCollection.hpp:41
enable_if_t< std::is_same< Environment, typename Z::Environment >::value, StepCollection< Environment > & > add(const Z &step)
Definition: StepCollection.hpp:92
Definition: BaseOneElectronIntegralBuffer.hpp:25