castep_param_io/param/geom_opt/
mod.rs

1use crate::param::KeywordDisplay;
2use castep_param_derive::ParamDisplay;
3use derive_builder::Builder;
4use serde::{Deserialize, Serialize};
5
6mod geom_convergence_win;
7mod geom_disp_tol;
8mod geom_energy_tol;
9mod geom_force_tol;
10mod geom_frequency_est;
11mod geom_max_iter;
12mod geom_method;
13mod geom_modulus_est;
14mod geom_preconditioner;
15mod geom_spin_fix;
16mod geom_stress_tol;
17
18pub use geom_convergence_win::GeomConvergenceWin;
19pub use geom_disp_tol::*;
20pub use geom_energy_tol::*;
21pub use geom_force_tol::*;
22pub use geom_frequency_est::*;
23pub use geom_max_iter::GeomMaxIter;
24pub use geom_method::GeomMethod;
25pub use geom_modulus_est::*;
26pub use geom_preconditioner::GeomPreconditioner;
27pub use geom_spin_fix::GeomSpinFix;
28pub use geom_stress_tol::*;
29
30#[derive(
31    Debug,
32    Clone,
33    Copy,
34    PartialEq,
35    PartialOrd,
36    Serialize,
37    Deserialize,
38    Builder,
39    ParamDisplay,
40    Default,
41)]
42#[builder(setter(into, strip_option), default)]
43pub struct GeomOpt {
44    pub geom_convergence_win: Option<GeomConvergenceWin>,
45    pub geom_disp_tol: Option<GeomDispTol>,
46    pub geom_energy_tol: Option<GeomEnergyTol>,
47    pub geom_force_tol: Option<GeomForceTol>,
48    pub geom_frequency_est: Option<GeomFrequencyEst>,
49    pub geom_max_iter: Option<GeomMaxIter>,
50    pub geom_method: Option<GeomMethod>,
51    pub geom_modulus_est: Option<GeomModulusEst>,
52    pub geom_preconditioner: Option<GeomPreconditioner>,
53    pub geom_spin_fix: Option<GeomSpinFix>,
54    pub geom_stress_tol: Option<GeomStressTol>,
55}
56
57#[cfg(test)]
58mod test {
59    use super::{GeomMethod, GeomOptBuilder};
60
61    #[test]
62    fn geom_opt_test() {
63        let p = GeomOptBuilder::default()
64            .geom_energy_tol(5e-5)
65            .geom_force_tol(0.1)
66            .geom_stress_tol(0.2)
67            .geom_disp_tol(0.005)
68            .geom_max_iter(6000)
69            .geom_method(GeomMethod::BFGS)
70            .build()
71            .unwrap();
72        println!("{p}");
73    }
74}