QCD Library
gamma_m.hpp
Go to the documentation of this file.
1 
28 #pragma once
29 
30 #include <array>
31 
32 #if __cplusplus >= 201402L
33 #define QCD_CONSTEXPR_AFTER_CXX14 constexpr
34 #else
35 #define QCD_CONSTEXPR_AFTER_CXX14
36 #endif
37 
38 namespace QCD{
39 
40  constexpr unsigned gamma_m_max_order = 4;
41 
42  namespace detail{
43 
44  namespace gamma_m{
45  constexpr double pi = 3.141592653589793238462643383279;
46  constexpr double zeta_3 = 1.202056903159594285399738161511449990765;
47  constexpr double zeta_4 = pi*pi*pi*pi/90.;
48  constexpr double zeta_5 = 1.036927755143369926331365486457034168057;
49  constexpr double zeta_6 = 1.017343061984449139714517929790920527902;
50  constexpr double zeta_7 = 1.008349277381922826839797549849796759600;
51 
52  constexpr auto max_order = gamma_m_max_order;
53 
54  // gamma_m = - sum gamma_m_ij nf^j as^(i+1)
55  // as = alpha_s/pi
56  //taken from Baikov, Chetyrkin, Kuehn arXiv:1402.6611
57  constexpr double gamma_m_00 = 1;
58 
59  constexpr double gamma_m_10 = 101./24.;
60  constexpr double gamma_m_11 = -5./36.;
61 
62  constexpr double gamma_m_20 = 1249./64.;
63  constexpr double gamma_m_21 = -277./216. - 5./6.*zeta_3;
64  constexpr double gamma_m_22 = -35./1296.;
65 
66  constexpr double gamma_m_30 =
67  4603055./41472. + 530./27.*zeta_3 - 275./8.*zeta_5;
68  constexpr double gamma_m_31 =
69  -91723./6912. - 2137./144.*zeta_3 + 55./16.*zeta_4 + 575./72.*zeta_5;
70  constexpr double gamma_m_32 =
71  2621./31104. + 25./72.*zeta_3 - 5./24.*zeta_4;
72  constexpr double gamma_m_33 = -83./15552. + zeta_3/108.;
73 
74  constexpr double gamma_m_40 =
75  + 99512327./165888. + 23201233./124416.*zeta_3 + 3025./32.*zeta_3*zeta_3
76  - 349063./4608.*zeta_4 - 28969645./31104.*zeta_5 + 15125./64.*zeta_6
77  + 25795./64.*zeta_7
78  ;
79  constexpr double gamma_m_41 =
80  - 150736283./1492992. - 391813./2592.*zeta_3 - 2365./288.*zeta_3*zeta_3
81  + 1019371./13824.*zeta_4 + 12469045./62208.*zeta_5 - 39875./576.*zeta_6
82  - 56875./864.*zeta_7
83  ;
84  constexpr double gamma_m_42 =
85  + 660371./373248. + 251353./31104.*zeta_3 + 725./432.*zeta_3*zeta_3 -
86  41575./6912.*zeta_4 - 33005./10368.*zeta_5 + 2875./864.*zeta_6
87  ;
88  constexpr double gamma_m_43 =
89  91865./1492992. + 803./5184.*zeta_3 + 7./144.*zeta_4 - 5./27.*zeta_5
90  ;
91  constexpr double gamma_m_44 = -65./62208. - 5./3888.*zeta_3 + zeta_4/432.;
92 
93  constexpr auto max_nf_pow =
94  std::array<unsigned,1u + max_order>{{0u, 1u, 2u, 3u, 4u}};
95 
96  inline QCD_CONSTEXPR_AFTER_CXX14
97  unsigned coeffs_start_index(unsigned order){
98  return (order == 0)?
99  0:
100  (1u + max_nf_pow[order-1] + coeffs_start_index(order-1))
101  ;
102  }
103 
104  constexpr auto coeffs = std::array<double,15>{{
105  gamma_m_00,
106  gamma_m_10, gamma_m_11,
107  gamma_m_20, gamma_m_21, gamma_m_22,
108  gamma_m_30, gamma_m_31, gamma_m_32, gamma_m_33,
109  gamma_m_40, gamma_m_41, gamma_m_42, gamma_m_43, gamma_m_44
110  }};
111 
112  inline QCD_CONSTEXPR_AFTER_CXX14
113  unsigned gamma_m_max_nf_pow(unsigned order){
114  // assert(order <= max_order);
115  using namespace detail::gamma_m;
116  return max_nf_pow[order];
117  }
118 
119  inline QCD_CONSTEXPR_AFTER_CXX14
120  double gamma_m_nf_coeff(unsigned order, unsigned nfpow){
121  // assert(order <= max_order);
122  // assert(nfpow <= max_nf_pow(order));
123  using namespace detail::gamma_m;
124  return( coeffs[coeffs_start_index(order) + nfpow] );
125  }
126 
127  inline QCD_CONSTEXPR_AFTER_CXX14
128  double helper(unsigned order, int nf, unsigned nf_pow){
129  //assert(nf_pow <= max_nf_pow[order])
130  return
131  (nf_pow == max_nf_pow[order])?
132  gamma_m_nf_coeff(order, nf_pow):
133  gamma_m_nf_coeff(order, nf_pow) + nf*helper(order, nf, nf_pow + 1)
134  ;
135  }
136 
137  inline QCD_CONSTEXPR_AFTER_CXX14
138  double gamma_m(unsigned order, int nf){
139  // assert(order <= max_order);
140  using namespace detail::gamma_m;
141  return helper(order, nf, 0);
142  }
143 
144  inline QCD_CONSTEXPR_AFTER_CXX14
145  double helper(
146  unsigned order,
147  int nf,
148  double alpha_s,
149  unsigned cur_order
150  ){
151  //assert(order <= max_order)
152  return (cur_order == order)?
153  gamma_m(order, nf):(
154  + gamma_m(cur_order, nf)
155  + alpha_s/pi * helper(order, nf, alpha_s, cur_order + 1)
156  );
157  }
158  }
159  }
160 
162 
173  inline QCD_CONSTEXPR_AFTER_CXX14
174  double gamma_m(unsigned order, int nf, double alpha_s){
175  // assert(order <= max_order);
176  using namespace detail::gamma_m;
177  return - alpha_s/pi*helper(order, nf, alpha_s, 0);
178  }
179 
181 
192  inline QCD_CONSTEXPR_AFTER_CXX14
193  double gamma_m(unsigned order, int nf){
194  return detail::gamma_m::gamma_m(order, nf);
195  }
196 
198 
203  inline QCD_CONSTEXPR_AFTER_CXX14
204  unsigned gamma_m_max_nf_pow(unsigned order){
206  }
208 
213  inline QCD_CONSTEXPR_AFTER_CXX14
214  double gamma_m_nf_coeff(unsigned order, unsigned nfpow){
215  return detail::gamma_m::gamma_m_nf_coeff(order, nfpow);
216  }
217 
218 
219  // the following functions are just defined for safety, e.g.
220  // to prevent unintended implicit conversion from negative ints
221  // please avoid using them
222 
223  inline QCD_CONSTEXPR_AFTER_CXX14
224  double gamma_m_nf_coeff(int order, unsigned nfpow){
225  // assert(order >= 0);
226  return gamma_m_nf_coeff(static_cast<unsigned>(order), nfpow);
227  }
228 
229  inline QCD_CONSTEXPR_AFTER_CXX14
230  double gamma_m_nf_coeff(unsigned order, int nfpow){
231  // assert(nfpow >= 0);
232  return gamma_m_nf_coeff(order, static_cast<unsigned>(nfpow));
233  }
234 
235  inline QCD_CONSTEXPR_AFTER_CXX14
236  double gamma_m_nf_coeff(int order, int nfpow){
237  // assert(order >= 0);
238  // assert(nfpow >= 0);
239  return
240  gamma_m_nf_coeff(static_cast<unsigned>(order), static_cast<unsigned>(nfpow));
241  }
242 
243 }
244 
245 #undef QCD_CONSTEXPR_AFTER_CXX14
QCD_CONSTEXPR_AFTER_CXX14 double gamma_m_nf_coeff(unsigned order, unsigned nfpow)
Coefficient of some power of number of flavours in the mass anomalous dimension.
Definition: gamma_m.hpp:214
Definition: alpha_s.hpp:35
QCD_CONSTEXPR_AFTER_CXX14 double gamma_m(unsigned order, int nf, double alpha_s)
The QCD mass anomalous dimension.
Definition: gamma_m.hpp:174
QCD_CONSTEXPR_AFTER_CXX14 unsigned gamma_m_max_nf_pow(unsigned order)
Highest power of number of flavours in appearing in the mass anomalous dimension. ...
Definition: gamma_m.hpp:204
QCD_CONSTEXPR_AFTER_CXX14 double gamma_m(unsigned order, int nf)
Perturbative coefficients of the QCD mass anomalous dimension.
Definition: gamma_m.hpp:193