20 #ifndef _libint2_src_bin_libint_vrr11twoprep11_h_ 21 #define _libint2_src_bin_libint_vrr11twoprep11_h_ 23 #include <generic_rr.h> 24 #include <twoprep_11_11.h> 33 template <
class BFSet,
int part, FunctionPosition where>
36 GenIntegralSet_11_11<BFSet,TwoPRep,mType> >
44 static const unsigned int max_nchildren = 26;
46 using ParentType::Instance;
49 static bool directional() {
return ParentType::default_directional(); }
52 using ParentType::RecurrenceRelation::expr_;
53 using ParentType::RecurrenceRelation::nflops_;
54 using ParentType::target_;
55 using ParentType::is_simple;
60 static std::string descr() {
return "OSVRR"; }
64 std::string generate_label()
const 66 typedef typename TargetType::AuxIndexType
mType;
67 static SafePtr<mType> aux0(
new mType(0u));
69 os << descr() <<
"P" << part <<
to_string(where)
70 << genintegralset_label(target_->bra(),target_->ket(),aux0,target_->oper());
74 #if LIBINT_ENABLE_GENERIC_CODE 75 bool has_generic(
const SafePtr<CompilationParameters>& cparams)
const;
78 std::string generic_header()
const;
80 std::string generic_instance(
const SafePtr<CodeContext>& context,
const SafePtr<CodeSymbols>& args)
const;
84 template <
class F,
int part, FunctionPosition where>
92 const unsigned int m = Tint->aux()->elem(0);
93 const F& _1 = unit<F>(dir);
100 if (a.contracted() ||
112 const bool deriv = dA.
zero() ==
false ||
113 dB.
zero() ==
false ||
114 dC.
zero() ==
false ||
118 #if LIBINT_ENABLE_GENERIC_CODE 120 F sh_a(target_->bra(0,0));
121 F sh_b(target_->ket(0,0));
122 F sh_c(target_->bra(1,0));
123 F sh_d(target_->ket(1,0));
126 if (sh_b.zero() && sh_d.zero() &&
127 (sh_a.norm() > 1u && sh_c.norm() > 1u)
132 if (sh_a.zero() && sh_c.zero() &&
133 (sh_b.norm() > 1u && sh_d.norm() > 1u)
144 bool part0_has_unit=
false, part1_has_unit=
false;
147 if (part == 0 && where == InBra) {
148 F a(Tint->bra(0,0) - _1);
150 F b(Tint->ket(0,0));
const bool unit_b = (b == F::unit()); part0_has_unit |= unit_b;
154 SafePtr<DGVertex> ABCD_m;
if (not unit_b) ABCD_m = factory.
make_child(a,b,c,d,m);
155 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
158 expr_ = Vector(
"PA")[dir] * ABCD_m + Vector(
"WP")[dir] * ABCD_mp1; nflops_+=3;
161 expr_ = Vector(
"WP")[dir] * ABCD_mp1; nflops_+=1;
166 const bool ahlrichs_simplification = a.pure_sh() && unit_b;
168 if (
exists(am1) && not ahlrichs_simplification) {
169 auto Am1BCD_m = factory.
make_child(am1,b,c,d,m);
170 auto Am1BCD_mp1 = factory.
make_child(am1,b,c,d,m+1);
171 #if LIBINT_GENERATE_FMA 173 if (is_simple()) { expr_ -= Scalar(a[dir]) * Scalar(
"oo2z") * (Scalar(
"roz") * Am1BCD_mp1 - Am1BCD_m); nflops_+=5; }
175 if (is_simple()) { expr_ += Scalar(a[dir]) * Scalar(
"oo2z") * (Am1BCD_m - Scalar(
"roz") * Am1BCD_mp1); nflops_+=5; }
178 const F& bm1 = b - _1;
180 auto ABm1CD_m = factory.
make_child(a,bm1,c,d,m);
181 auto ABm1CD_mp1 = factory.
make_child(a,bm1,c,d,m+1);
182 #if LIBINT_GENERATE_FMA 184 if (is_simple()) { expr_ -= Scalar(b[dir]) * Scalar(
"oo2z") * (Scalar(
"roz") * ABm1CD_mp1 - ABm1CD_m); nflops_+=5; }
186 if (is_simple()) { expr_ += Scalar(b[dir]) * Scalar(
"oo2z") * (ABm1CD_m - Scalar(
"roz") * ABm1CD_mp1); nflops_+=5; }
189 const F& cm1 = c - _1;
191 auto ABCm1D_mp1 = factory.
make_child(a,b,cm1,d,m+1);
192 if (is_simple()) { expr_ += Scalar(c[dir]) * Scalar(
"oo2ze") * ABCm1D_mp1; nflops_+=3; }
194 const F& dm1 = d - _1;
196 auto ABCDm1_mp1 = factory.
make_child(a,b,c,dm1,m+1);
197 if (is_simple()) { expr_ += Scalar(d[dir]) * Scalar(
"oo2ze") * ABCDm1_mp1; nflops_+=3; }
201 if (part == 0 && where == InKet) {
202 F a(Tint->bra(0,0));
const bool unit_a = (a == F::unit()); part0_has_unit |= unit_a;
203 F b(Tint->ket(0,0) - _1);
208 SafePtr<DGVertex> ABCD_m;
if (not unit_a) ABCD_m = factory.
make_child(a,b,c,d,m);
209 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
212 expr_ = Vector(
"PB")[dir] * ABCD_m + Vector(
"WP")[dir] * ABCD_mp1; nflops_+=3;
215 expr_ = Vector(
"WP")[dir] * ABCD_mp1; nflops_+=1;
219 const F& am1 = a - _1;
221 auto Am1BCD_m = factory.
make_child(am1,b,c,d,m);
222 auto Am1BCD_mp1 = factory.
make_child(am1,b,c,d,m+1);
223 #if LIBINT_GENERATE_FMA 225 if (is_simple()) { expr_ -= Scalar(a[dir]) * Scalar(
"oo2z") * (Scalar(
"roz") * Am1BCD_mp1 - Am1BCD_m); nflops_+=5; }
227 if (is_simple()) { expr_ += Scalar(a[dir]) * Scalar(
"oo2z") * (Am1BCD_m - Scalar(
"roz") * Am1BCD_mp1); nflops_+=5; }
231 const bool ahlrichs_simplification = b.pure_sh() && unit_a;
232 const F& bm1 = b - _1;
233 if (
exists(bm1) && not ahlrichs_simplification) {
234 auto ABm1CD_m = factory.
make_child(a,bm1,c,d,m);
235 auto ABm1CD_mp1 = factory.
make_child(a,bm1,c,d,m+1);
236 #if LIBINT_GENERATE_FMA 238 if (is_simple()) { expr_ -= Scalar(b[dir]) * Scalar(
"oo2z") * (Scalar(
"roz") * ABm1CD_mp1 - ABm1CD_m); nflops_+=5; }
240 if (is_simple()) { expr_ += Scalar(b[dir]) * Scalar(
"oo2z") * (ABm1CD_m - Scalar(
"roz") * ABm1CD_mp1); nflops_+=5; }
243 const F& cm1 = c - _1;
245 auto ABCm1D_mp1 = factory.
make_child(a,b,cm1,d,m+1);
246 if (is_simple()) { expr_ += Scalar(c[dir]) * Scalar(
"oo2ze") * ABCm1D_mp1; nflops_+=3; }
248 const F& dm1 = d - _1;
250 auto ABCDm1_mp1 = factory.
make_child(a,b,c,dm1,m+1);
251 if (is_simple()) { expr_ += Scalar(d[dir]) * Scalar(
"oo2ze") * ABCDm1_mp1; nflops_+=3; }
255 if (part == 1 && where == InBra) {
258 F c(Tint->bra(1,0) - _1);
260 F d(Tint->ket(1,0));
const bool unit_d = (d == F::unit()); part1_has_unit |= unit_d;
262 SafePtr<DGVertex> ABCD_m;
if (not unit_d) ABCD_m = factory.
make_child(a,b,c,d,m);
263 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
266 expr_ = Vector(
"QC")[dir] * ABCD_m + Vector(
"WQ")[dir] * ABCD_mp1; nflops_+=3;
269 expr_ = Vector(
"WQ")[dir] * ABCD_mp1; nflops_+=1;
274 const bool ahlrichs_simplification = c.pure_sh() && unit_d;
275 const F& cm1 = c - _1;
276 if (
exists(cm1) && not ahlrichs_simplification) {
277 auto ABCm1D_m = factory.
make_child(a,b,cm1,d,m);
278 auto ABCm1D_mp1 = factory.
make_child(a,b,cm1,d,m+1);
279 #if LIBINT_GENERATE_FMA 281 if (is_simple()) { expr_ -= Scalar(c[dir]) * Scalar(
"oo2e") * (Scalar(
"roe") * ABCm1D_mp1 - ABCm1D_m); nflops_+=5; }
283 if (is_simple()) { expr_ += Scalar(c[dir]) * Scalar(
"oo2e") * (ABCm1D_m - Scalar(
"roe") * ABCm1D_mp1); nflops_+=5; }
286 const F& dm1 = d - _1;
288 auto ABCDm1_m = factory.
make_child(a,b,c,dm1,m);
289 auto ABCDm1_mp1 = factory.
make_child(a,b,c,dm1,m+1);
290 #if LIBINT_GENERATE_FMA 292 if (is_simple()) { expr_ -= Scalar(d[dir]) * Scalar(
"oo2e") * (Scalar(
"roe") * ABCDm1_mp1 - ABCDm1_m); nflops_+=5; }
294 if (is_simple()) { expr_ += Scalar(d[dir]) * Scalar(
"oo2e") * (ABCDm1_m - Scalar(
"roe") * ABCDm1_mp1); nflops_+=5; }
297 const F& am1 = a - _1;
299 auto Am1BCD_mp1 = factory.
make_child(am1,b,c,d,m+1);
300 if (is_simple()) { expr_ += Scalar(a[dir]) * Scalar(
"oo2ze") * Am1BCD_mp1; nflops_+=3; }
302 const F& bm1 = b - _1;
304 auto ABm1CD_mp1 = factory.
make_child(a,bm1,c,d,m+1);
305 if (is_simple()) { expr_ += Scalar(b[dir]) * Scalar(
"oo2ze") * ABm1CD_mp1; nflops_+=3; }
309 if (part == 1 && where == InKet) {
312 F c(Tint->bra(1,0));
const bool unit_c = (c == F::unit()); part1_has_unit |= unit_c;
313 F d(Tint->ket(1,0) - _1);
316 SafePtr<DGVertex> ABCD_m;
if (not unit_c) ABCD_m = factory.
make_child(a,b,c,d,m);
317 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
320 expr_ = Vector(
"QD")[dir] * ABCD_m + Vector(
"WQ")[dir] * ABCD_mp1; nflops_+=3;
323 expr_ = Vector(
"WQ")[dir] * ABCD_mp1; nflops_+=1;
327 const F& cm1 = c - _1;
329 auto ABCm1D_m = factory.
make_child(a,b,cm1,d,m);
330 auto ABCm1D_mp1 = factory.
make_child(a,b,cm1,d,m+1);
331 #if LIBINT_GENERATE_FMA 333 if (is_simple()) { expr_ -= Scalar(c[dir]) * Scalar(
"oo2e") * (Scalar(
"roe") * ABCm1D_mp1 - ABCm1D_m); nflops_+=5; }
335 if (is_simple()) { expr_ += Scalar(c[dir]) * Scalar(
"oo2e") * (ABCm1D_m - Scalar(
"roe") * ABCm1D_mp1); nflops_+=5; }
339 const bool ahlrichs_simplification = d.pure_sh() && unit_c;
340 const F& dm1 = d - _1;
341 if (
exists(dm1) && not ahlrichs_simplification) {
342 auto ABCDm1_m = factory.
make_child(a,b,c,dm1,m);
343 auto ABCDm1_mp1 = factory.
make_child(a,b,c,dm1,m+1);
344 #if LIBINT_GENERATE_FMA 346 if (is_simple()) { expr_ -= Scalar(d[dir]) * Scalar(
"oo2e") * (Scalar(
"roe") * ABCDm1_mp1 - ABCDm1_m); nflops_+=5; }
348 if (is_simple()) { expr_ += Scalar(d[dir]) * Scalar(
"oo2e") * (ABCDm1_m - Scalar(
"roe") * ABCDm1_mp1); nflops_+=5; }
351 const F& am1 = a - _1;
353 auto Am1BCD_mp1 = factory.
make_child(am1,b,c,d,m+1);
354 if (is_simple()) { expr_ += Scalar(a[dir]) * Scalar(
"oo2ze") * Am1BCD_mp1; nflops_+=3; }
356 const F& bm1 = b - _1;
358 auto ABm1CD_mp1 = factory.
make_child(a,bm1,c,d,m+1);
359 if (is_simple()) { expr_ += Scalar(b[dir]) * Scalar(
"oo2ze") * ABm1CD_mp1; nflops_+=3; }
367 F a( part == 0 && where == InBra ? Tint->bra(0,0) - _1 : Tint->bra(0,0) );
368 F b( part == 0 && where == InKet ? Tint->ket(0,0) - _1 : Tint->ket(0,0) );
369 F c( part == 1 && where == InBra ? Tint->bra(1,0) - _1 : Tint->bra(1,0) );
370 F d( part == 1 && where == InKet ? Tint->ket(1,0) - _1 : Tint->ket(1,0) );
375 for(
unsigned int dxyz=0; dxyz<3; ++dxyz) {
377 if (is_simple() && dxyz != dir)
382 SafePtr<DGVertex> _nullptr;
389 auto ABCD_m = (part == 0 && not part0_has_unit) ? factory.
make_child(a,b,c,d,m) : _nullptr;
390 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
392 if (part == 0 && where == InBra) {
393 if (not part0_has_unit) {
394 expr_ -= Vector(dA)[dxyz] * (Scalar(
"rho12_over_alpha1") * ABCD_m + Scalar(
"alpha1_rho_over_zeta2") * ABCD_mp1); nflops_ += 5;
397 expr_ -= Vector(dA)[dxyz] * (Scalar(
"alpha1_rho_over_zeta2") * ABCD_mp1); nflops_ += 3;
400 if (part == 0 && where == InKet) {
401 if (not part0_has_unit) {
402 expr_ += Vector(dA)[dxyz] * (Scalar(
"rho12_over_alpha2") * ABCD_m - Scalar(
"alpha1_rho_over_zeta2") * ABCD_mp1); nflops_ += 5;
405 expr_ -= Vector(dA)[dxyz] * (Scalar(
"alpha1_rho_over_zeta2") * ABCD_mp1); nflops_ += 3;
409 expr_ += Vector(dA)[dxyz] * Scalar(
"alpha1_over_zetapluseta") * ABCD_mp1; nflops_ += 3; }
420 auto ABCD_m = (part == 0 && not part0_has_unit) ? factory.
make_child(a,b,c,d,m) : _nullptr;
421 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
423 if (part == 0 && where == InBra) {
424 if (not part0_has_unit) {
425 expr_ += Vector(dB)[dxyz] * (Scalar(
"rho12_over_alpha1") * ABCD_m - Scalar(
"alpha2_rho_over_zeta2") * ABCD_mp1); nflops_ += 5;
428 expr_ -= Vector(dB)[dxyz] * (Scalar(
"alpha2_rho_over_zeta2") * ABCD_mp1); nflops_ += 3;
431 if (part == 0 && where == InKet) {
432 if (not part0_has_unit) {
433 expr_ -= Vector(dB)[dxyz] * (Scalar(
"rho12_over_alpha2") * ABCD_m + Scalar(
"alpha2_rho_over_zeta2") * ABCD_mp1); nflops_ += 5;
436 expr_ -= Vector(dB)[dxyz] * (Scalar(
"alpha2_rho_over_zeta2") * ABCD_mp1); nflops_ += 3;
440 expr_ += Vector(dB)[dxyz] * Scalar(
"alpha2_over_zetapluseta") * ABCD_mp1; nflops_ += 3; }
451 auto ABCD_m = (part == 1 && not part1_has_unit) ? factory.
make_child(a,b,c,d,m) : _nullptr;
452 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
455 expr_ += Vector(dC)[dxyz] * Scalar(
"alpha3_over_zetapluseta") * ABCD_mp1; nflops_ += 3; }
456 if (part == 1 && where == InBra) {
457 if (not part1_has_unit) {
458 expr_ -= Vector(dC)[dxyz] * (Scalar(
"rho34_over_alpha3") * ABCD_m + Scalar(
"alpha3_rho_over_eta2") * ABCD_mp1); nflops_ += 5;
461 expr_ -= Vector(dC)[dxyz] * (Scalar(
"alpha3_rho_over_eta2") * ABCD_mp1); nflops_ += 3;
464 if (part == 1 && where == InKet) {
465 if (not part1_has_unit) {
466 expr_ += Vector(dC)[dxyz] * (Scalar(
"rho34_over_alpha4") * ABCD_m - Scalar(
"alpha3_rho_over_eta2") * ABCD_mp1); nflops_ += 5;
469 expr_ -= Vector(dC)[dxyz] * (Scalar(
"alpha3_rho_over_eta2") * ABCD_mp1); nflops_ += 3;
482 auto ABCD_m = (part == 1 && not part1_has_unit) ? factory.
make_child(a,b,c,d,m) : _nullptr;
483 auto ABCD_mp1 = factory.
make_child(a,b,c,d,m+1);
486 expr_ += Vector(dD)[dxyz] * Scalar(
"alpha4_over_zetapluseta") * ABCD_mp1; nflops_ += 3; }
487 if (part == 1 && where == InBra) {
488 if (not part1_has_unit) {
489 expr_ += Vector(dD)[dxyz] * (Scalar(
"rho34_over_alpha3") * ABCD_m - Scalar(
"alpha4_rho_over_eta2") * ABCD_mp1); nflops_ += 5;
492 expr_ -= Vector(dD)[dxyz] * (Scalar(
"alpha4_rho_over_eta2") * ABCD_mp1); nflops_ += 3;
495 if (part == 1 && where == InKet) {
496 if (not part1_has_unit) {
497 expr_ -= Vector(dD)[dxyz] * (Scalar(
"rho34_over_alpha4") * ABCD_m + Scalar(
"alpha4_rho_over_eta2") * ABCD_mp1); nflops_ += 5;
500 expr_ -= Vector(dD)[dxyz] * (Scalar(
"alpha4_rho_over_eta2") * ABCD_mp1); nflops_ += 3;
513 #if LIBINT_ENABLE_GENERIC_CODE 514 template <
class F,
int part, FunctionPosition where>
521 F sh_a(target_->bra(0,0));
522 F sh_b(target_->ket(0,0));
523 F sh_c(target_->bra(1,0));
524 F sh_d(target_->ket(1,0));
525 const unsigned int max_opt_am = cparams->max_am_opt();
528 if (sh_b.zero() && sh_d.zero() &&
529 (sh_a.norm() > std::max(2*max_opt_am,1u) ||
530 sh_c.norm() > std::max(2*max_opt_am,1u)
532 (sh_a.norm() > 1u && sh_c.norm() > 1u)
537 if (sh_a.zero() && sh_c.zero() &&
538 (sh_b.norm() > std::max(2*max_opt_am,1u) ||
539 sh_d.norm() > std::max(2*max_opt_am,1u)
541 (sh_b.norm() > 1u && sh_d.norm() > 1u)
549 template <
class F,
int part, FunctionPosition where>
553 F sh_a(target_->bra(0,0));
554 F sh_b(target_->ket(0,0));
555 F sh_c(target_->bra(1,0));
556 F sh_d(target_->ket(1,0));
557 const bool xsxs = sh_b.zero() && sh_d.zero();
558 const bool sxsx = sh_a.zero() && sh_c.zero();
564 const bool deriv = dA.
zero() ==
false ||
565 dB.
zero() ==
false ||
566 dC.
zero() ==
false ||
569 if (deriv ==
false) {
570 if (xsxs)
return std::string(
"OSVRR_xs_xs.h");
571 if (sxsx)
return std::string(
"OSVRR_sx_sx.h");
574 if (xsxs)
return std::string(
"OSVRR_xs_xs_deriv.h");
575 if (sxsx)
return std::string(
"OSVRR_sx_sx_deriv.h");
580 template <
class F,
int part, FunctionPosition where>
584 std::ostringstream oss;
585 F sh_a(target_->bra(0,0));
586 F sh_b(target_->ket(0,0));
587 F sh_c(target_->bra(1,0));
588 F sh_d(target_->ket(1,0));
589 const bool xsxs = sh_b.zero() && sh_d.zero();
590 const bool sxsx = sh_a.zero() && sh_c.zero();
591 bool ahlrichs_simplification =
false;
594 ahlrichs_simplification = (sh_a.pure_sh() && sh_b.is_unit()) ||
595 (sh_c.pure_sh() && sh_d.is_unit());
596 unit_s = sh_b.is_unit();
599 ahlrichs_simplification = (sh_b.pure_sh() && sh_a.is_unit()) ||
600 (sh_d.pure_sh() && sh_c.is_unit());
601 unit_s = sh_a.is_unit();
608 const bool deriv = dA.
zero() ==
false ||
609 dB.
zero() ==
false ||
610 dC.
zero() ==
false ||
613 oss <<
"using namespace libint2;" << endl;
615 if (deriv ==
false) {
617 oss <<
"libint2::OS" << (ahlrichs_simplification ?
"A" :
"")
618 <<
"VRR_xs_xs<" << part <<
"," << sh_a.norm() <<
"," << sh_c.norm() <<
",";
621 oss <<
"libint2::OS" << (ahlrichs_simplification ?
"A" :
"")
622 <<
"VRR_sx_sx<" << part <<
"," << sh_b.norm() <<
"," << sh_d.norm() <<
",";
624 if (not ahlrichs_simplification) oss << (unit_s ?
"true," :
"false,");
625 oss << ((context->cparams()->max_vector_length() == 1) ?
"false" :
"true");
626 oss <<
">::compute(inteval";
628 oss <<
"," << args->symbol(0);
629 if (not ahlrichs_simplification && unit_s)
631 const unsigned int nargs = args->n();
632 for(
unsigned int a=1; a<nargs; a++) {
633 oss <<
"," << args->symbol(a);
639 oss <<
"libint2::OS" << (ahlrichs_simplification ?
"A" :
"")
640 <<
"VRR_xs_xs_deriv<" << part <<
"," << sh_a.norm() <<
"," << sh_c.norm() <<
",";
643 oss <<
"libint2::OS" << (ahlrichs_simplification ?
"A" :
"")
644 <<
"VRR_sx_sx_deriv<" << part <<
"," << sh_b.norm() <<
"," << sh_d.norm() <<
",";
647 for(
unsigned int xyz=0; xyz<3; ++xyz) oss << sh_a.deriv().d(xyz) <<
",";
648 for(
unsigned int xyz=0; xyz<3; ++xyz) oss << sh_b.deriv().d(xyz) <<
",";
649 for(
unsigned int xyz=0; xyz<3; ++xyz) oss << sh_c.deriv().d(xyz) <<
",";
650 for(
unsigned int xyz=0; xyz<3; ++xyz) oss << sh_d.deriv().d(xyz) <<
",";
651 if (not ahlrichs_simplification) oss << (unit_s ?
"true," :
"false,");
652 oss << ((context->cparams()->max_vector_length() == 1) ?
"false" :
"true");
653 oss <<
">::compute(inteval";
659 oss <<
"," << args->symbol(0);
660 if (not ahlrichs_simplification && unit_s)
663 unsigned int arg = 1;
665 arg<(ahlrichs_simplification? 3 : (unit_s ? 5 : 6));
667 oss <<
"," << args->symbol(arg);
669 for(
unsigned int xyz=0; xyz<3; ++xyz) {
670 if (sh_a.deriv().d(xyz) > 0) {
671 oss <<
"," << args->symbol(arg++);
672 oss <<
"," << args->symbol(arg++);
676 if (sh_b.deriv().d(xyz) > 0) {
677 oss <<
"," << args->symbol(arg++);
678 oss <<
"," << args->symbol(arg++);
682 if (sh_c.deriv().d(xyz) > 0) {
683 oss <<
"," << args->symbol(arg++);
687 if (sh_d.deriv().d(xyz) > 0) {
688 oss <<
"," << args->symbol(arg++);
698 #endif // #if !LIBINT_ENABLE_GENERIC_CODE const SafePtr< DGVertex > & make_child(const F &A, const F &B, const F &C, const F &D, const AuxIndexType &aux=AuxIndexType(), const OperType &oper=OperType())
make_child
Definition: generic_rr.h:157
TrivialBFSet<T> defines static member result, which is true if T is a basis function set consisting o...
Definition: bfset.h:879
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:23
Definition: stdarray.h:18
Definition: prefactors.h:159
Generic integral over a two-body operator with one bfs for each particle in bra and ket...
Definition: integral_11_11.h:32
RRImpl must inherit GenericRecurrenceRelation<RRImpl>
Definition: generic_rr.h:48
QuantumNumbersA<T,N> is a set of N quantum numbers of type T implemented in terms of a C-style array...
Definition: quanta.h:198
VRR Recurrence Relation for 2-e ERI.
Definition: vrr_11_twoprep_11.h:34
std::string to_string(const T &x)
Converts x to its string representation.
Definition: entity.h:71
void inc(unsigned int xyz, unsigned int c=1u)
Add c quanta along xyz.
Definition: bfset.h:134
these objects help to construct BraketPairs
Definition: braket.h:442
bool exists(const IncableBFSet &A)
Return true if A is valid.
Definition: bfset.h:91
Set of basis functions.
Definition: bfset.h:41
bool zero() const
norm() == 0
Definition: bfset.h:153
static bool directional()
Default directionality.
Definition: vrr_11_twoprep_11.h:49
Helps GenericRecurrenceRelation to work around the compiler problem with make_child.
Definition: generic_rr.h:148