ak_core/calculator/
structs.rs1use 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}