22 #include <smart_ptr.h> 24 #ifndef _libint2_src_bin_libint_tactic_h_ 25 #define _libint2_src_bin_libint_tactic_h_ 32 class RecurrenceRelation;
34 class DummyRandomizePolicy;
35 class StdRandomizePolicy;
42 typedef SafePtr<RecurrenceRelation> RR;
43 typedef vector<RR> rr_stack;
48 virtual RR optimal_rr(
const rr_stack& stack)
const =0;
53 template <
class RandomizePolicy = DummyRandomizePolicy>
56 FirstChoiceTactic(
const SafePtr<RandomizePolicy>& rpolicy = SafePtr<RandomizePolicy>(
new RandomizePolicy)) :
Tactic(), rpolicy_(rpolicy) {}
59 RR optimal_rr(
const rr_stack& stack)
const {
61 return stack[0 + rpolicy_->noise(stack.size())];
67 SafePtr<RandomizePolicy> rpolicy_;
78 RR optimal_rr(
const rr_stack& stack)
const;
81 SafePtr<DirectedGraph> dg_;
92 RR optimal_rr(
const rr_stack& stack)
const;
95 SafePtr<DirectedGraph> dg_;
105 RR optimal_rr(
const rr_stack& stack)
const;
115 RR optimal_rr(
const rr_stack& stack)
const;
130 RR optimal_rr(
const rr_stack& stack)
const;
149 unsigned lket1) :
Tactic(), lbra0_(lbra0), lket0_(lket0),
150 lbra1_(lbra1), lket1_(lket1) {}
153 RR optimal_rr(
const rr_stack& stack)
const;
164 unsigned int noise(
unsigned int nrrs)
const {
return 0; }
180 unsigned int noise(
unsigned int nrrs)
const {
181 unsigned long rand = random();
182 const unsigned long range = RAND_MAX;
183 const unsigned int result =
static_cast<unsigned int>(std::floor(nrrs*scale_*rand/range));
FirstChoiceTactic simply chooses the first RR.
Definition: tactic.h:54
NullTactic always returns null RecurrenceRelation.
Definition: tactic.h:110
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:23
Definition: stdarray.h:18
Tactic is used to choose the optimal (in some sense) recurrence relation to reduce a vertex...
Definition: tactic.h:40
ParticleDirectionTactic(bool increase)
Definition: tactic.h:127
ZeroNewVerticesTactic chooses first RR which adds no new vertices on DirectedGraph dg...
Definition: tactic.h:87
FourCenter_OS_Tactic decides graph build for (bra0 ket0| bra1 ket1) = <bra0 bra1|ket0 ket1> ...
Definition: tactic.h:138
ParticleDirectionTactic returns the first RR that transfers the quantum numbers between particles in ...
Definition: tactic.h:122
FewestNewVerticesTactic chooses RR which adds fewest new vertices to DirectedGraph dg...
Definition: tactic.h:73
The shift parameter is computed as follows: delta = floor(nrrs*scale*random()/RAND_MAX) where nrrs is...
Definition: tactic.h:172
FourCenter_OS_Tactic(unsigned lbra0, unsigned lket0, unsigned lbra1, unsigned lket1)
Definition: tactic.h:146
RandomChoiceTactic chooses randomly among the applicable RRs.
Definition: tactic.h:100