castep_param_io/param/xc_correlation/
mod.rs

1use castep_param_derive::ParamDisplay;
2use derive_builder::Builder;
3use serde::{Deserialize, Serialize};
4
5use super::KeywordDisplay;
6
7mod nlxc_options;
8mod spin_polarised;
9mod xc_definition;
10mod xc_functional;
11
12pub use nlxc_options::*;
13pub use spin_polarised::SpinPolarised;
14pub use xc_definition::*;
15pub use xc_functional::XCFunctional;
16
17#[derive(
18    Debug, Clone, Serialize, Deserialize, Default, Builder, ParamDisplay, PartialEq, PartialOrd,
19)]
20#[builder(setter(into, strip_option), default)]
21pub struct XcParam {
22    pub xc_functional: Option<XCFunctional>,
23    #[param_display(use_ref=true, display=to_string())]
24    pub xc_definition: Option<XCDefinition>,
25    pub spin_polarised: Option<SpinPolarised>,
26    #[param_display(display=to_string())]
27    pub nlxc_options: Option<NLXCOptions>,
28}
29
30#[cfg(test)]
31mod test {
32    use super::{
33        nlxc_options::NLXCOptionsBuilder, xc_functional::XCFunctional, NLXC_PPD_Int,
34        XCDefinitionBuilder, XcParamBuilder,
35    };
36
37    #[test]
38    fn xc_param() {
39        let xc_param = XcParamBuilder::default()
40            .xc_functional(XCFunctional::HSE03)
41            .spin_polarised(true)
42            .nlxc_options(
43                NLXCOptionsBuilder::default()
44                    .impose_trs(false)
45                    .build()
46                    .unwrap(),
47            )
48            .xc_definition(
49                XCDefinitionBuilder::default()
50                    .nlxc_ppd_int(NLXC_PPD_Int::On)
51                    .build()
52                    .unwrap(),
53            )
54            .build()
55            .unwrap();
56        println!("{}", xc_param);
57    }
58}