conspire 0.7.1

The Rust interface to conspire.
Documentation
#[cfg(test)]
#[cfg(feature = "netcdf")]
mod test;

mod edge;
mod face;
mod vertex;

use crate::{
    geometry::{
        Coordinate,
        mesh::{Connectivity, Mesh},
        ntree::{
            Octree,
            dual::{
                Dualization, Initialize, NodeMap,
                octree::{
                    edge::edge_transitions, face::face_transition, vertex::vertex_transitions,
                },
            },
            node::split::Split,
        },
    },
    math::Scalar,
};
use std::ops::Add;

const D: usize = 3;
const L: usize = 4;
const M: usize = 6;
const N: usize = 8;

const fn facet_direction(facet: usize) -> Coordinate<D> {
    match facet {
        0 => Coordinate::const_from([-1.0, 0.0, 0.0]),
        1 => Coordinate::const_from([1.0, 0.0, 0.0]),
        2 => Coordinate::const_from([0.0, -1.0, 0.0]),
        3 => Coordinate::const_from([0.0, 1.0, 0.0]),
        4 => Coordinate::const_from([0.0, 0.0, -1.0]),
        5 => Coordinate::const_from([0.0, 0.0, 1.0]),
        _ => panic!(),
    }
}

impl<T, U> Dualization<D> for Octree<T, U>
where
    T: Add<Output = T> + Copy + PartialOrd + Split + Into<Scalar> + Into<usize>,
    U: Copy + Into<usize>,
{
    fn dualize(&mut self) -> Mesh<D> {
        let (center_nodes, mut coordinates, mut node_index, mut connectivity) = self.initialize();
        let mut nodes_map = NodeMap::new();
        face_transition(
            self,
            &center_nodes,
            &mut coordinates,
            &mut connectivity,
            &mut node_index,
            &mut nodes_map,
        );
        edge_transitions(
            self,
            &center_nodes,
            &mut coordinates,
            &mut connectivity,
            &mut node_index,
            &mut nodes_map,
            self.balanced,
        );
        vertex_transitions(self, &center_nodes, &mut connectivity, &nodes_map);
        self.rescale_coordinates(&mut coordinates);
        (
            vec![Connectivity::Hexahedral(connectivity.into())],
            coordinates,
        )
            .into()
    }
}