castep_param_io/param/density_mixing_params/
mod.rs

1use crate::param::KeywordDisplay;
2use castep_param_derive::ParamDisplay;
3use derive_builder::Builder;
4use serde::{Deserialize, Serialize};
5
6mod mix_charge_amp;
7mod mix_charge_gmax;
8mod mix_cut_off_energy;
9mod mix_history_length;
10mod mix_metric_q;
11mod mix_spin_amp;
12mod mix_spin_gmax;
13mod mixing_scheme;
14
15pub use mix_charge_amp::MixChargeAmp;
16pub use mix_charge_gmax::*;
17pub use mix_cut_off_energy::*;
18pub use mix_history_length::MixHistoryLength;
19pub use mix_metric_q::*;
20pub use mix_spin_amp::MixSpinAmp;
21pub use mix_spin_gmax::*;
22pub use mixing_scheme::MixingScheme;
23
24#[derive(
25    Debug,
26    Clone,
27    Copy,
28    Builder,
29    Default,
30    ParamDisplay,
31    Serialize,
32    Deserialize,
33    PartialEq,
34    PartialOrd,
35)]
36#[builder(setter(into, strip_option), default)]
37pub struct DensityMixingParams {
38    pub mixing_scheme: Option<MixingScheme>,
39    pub mix_charge_amp: Option<MixChargeAmp>,
40    pub mix_spin_amp: Option<MixSpinAmp>,
41    pub mix_charge_gmax: Option<MixChargeGmax>,
42    pub mix_spin_gmax: Option<MixSpinGmax>,
43    pub mix_cut_off_energy: Option<MixCutOffEnergy>,
44    pub mix_metric_q: Option<MixMetricQ>,
45    pub mix_history_length: Option<MixHistoryLength>,
46}
47
48#[cfg(test)]
49mod test {
50    use super::{DensityMixingParamsBuilder, MixChargeGmax, MixSpinGmax, MixingScheme};
51
52    #[test]
53    fn dm_param() {
54        let p = DensityMixingParamsBuilder::default()
55            .mix_spin_amp(2.0)
56            .mix_spin_gmax(MixSpinGmax::default())
57            .mix_charge_amp(0.5)
58            .mix_charge_gmax(MixChargeGmax {
59                gmax: 1.5,
60                unit: None,
61            })
62            .mix_history_length(20)
63            .mixing_scheme(MixingScheme::Pulay)
64            .build()
65            .unwrap();
66        println!("{p}");
67    }
68}