sgrust 0.8.6

A sparse grid library written in Rust.
Documentation
use crate::utilities::float::Float;

use crate::{basis::base::Basis, const_generic::iterators::grid_iterator::GridIteratorT};
use super::{basis_evaluation::BasisEvaluation, basis_evalution_with_boundary::eval_boundary};
use crate::errors::SGError;
pub(crate) struct InterpolationOperation<'a, const D: usize, const DIM_OUT: usize, BASIS: Basis>(pub bool, pub BasisEvaluation<'a, D, DIM_OUT, BASIS>);


impl<const D: usize, const DIM_OUT: usize, BASIS: Basis> InterpolationOperation<'_, D, DIM_OUT, BASIS>
{

    #[inline]
    pub(crate) fn interpolate<T: Float  + std::ops::AddAssign, Iterator: GridIteratorT<D>>(&self, x: [f64; D], alpha: &[[T; DIM_OUT]], iterator: &mut Iterator) -> Result<[T; DIM_OUT], SGError>
    {
        match self.0
        {
            true =>
            {
                let mut result = [T::zero(); DIM_OUT];                            
                iterator.reset_to_level_zero();
                let xscaled = self.1.0.bounding_box.to_unit_coordinate(&x);
                eval_boundary(self.1.0, &self.1.1, &xscaled, 0, T::from(1.0), iterator, alpha, &mut result)?;    
                Ok(result)
                },
            false =>  self.1.eval(x, alpha, iterator),
        }       
    }
}