castep_param_io/param/electronic/
mod.rs

1use castep_param_derive::ParamDisplay;
2use derive_builder::Builder;
3use serde::{Deserialize, Serialize};
4
5pub use bands_option::*;
6pub use charge::Charge;
7pub use nelectrons::{NDown, NElectrons, NUp};
8pub use spin::Spin;
9
10use crate::param::KeywordDisplay;
11
12mod bands_option;
13mod charge;
14mod nelectrons;
15mod spin;
16
17#[derive(
18    Debug,
19    Clone,
20    Copy,
21    Serialize,
22    Deserialize,
23    Default,
24    Builder,
25    ParamDisplay,
26    PartialEq,
27    PartialOrd,
28)]
29#[non_exhaustive]
30#[builder(setter(into, strip_option), default)]
31/// `Electronic parameters` section of castep `.param`
32pub struct ElectronicParam {
33    pub charge: Option<Charge>,
34    #[param_display(display=to_string())]
35    pub bands_option: Option<BandsOption>,
36    pub nelectrons: Option<NElectrons>,
37    pub nup: Option<NUp>,
38    pub ndown: Option<NDown>,
39    pub spin: Option<Spin>, // SEDC_APPLY
40                            // SEDC_D_G06
41                            // SEDC_D_JCHS
42                            // SEDC_D_TS
43                            // SEDC_LAMBDA_OBS
44                            // SEDC_N_OBS
45                            // SEDC_S6_G06
46                            // SEDC_S6_JCHS
47                            // SEDC_SR_JCHS
48                            // SEDC_SR_TS
49                            // SEDC_SCHEME
50}
51
52#[cfg(test)]
53mod test {
54    use super::{
55        bands_option::{BandsOptionBuilder, ExtraBands},
56        ElectronicParamBuilder,
57    };
58
59    #[test]
60    fn electronic_param() {
61        let elec_param = ElectronicParamBuilder::default()
62            .spin_polarised(true)
63            .spin(2.0)
64            .bands_option(
65                BandsOptionBuilder::default()
66                    .extra_bands(ExtraBands::PercExtraBands(72.0))
67                    .build()
68                    .unwrap(),
69            )
70            .build()
71            .unwrap();
72        println!("{}", elec_param);
73    }
74}