diffsol/context/
mod.rs

1use crate::{DefaultDenseMatrix, Matrix, Vector};
2
3#[cfg(feature = "cuda")]
4pub mod cuda;
5
6#[cfg(feature = "nalgebra")]
7pub mod nalgebra;
8
9#[cfg(feature = "faer")]
10pub mod faer;
11
12/// defines the current execution and allocation context of an operator / vector / matrix
13/// for example:
14/// - threading model (e.g. single-threaded, multi-threaded, GPU)
15/// - custom allocators, host/device memory
16/// - etc.
17///
18/// It will generally be the case that all the operators / vectors / matrices for the current ode problem
19/// share the same context
20pub trait Context: Clone + Default {
21    fn vector_from_element<V: Vector<C = Self>>(&self, len: usize, value: V::T) -> V {
22        V::from_element(len, value, self.clone())
23    }
24    fn vector_from_vec<V: Vector<C = Self>>(&self, vec: Vec<V::T>) -> V {
25        V::from_vec(vec, self.clone())
26    }
27    fn vector_zeros<V: Vector<C = Self>>(&self, len: usize) -> V {
28        V::zeros(len, self.clone())
29    }
30    fn dense_mat_zeros<V: Vector<C = Self> + DefaultDenseMatrix>(
31        &self,
32        rows: usize,
33        cols: usize,
34    ) -> <V as DefaultDenseMatrix>::M {
35        <<V as DefaultDenseMatrix>::M as Matrix>::zeros(rows, cols, self.clone())
36    }
37}
38
39impl<T: Clone + Default> Context for T {}