castep_param_io/param/electro_min/
mod.rs

1use 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}