use crate::errors::QlResult;
use crate::math::array::Array;
use crate::types::{Real, Size, Time};
use super::fdmlinearop::FdmLinearOp;
pub trait FdmLinearOpComposite: FdmLinearOp {
fn size(&self) -> Size;
fn set_time(&mut self, t1: Time, t2: Time) -> QlResult<()>;
fn apply_mixed(&self, r: &Array) -> Array;
fn apply_direction(&self, direction: Size, r: &Array) -> Array;
fn solve_splitting(&self, direction: Size, r: &Array, s: Real) -> QlResult<Array>;
fn preconditioner(&self, r: &Array, s: Real) -> QlResult<Array>;
}