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