HepLib
Loading...
Searching...
No Matches
IBP.h
Go to the documentation of this file.
1
6#pragma once
7
8#include "BASIC.h"
9
13namespace HepLib {
14
15 using namespace std;
16 using namespace GiNaC;
17 using namespace HepLib;
18
19 DECLARE_FUNCTION_1P(a)
20
21
24 class IBP {
25 public:
26 virtual ~IBP() { }
31 lst Integral; // lst of index lst
32 lst Cut; // index start from 1
33 lst DSP; // { {q1,q1}, {q1,p}, ... } Diff SP
34 lst ISP; // { q1*q1, q1*p } Independent SP
35 lst SECTOR; // highest sector
36 map<int,ex> Shift; // index start from 1
37 bool reCut = false;
38 string WorkingDir;
39 int ProblemNumber = 0;
41
43 lst Rules;
44 bool IsAlwaysZero = false;
45
46 virtual void Export() { throw Error("Export() not implemented!"); };
47 virtual void Run() { throw Error("Run() not implemented!"); };
48 virtual void Import() { throw Error("Import() not implemented!"); };
49 pair<exmap,lst> FindRules(bool mi=true);
50 bool IsZero(ex sector);
51 void Reduce();
52 void garExport(string garfn); // Export to .gar
53 void garImport(string garfn); // Import from .gar
54 ex TO(); // to single list for output
55 void FROM(ex s); // from a single expression
56 exmap SP2Pn();
57 exmap Dinv(const lst & ns);
58 ex D(const ex & x, const lst &ns);
59 void RM(bool keep_start_config=false);
60 void rm(const string & pat);
61
62 static void ReShare(const vector<IBP*> & fs);
63 };
64
68 class FIRE : public IBP {
69 public:
70 bool using_BL_tables = true;
71 bool allIBP = false;
72 void Export() override;
73 void Run() override;
74 void Import() override;
75 int PosPref = 1;
76 int Prime = 0;
77 int T1 = 4;
78 int LT1 = 1;
79 int T2 = 4;
80 int LT2 = 1;
81 int TP = 8;
82 int LEN = 50;
83 string opt = "";
84 string Execute = InstallPrefix + "/FIRE/M/FIRE";
86 static int Version;
87 static void RRTables(const string & filename, int pnum);
88 static void ThieleTables(const string & filename, int si, int ei);
89 };
90
94 class KIRA : public IBP {
95 public:
96
97 static string KArgs;
98
99 int ra = 2;
100 int sa = 3;
101 int dmax = -1;
102
103 void Export() override;
104 void Run() override;
105 void Import() override;
106
107 private:
108 string Fout(const ex & expr);
109 ex Fin(const string & expr);
110 map<ex,unsigned long long,ex_is_less> i2w;
111 map<unsigned long long,ex> w2i;
112 };
113
114
118 class UKIRA : public IBP {
119 public:
120
121 static string KArgs; // check kira --help
122
123 bool using_uw = true;
124
125 void Export() override;
126 void Run() override;
127 void Import() override;
128
129 int ra = 1;
130 int sa = 1;
131 int rap = 1;
132 int sap = 1;
133 int sort_option = 0;
134 int seed_option = 0;
135
136 private:
137 lst ibps;
138
139 string Fout(const ex & expr);
140 ex Fin(const string & expr);
141 map<ex,unsigned long long,ex_is_less> i2w;
142 map<unsigned long long,ex> w2i;
143 };
144
148 class Direct : public IBP {
149 public:
150 class Condition {
151 public:
152 vector<pair<int,int>> cs; // (1st==-1 for <=, 1st==1 for >=, 1st==0 for ==) 2nd
153 inline bool IsOK(ex ns) {
154 if(ns.nops() != cs.size()) return false;
155 for(int i=0; cs.size()-i>0; i++) {
156 if(cs[i].first==-1 && ns.op(i)>cs[i].second) return false;
157 else if(cs[i].first==1 && ns.op(i)<cs[i].second) return false;
158 else if(cs[i].first==0 && !ns.op(i).is_equal(cs[i].second)) return false;
159 }
160 return true;
161 }
162 inline ex cs2ex() {
163 lst ret;
164 for(auto item : cs) ret.append(lst{item.first, item.second});
165 return ret;
166 }
167 inline void ex2cs(ex e) {
168 cs.clear();
169 for(auto item : e) {
170 cs.push_back(make_pair(ex2int(item.op(0)), ex2int(item.op(1))));
171 }
172 }
173 };
174
175 void Export() override;
176 void Run() override;
177 void Import() override;
178
179 private:
180 lst ibps;
181 vector<pair<Condition,ex>> ConSolVec; // the conditional solution vector
182 };
183
184 class Laporta : public IBP {
185
186 public:
187
188 bool using_uw = true;
189
190 void Export() override;
191 void Run() override;
192 void Import() override;
193
194 int ra = 1;
195 int sa = 1;
196 int rap = 1;
197 int sap = 1;
198 int sort_option = 0;
199 int seed_option = 1;
200
201 private:
202 lst ibps;
203 int Round = 0;
204 lst _Integral;
205 lst _Rules;
206 lst RIntegral;
207
208 string Fout(const ex & expr);
209 ex Fin(const string & expr);
210 map<ex,long long,ex_is_less> i2w;
211 map<long long,ex> w2i;
212
213 };
214
218 class Solver : public IBP {
219 public:
220 void Export() override;
221 void Run() override;
222 void Import() override;
223 void IBP();
224 void Solve(const ex & sector, const map<int,int> & a2n={});
225 void SolveSparse(const ex & sector, const map<int,int> & a2n={});
226 private:
227 lst IBPs;
228 };
229
230 extern exmap MapPreSP;
231 exmap SortPermutation(const ex & in_expr, const lst & xs);
232 lst LoopUF(const IBP & fire, const ex & corner);
233 lst UF(const ex & ps, const ex & ns, const ex & loops, const ex & tloops, const ex & lsubs, const ex & tsubs);
234 pair<exmap,lst> FindRules(vector<IBP*> fs, bool mi=true, std::function<lst(const IBP &, const ex &)> uf=LoopUF);
235 inline pair<exmap,lst> FindRules(IBP& ibp, bool mi=true, std::function<lst(const IBP &, const ex &)> uf=LoopUF) {
236 vector<IBP*> fs;
237 fs.push_back(&ibp);
238 return FindRules(fs, mi, uf);
239 }
240
241 ex GPolynomial(const IBP & IBP);
242 void GPermutation(const ex & uf, const lst & xs);
243}
int * a
Basic header file.
bool IsOK(ex ns)
Definition IBP.h:153
vector< pair< int, int > > cs
Definition IBP.h:152
IBP reduction using Direc method.
Definition IBP.h:148
class used to wrap error message
Definition BASIC.h:242
IBP reduction using FIRE program.
Definition IBP.h:68
static void RRTables(const string &filename, int pnum)
Definition FIRE.cpp:72
int T2
Definition IBP.h:79
int LEN
Definition IBP.h:82
static int Version
Definition IBP.h:86
int T1
Definition IBP.h:77
int Prime
Definition IBP.h:76
string Execute
Definition IBP.h:84
void Import() override
Import tables
Definition FIRE.cpp:826
int LT1
Definition IBP.h:78
int PosPref
Definition IBP.h:75
static void ThieleTables(const string &filename, int si, int ei)
Definition FIRE.cpp:168
void Export() override
Export start config intgral etc. files.
Definition FIRE.cpp:344
string opt
Definition IBP.h:83
bool using_BL_tables
Definition IBP.h:70
int LT2
Definition IBP.h:80
int TP
Definition IBP.h:81
exmap NVariables
Definition IBP.h:85
void Run() override
Run FIRE reduction.
Definition FIRE.cpp:796
bool allIBP
Definition IBP.h:71
IBP base class for IBP reduction.
Definition IBP.h:24
lst Internal
Definition IBP.h:27
lst MIntegral
Definition IBP.h:42
map< int, ex > Shift
Definition IBP.h:36
lst PIntegral
Definition IBP.h:40
lst ISP
Definition IBP.h:34
lst Replacement
Definition IBP.h:29
virtual void Export()
Definition IBP.h:46
void Reduce()
lst DSP
Definition IBP.h:33
lst Cut
Definition IBP.h:32
lst Integral
Definition IBP.h:31
lst External
Definition IBP.h:28
lst Propagator
Definition IBP.h:30
virtual void Import()
Definition IBP.h:48
virtual ~IBP()
Definition IBP.h:26
string WorkingDir
Definition IBP.h:38
virtual void Run()
Definition IBP.h:47
lst Rules
Definition IBP.h:43
lst SECTOR
Definition IBP.h:35
IBP reduction using KIRA program.
Definition IBP.h:94
void Export() override
Export input data for KIRA.
Definition KIRA.cpp:39
int dmax
Definition IBP.h:101
void Import() override
import kira result
Definition KIRA.cpp:227
void Run() override
invoke kira program for reduction
Definition KIRA.cpp:217
static string KArgs
Definition IBP.h:97
int sa
Definition IBP.h:100
int ra
Definition IBP.h:99
IBP reduction using Solver method.
Definition IBP.h:218
IBP reduction using KIRA program with user-defined equations.
Definition IBP.h:118
bool using_uw
Definition IBP.h:123
int seed_option
Definition IBP.h:134
int sort_option
Definition IBP.h:133
int rap
Definition IBP.h:131
void Export() override
Export input data for KIRA.
Definition UKIRA.cpp:59
void Import() override
import kira result
Definition UKIRA.cpp:437
int sap
Definition IBP.h:132
static string KArgs
Definition IBP.h:121
void Run() override
invoke kira program for reduction
Definition UKIRA.cpp:427
HepLib namespace.
Definition BASIC.cpp:17
exmap MapPreSP
Definition Init.cpp:338
void ReShare(const ex &e)
Definition BASIC.cpp:2250
lst LoopUF(const IBP &ibp, const ex &idx)
UF function.
Definition IBP.cpp:318
pair< exmap, lst > FindRules(vector< IBP * > fs, bool mi, std::function< lst(const IBP &, const ex &)> uf)
Find Rules for Integral or Master Integral.
Definition IBP.cpp:574
lst UF(const ex &props, const ex &ns, const ex &loops, const ex &tloops, const ex &lsubs, const ex &tsubs)
UF function, from FIRE.m.
Definition IBP.cpp:428
exmap SortPermutation(const ex &in_expr, const lst &xs)
Sort for all permuations, and return xs w.r.t. 1st permutation.
Definition IBP.cpp:204
string InstallPrefix
Definition Init.cpp:162
bool IsZero(const ex &e)
int ex2int(ex num)
ex to integer
Definition BASIC.cpp:893