Source code for eko.kernels.as4_evolution_integrals

"""Implement the |N3LO| evolution integrals."""

import numba as nb
import numpy as np


[docs] @nb.njit(cache=True) def roots(b_list): """Return the roots of a third grade polynomial. Return the roots of: .. math :: 1 + b_1 a_s + b_2 a_s^2 + b_3 a_s^3 = 0 Parameters ---------- b_list : list :math:`[b_1, b_2, b_3]` Returns ------- list list of complex roots """ b1, b2, b3 = b_list d1 = -(b2**2) + 3 * b1 * b3 d2 = -2 * b2**3 + 9 * b1 * b2 * b3 - 27 * b3**2 d3 = ((d2 + np.sqrt(4 * d1**3 + d2**2)) / 2) ** (1.0 / 3.0) r1 = 1 / (3 * b3) * (-b2 - d1 / d3 + d3) r2 = (1 / (3 * b3)) * ( -b2 + ((1 + 1.0j * np.sqrt(3)) * d1) / (2 * d3) - ((1 - 1.0j * np.sqrt(3)) * d3) / 2 ) r3 = (1 / (3 * b3)) * ( -b2 + ((1 - 1.0j * np.sqrt(3)) * d1) / (2 * d3) - ((1 + 1.0j * np.sqrt(3)) * d3) / 2 ) return [r1, r2, r3]
[docs] @nb.njit(cache=True) def derivative(r, b_list): r"""Return the derivative of a third grade polynomial. .. math :: \frac{d}{d a_s}(1 + b_1 a_s + b_2 a_s^2 + b_3 a_s^3) = b_1 + 2 b_2 r + 3 b_3 r^2 Parameters ---------- a_s : coupling constant b_list : list :math:`[b_1, b_2, b_3]` Returns ------- float : evaluated derivative """ b1, b2, b3 = b_list return b1 + 2 * b2 * r + 3 * b3 * r**2
[docs] @nb.njit(cache=True) def j33_exact(a1, a0, beta0, b_list, roots): r"""|N3LO|-|N3LO| exact evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(3,3)}(a_s) = \frac{1}{\beta_0} \sum_{r=r_1}^{r_3} \frac{\ln(a_s-r) r^2}{b_1 + 2 b_2 r + 3 b_3 r^2} Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` b_list : list :math:`[b_1, b_2, b_3]` roots: :math:`[r_1,r_2,r_3]` list of roots of :math:`1 + b_1 a_s + b_2 a_s^2 + b_3 a_s^3` Returns ------- float evaluated integral """ integral = 0 for r in roots: integral += r**2 / derivative(r, b_list) * np.log((a1 - r) / (a0 - r)) return (1 / beta0) * integral
[docs] @nb.njit(cache=True) def j23_exact(a1, a0, beta0, b_list, roots): r"""|NNLO|-|N3LO| exact evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(2,3)}(a_s) = \frac{1}{\beta_0} \sum_{r=r_1}^{r_3} \frac{\ln(a_s-r) r}{b_1 + 2 b_2 r + 3 b_3 r^2} Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` b_list : list :math:`[b_1, b_2, b_3]` roots: :math:`[r_1,r_2,r_3]` list of roots of :math:`1 + b_1 a_s + b_2 a_s^2 + b_3 a_s^3` Returns ------- float evaluated integral """ integral = 0 for r in roots: integral += r / derivative(r, b_list) * np.log((a1 - r) / (a0 - r)) return (1 / beta0) * integral
[docs] @nb.njit(cache=True) def j13_exact(a1, a0, beta0, b_list, roots): r"""|NLO|-|N3LO| exact evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(1,3)}(a_s) = \frac{1}{\beta_0} \sum_{r=r_1}^{r_3} \frac{\ln(a_s-r)}{b_1 + 2 b_2 r + 3 b_3 r^2} Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` b_list : list :math:`[b_1, b_2, b_3]` roots: :math:`[r_1,r_2,r_3]` list of roots of :math:`1 + b_1 a_s + b_2 a_s^2 + b_3 a_s^3` Returns ------- float evaluated integral """ integral = 0 for r in roots: integral += 1.0 / derivative(r, b_list) * np.log((a1 - r) / (a0 - r)) return (1 / beta0) * integral
[docs] @nb.njit(cache=True) def j03_exact(j12, j13, j23, j33, b_list): r"""|LO|-|N3LO| exact evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(0,3)}(a_s) = \frac{1}{\beta_0} \left( \ln(a) - \sum_{r=r_1}^{r_3} \frac{b_1 \ln(a_s-r) + b_2 \ln(a_s-r) r + b_3 \ln(a_s-r) r^2}{b_1 + 2 b_2 r + 3 b_3 r^2} \right ) Parameters ---------- j12: float |LO|-|LO| evolution integral j13: float |NLO|-|N3LO| evolution integral j23: float |NNLO|-|N3LO| evolution integral j33: float |N3LO|-|N3LO| evolution integral b_list : list :math:`[b_1, b_2, b_3]` Returns ------- float evaluated integral """ b1, b2, b3 = b_list return j12 - b1 * j13 - b2 * j23 - b3 * j33
[docs] @nb.njit(cache=True) def j33_expanded(a1, a0, beta0): r"""|N3LO|-|N3LO| expanded evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(3,3)}_{exp}(a_s) = \frac{1}{3 \beta_0} a_s^3 Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` Returns ------- float evaluated integral """ return 1 / (3 * beta0) * (a1**3 - a0**3)
[docs] @nb.njit(cache=True) def j23_expanded(a1, a0, beta0, b_list): r"""|NNLO|-|N3LO| expanded evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(2,3)}_{exp}(a_s) = \frac{1}{\beta_0} ( \frac{1}{2} a_s^2 - \frac{b_1}{3} as^3) Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` b_list : list :math:`[b_1, b_2, b_3]` Returns ------- float evaluated integral """ b1 = b_list[0] return 1 / beta0 * (1 / 2 * (a1**2 - a0**2) - b1 / 3 * (a1**3 - a0**3))
[docs] @nb.njit(cache=True) def j13_expanded(a1, a0, beta0, b_list): r"""|NLO|-|N3LO| expanded evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(1,3)}_{exp}(a_s) = \frac{1}{\beta_0} ( a_s - \frac{b_1}{2} a_s^2 + \frac{b_1^2-b_2}{3} as^3) Parameters ---------- a1 : float target coupling value a0 : float initial coupling value beta0 : float :math:`\beta_0` b_list : list :math:`[b_1, b_2, b_3]` Returns ------- float evaluated integral """ b1, b2, _ = b_list return (1 / beta0) * ( (a1 - a0) - b1 / 2 * (a1**2 - a0**2) + (b1**2 - b2) / 3 * (a1**3 - a0**3) )
[docs] @nb.njit(cache=True) def j03_expanded(j12, j13, j23, j33, b_list): r"""|LO|-|N3LO| expanded evolution definite integral. Evaluated at :math:`a_s-a_s^0`. .. math:: j^{(0,3)}_{exp}(a_s) = j^{(0,0)} - b_1 j^{(1,3)}_{exp}(a_s) - b_2 j^{(2,3)}_{exp}(a_s) - b_3 j^{(3,3)}_{exp}(a_s) Parameters ---------- j12: float |LO|-|LO| evolution integral j13: float |NLO|-|N3LO| expanded evolution integral j23: float |NNLO|-|N3LO| expanded evolution integral j33: float |N3LO|-|N3LO| expanded evolution integral b_list : list :math:`[b_1, b_2, b_3]` Returns ------- float evaluated integral See Also -------- j03_exact """ return j03_exact(j12, j13, j23, j33, b_list)