LIBINT  2.6.0
comp_xyz.h
1 /*
2  * Copyright (C) 2004-2019 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_compxyz_h_
22 #define _libint2_src_bin_libint_compxyz_h_
23 
24 #include <generic_rr.h>
25 
26 using namespace std;
27 
28 namespace libint2 {
29 
34  template <typename F, typename Oper, typename AuxQuanta = EmptySet>
35  class CR_XYZ_1_1 : public GenericRecurrenceRelation< CR_XYZ_1_1<F,Oper,AuxQuanta>,
36  F,
37  GenIntegralSet_1_1<F,Oper,AuxQuanta> >
38  {
39  public:
41  typedef F BasisFunctionType;
42  typedef Oper OperType;
45  friend class GenericRecurrenceRelation<ThisType,BasisFunctionType,TargetType>;
46  static const unsigned int max_nchildren = 100;
47 
48  using ParentType::Instance;
49 
50  static bool directional() { return false; }
51 
52  private:
53  using ParentType::RecurrenceRelation::expr_;
54  using ParentType::RecurrenceRelation::nflops_;
55  using ParentType::target_;
56  using ParentType::is_simple;
57 
59  CR_XYZ_1_1(const SafePtr<TargetType>&, unsigned int dir = 0);
60 
61  static std::string descr() { return "CR"; }
62 
64  void compute(const BasisFunctionType& bra, const BasisFunctionType& ket, const Oper& oper);
65  };
66 
67  template <typename F, typename Oper, typename AuxQuanta>
68  CR_XYZ_1_1<F,Oper,AuxQuanta>::CR_XYZ_1_1(const SafePtr< TargetType >& Tint,
69  unsigned int dir) :
70  ParentType(Tint,dir)
71  {
72  // WARNING assuming one function per position
73  const auto& a = Tint->bra(0,0);
74  const auto& b = Tint->ket(0,0);
75  const auto& aux = Tint->aux();
76  const auto& oper = Tint->oper();
77 
78  {
79  // can't apply to contracted basis functions
80  if (a.contracted() || b.contracted())
81  return;
82  // can't apply to differentiated CGF (derivatives will be expanded first)
84  (a.deriv().norm() != 0 ||
85  b.deriv().norm() != 0))
86  return;
87  }
88 
89  compute(a,b,oper);
90  } // CR_XYZ_1_1<F,Oper,AuxQuanta>::CR_XYZ_1_1
91 
92 }; // namespace libint2
93 
94 #endif
this computes integral over Oper over CGShell/CGF as a product of 1-d integrals
Definition: comp_xyz.h:35
TrivialBFSet<T> defines static member result, which is true if T is a basis function set consisting o...
Definition: bfset.h:892
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24
RRImpl must inherit GenericRecurrenceRelation<RRImpl>
Definition: generic_rr.h:49
Oper is OperSet characterized by properties Props.
Definition: oper.h:90
Generic integral over a one-body operator with one bfs for each particle in bra and ket.
Definition: integral_1_1.h:33