26#ifndef _libint2_src_bin_libint_tactic_h_
27#define _libint2_src_bin_libint_tactic_h_
32 class RecurrenceRelation;
34 class DummyRandomizePolicy;
35 class StdRandomizePolicy;
42 typedef SafePtr<RecurrenceRelation> RR;
43 typedef std::vector<RR> rr_stack;
48 virtual RR optimal_rr(
const rr_stack& stack)
const =0;
51 static constexpr bool class_debug() {
58 template <
class RandomizePolicy = DummyRandomizePolicy>
61 FirstChoiceTactic(
const SafePtr<RandomizePolicy>& rpolicy = SafePtr<RandomizePolicy>(
new RandomizePolicy)) :
Tactic(), rpolicy_(rpolicy) {}
64 RR optimal_rr(
const rr_stack& stack)
const {
66 return stack[0 + rpolicy_->noise(stack.size())];
72 SafePtr<RandomizePolicy> rpolicy_;
83 RR optimal_rr(
const rr_stack& stack)
const;
86 SafePtr<DirectedGraph> dg_;
97 RR optimal_rr(
const rr_stack& stack)
const;
100 SafePtr<DirectedGraph> dg_;
110 RR optimal_rr(
const rr_stack& stack)
const;
120 RR optimal_rr(
const rr_stack& stack)
const;
135 RR optimal_rr(
const rr_stack& stack)
const;
150 unsigned lket0) :
Tactic(), lbra0_(lbra0), lket0_(lket0) {}
153 RR optimal_rr(
const rr_stack& stack)
const;
173 unsigned lket1) :
Tactic(), lbra0_(lbra0), lket0_(lket0),
174 lbra1_(lbra1), lket1_(lket1) {}
177 RR optimal_rr(
const rr_stack& stack)
const;
188 unsigned int noise(
unsigned int nrrs)
const {
return 0; }
204 unsigned int noise(
unsigned int nrrs)
const {
205 unsigned long rand = random();
206 const unsigned long range = RAND_MAX;
207 const unsigned int result =
static_cast<unsigned int>(std::floor(nrrs*scale_*rand/range));
FewestNewVerticesTactic chooses RR which adds fewest new vertices to DirectedGraph dg.
Definition: tactic.h:78
FirstChoiceTactic simply chooses the first RR.
Definition: tactic.h:59
FourCenter_OS_Tactic decides graph build for (bra0 ket0| bra1 ket1) = <bra0 bra1|ket0 ket1>
Definition: tactic.h:162
FourCenter_OS_Tactic(unsigned lbra0, unsigned lket0, unsigned lbra1, unsigned lket1)
Definition: tactic.h:170
NullTactic always returns null RecurrenceRelation.
Definition: tactic.h:115
ParticleDirectionTactic returns the first RR that transfers the quantum numbers between particles in ...
Definition: tactic.h:127
ParticleDirectionTactic(bool increase)
Definition: tactic.h:132
RandomChoiceTactic chooses randomly among the applicable RRs.
Definition: tactic.h:105
The shift parameter is computed as follows: delta = floor(nrrs*scale*random()/RAND_MAX) where nrrs is...
Definition: tactic.h:196
Tactic is used to choose the optimal (in some sense) recurrence relation to reduce a vertex.
Definition: tactic.h:40
TwoCenter_OS_Tactic decides graph build for <bra0|ket0>
Definition: tactic.h:143
TwoCenter_OS_Tactic(unsigned lbra0, unsigned lket0)
Definition: tactic.h:149
ZeroNewVerticesTactic chooses first RR which adds no new vertices on DirectedGraph dg.
Definition: tactic.h:92
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:24