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