1#[cfg(feature = "mpi")]
3use mpi::traits::Equivalence;
4use rlst::{
5 RlstScalar,
6 dense::linalg::lapack::interface::{getrf::Getrf, getri::Getri},
7};
8
9pub trait Scalar: RlstScalar + Getrf + Getri {}
11
12impl<T: RlstScalar + Getrf + Getri> Scalar for T {}
13
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[derive(Debug, Clone)]
19pub struct CellLocalIndexPair<IndexType: std::fmt::Debug + Eq + Copy> {
20 pub cell: IndexType,
22 pub local_index: usize,
24}
25
26impl<IndexType: std::fmt::Debug + Eq + Copy> CellLocalIndexPair<IndexType> {
27 pub fn new(cell: IndexType, local_index: usize) -> Self {
29 Self { cell, local_index }
30 }
31}
32
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
35#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
36#[repr(u8)]
37pub enum Ownership {
38 Undefined,
40 Owned,
42 Ghost(usize, usize),
45}
46
47#[cfg(feature = "mpi")]
48unsafe impl Equivalence for Ownership {
49 type Out = <u8 as Equivalence>::Out;
50 fn equivalent_datatype() -> <u8 as Equivalence>::Out {
51 <u8 as Equivalence>::equivalent_datatype()
52 }
53}
54
55#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
57#[derive(Debug, PartialEq, Eq, Clone, Hash)]
58#[repr(u8)]
59pub enum GraphPartitioner {
60 None,
62 Manual(Vec<usize>),
64 #[cfg(feature = "coupe")]
65 Coupe,
67 #[cfg(feature = "scotch")]
68 Scotch,
70}