conspire 0.7.6

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

use crate::{
    fem::{Model, nodal_coordinates},
    geometry::{
        Coordinates,
        mesh::{Connectivities, Mesh, PolytopalConnectivity},
    },
    vem::block::{Block, element::VirtualElement},
};

impl<C, F> TryFrom<(Mesh<3>, C)> for Model<Block<C, F>, 3>
where
    F: VirtualElement,
{
    type Error = String;
    fn try_from((mesh, constitutive_model): (Mesh<3>, C)) -> Result<Self, Self::Error> {
        let (connectivities, coordinates): (Connectivities, Coordinates<3>) = mesh.into();
        let coordinates = nodal_coordinates(coordinates);
        let mut connectivities = connectivities.into_members();
        if connectivities.len() != 1 {
            return Err(format!(
                "mesh has {} blocks, model type expects 1",
                connectivities.len()
            ));
        }
        let connectivity = PolytopalConnectivity::<3>::try_from(connectivities.remove(0))?;
        Ok(Model::from((
            Block::from((constitutive_model, connectivity, &coordinates)),
            coordinates,
        )))
    }
}