34 #if __cplusplus >= 201402L 35 #define QCD_CONSTEXPR_AFTER_CXX14 constexpr 37 #define QCD_CONSTEXPR_AFTER_CXX14 51 constexpr
unsigned zeta_m_max_order = 4;
56 constexpr
double pi = 3.141592653589793238462643383279;
58 constexpr
double zeta_2 = pi*pi/6.;
59 constexpr
double zeta_3 = 1.202056903159594285399738161511449990765;
60 constexpr
double zeta_4 = pi*pi*pi*pi/90.;
61 constexpr
double zeta_5 = 1.036927755143369926331365486457034168057;
62 constexpr
double zeta_6 = pi*pi*pi*pi*pi*pi/945.;
63 constexpr
double log2 = 0.6931471805599453094172321214581765680755;
64 constexpr
double B4 = -1.762800087073770864061897634679818807215;
66 constexpr
double c4 = 7.908451398072941071188189589256658841231;
68 constexpr
double c5 = -198.9783082886512628182933723717652048993;
70 constexpr
unsigned max_nf_pow(
unsigned order){
71 return (order > 2u)?(order-2u):0u;
74 constexpr
unsigned max_log_pow(
unsigned order,
unsigned){
75 return (order > 1u)?order:0u;
79 constexpr
size_t num_coeff = 28;
80 constexpr
auto data_OS = std::array<double, num_coeff>{{
83 89./432., -5./36., 1./12.,
84 6157./11664. - B4/36. - 343./864.*zeta_3 + 5./4.*zeta_4,
85 439./2592. -5./6.*zeta_3, 319./432., 31./216.,
86 1327./11664. - 2./27.*zeta_3, -53./432., 0., -1./108.,
87 133533622679./3292047360. - 2006969./4354560.*c4 + 13./972.*c5
88 - 35./54.*zeta_2 - 5./27.*log2*zeta_2 - 416579531./40642560.*zeta_3
89 + 1061./576.*zeta_3*zeta_3 + 16350665./580608.*zeta_4 - 1597./216.*log2*zeta_4
90 - 61997./1728.*zeta_5 - 3935./432.*zeta_6,
91 -412745./124416. - 11./72.*c4 + 7./9.*zeta_2 + 2./9.*log2*zeta_2
92 - 143231./9216.*zeta_3 + 1483./96.*zeta_4 + 575./72.*zeta_5,
93 28663./2592. - 155./48.*zeta_3, 6035./2592., 1039./3456.,
94 -2615471./746496. + 49./2592.*c4 - c5/810 + 5./54.*zeta_2 - 1055./1728.*zeta_3
95 - 721./3456.*zeta_4 + 49./72.*log2*zeta_4 + 497./288.*zeta_5,
96 34739./93312. + c4/108 - zeta_2/9. + 439./1728.*zeta_3 - 163./144.*zeta_4,
97 -10097./10368., -47./288., -1./27.,
98 17671./124416. - 5./864.*zeta_3 - 7./96.*zeta_4,
99 -3401./46656. + 7./108.*zeta_3, 31./1296., 0., 1./864.
102 constexpr
auto data_MS = std::array<double, num_coeff>{{
105 89./432., -5./36., 1./12.,
106 10477./11664. - B4/36. - 343./864.*zeta_3 + 5./4.*zeta_4,
107 7./2592. - 5./6.*zeta_3, 175./432., 31./216.,
108 1327./11664. - 2./27.*zeta_3, -53./432., 0., -1./108.,
109 142408730039./3292047360. - 2006969./4354560.*c4 + 13./972.*c5
110 - 328144331./40642560.*zeta_3 + 1061./576.*zeta_3*zeta_3 + 16350665./580608.*zeta_4
111 - 1597./216.*log2*zeta_4 - 61997./1728.*zeta_5 - 3935./432.*zeta_6,
112 -1012697./124416. - 11./72.*c4 - 14151./1024.*zeta_3
113 + 1483./96.*zeta_4 + 575./72.*zeta_5,
114 14809./2592. - 155./48.*zeta_3, 2615./2592., 1039./3456.,
115 -2473487./746496. + 49./2592.*c4 - c5/810 - 1055./1728.*zeta_3
116 - 721./3456.*zeta_4 + 49./72.*log2*zeta_4 + 497./288.*zeta_5,
117 63611./93312. + c4/108 + 439./1728.*zeta_3 - 163./144.*zeta_4,
118 -8321./10368., -23./288., -1./27.,
119 17671./124416. - 5./864.*zeta_3 - 7./96.*zeta_4,
120 -3401./46656. + 7./108.*zeta_3, 31./1296., 0., 1./864.
123 constexpr
auto data_SI = std::array<double, num_coeff>{{
126 89./432., -5./36., 1./12.,
127 10477./11664. - B4/36. - 343./864.*zeta_3 + 5./4.*zeta_4,
128 -713./2592. - 5./6.*zeta_3, 319./432., 31./216.,
129 1327./11664. - 2./27.*zeta_3, -53./432., 0., -1./108.,
130 142408730039./3292047360. - 2006969./4354560.*c4 + 13./972.*c5
131 - 328144331./40642560.*zeta_3 + 1061./576.*zeta_3*zeta_3 + 16350665./580608.*zeta_4
132 - 1597./216.*log2*zeta_4 - 61997./1728.*zeta_5 - 3935./432.*zeta_6,
133 -1157465./124416. - 11./72.*c4 - 47573./3072.*zeta_3
134 + 1483./96.*zeta_4 + 575./72.*zeta_5,
135 22519./2592. - 155./48.*zeta_3, 6035./2592., 1039./3456.,
136 -2473487./746496. + 49./2592.*c4 - c5/810 - 1055./1728.*zeta_3
137 - 721./3456.*zeta_4 + 49./72.*log2*zeta_4 + 497./288.*zeta_5,
138 44315./93312. + c4/108 + 439./1728.*zeta_3 - 163./144.*zeta_4,
139 -8561./10368., -47./288., -1./27.,
140 17671./124416. - 5./864.*zeta_3 - 7./96.*zeta_4,
141 -3401./46656. + 7./108.*zeta_3, 31./1296., 0, 1./864.
146 QCD_CONSTEXPR_AFTER_CXX14
147 double coeffs(
size_t);
150 inline QCD_CONSTEXPR_AFTER_CXX14
151 double coeffs<scheme::pole>(
size_t i){
156 inline QCD_CONSTEXPR_AFTER_CXX14
157 double coeffs<scheme::MSbar>(
size_t i){
162 inline QCD_CONSTEXPR_AFTER_CXX14
163 double coeffs<scheme::scale_invariant>(
size_t i){
168 constexpr
auto data_OS_inv = std::array<double, num_coeff>{{
171 -89./432., 5./36., -1./12.,
172 -1871/2916. + B4/36. + 407./864.*zeta_3 - 5./4.*zeta_4,
173 -299./2592. + 5./6.*zeta_3, -299./432., -35./216.,
174 -1327./11664. + 2./27.*zeta_3, 53./432., 0., 1./108.,
175 -122722873709./3292047360. + 1924649./4354560.*c4 - 59./4860.*c5
176 + 5./9.*zeta_2 + 5./27.*log2*zeta_2 + 441628331./40642560.*zeta_3
177 - 1061./576.*zeta_3*zeta_3 - 16187201./580608.*zeta_4 + 725./108.*log2*zeta_4
178 + 59015./1728.*zeta_5 + 3935./432.*zeta_6,
179 99319./41472. + 11./72.*c4 - 2./3.*zeta_2 - 2./9.*log2*zeta_2
180 + 142463./9216.*zeta_3 - 481./32.*zeta_4 - 575./72.*zeta_5,
181 -34297./3456. + 175./48.*zeta_3, -6941./2592., -1147./3456.,
182 2403419./746496. - 49./2592.*c4 + c5/810 - 5./54.*zeta_2 + 1075./1728.*zeta_3
183 + 1225./3456.*zeta_4 - 49./72.*log2*zeta_4 - 497./288.*zeta_5,
184 -26443./93312. - c4/108 + zeta_2/9. - 599./1728.*zeta_3 + 163./144.*zeta_4,
185 10237./10368., 47./288., 17./432.,
186 -17671./124416. + 5./864.*zeta_3 + 7./96.*zeta_4,
187 3401./46656. - 7./108.*zeta_3, -31./1296., 0., -1./864.
191 constexpr
auto data_MS_inv = std::array<double, num_coeff>{{
194 -89./432., 5./36., -1./12.,
195 -2951./2916. + B4/36. + 407./864.*zeta_3 - 5./4.*zeta_4,
196 133./2592. + 5./6.*zeta_3, -155./432., -35./216.,
197 -1327./11664. + 2./27.*zeta_3, 53./432., 0., 1./108.,
198 -131621265869./3292047360. + 1924649./4354560.*c4 - 59./4860.*c5
199 + 353193131./40642560.*zeta_3 - 1061./576.*zeta_3*zeta_3 - 16187201./580608.*zeta_4
200 + 725./108.*log2*zeta_4 + 59015./1728.*zeta_5 + 3935./432.*zeta_6,
201 279367./41472. + 11./72.*c4 + 42197./3072.*zeta_3
202 - 481./32.*zeta_4 - 575./72.*zeta_5,
203 -16193./3456. + 175./48.*zeta_3, -3161./2592., -1147./3456.,
204 2261435./746496. - 49./2592.*c4 + c5/810 + 1075./1728.*zeta_3
205 + 1225./3456.*zeta_4 - 49./72.*log2*zeta_4 - 497./288.*zeta_5,
206 -55315./93312. - c4/108 - 599./1728.*zeta_3 + 163./144.*zeta_4,
207 8461./10368., 23./288., 17./432.,
208 -17671./124416. + 5./864.*zeta_3 + 7./96.*zeta_4,
209 3401./46656. - 7./108.*zeta_3, -31./1296., 0, -1./864.
212 constexpr
auto data_SI_inv = std::array<double, num_coeff>{{
215 -89./432., 5./36., -1./12.,
216 -2951./2916. + B4/36. + 407./864.*zeta_3 - 5./4.*zeta_4,
217 853./2592. + 5./6.*zeta_3, -299./432., -35./216.,
218 -1327./11664. + 2./27.*zeta_3, 53./432., 0., 1./108.,
219 -131621265869./3292047360. + 1924649./4354560.*c4 - 59./4860.*c5
220 + 353193131./40642560.*zeta_3 - 1061./576.*zeta_3*zeta_3 - 16187201./580608.*zeta_4
221 + 725./108.*log2*zeta_4 + 59015./1728.*zeta_5 + 3935./432.*zeta_6,
222 330503./41472. + 11./72.*c4 + 47317./3072.*zeta_3
223 - 481./32.*zeta_4 - 575./72.*zeta_5,
224 -8531./1152. + 175./48.*zeta_3, -6941./2592., -1147./3456.,
225 2261435./746496. - 49./2592.*c4 + c5/810 + 1075./1728.*zeta_3
226 + 1225./3456.*zeta_4 - 49./72.*log2*zeta_4 - 497./288.*zeta_5,
227 -36019./93312. - c4/108 - 599./1728.*zeta_3 + 163./144.*zeta_4,
228 8701./10368., 47./288., 17./432.,
229 -17671./124416. + 5./864.*zeta_3 + 7./96.*zeta_4,
230 3401./46656. - 7./108.*zeta_3, -31./1296., 0, -1./864.
234 QCD_CONSTEXPR_AFTER_CXX14
235 double coeffs_inv(
size_t);
238 inline QCD_CONSTEXPR_AFTER_CXX14
239 double coeffs_inv<scheme::pole>(
size_t i){
240 return data_OS_inv[i];
244 inline QCD_CONSTEXPR_AFTER_CXX14
245 double coeffs_inv<scheme::MSbar>(
size_t i){
246 return data_MS_inv[i];
250 inline QCD_CONSTEXPR_AFTER_CXX14
251 double coeffs_inv<scheme::scale_invariant>(
size_t i){
252 return data_SI_inv[i];
257 constexpr
unsigned get_index(
262 constexpr
unsigned get_index(
265 return (order == 0u)?
268 + max_log_pow(order - 1, max_nf_pow(order - 1))
269 + get_index(order - 1, max_nf_pow(order - 1))
273 constexpr
unsigned get_index(
277 return (nf_pow == 0u)?
279 1u + max_log_pow(order, nf_pow - 1) + get_index(order, nf_pow - 1)
283 constexpr
unsigned get_index(
288 return log_pow + get_index(order, nf_pow);
294 inline QCD_CONSTEXPR_AFTER_CXX14
295 double zeta_m_log_coeff(
301 return coeffs<s>(get_index(order, nf_pow, log_pow));
305 inline QCD_CONSTEXPR_AFTER_CXX14
306 double zeta_m_inv_log_coeff(
312 return coeffs_inv<s>(get_index(order, nf_pow, log_pow));
320 inline QCD_CONSTEXPR_AFTER_CXX14
321 double nf_coeff_helper(
327 return (cur_log_pow == max_log_pow(order, nf_pow))?
328 zeta_m_log_coeff<s>(order, nf_pow, cur_log_pow):(
329 + zeta_m_log_coeff<s>(order, nf_pow, cur_log_pow)
330 + lm * nf_coeff_helper<s>(order, nf_pow, lm, cur_log_pow + 1)
335 inline QCD_CONSTEXPR_AFTER_CXX14
336 double nf_coeff_helper_inv(
342 return (cur_log_pow == max_log_pow(order, nf_pow))?
343 zeta_m_inv_log_coeff<s>(order, nf_pow, cur_log_pow):(
344 + zeta_m_inv_log_coeff<s>(order, nf_pow, cur_log_pow)
345 + lm * nf_coeff_helper_inv<s>(order, nf_pow, lm, cur_log_pow + 1)
352 inline QCD_CONSTEXPR_AFTER_CXX14
353 double zeta_m_nf_coeff(
359 return nf_coeff_helper<s>(order, nf_pow, lm, 0);
363 inline QCD_CONSTEXPR_AFTER_CXX14
364 double zeta_m_inv_nf_coeff(
370 return nf_coeff_helper_inv<s>(order, nf_pow, lm, 0);
376 inline QCD_CONSTEXPR_AFTER_CXX14
383 return (cur_nf_pow == max_nf_pow(order))?
384 zeta_m_nf_coeff<s>(order, cur_nf_pow, lm):(
385 + zeta_m_nf_coeff<s>(order, cur_nf_pow, lm)
386 + nf * helper<s>(order, nf, lm, cur_nf_pow + 1)
391 inline QCD_CONSTEXPR_AFTER_CXX14
398 return (cur_nf_pow == max_nf_pow(order))?
399 zeta_m_inv_nf_coeff<s>(order, cur_nf_pow, lm):(
400 + zeta_m_inv_nf_coeff<s>(order, cur_nf_pow, lm)
401 + nf * helper_inv<s>(order, nf, lm, cur_nf_pow + 1)
406 inline QCD_CONSTEXPR_AFTER_CXX14
412 return helper<s>(order, nf, lm, 0);
416 inline QCD_CONSTEXPR_AFTER_CXX14
422 return helper_inv<s>(order, nf, lm, 0);
426 inline QCD_CONSTEXPR_AFTER_CXX14
434 return (cur_order == order)?
435 zeta_m<s>(order, nf, lm):(
436 + zeta_m<s>(cur_order, nf, lm)
437 + alpha_s/pi * helper<s>(order, nf, lm, alpha_s, cur_order + 1)
442 inline QCD_CONSTEXPR_AFTER_CXX14
450 return (cur_order == order)?
451 zeta_m_inv<s>(order, nf, lm):(
452 + zeta_m_inv<s>(cur_order, nf, lm)
453 + alpha_s/pi * helper_inv<s>(order, nf, lm, alpha_s, cur_order + 1)
475 inline QCD_CONSTEXPR_AFTER_CXX14
483 return helper<s>(order, nf, lm, alpha_s, 0);
501 inline QCD_CONSTEXPR_AFTER_CXX14
509 return helper_inv<s>(order, nf, lm, alpha_s, 0);
523 inline QCD_CONSTEXPR_AFTER_CXX14
529 return detail::zeta_m::zeta_m<s>(order, nf, lm);
544 inline QCD_CONSTEXPR_AFTER_CXX14
550 return detail::zeta_m::zeta_m_inv<s>(order, nf, lm);
555 #undef QCD_CONSTEXPR_AFTER_CXX14 QCD_CONSTEXPR_AFTER_CXX14 double zeta_m_inv(unsigned order, unsigned nf, double lm, double alpha_s)
Inverse decoupling constant for the mass in the scheme.
Definition: zeta_m.hpp:502
Definition: alpha_s.hpp:35
QCD_CONSTEXPR_AFTER_CXX14 double zeta_m(unsigned order, unsigned nf, double lm, double alpha_s)
Decoupling constant for the mass in the scheme.
Definition: zeta_m.hpp:476
Definition of mass schemes.
QCD_CONSTEXPR_AFTER_CXX14 double zeta_m(unsigned order, unsigned nf, double lm)
Coefficients of the decoupling constant.
Definition: zeta_m.hpp:524