castep_param_io/param/electro_min/
mod.rs1use crate::param::KeywordDisplay;
2use castep_param_derive::ParamDisplay;
3
4use derive_builder::Builder;
5use serde::{Deserialize, Serialize};
6
7mod efermi_tol;
8mod elec_convergence_win;
9mod elec_dump_file;
10mod elec_eigenvalue_tol;
11mod elec_energy_tol;
12mod elec_restore_file;
13mod electronic_minimizer;
14mod fix_occupancy;
15mod max_cg_steps;
16mod max_scf_cycles;
17mod max_sd_steps;
18mod metals_method;
19mod num_dump_cycles;
20mod num_occ_cycles;
21mod smearing_scheme;
22mod smearing_width;
23mod spin_fix;
24
25pub use efermi_tol::*;
26pub use elec_convergence_win::ElecConvergenceWin;
27pub use elec_dump_file::ElecDumpFile;
28pub use elec_eigenvalue_tol::*;
29pub use elec_energy_tol::*;
30pub use elec_restore_file::ElecRestoreFile;
31pub use electronic_minimizer::ElectronicMinimizer;
32pub use fix_occupancy::FixOccupancy;
33pub use max_cg_steps::MaxCgSteps;
34pub use max_scf_cycles::MaxScfCycles;
35pub use max_sd_steps::MaxSdSteps;
36pub use metals_method::MetalsMethod;
37pub use num_dump_cycles::NumDumpCycles;
38pub use num_occ_cycles::NumOccCycles;
39pub use smearing_scheme::SmearingScheme;
40pub use smearing_width::SmearingWidth;
41pub use spin_fix::SpinFix;
42
43#[derive(
44 Debug, Clone, ParamDisplay, Builder, Default, PartialEq, PartialOrd, Serialize, Deserialize,
45)]
46#[builder(setter(into, strip_option), default)]
47pub struct ElectroMinimization {
48 pub efermi_tol: Option<EFermiTol>,
49 pub elec_convergence_win: Option<ElecConvergenceWin>,
50 #[param_display(use_ref = true)]
51 pub elec_dump_file: Option<ElecDumpFile>,
52 pub elec_eigenvalue_tol: Option<ElecEigenvalueTol>,
53 pub elec_energy_tol: Option<ElecEnergyTol>,
54 #[param_display(use_ref = true)]
55 pub elec_restore_file: Option<ElecRestoreFile>,
56 pub electronic_minimizer: Option<ElectronicMinimizer>,
57 pub fix_occupancy: Option<FixOccupancy>,
58 pub max_cg_steps: Option<MaxCgSteps>,
59 pub max_scf_cycles: Option<MaxScfCycles>,
60 pub max_sd_steps: Option<MaxSdSteps>,
61 pub metals_method: Option<MetalsMethod>,
62 pub num_dump_cycles: Option<NumDumpCycles>,
63 pub num_occ_cycles: Option<NumOccCycles>,
64 pub smearing_scheme: Option<SmearingScheme>,
65 pub smearing_width: Option<SmearingWidth>,
66 pub spin_fix: Option<SpinFix>,
67}
68
69#[cfg(test)]
70mod test {
71 use crate::param::electro_min::MetalsMethod;
72
73 use super::ElectroMinimizationBuilder;
74
75 #[test]
76 fn electro_min() {
77 let p = ElectroMinimizationBuilder::default()
78 .elec_energy_tol(1e-6)
79 .elec_eigenvalue_tol(1e-6)
80 .metals_method(MetalsMethod::DM)
81 .max_scf_cycles(6000)
82 .build()
83 .unwrap();
84 println!("{p}")
85 }
86}