castep_param_io/param/general/
mod.rs

1use super::KeywordDisplay;
2use castep_param_derive::ParamDisplay;
3use serde::{Deserialize, Serialize};
4
5mod backup_setting;
6mod calculate_props;
7mod castep_task;
8mod charge_unit;
9mod checkpoint;
10mod comment;
11mod continuation;
12mod data_distribution;
13mod iprint;
14mod opt_strategy;
15mod page_wvfns;
16mod print_clock;
17mod print_memory_usage;
18mod rand_seed;
19mod run_time;
20mod stop;
21mod write_checkpoint;
22mod write_props;
23
24pub use backup_setting::BackUpSetting;
25pub use calculate_props::*;
26pub use castep_task::CastepTask;
27pub use charge_unit::ChargeUnit;
28pub use checkpoint::Checkpoint;
29pub use comment::Comment;
30#[allow(unused_imports)]
31pub use continuation::{Continuation, ContinueReuse, Reuse};
32pub use data_distribution::DataDistribution;
33pub use derive_builder::Builder;
34pub use iprint::IPrint;
35pub use opt_strategy::OptStrategy;
36pub use page_wvfns::PageWvfns;
37pub use print_clock::PrintClock;
38pub use print_memory_usage::PrintMemoryUsage;
39pub use rand_seed::RandSeed;
40pub use run_time::RunTime;
41pub use stop::Stop;
42pub use write_checkpoint::*;
43pub use write_props::*;
44
45#[derive(
46    Debug,
47    Clone,
48    PartialEq,
49    Eq,
50    PartialOrd,
51    Ord,
52    Default,
53    Hash,
54    Serialize,
55    Deserialize,
56    Builder,
57    ParamDisplay,
58)]
59#[builder(setter(into, strip_option), default)]
60/// Keywords that belong to general category.
61pub struct General {
62    pub task: Option<CastepTask>, // Default: CastepTask::SinglePoint
63    #[param_display(use_ref = true)]
64    pub comment: Option<Comment>, // Blank
65    #[param_display(use_ref = true)]
66    pub continuation_reuse: Option<ContinueReuse>, // Null
67    pub backup: Option<BackUpSetting>,
68    pub charge_unit: Option<ChargeUnit>, // E
69    #[param_display(use_ref = true)]
70    pub checkpoint: Option<Checkpoint>, // seedname.check
71    pub data_distribution: Option<DataDistribution>, // Default
72    pub iprint: Option<IPrint>,          // 1
73    pub opt_strategy: Option<OptStrategy>, // Default
74    pub page_wvfns: Option<PageWvfns>,   // 0
75    pub print_clock: Option<PrintClock>, // true
76    pub print_memory_usage: Option<PrintMemoryUsage>, // true
77    pub rand_seed: Option<RandSeed>,     // 0
78    pub run_time: Option<RunTime>,       // 0
79    pub stop: Option<Stop>,              // Example: STOP
80    pub write_checkpoint: Option<WriteCheckpoint>,
81    #[param_display(display=to_string())]
82    pub calculate_props: Option<CalculateProperties>, // Default to all false
83    pub write_props: Option<WriteProperties>, // Default to all false
84}
85
86#[cfg(test)]
87mod test {
88
89    use crate::param::{
90        general::{
91            calculate_props::CalculatePropertiesBuilder, write_props::WritePropertiesBuilder,
92            CastepTask, GeneralBuilder, OptStrategy,
93        },
94        Continuation,
95    };
96
97    use super::General;
98
99    #[test]
100    fn general_keywords() {
101        let g = General::default();
102        let gb = GeneralBuilder::default()
103            .opt_strategy(OptStrategy::default())
104            .task(CastepTask::GeometryOptimization)
105            .continuation_reuse(Continuation::Default)
106            .write_props(
107                WritePropertiesBuilder::default()
108                    .formatted_elf(true)
109                    .formatted_density(true)
110                    .build()
111                    .unwrap(),
112            )
113            .calculate_props(
114                CalculatePropertiesBuilder::default()
115                    .stress(false)
116                    .densdiff(false)
117                    .elf(false)
118                    .hirshfeld(false)
119                    .build()
120                    .unwrap(),
121            )
122            .build()
123            .unwrap();
124        assert!(g.to_string().is_empty());
125        println!("{gb}");
126    }
127}