chemrust-formats 0.2.0

The core modules defining the flow and structs of data in computational chemistry routines.
Documentation
use castep_periodic_table::{data::ELEMENT_TABLE, element::LookupElement};

use crate::Cell;

use super::CellSettingExport;

#[derive(Debug, Clone)]
pub struct SpeciesCharacteristics {
    element_list: Vec<String>,
}

impl CellSettingExport for SpeciesCharacteristics {
    fn write_to_cell(&self) -> String {
        let mass = self.species_mass();
        let pot = self.species_potentials();
        let lcao = self.species_lcao_states();
        let species_output = vec![mass, pot, lcao];
        species_output.concat()
    }
}

impl SpeciesCharacteristics {
    pub fn new(element_list: Vec<String>) -> Self {
        Self { element_list }
    }
    pub fn species_mass(&self) -> String {
        let text = self
            .element_list
            .iter()
            .map(|symbol| {
                let mass = ELEMENT_TABLE.get_by_symbol(&symbol).unwrap().mass;
                format!("{:>8}{:17.10}\n", symbol, mass)
            })
            .collect::<Vec<String>>()
            .concat();
        Cell::write_block(("SPECIES_MASS".into(), text))
    }

    pub fn species_potentials(&self) -> String {
        let text = self
            .element_list
            .iter()
            .map(|symbol| {
                let pot_file = ELEMENT_TABLE.get_by_symbol(&symbol).unwrap().potential();
                format!("{:>8}  {}\n", symbol, pot_file)
            })
            .collect::<Vec<String>>()
            .concat();
        Cell::write_block(("SPECIES_POT".into(), text))
    }

    pub fn species_lcao_states(&self) -> String {
        let text = self
            .element_list
            .iter()
            .map(|symbol| {
                let lcao_state = ELEMENT_TABLE.get_by_symbol(&symbol).unwrap().lcao();
                format!("{:>8}{:9}\n", symbol, lcao_state)
            })
            .collect::<Vec<String>>()
            .concat();
        Cell::write_block(("SPECIES_LCAO_STATES".into(), text))
    }
}