castep_param_io/param/xc_correlation/
mod.rs1use 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}