LIBINT 2.7.2
comp_11_DivG12prime_xTx_11.h
1/*
2 * Copyright (C) 2004-2021 Edward F. Valeev
3 *
4 * This file is part of Libint.
5 *
6 * Libint 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 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. If not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20
21#ifndef _libint2_src_bin_libint_cr11divg12primextx11_h_
22#define _libint2_src_bin_libint_cr11divg12primextx11_h_
23
24#include <generic_rr.h>
25#include <integral_11_11.h>
26#include <gaussoper.h>
27
28#define USE_R12kR12lG12 1
29
30namespace libint2 {
31
34 template <class BFSet>
35 class CR_11_DivG12prime_xTx_11 : public GenericRecurrenceRelation< CR_11_DivG12prime_xTx_11<BFSet>,
36 BFSet,
37 GenIntegralSet_11_11<BFSet,DivG12prime_xTx,mType> >
38 {
39 public:
45 static const unsigned int max_nchildren = 36;
46
48
50 static bool directional() { return false; }
51
52 private:
53 using ParentType::RecurrenceRelation::expr_;
54 using ParentType::RecurrenceRelation::nflops_;
55 using ParentType::target_;
57
59 CR_11_DivG12prime_xTx_11(const SafePtr<TargetType>&, unsigned int dir);
60 static std::string descr() { return "CR"; }
61
62 template<class RR, class C> friend class ChildFactory;
63 };
64
65 template <class F>
66 CR_11_DivG12prime_xTx_11<F>::CR_11_DivG12prime_xTx_11(const SafePtr<TargetType>& Tint,
67 unsigned int dir) :
68 ParentType(Tint,dir)
69 {
70 using namespace libint2::algebra;
71 using namespace libint2::prefactor;
72 using namespace libint2::braket;
73
74 // kinetic energy of which electron?
75 const int i = target_->oper()->descr().I();
76 F a(Tint->bra(0,0));
77 F b(Tint->ket(0,0));
78 F c(Tint->bra(1,0));
79 F d(Tint->ket(1,0));
80
81 if (a.contracted() ||
82 b.contracted() ||
83 c.contracted() ||
84 d.contracted() ||
85 target_->oper()->descr().contracted())
86 return;
87
88#if USE_R12kR12lG12
89 if (i == 0)
90 {
91 typedef GenIntegralSet_11_11<BasisFunctionType,R12kR12lG12,EmptySet> ChildType;
92 ChildFactory<ThisType,ChildType> factory(this);
93 for(int bxyz=0; bxyz<3; ++bxyz) {
94 for(int kxyz=0; kxyz<3; ++kxyz) {
95 R12k_R12l_G12_Descr descr(unit_intvec3(bxyz),unit_intvec3(kxyz));
96 factory.wedge( Nabla1(_pbra(a,c),bxyz) , Nabla1(_pket(b,d),kxyz), EmptySet(), R12kR12lG12(descr));
97 }
98 }
99 }
100 if (i == 1)
101 {
102 typedef GenIntegralSet_11_11<BasisFunctionType,R12kR12lG12,EmptySet> ChildType;
103 ChildFactory<ThisType,ChildType> factory(this);
104 for(int bxyz=0; bxyz<3; ++bxyz) {
105 for(int kxyz=0; kxyz<3; ++kxyz) {
106 R12k_R12l_G12_Descr descr(unit_intvec3(bxyz),unit_intvec3(kxyz));
107 factory.wedge( Nabla2(_pbra(a,c),bxyz) , Nabla2(_pket(b,d),kxyz), EmptySet(), R12kR12lG12(descr));
108 }
109 }
110 }
111#else
112 // |Nabla1.G12' ac ) ^ |Nabla1.G12' bd )
113 if (i == 0)
114 {
115 typedef GenIntegralSet_11_11<BasisFunctionType,R12kG12,mType> ChildType;
116 ChildFactory<ThisType,ChildType> factory(this);
117 factory.wedge( R12vec_dot_Nabla1(_pbra(a,c)) , R12vec_dot_Nabla1(_pket(b,d)), mType(0u), R12kG12(0));
118 }
119 // |Nabla2.G12' ac ) ^ |Nabla2.G12' bd )
120 if (i == 1)
121 {
122 typedef GenIntegralSet_11_11<BasisFunctionType,R12kG12,mType> ChildType;
123 ChildFactory<ThisType,ChildType> factory(this);
124 factory.wedge( R12vec_dot_Nabla2(_pbra(a,c)) , R12vec_dot_Nabla2(_pket(b,d)), mType(0u), R12kG12(0));
125 }
126#endif
127 if (is_simple()) expr_ *= Scalar(-4.0) * Scalar("gamma_bra") * Scalar("gamma_ket");
128
129 }
130
131};
132
133
134#endif
Set of basis functions.
Definition: bfset.h:42
Compute relation for 2-e integrals of the DivG12prime_xTx operators.
Definition: comp_11_DivG12prime_xTx_11.h:38
static bool directional()
This relation is not directional.
Definition: comp_11_DivG12prime_xTx_11.h:50
Generic integral over a two-body operator with one bfs for each particle in bra and ket.
Definition: integral_11_11.h:33
RRImpl must inherit GenericRecurrenceRelation<RRImpl>
Definition: generic_rr.h:47
bool is_simple() const override
Implementation of RecurrenceRelation::is_simple()
Definition: generic_rr.h:79
static SafePtr< RRImpl > Instance(const SafePtr< TargetType > &Tint, unsigned int dir)
Return an instance if applicable, or a null pointer otherwise.
Definition: generic_rr.h:55
these objects help to construct BraketPairs
Definition: src/bin/libint/braket.h:270
BraketPair< F, PKet > _pket(const F &f1, const F &f2)
Physicists ket.
Definition: src/bin/libint/braket.h:276
BraketPair< F, PBra > _pbra(const F &f1, const F &f2)
Physicists bra.
Definition: src/bin/libint/braket.h:272
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24
DefaultQuantumNumbers< unsignedint, 1 >::Result mType
mType is the type that describes the auxiliary index of standard 2-body repulsion integrals
Definition: quanta.h:408
LinearCombination< SafePtr< DGVertex >, BraketPair< F, BKType > > Nabla1(const BraketPair< F, BKType > &bkt, int xyz)
Applies Nabla1 to a physicists' braket.
Definition: gaussoper.h:132
LinearCombination< SafePtr< DGVertex >, BraketPair< F, BKType > > Nabla2(const BraketPair< F, BKType > &bkt, int xyz)
Applies Nabla2 to a physicists' braket.
Definition: gaussoper.h:165
LinearCombination< SafePtr< DGVertex >, BraketPair< F, BKType > > R12vec_dot_Nabla2(const BraketPair< F, BKType > &bkt)
Applies R12vec_dot_Nabla2 to a physicists' braket.
Definition: gaussoper.h:84
LinearCombination< SafePtr< DGVertex >, BraketPair< F, BKType > > R12vec_dot_Nabla1(const BraketPair< F, BKType > &bkt)
Applies R12vec_dot_Nabla1 to a physicists' braket.
Definition: gaussoper.h:36
DefaultQuantumNumbers< int, 0 >::Result EmptySet
EmptySet is the type that describes null set of auxiliary indices.
Definition: quanta.h:404