castep_param_io/param/units/
energy_unit.rs

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