#[derive(Clone, Copy, Debug, PartialEq)] pub struct TruncationScheme { pub newton_star: f64, pub cosmological_star: f64, pub graviton_eta: f64, pub yukawa_gravity_shift: f64, pub quartic_gravity_shift: f64, pub portal_gravity_shift: f64, } #[derive(Clone, Copy, Debug, PartialEq)] pub struct CouplingPoint { pub g_newton: f64, pub cosmological: f64, pub top_yukawa: f64, pub bottom_yukawa: f64, pub higgs_quartic: f64, pub gauge_u1: f64, pub gauge_su2: f64, pub gauge_su3: f64, pub portal_coupling: f64, } impl CouplingPoint { pub fn zero() -> Self { Self { g_newton: 0.0, cosmological: 0.0, top_yukawa: 0.0, bottom_yukawa: 0.0, higgs_quartic: 0.0, gauge_u1: 0.0, gauge_su2: 0.0, gauge_su3: 0.0, portal_coupling: 0.0, } } pub fn add(self, rhs: Self) -> Self { Self { g_newton: self.g_newton + rhs.g_newton, cosmological: self.cosmological + rhs.cosmological, top_yukawa: self.top_yukawa + rhs.top_yukawa, bottom_yukawa: self.bottom_yukawa + rhs.bottom_yukawa, higgs_quartic: self.higgs_quartic + rhs.higgs_quartic, gauge_u1: self.gauge_u1 + rhs.gauge_u1, gauge_su2: self.gauge_su2 + rhs.gauge_su2, gauge_su3: self.gauge_su3 + rhs.gauge_su3, portal_coupling: self.portal_coupling + rhs.portal_coupling, } } pub fn scale(self, scalar: f64) -> Self { Self { g_newton: scalar * self.g_newton, cosmological: scalar * self.cosmological, top_yukawa: scalar * self.top_yukawa, bottom_yukawa: scalar * self.bottom_yukawa, higgs_quartic: scalar * self.higgs_quartic, gauge_u1: scalar * self.gauge_u1, gauge_su2: scalar * self.gauge_su2, gauge_su3: scalar * self.gauge_su3, portal_coupling: scalar * self.portal_coupling, } } } pub fn eichhorn_benchmark() -> TruncationScheme { TruncationScheme { newton_star: 0.71, cosmological_star: 0.19, graviton_eta: -2.0, yukawa_gravity_shift: -0.03, quartic_gravity_shift: -0.01, portal_gravity_shift: -0.02, } } pub fn gravitational_fixed_point(truncation: TruncationScheme) -> CouplingPoint { CouplingPoint { g_newton: truncation.newton_star, cosmological: truncation.cosmological_star, ..CouplingPoint::zero() } }