castep_param_io/param/general/castep_task.rs
1
2use castep_param_derive::KeywordDisplay;
3use serde::{Deserialize, Serialize};
4
5
6#[derive(
7 Debug,
8 Clone,
9 Copy,
10 Default,
11 PartialEq,
12 Eq,
13 PartialOrd,
14 Ord,
15 Hash,
16 Serialize,
17 Deserialize,
18 KeywordDisplay,
19)]
20#[keyword_display(field = "TASK")]
21#[non_exhaustive]
22pub enum CastepTask {
23 BandStructure, // calculates band structure properties.
24 GeometryOptimization, // searches for a minimum energy structure.
25 #[default]
26 SinglePoint, // performs a single-point energy calculation.
27 // TODO: Future
28 // MolecularDynamics, // performs a molecular dynamics calculation.
29 // Optics, // calculates optical properties.
30 // Phonon, // performs a linear response calculation to determine phonon frequencies and eigenvectors.
31 // Efield, // performs an electric field linear response calculation to determine dielectric permittivity and polarizability.
32 // PhononEfield, // performs a linear response calculation to determine phonon frequencies and eigenvectors, and an electric field linear response calculation to determine dielectric permittivity and polarizability.
33 // TransitionStateSearch, // performs a transition-state search.
34 // MagRes, // performs an NMR calculation.
35 // Elnes, // performs core level spectroscopy calculation.
36 // ElectronicSpectroscopy, // performs electronic spectroscopy calculation.
37 // Autosolvation, // performs a free energy of solvation calculation.
38}
39
40#[cfg(test)]
41mod test {
42 use crate::param::KeywordDisplay;
43
44 use super::CastepTask;
45
46 #[test]
47 fn castep_task() {
48 let task = CastepTask::default();
49 assert_eq!("TASK : SinglePoint", task.output());
50 let bandstr = CastepTask::BandStructure;
51 assert_eq!("TASK : BandStructure", bandstr.output());
52 let geom_opt = CastepTask::GeometryOptimization;
53 assert_eq!("TASK : GeometryOptimization", geom_opt.output());
54 }
55}