25 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
27 return (k2 - q2) * (k2 > q2);
30 template <
typename NT1,
typename NT2>
31 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
33 return 2. * k2 * (k2 > q2);
36 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
39 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
42 template <
typename NT1,
typename NT2>
43 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
46 return 0.5 *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
50 template <
typename NT1,
typename NT2>
static void dq2RB(
const NT1,
const NT2) =
delete;
54 static constexpr double b = 2.;
73 static constexpr double b = OPTS::b;
75 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
78 return q2 *
powr<
b - 1>(q2 / k2) / expm1(
powr<b>(q2 / k2));
81 template <
typename NT1,
typename NT2>
82 static __forceinline__ __device__ __host__
auto dq2RB(
const NT1 k2,
const NT2 q2)
86 const auto xb =
powr<b>(q2 / k2);
87 const auto mexp = exp(xb);
88 const auto mexpm1 = expm1(xb);
89 return b * mexp *
powr<
b - 1>(q2 / k2) * (xb - mexpm1) /
powr<2>(mexpm1);
92 template <
typename NT1,
typename NT2>
93 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
97 const auto xb =
powr<b>(q2 / k2);
98 const auto mexp = exp(xb);
99 const auto mexpm1 = expm1(xb);
100 return 2. * k2 * xb * (mexpm1 * (1. -
b) +
b * mexp * xb) /
powr<2>(mexpm1);
103 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
106 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
109 template <
typename NT1,
typename NT2>
110 static __forceinline__ __device__ __host__
auto dq2RF(
const NT1 k2,
const NT2 q2)
113 const auto q = sqrt(q2);
114 return (-1. + q * (1. +
dq2RB(k2, q2)) / (q +
RF(k2, q2))) / (2. * q);
117 template <
typename NT1,
typename NT2>
118 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
121 return 0.5 *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
126 static constexpr double b = 2.;
145 static constexpr double b = OPTS::b;
147 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
150 const auto xb =
powr<b>(q2 / k2);
151 return k2 * exp(-xb);
154 template <
typename NT1,
typename NT2>
155 static __forceinline__ __device__ __host__
auto dq2RB(
const NT1 k2,
const NT2 q2)
158 const auto xbm1 =
powr<
b - 1>(q2 / k2);
159 const auto xb = xbm1 * (q2 / k2);
160 return -
b * xbm1 * exp(-xb);
163 template <
typename NT1,
typename NT2>
164 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
167 const auto xb =
powr<b>(q2 / k2);
168 return 2. * exp(-xb) * k2 * (1. +
b * xb);
171 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
174 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
177 template <
typename NT1,
typename NT2>
178 static __forceinline__ __device__ __host__
auto dq2RF(
const NT1 k2,
const NT2 q2)
181 const auto q = sqrt(q2);
182 return (-1. + q * (1. +
dq2RB(k2, q2)) / (q +
RF(k2, q2))) / (2. * q);
185 template <
typename NT1,
typename NT2>
186 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
189 return 0.5 *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
194 static constexpr double alpha = 2e-3;
213 static constexpr double alpha = OPTS::alpha;
215 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
218 return (k2 - q2) / (1. + exp((q2 / k2 - 1.) /
alpha));
221 template <
typename NT1,
typename NT2>
222 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
225 const auto x = q2 / k2;
226 const auto mexp = exp((x - 1.) /
alpha);
230 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
233 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
236 template <
typename NT1,
typename NT2>
237 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
240 return 0.5 *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
246 constexpr static double c = 2;
247 constexpr static double b0 = 0.;
265 static constexpr int order = OPTS::order;
266 static_assert(
order > 0,
"RationalExpRegulator : Regulator order must be positive!");
269 constexpr static double c = OPTS::c;
270 constexpr static double b0 = OPTS::b0;
272 static __forceinline__ __device__ __host__
auto get_f(
const auto x)
274 constexpr double b0 = OPTS::b0;
275 if constexpr (
order == 1)
return x;
276 if constexpr (
order == 2)
277 return x * (-2. +
c * (2. + x + 2. *
b0 * x)) *
powr<-1>(-2. + x + 2. *
c * (1. +
b0 * x));
278 if constexpr (
order == 3)
279 return x * (-3. * (2. + x + 2. *
b0 * x) +
c * (6. + (3. + 6. *
b0) * x + (2. + 3. *
b0) *
powr<2>(x))) *
280 powr<-1>(3. *
b0 * (-2. + x) * x + 6. *
c * (1. +
b0 * x) + 2. * (-3. +
powr<2>(x)));
281 if constexpr (
order == 4)
282 return 0.08333333333333333 * x *
283 (12. + 6. * x + 4. * (1. + 3. *
b0) *
powr<2>(x) +
286 if constexpr (
order == 5)
287 return 0.016666666666666666 * x *
288 (60. + 30. * x + 20. * (1. + 3. *
b0) *
powr<2>(x) + 15. * (1. + 2. *
b0) *
powr<3>(x) +
291 if constexpr (
order == 6)
292 return 0.016666666666666666 * x *
296 if constexpr (
order == 7)
298 0.1 * (2. + 5. *
b0) *
powr<5>(x) + 0.16666666666666666 * (1. + 2. *
b0) *
powr<6>(x) +
301 if constexpr (
order == 8)
303 0.16666666666666666 * (1. + 3. *
b0) *
powr<6>(x) + 0.047619047619047616 * (3. + 7. *
b0) *
powr<7>(x) +
306 if constexpr (
order == 9)
308 0.16666666666666666 * (1. + 3. *
b0) *
powr<6>(x) + 0.047619047619047616 * (3. + 7. *
b0) *
powr<7>(x) +
312 if constexpr (
order == 10)
314 (0.16666666666666666 +
b0) *
powr<6>(x) + 0.07142857142857142 * (2. + 7. *
b0) *
powr<7>(x) +
315 0.041666666666666664 * (3. + 8. *
b0) *
powr<8>(x) +
316 0.027777777777777776 * (4. + 9. *
b0) *
powr<9>(x) +
319 if constexpr (
order == 11)
321 (0.16666666666666666 +
b0) *
powr<6>(x) + 0.07142857142857142 * (2. + 7. *
b0) *
powr<7>(x) +
322 0.041666666666666664 * (3. + 8. *
b0) *
powr<8>(x) +
327 if constexpr (
order == 12)
329 0.16666666666666666 *
powr<6>(x) + (0.14285714285714285 +
b0) *
powr<7>(x) +
330 0.125 * (1. + 4. *
b0) *
powr<8>(x) + 0.1111111111111111 * (1. + 3. *
b0) *
powr<9>(x) +
334 if constexpr (
order == 13)
336 0.16666666666666666 *
powr<6>(x) + (0.14285714285714285 +
b0) *
powr<7>(x) +
337 0.125 * (1. + 4. *
b0) *
powr<8>(x) + 0.1111111111111111 * (1. + 3. *
b0) *
powr<9>(x) +
339 0.08333333333333333 * (1. + 2. *
b0) *
powr<12>(x) +
342 if constexpr (
order == 14)
345 0.05555555555555555 * (2. + 9. *
b0) *
powr<9>(x) +
346 0.03333333333333333 * (3. + 10. *
b0) *
powr<10>(x) +
347 0.022727272727272728 * (4. + 11. *
b0) *
powr<11>(x) +
348 0.016666666666666666 * (5. + 12. *
b0) *
powr<12>(x) +
349 0.01282051282051282 * (6. + 13. *
b0) *
powr<13>(x) +
352 if constexpr (
order == 15)
355 0.05555555555555555 * (2. + 9. *
b0) *
powr<9>(x) +
356 0.03333333333333333 * (3. + 10. *
b0) *
powr<10>(x) +
357 0.022727272727272728 * (4. + 11. *
b0) *
powr<11>(x) +
358 0.016666666666666666 * (5. + 12. *
b0) *
powr<12>(x) +
359 0.01282051282051282 * (6. + 13. *
b0) *
powr<13>(x) +
360 0.07142857142857142 * (1. + 2. *
b0) *
powr<14>(x) +
364 if constexpr (
order == 16)
368 0.030303030303030304 * (3. + 11. *
b0) *
powr<11>(x) +
369 0.08333333333333333 * (1. + 3. *
b0) *
powr<12>(x) +
370 0.015384615384615385 * (5. + 13. *
b0) *
powr<13>(x) +
371 0.023809523809523808 * (3. + 7. *
b0) *
powr<14>(x) +
372 (0.06666666666666667 + 0.14285714285714285 *
b0) *
powr<15>(x) +
375 static_assert(
order <= 16,
"Rational regulator of order > 16 not implemented");
377 static __forceinline__ __device__ __host__
auto get_df(
const auto x)
379 constexpr double b0 = OPTS::b0;
380 if constexpr (
order == 1)
return 1.;
381 if constexpr (
order == 2)
382 return (4. +
c * (-8. - 4. * (1. + 2. *
b0) * x + (1. + 2. *
b0) *
powr<2>(x)) +
384 powr<-2>(-2. + x + 2. *
c * (1. +
b0 * x));
385 if constexpr (
order == 3)
386 return (1. + x + 2. *
b0 * x +
387 0.3333333333333333 * (-1. + 3. *
c +
b0 * (-3. + 6. *
c) + 3. * (-1. +
c) *
powr<2>(
b0)) *
392 if constexpr (
order == 4)
393 return (1. + x + (1. + 2. *
b0) *
powr<2>(x) +
395 0.041666666666666664 * (-3. + 2. *
b0 * (-7. + 4. *
c) + 24. * (-1. +
c) *
powr<2>(
b0)) *
400 if constexpr (
order == 5)
404 0.016666666666666666 * x *
406 (60. + 30. * x + 20. * (1. + 3. *
b0) *
powr<2>(x) + 15. * (1. + 2. *
b0) *
powr<3>(x) +
409 if constexpr (
order == 6)
413 0.016666666666666666 * x *
418 if constexpr (
order == 7)
424 0.1 * (2. + 5. *
b0) *
powr<5>(x) + 0.16666666666666666 * (1. + 2. *
b0) *
powr<6>(x) +
427 if constexpr (
order == 8)
434 0.047619047619047616 * (3. + 7. *
b0) *
powr<7>(x) +
437 if constexpr (
order == 9)
445 0.047619047619047616 * (3. + 7. *
b0) *
powr<7>(x) + 0.125 * (1. + 2. *
b0) *
powr<8>(x) +
448 if constexpr (
order == 10)
455 (0.16666666666666666 +
b0) *
powr<6>(x) + 0.07142857142857142 * (2. + 7. *
b0) *
powr<7>(x) +
456 0.041666666666666664 * (3. + 8. *
b0) *
powr<8>(x) +
457 0.027777777777777776 * (4. + 9. *
b0) *
powr<9>(x) +
460 if constexpr (
order == 11)
468 (0.16666666666666666 +
b0) *
powr<6>(x) + 0.07142857142857142 * (2. + 7. *
b0) *
powr<7>(x) +
469 0.041666666666666664 * (3. + 8. *
b0) *
powr<8>(x) +
474 if constexpr (
order == 12)
481 0.16666666666666666 *
powr<6>(x) + (0.14285714285714285 +
b0) *
powr<7>(x) +
482 0.125 * (1. + 4. *
b0) *
powr<8>(x) + 0.1111111111111111 * (1. + 3. *
b0) *
powr<9>(x) +
486 if constexpr (
order == 13)
494 0.16666666666666666 *
powr<6>(x) + (0.14285714285714285 +
b0) *
powr<7>(x) +
495 0.125 * (1. + 4. *
b0) *
powr<8>(x) + 0.1111111111111111 * (1. + 3. *
b0) *
powr<9>(x) +
497 0.08333333333333333 * (1. + 2. *
b0) *
powr<12>(x) +
500 if constexpr (
order == 14)
510 0.05555555555555555 * (2. + 9. *
b0) *
powr<9>(x) +
511 0.03333333333333333 * (3. + 10. *
b0) *
powr<10>(x) +
512 0.022727272727272728 * (4. + 11. *
b0) *
powr<11>(x) +
513 0.016666666666666666 * (5. + 12. *
b0) *
powr<12>(x) +
514 0.01282051282051282 * (6. + 13. *
b0) *
powr<13>(x) +
517 if constexpr (
order == 15)
527 0.05555555555555555 * (2. + 9. *
b0) *
powr<9>(x) +
528 0.03333333333333333 * (3. + 10. *
b0) *
powr<10>(x) +
529 0.022727272727272728 * (4. + 11. *
b0) *
powr<11>(x) +
530 0.016666666666666666 * (5. + 12. *
b0) *
powr<12>(x) +
531 0.01282051282051282 * (6. + 13. *
b0) *
powr<13>(x) +
532 0.07142857142857142 * (1. + 2. *
b0) *
powr<14>(x) +
536 if constexpr (
order == 16)
548 0.030303030303030304 * (3. + 11. *
b0) *
powr<11>(x) +
549 0.08333333333333333 * (1. + 3. *
b0) *
powr<12>(x) +
550 0.015384615384615385 * (5. + 13. *
b0) *
powr<13>(x) +
551 0.023809523809523808 * (3. + 7. *
b0) *
powr<14>(x) +
552 (0.06666666666666667 + 0.14285714285714285 *
b0) *
powr<15>(x) +
555 static_assert(
order <= 16,
"Rational regulator of order > 16 not implemented");
558 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
561 const auto x = q2 / k2;
562 const auto f =
get_f(x);
566 template <
typename NT1,
typename NT2>
567 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
570 const auto x = q2 / k2;
571 const auto f =
get_f(x);
572 const auto df =
get_df(x);
573 return 2. * k2 * exp(-f) * (1. + df * x);
576 template <
typename NT1,
typename NT2>
577 static __forceinline__ __device__ __host__
auto dq2RB(
const NT1 k2,
const NT2 q2)
580 const auto x = q2 / k2;
581 const auto f =
get_f(x);
582 const auto df =
get_df(x);
583 return -exp(-f) * df;
586 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
589 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
592 template <
typename NT1,
typename NT2>
593 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
596 return 0.5 *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
599 template <
typename NT1,
typename NT2>
600 static __forceinline__ __device__ __host__
auto dq2RF(
const NT1 k2,
const NT2 q2)
603 const auto q = sqrt(q2);
604 return (-1. + q * (1. +
dq2RB(k2, q2)) / (q +
RF(k2, q2))) / (2. * q);
626 static constexpr int order = OPTS::order;
627 static_assert(
order > 0,
"PolynomialExpRegulator: order must be > 0 !");
629 template <
int c0,
int... c>
630 static __forceinline__ __device__ __host__
auto get_f(std::integer_sequence<int, c0, c...>,
const auto x)
632 using T =
decltype(x);
633 if constexpr (
sizeof...(c) == 0)
636 return powr<c0 + 1>(x) / T(c0 + 1) +
get_f(std::integer_sequence<int, c...>{}, x);
638 template <
int c0,
int... c>
639 static __forceinline__ __device__ __host__
auto get_df(std::integer_sequence<int, c0, c...>,
const auto x)
641 if constexpr (
sizeof...(c) == 0)
644 return powr<c0>(x) +
get_df(std::integer_sequence<int, c...>{}, x);
646 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RB(
const NT1 k2,
const NT2 q2)
649 const auto x = q2 / k2;
650 const auto f =
get_f(std::make_integer_sequence<int, order>{}, x);
654 template <
typename NT1,
typename NT2>
655 static __forceinline__ __device__ __host__
auto RBdot(
const NT1 k2,
const NT2 q2)
658 const auto x = q2 / k2;
659 const auto f =
get_f(std::make_integer_sequence<int, order>{}, x);
660 const auto df =
get_df(std::make_integer_sequence<int, order>{}, x);
661 return 2 * k2 * exp(-f) * (1 + df * x);
664 template <
typename NT1,
typename NT2>
665 static __forceinline__ __device__ __host__
auto dq2RB(
const NT1 k2,
const NT2 q2)
668 const auto x = q2 / k2;
669 const auto f =
get_f(std::make_integer_sequence<int, order>{}, x);
670 const auto df =
get_df(std::make_integer_sequence<int, order>{}, x);
671 return -exp(-f) * df;
674 template <
typename NT1,
typename NT2>
static __forceinline__ __device__ __host__
auto RF(
const NT1 k2,
const NT2 q2)
677 return sqrt(
RB(k2, q2) + q2) - sqrt(q2);
680 template <
typename NT1,
typename NT2>
681 static __forceinline__ __device__ __host__
auto RFdot(
const NT1 k2,
const NT2 q2)
684 using T =
decltype(k2 * q2);
685 return T(0.5) *
RBdot(k2, q2) / sqrt(
RB(k2, q2) + q2);
688 template <
typename NT1,
typename NT2>
689 static __forceinline__ __device__ __host__
auto dq2RF(
const NT1 k2,
const NT2 q2)
692 const auto q = sqrt(q2);
693 return (-1 + q * (1 +
dq2RB(k2, q2)) / (q +
RF(k2, q2))) / (2 * q);
Definition complex_math.hh:14
constexpr __forceinline__ __host__ __device__ NumberType powr(const NumberType x)
A compile-time evaluatable power function for whole number exponents.
Definition math.hh:45
Definition regulators.hh:53
static constexpr double b
Definition regulators.hh:54
Implements one of the standard exponential regulators, i.e.
Definition regulators.hh:72
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:103
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:118
static constexpr double b
Definition regulators.hh:73
static __forceinline__ __device__ __host__ auto dq2RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:110
static __forceinline__ __device__ __host__ auto dq2RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:82
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:93
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:75
Definition regulators.hh:125
static constexpr double b
Definition regulators.hh:126
Implements one of the standard exponential regulators, i.e.
Definition regulators.hh:144
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:171
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:147
static constexpr double b
Definition regulators.hh:145
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:164
static __forceinline__ __device__ __host__ auto dq2RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:155
static __forceinline__ __device__ __host__ auto dq2RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:178
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:186
Implements the Litim regulator, i.e.
Definition regulators.hh:24
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:31
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:43
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:25
static void dq2RB(const NT1, const NT2)=delete
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:36
Definition regulators.hh:608
static constexpr int order
Definition regulators.hh:609
Implements a regulator given by.
Definition regulators.hh:625
static __forceinline__ __device__ __host__ auto get_df(std::integer_sequence< int, c0, c... >, const auto x)
Definition regulators.hh:639
static __forceinline__ __device__ __host__ auto dq2RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:689
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:674
static __forceinline__ __device__ __host__ auto dq2RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:665
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:655
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:646
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:681
static constexpr int order
Definition regulators.hh:626
static __forceinline__ __device__ __host__ auto get_f(std::integer_sequence< int, c0, c... >, const auto x)
Definition regulators.hh:630
Definition regulators.hh:244
static constexpr double b0
Definition regulators.hh:247
static constexpr double c
Definition regulators.hh:246
static constexpr int order
Definition regulators.hh:245
Implements a regulator given by.
Definition regulators.hh:264
static __forceinline__ __device__ __host__ auto dq2RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:600
static __forceinline__ __device__ __host__ auto get_f(const auto x)
Definition regulators.hh:272
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:586
static __forceinline__ __device__ __host__ auto dq2RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:577
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:567
static constexpr double b0
Definition regulators.hh:270
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:558
static constexpr double c
Definition regulators.hh:269
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:593
static constexpr int order
Definition regulators.hh:265
static __forceinline__ __device__ __host__ auto get_df(const auto x)
Definition regulators.hh:377
Definition regulators.hh:193
static constexpr double alpha
Definition regulators.hh:194
Implements one of the standard exponential regulators, i.e.
Definition regulators.hh:212
static __forceinline__ __device__ __host__ auto RF(const NT1 k2, const NT2 q2)
Definition regulators.hh:230
static __forceinline__ __device__ __host__ auto RFdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:237
static __forceinline__ __device__ __host__ auto RBdot(const NT1 k2, const NT2 q2)
Definition regulators.hh:222
static __forceinline__ __device__ __host__ auto RB(const NT1 k2, const NT2 q2)
Definition regulators.hh:215
static constexpr double alpha
Definition regulators.hh:213