GQCP
Loading...
Searching...
No Matches
LibintInterfacer.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#include "Molecule/Molecule.hpp"
29
30#include <boost/preprocessor.hpp> // include preprocessor before libint to fix libint-boost bug
31
32#include <libint2.hpp>
33
34
35namespace GQCP {
36
37
44public:
45 using libint_target_ptr_vec = libint2::Engine::target_ptr_vec;
46
47
48private:
49 // PRIVATE METHODS - SINGLETON
54
59
60
61 // PRIVATE STRUCTS
62 typedef struct {
63 } empty; // empty_pod is a private typedef for libint2::Engine, so we copy it over
64
65
66public:
67 // PUBLIC METHODS - SINGLETON
68
72 static LibintInterfacer& get();
73
77 LibintInterfacer(LibintInterfacer const& libint_communicator) = delete;
78 void operator=(LibintInterfacer const& libint_communicator) = delete;
79
80
81 /*
82 * MARK: Interfacing - std to libint
83 */
84
92 libint2::svector<double> interface(const std::vector<double>& vector) const;
93
94
95 /*
96 * MARK: Interfacing - libint to std
97 */
98
106 std::vector<double> interface(const libint2::svector<double>& svector) const;
107
108
109 // PUBLIC METHODS - INTERFACING (GQCP TO LIBINT)
110
116 libint2::Atom interface(const Nucleus& nucleus) const;
117
123 std::vector<libint2::Atom> interface(const std::vector<Nucleus>& nuclei) const;
124
130 libint2::Shell interface(const GTOShell& shell) const;
131
137 libint2::BasisSet interface(const ShellSet<GTOShell>& shellset) const;
138
139
140 // PUBLIC METHODS - INTERFACING (LIBINT TO GQCP)
150 std::vector<GTOShell> interface(const libint2::Shell& libint_shell, const std::vector<Nucleus>& nuclei, bool undo_renorm = true) const;
151
160 std::vector<GTOShell> interface(const libint2::BasisSet& libint_basisset, const std::vector<Nucleus>& nuclei) const;
161
162
163 // PUBLIC METHODS
164
174 libint2::Engine createEngine(const CoulombRepulsionOperator& op, const size_t max_nprim, const size_t max_l) const;
175
185 libint2::Engine createEngine(const ElectronicDipoleOperator& op, const size_t max_nprim, const size_t max_l) const;
186
196 libint2::Engine createEngine(const KineticOperator& op, const size_t max_nprim, const size_t max_l) const;
197
207 libint2::Engine createEngine(const NuclearAttractionOperator& op, const size_t max_nprim, const size_t max_l) const;
208
218 libint2::Engine createEngine(const OverlapOperator& op, const size_t max_nprim, const size_t max_l) const;
219
225 size_t numberOfShells(const libint2::Shell& libint_shell) const;
226
232 size_t numberOfShells(const libint2::BasisSet& libint_basisset) const;
233
239 void undoRenorm(libint2::Shell& libint_shell) const;
240};
241
242
243} // namespace GQCP
Definition: CoulombRepulsionOperator.hpp:31
Definition: ElectronicDipoleOperator.hpp:33
Definition: GTOShell.hpp:32
Definition: KineticOperator.hpp:31
Definition: LibintInterfacer.hpp:43
libint2::svector< double > interface(const std::vector< double > &vector) const
Definition: LibintInterfacer.cpp:85
libint2::Engine::target_ptr_vec libint_target_ptr_vec
Definition: LibintInterfacer.hpp:45
LibintInterfacer(LibintInterfacer const &libint_communicator)=delete
static LibintInterfacer & get()
Definition: LibintInterfacer.cpp:68
void operator=(LibintInterfacer const &libint_communicator)=delete
size_t numberOfShells(const libint2::Shell &libint_shell) const
Definition: LibintInterfacer.cpp:381
libint2::Engine createEngine(const CoulombRepulsionOperator &op, const size_t max_nprim, const size_t max_l) const
Definition: LibintInterfacer.cpp:310
void undoRenorm(libint2::Shell &libint_shell) const
Definition: LibintInterfacer.cpp:408
Definition: NuclearAttractionOperator.hpp:33
Definition: Nucleus.hpp:36
Definition: OverlapOperator.hpp:31
Definition: ShellSet.hpp:41
Definition: BaseOneElectronIntegralBuffer.hpp:25