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 allIBP = false;
71 void Export() override;
72 void Run() override;
73 void Import() override;
74 int PosPref = 1;
75 int Prime = 0;
76 int T1 = 4;
77 int LT1 = 1;
78 int T2 = 4;
79 int LT2 = 1;
80 int TP = 8;
81 int LEN = 50;
82 string opt = "";
83 string Execute = InstallPrefix + "/FIRE/M/FIRE";
85 static int Version;
86 static void RRTables(const string & filename, int pnum);
87 static void ThieleTables(const string & filename, int si, int ei);
88 };
89
93 class KIRA : public IBP {
94 public:
95
96 static string KArgs;
97
98 int ra = 2;
99 int sa = 3;
100 int dmax = -1;
101
102 void Export() override;
103 void Run() override;
104 void Import() override;
105
106 private:
107 string Fout(const ex & expr);
108 ex Fin(const string & expr);
109 map<ex,unsigned long long,ex_is_less> i2w;
110 map<unsigned long long,ex> w2i;
111 };
112
113
117 class UKIRA : public IBP {
118 public:
119
120 static string KArgs; // check kira --help
121
122 bool using_uw = true;
123
124 void Export() override;
125 void Run() override;
126 void Import() override;
127
128 int ra = 1;
129 int sa = 1;
130 int rap = 1;
131 int sap = 1;
132 int sort_option = 0;
133 int seed_option = 0;
134
135 private:
136 lst ibps;
137
138 string Fout(const ex & expr);
139 ex Fin(const string & expr);
140 map<ex,unsigned long long,ex_is_less> i2w;
141 map<unsigned long long,ex> w2i;
142 };
143
147 class Direct : public IBP {
148 public:
149 class Condition {
150 public:
151 vector<pair<int,int>> cs; // (1st==-1 for <=, 1st==1 for >=, 1st==0 for ==) 2nd
152 inline bool IsOK(ex ns) {
153 if(ns.nops() != cs.size()) return false;
154 for(int i=0; cs.size()-i>0; i++) {
155 if(cs[i].first==-1 && ns.op(i)>cs[i].second) return false;
156 else if(cs[i].first==1 && ns.op(i)<cs[i].second) return false;
157 else if(cs[i].first==0 && !ns.op(i).is_equal(cs[i].second)) return false;
158 }
159 return true;
160 }
161 inline ex cs2ex() {
162 lst ret;
163 for(auto item : cs) ret.append(lst{item.first, item.second});
164 return ret;
165 }
166 inline void ex2cs(ex e) {
167 cs.clear();
168 for(auto item : e) {
169 cs.push_back(make_pair(ex2int(item.op(0)), ex2int(item.op(1))));
170 }
171 }
172 };
173
174 void Export() override;
175 void Run() override;
176 void Import() override;
177
178 private:
179 lst ibps;
180 vector<pair<Condition,ex>> ConSolVec; // the conditional solution vector
181 };
182
183 class Laporta : public IBP {
184
185 public:
186
187 bool using_uw = true;
188
189 void Export() override;
190 void Run() override;
191 void Import() override;
192
193 int ra = 1;
194 int sa = 1;
195 int rap = 1;
196 int sap = 1;
197 int sort_option = 0;
198 int seed_option = 1;
199
200 private:
201 lst ibps;
202 int Round = 0;
203 lst _Integral;
204 lst _Rules;
205 lst RIntegral;
206
207 string Fout(const ex & expr);
208 ex Fin(const string & expr);
209 map<ex,long long,ex_is_less> i2w;
210 map<long long,ex> w2i;
211
212 };
213
217 class Solver : public IBP {
218 public:
219 void Export() override;
220 void Run() override;
221 void Import() override;
222 void IBP();
223 void Solve(const ex & sector, const map<int,int> & a2n={});
224 void SolveSparse(const ex & sector, const map<int,int> & a2n={});
225 private:
226 lst IBPs;
227 };
228
229 extern exmap MapPreSP;
230 exmap SortPermutation(const ex & in_expr, const lst & xs);
231 lst LoopUF(const IBP & fire, const ex & corner);
232 lst UF(const ex & ps, const ex & ns, const ex & loops, const ex & tloops, const ex & lsubs, const ex & tsubs);
233 pair<exmap,lst> FindRules(vector<IBP*> fs, bool mi=true, std::function<lst(const IBP &, const ex &)> uf=LoopUF);
234 inline pair<exmap,lst> FindRules(IBP& ibp, bool mi=true, std::function<lst(const IBP &, const ex &)> uf=LoopUF) {
235 vector<IBP*> fs;
236 fs.push_back(&ibp);
237 return FindRules(fs, mi, uf);
238 }
239
240 ex GPolynomial(const IBP & IBP);
241 void GPermutation(const ex & uf, const lst & xs);
242}
int * a
Basic header file.
bool IsOK(ex ns)
Definition IBP.h:152
vector< pair< int, int > > cs
Definition IBP.h:151
IBP reduction using Direc method.
Definition IBP.h:147
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:78
int LEN
Definition IBP.h:81
static int Version
Definition IBP.h:85
int T1
Definition IBP.h:76
int Prime
Definition IBP.h:75
string Execute
Definition IBP.h:83
void Import() override
Import tables
Definition FIRE.cpp:825
int LT1
Definition IBP.h:77
int PosPref
Definition IBP.h:74
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:82
int LT2
Definition IBP.h:79
int TP
Definition IBP.h:80
exmap NVariables
Definition IBP.h:84
void Run() override
Run FIRE reduction.
Definition FIRE.cpp:796
bool allIBP
Definition IBP.h:70
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:93
void Export() override
Export input data for KIRA.
Definition KIRA.cpp:39
int dmax
Definition IBP.h:100
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:96
int sa
Definition IBP.h:99
int ra
Definition IBP.h:98
IBP reduction using Solver method.
Definition IBP.h:217
IBP reduction using KIRA program with user-defined equations.
Definition IBP.h:117
bool using_uw
Definition IBP.h:122
int seed_option
Definition IBP.h:133
int sort_option
Definition IBP.h:132
int rap
Definition IBP.h:130
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:131
static string KArgs
Definition IBP.h:120
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