#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub struct XcInput<'a> {
pub rho: &'a [f64],
pub sigma: Option<&'a [f64]>,
pub lapl: Option<&'a [f64]>,
pub tau: Option<&'a [f64]>,
}
impl<'a> XcInput<'a> {
pub fn lda(rho: &'a [f64]) -> Self {
Self {
rho,
sigma: None,
lapl: None,
tau: None,
}
}
pub fn gga(rho: &'a [f64], sigma: &'a [f64]) -> Self {
Self {
rho,
sigma: Some(sigma),
lapl: None,
tau: None,
}
}
pub fn with_lapl(mut self, lapl: &'a [f64]) -> Self {
self.lapl = Some(lapl);
self
}
pub fn with_tau(mut self, tau: &'a [f64]) -> Self {
self.tau = Some(tau);
self
}
}
#[derive(Debug, Clone, Default, PartialEq)]
#[non_exhaustive]
pub struct XcResult {
pub exc: Vec<f64>,
pub vrho: Vec<f64>,
pub vsigma: Vec<f64>,
pub vtau: Vec<f64>,
pub vlapl: Vec<f64>,
pub v2rho2: Vec<f64>,
pub v2rhosigma: Vec<f64>,
pub v2sigma2: Vec<f64>,
pub v2rhotau: Vec<f64>,
pub v2sigmatau: Vec<f64>,
pub v2tau2: Vec<f64>,
}