#[allow(unused_imports)]
use crate::algebra::blas::{dot_conj, nrm2};
#[allow(unused_imports)]
use crate::algebra::prelude::*;
use crate::context::ksp_context::ReorthPolicy;
#[cfg(feature = "backend-faer")]
pub mod arnoldi;
pub mod bicgstab;
pub mod block_vec;
pub mod gmres;
#[cfg(feature = "backend-faer")]
pub mod kernels;
#[cfg(feature = "backend-faer")]
pub use arnoldi::{ArnoldiOutput, block_arnoldi_step};
#[derive(Clone, Debug, PartialEq)]
pub struct BlockKrylovOptions {
pub block_size: usize,
pub restart_blocks: usize,
pub reorth: ReorthPolicy,
pub max_cond: f64,
pub rtol: R,
pub atol: R,
pub dtol: R,
pub max_iters: usize,
pub variant: BlockVariant,
}
impl Default for BlockKrylovOptions {
fn default() -> Self {
Self {
block_size: 1,
restart_blocks: 10,
reorth: ReorthPolicy::IfNeeded,
max_cond: 1.0e8,
rtol: 1.0e-8,
atol: 1.0e-12,
dtol: 1.0e3,
max_iters: 200,
variant: BlockVariant::Gmres,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BlockVariant {
Gmres,
FgmresRight,
Bicgstab,
}
pub use block_vec::BlockVec;