use crate::DType;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use crate::pde::error::PdeResult;
use crate::pde::types::{BoundarySpec, FdmOptions, FemResult};
pub trait FiniteElementAlgorithms<R: Runtime<DType = DType>> {
fn fem_1d(
&self,
f_rhs: &Tensor<R>,
x_nodes: &Tensor<R>,
boundary: &[BoundarySpec<R>],
options: &FdmOptions,
) -> PdeResult<FemResult<R>>;
fn fem_triangular(
&self,
f_rhs: &Tensor<R>,
nodes: &Tensor<R>,
elements: &Tensor<R>,
boundary_nodes: &Tensor<R>,
boundary_values: &Tensor<R>,
options: &FdmOptions,
) -> PdeResult<FemResult<R>>;
}