feos_gc_pcsaft/
record.rs

1use serde::{Deserialize, Serialize};
2
3/// gc-PC-SAFT pure-component parameters.
4#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5pub struct GcPcSaftRecord {
6    /// Segment shape factor
7    pub m: f64,
8    /// Segment diameter in units of Angstrom
9    pub sigma: f64,
10    /// Energetic parameter in units of Kelvin
11    pub epsilon_k: f64,
12    /// Dipole moment in units of Debye
13    #[serde(default)]
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub mu: Option<f64>,
16    /// association volume parameter
17    #[serde(default)]
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub kappa_ab: Option<f64>,
20    /// association energy parameter
21    #[serde(default)]
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub epsilon_k_ab: Option<f64>,
24    /// \# of association sites of type A
25    #[serde(default)]
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub na: Option<f64>,
28    /// \# of association sites of type B
29    #[serde(default)]
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub nb: Option<f64>,
32    /// interaction range parameter for the dispersion functional
33    #[serde(default)]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub psi_dft: Option<f64>,
36}
37
38impl GcPcSaftRecord {
39    pub fn new(
40        m: f64,
41        sigma: f64,
42        epsilon_k: f64,
43        mu: Option<f64>,
44        kappa_ab: Option<f64>,
45        epsilon_k_ab: Option<f64>,
46        na: Option<f64>,
47        nb: Option<f64>,
48        psi_dft: Option<f64>,
49    ) -> Self {
50        Self {
51            m,
52            sigma,
53            epsilon_k,
54            mu,
55            kappa_ab,
56            epsilon_k_ab,
57            na,
58            nb,
59            psi_dft,
60        }
61    }
62}
63
64impl std::fmt::Display for GcPcSaftRecord {
65    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
66        write!(f, "GcPcSaftRecord(m={}", self.m)?;
67        write!(f, ", sigma={}", self.sigma)?;
68        write!(f, ", epsilon_k={}", self.epsilon_k)?;
69        if let Some(n) = &self.mu {
70            write!(f, ", mu={}", n)?;
71        }
72        if let Some(n) = &self.kappa_ab {
73            write!(f, ", kappa_ab={}", n)?;
74        }
75        if let Some(n) = &self.epsilon_k_ab {
76            write!(f, ", epsilon_k_ab={}", n)?;
77        }
78        if let Some(n) = &self.na {
79            write!(f, ", na={}", n)?;
80        }
81        if let Some(n) = &self.nb {
82            write!(f, ", nb={}", n)?;
83        }
84        write!(f, ")")
85    }
86}