LIBINT 2.9.0
comp_xyz.h
1/*
2 * Copyright (C) 2004-2024 Edward F. Valeev
3 *
4 * This file is part of Libint compiler.
5 *
6 * Libint compiler is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * Libint compiler is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Libint compiler. If not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20
21#ifndef _libint2_src_bin_libint_compxyz_h_
22#define _libint2_src_bin_libint_compxyz_h_
23
24#include <generic_rr.h>
25
26namespace libint2 {
27
33template <typename F, typename Oper, typename AuxQuanta = EmptySet>
35 CR_XYZ_1_1<F, Oper, AuxQuanta>, F,
36 GenIntegralSet_1_1<F, Oper, AuxQuanta> > {
37 public:
39 typedef F BasisFunctionType;
40 typedef Oper OperType;
44 friend class GenericRecurrenceRelation<ThisType, BasisFunctionType,
46 static const unsigned int max_nchildren = 100;
47
49
50 static bool directional() { return false; }
51
52 private:
54 using ParentType::target_;
55 using ParentType::RecurrenceRelation::expr_;
56 using ParentType::RecurrenceRelation::nflops_;
57
60 CR_XYZ_1_1(const std::shared_ptr<TargetType>&, unsigned int dir = 0);
61
62 static std::string descr() { return "CR"; }
63
65 void compute(const BasisFunctionType& bra, const BasisFunctionType& ket,
66 const Oper& oper);
67};
68
69template <typename F, typename Oper, typename AuxQuanta>
71 const std::shared_ptr<TargetType>& Tint, unsigned int dir)
72 : ParentType(Tint, dir) {
73 // WARNING assuming one function per position
74 const auto& a = Tint->bra(0, 0);
75 const auto& b = Tint->ket(0, 0);
76 const auto& aux = Tint->aux();
77 const auto& oper = Tint->oper();
78
79 {
80 // can't apply to contracted basis functions
81 if (a.contracted() || b.contracted()) return;
82 // can't apply to differentiated CGF (derivatives will be expanded first)
84 (a.deriv().norm() != 0 || b.deriv().norm() != 0))
85 return;
86 }
87
88 compute(a, b, oper);
89} // CR_XYZ_1_1<F,Oper,AuxQuanta>::CR_XYZ_1_1
90
91}; // namespace libint2
92
93#endif
this computes integral of Oper over CGShell/CGF as a product of 1-d integrals
Definition comp_xyz.h:36
Generic integral over a one-body operator with one bfs for each particle in bra and ket.
Definition integral_1_1.h:36
RRImpl must inherit GenericRecurrenceRelation<RRImpl>
Definition generic_rr.h:47
bool is_simple() const override
Implementation of RecurrenceRelation::is_simple()
Definition generic_rr.h:81
static std::shared_ptr< RRImpl > Instance(const std::shared_ptr< TargetType > &Tint, unsigned int dir)
Return an instance if applicable, or a null pointer otherwise.
Definition generic_rr.h:55
Oper is OperSet characterized by properties Props.
Definition oper.h:91
Defaults definitions for various parameters assumed by Libint.
Definition algebra.cc:24
TrivialBFSet<T> defines static member result, which is true if T is a basis function set consisting o...
Definition bfset.h:906