use crate::coupling_space::{eichhorn_benchmark, gravitational_fixed_point, CouplingPoint, TruncationScheme}; #[derive(Clone, Copy, Debug, PartialEq)] pub struct CriticalExponentProfile { 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, } #[derive(Clone, Copy, Debug, PartialEq)] pub struct BetaSystem { pub truncation: TruncationScheme, pub critical: CriticalExponentProfile, } pub fn eichhorn_critical_profile() -> CriticalExponentProfile { CriticalExponentProfile { g_newton: 2.0, cosmological: 1.0, top_yukawa: -1.0, bottom_yukawa: -1.0, higgs_quartic: -1.0, gauge_u1: -1.0, gauge_su2: -1.0, gauge_su3: -1.0, portal_coupling: -1.0, } } pub fn eichhorn_beta_system() -> BetaSystem { BetaSystem { truncation: eichhorn_benchmark(), critical: eichhorn_critical_profile(), } } pub fn linearized_beta(system: BetaSystem, point: CouplingPoint) -> CouplingPoint { let fp = gravitational_fixed_point(system.truncation); CouplingPoint { g_newton: system.critical.g_newton * (point.g_newton - fp.g_newton), cosmological: system.critical.cosmological * (point.cosmological - fp.cosmological), top_yukawa: (system.critical.top_yukawa + system.truncation.yukawa_gravity_shift) * (point.top_yukawa - fp.top_yukawa), bottom_yukawa: (system.critical.bottom_yukawa + system.truncation.yukawa_gravity_shift) * (point.bottom_yukawa - fp.bottom_yukawa), higgs_quartic: (system.critical.higgs_quartic + system.truncation.quartic_gravity_shift) * (point.higgs_quartic - fp.higgs_quartic), gauge_u1: system.critical.gauge_u1 * (point.gauge_u1 - fp.gauge_u1), gauge_su2: system.critical.gauge_su2 * (point.gauge_su2 - fp.gauge_su2), gauge_su3: system.critical.gauge_su3 * (point.gauge_su3 - fp.gauge_su3), portal_coupling: (system.critical.portal_coupling + system.truncation.portal_gravity_shift) * (point.portal_coupling - fp.portal_coupling), } }