24 #include <smart_ptr.h> 26 #ifndef _libint2_src_bin_libint_tactic_h_ 27 #define _libint2_src_bin_libint_tactic_h_ 34 class RecurrenceRelation;
36 class DummyRandomizePolicy;
37 class StdRandomizePolicy;
44 typedef SafePtr<RecurrenceRelation> RR;
45 typedef vector<RR> rr_stack;
50 virtual RR optimal_rr(
const rr_stack& stack)
const =0;
53 static constexpr
bool class_debug() {
60 template <
class RandomizePolicy = DummyRandomizePolicy>
63 FirstChoiceTactic(
const SafePtr<RandomizePolicy>& rpolicy = SafePtr<RandomizePolicy>(
new RandomizePolicy)) :
Tactic(), rpolicy_(rpolicy) {}
66 RR optimal_rr(
const rr_stack& stack)
const {
68 return stack[0 + rpolicy_->noise(stack.size())];
74 SafePtr<RandomizePolicy> rpolicy_;
85 RR optimal_rr(
const rr_stack& stack)
const;
88 SafePtr<DirectedGraph> dg_;
99 RR optimal_rr(
const rr_stack& stack)
const;
102 SafePtr<DirectedGraph> dg_;
112 RR optimal_rr(
const rr_stack& stack)
const;
122 RR optimal_rr(
const rr_stack& stack)
const;
137 RR optimal_rr(
const rr_stack& stack)
const;
152 unsigned lket0) :
Tactic(), lbra0_(lbra0), lket0_(lket0) {}
155 RR optimal_rr(
const rr_stack& stack)
const;
175 unsigned lket1) :
Tactic(), lbra0_(lbra0), lket0_(lket0),
176 lbra1_(lbra1), lket1_(lket1) {}
179 RR optimal_rr(
const rr_stack& stack)
const;
190 unsigned int noise(
unsigned int nrrs)
const {
return 0; }
206 unsigned int noise(
unsigned int nrrs)
const {
207 unsigned long rand = random();
208 const unsigned long range = RAND_MAX;
209 const unsigned int result = static_cast<unsigned int>(std::floor(nrrs*scale_*rand/range));
FirstChoiceTactic simply chooses the first RR.
Definition: tactic.h:61
TwoCenter_OS_Tactic(unsigned lbra0, unsigned lket0)
Definition: tactic.h:151
NullTactic always returns null RecurrenceRelation.
Definition: tactic.h:117
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24
Tactic is used to choose the optimal (in some sense) recurrence relation to reduce a vertex.
Definition: tactic.h:42
ParticleDirectionTactic(bool increase)
Definition: tactic.h:134
ZeroNewVerticesTactic chooses first RR which adds no new vertices on DirectedGraph dg.
Definition: tactic.h:94
FourCenter_OS_Tactic decides graph build for (bra0 ket0| bra1 ket1) = <bra0 bra1|ket0 ket1>
Definition: tactic.h:164
TwoCenter_OS_Tactic decides graph build for <bra0|ket0>
Definition: tactic.h:145
ParticleDirectionTactic returns the first RR that transfers the quantum numbers between particles in ...
Definition: tactic.h:129
FewestNewVerticesTactic chooses RR which adds fewest new vertices to DirectedGraph dg.
Definition: tactic.h:80
The shift parameter is computed as follows: delta = floor(nrrs*scale*random()/RAND_MAX) where nrrs is...
Definition: tactic.h:198
FourCenter_OS_Tactic(unsigned lbra0, unsigned lket0, unsigned lbra1, unsigned lket1)
Definition: tactic.h:172
RandomChoiceTactic chooses randomly among the applicable RRs.
Definition: tactic.h:107