Skip to main content

aeon_tk/solver/
mod.rs

1//! High-level solvers and integrators for common numerical problems.
2
3mod hyper;
4mod intergrate;
5
6use std::convert::Infallible;
7
8pub use hyper::{HyperRelaxError, HyperRelaxSolver};
9pub use intergrate::{Integrator, Method};
10
11use crate::{image::ImageRef, mesh::Mesh};
12
13/// Trait for implementing solver callbacks (most often used to output visualization data).
14pub trait SolverCallback<const N: usize> {
15    type Error;
16
17    /// Called once for every iteration in a iterative solver.
18    fn callback(
19        &mut self,
20        _mesh: &Mesh<N>,
21        _input: ImageRef,
22        _output: ImageRef,
23        _iteration: usize,
24    ) -> Result<(), Self::Error> {
25        Ok(())
26    }
27}
28
29impl<const N: usize> SolverCallback<N> for () {
30    type Error = Infallible;
31}
32
33impl<const N: usize, F: Fn(&Mesh<N>, ImageRef, ImageRef, usize)> SolverCallback<N> for F {
34    type Error = Infallible;
35    fn callback(
36        &mut self,
37        mesh: &Mesh<N>,
38        input: ImageRef,
39        output: ImageRef,
40        iteration: usize,
41    ) -> Result<(), Infallible> {
42        self(mesh, input, output, iteration);
43        Ok(())
44    }
45}