castep_param_io/param/units/
frequency_unit.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5use crate::param::KeywordDisplay;
6
7#[derive(
8    Debug, Clone, Copy, Hash, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Default,
9)]
10/// This keyword specifies the units in which frequency will be reported.
11/// # Example
12/// `FREQUENCY_UNIT : hz`
13pub enum FrequencyUnit {
14    Hartree,
15    Millihartree,
16    ElectronVolt,
17    MillielectronVolt,
18    Rydberg,
19    Millirydberg,
20    KilojoulesPerMole,
21    KilocaloriesPerMole,
22    Joules,
23    Erg,
24    Hertz,
25    Megahertz,
26    Gigahertz,
27    Terahertz,
28    #[default]
29    Wavenumber,
30    Kelvin,
31}
32
33impl Display for FrequencyUnit {
34    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
35        match self {
36            FrequencyUnit::Hartree => f.write_str("ha"),
37            FrequencyUnit::Millihartree => f.write_str("mha"),
38            FrequencyUnit::ElectronVolt => f.write_str("ev"),
39            FrequencyUnit::MillielectronVolt => f.write_str("mev"),
40            FrequencyUnit::Rydberg => f.write_str("ry"),
41            FrequencyUnit::Millirydberg => f.write_str("mry"),
42            FrequencyUnit::KilojoulesPerMole => f.write_str("kj/mol"),
43            FrequencyUnit::KilocaloriesPerMole => f.write_str("kcal/mol"),
44            FrequencyUnit::Joules => f.write_str("j"),
45            FrequencyUnit::Erg => f.write_str("erg"),
46            FrequencyUnit::Hertz => f.write_str("hz"),
47            FrequencyUnit::Megahertz => f.write_str("mhz"),
48            FrequencyUnit::Gigahertz => f.write_str("ghz"),
49            FrequencyUnit::Terahertz => f.write_str("thz"),
50            FrequencyUnit::Wavenumber => f.write_str("cm-1"),
51            FrequencyUnit::Kelvin => f.write_str("k"),
52        }
53    }
54}
55
56impl KeywordDisplay for FrequencyUnit {
57    fn field(&self) -> String {
58        "FREQUENCY_UNIT".to_string()
59    }
60}