qcd_sme/qcd/
types.rs

1use crate::types::{NCTYPE, NFTYPE};
2use crate::R;
3
4#[derive(Clone, Debug)]
5/// Field configuration for gluons and quarks.
6pub struct FieldConfig {
7    /// Number of colors.
8    pub nc: NCTYPE,
9    /// Gluon mass parameter.
10    pub gluon: R,
11    /// Quark mass configuration: number of quarks (`quarks[i].0`) with a given
12    /// mass parameter (`quarks[i].1`).
13    pub quarks: Vec<(NFTYPE, R)>,
14    // (nf, mq, nf/nc, mq/m)
15    pub(crate) quarks_internal: Vec<QuarkInternal>,
16}
17
18impl FieldConfig {
19    pub fn new(nc: NCTYPE, gluon: R, quarks: Vec<(NFTYPE, R)>) -> Self {
20        let quarks_internal = quarks
21            .iter()
22            .map(|&(nf, mq)| QuarkInternal::new(nc, gluon, nf, mq))
23            .collect();
24        Self {
25            nc,
26            gluon,
27            quarks,
28            quarks_internal,
29        }
30    }
31}
32
33#[derive(Clone, Copy, Debug)]
34pub struct QuarkInternal {
35    pub nf: NFTYPE,
36    pub mq: R,
37    pub nf_div_nc: R,
38    pub mq_div_m_2: R,
39}
40
41impl QuarkInternal {
42    pub(crate) fn new(nc: NCTYPE, m: R, nf: NFTYPE, mq: R) -> Self {
43        let nf_div_nc = (nf as R) / (nc as R);
44        let mq_div_m = mq / m;
45        let mq_div_m_2 = mq_div_m * mq_div_m;
46        Self {
47            nf,
48            mq,
49            nf_div_nc,
50            mq_div_m_2,
51        }
52    }
53}