ak_core/calculator/
structs.rs

1use crate::StructureView;
2
3#[derive(Debug)]
4pub enum CalculatorError {
5    NotImplemented,
6    InvalidStructure,
7    CalculationFailed,
8}
9
10pub struct CalculatorResult {
11    pub energy: Option<f64>,
12    pub forces: Option<Vec<[f64; 3]>>,
13}
14
15pub trait Calculator {
16    fn calculate_energy(&self, view: &StructureView) -> Result<f64, CalculatorError>;
17
18    fn calculate_forces(&self, view: &StructureView) -> Result<Vec<[f64; 3]>, CalculatorError>;
19
20    fn calculate(&self, view: &StructureView) -> Result<CalculatorResult, CalculatorError> {
21        Ok(CalculatorResult {
22            energy: Some(self.calculate_energy(view)?),
23            forces: Some(self.calculate_forces(view)?),
24        })
25    }
26}