Skip to main content

conspire/domain/vem/from/
mod.rs

1#[cfg(test)]
2mod test;
3
4use crate::{
5    fem::{Model, NodalReferenceCoordinates},
6    geometry::mesh::{Connectivities, Mesh, PolytopalConnectivity},
7    vem::block::{Block, element::VirtualElement},
8};
9
10impl<C, F> TryFrom<(Mesh<3>, C)> for Model<Block<C, F>, 3>
11where
12    F: VirtualElement,
13{
14    type Error = String;
15    fn try_from((mesh, constitutive_model): (Mesh<3>, C)) -> Result<Self, Self::Error> {
16        let (connectivities, coordinates): (Connectivities, NodalReferenceCoordinates<3>) =
17            mesh.into();
18        let mut connectivities = connectivities.into_members();
19        if connectivities.len() != 1 {
20            return Err(format!(
21                "mesh has {} blocks, model type expects 1",
22                connectivities.len()
23            ));
24        }
25        let connectivity = PolytopalConnectivity::<3>::try_from(connectivities.remove(0))?;
26        Ok(Model::from((
27            Block::from((constitutive_model, connectivity, &coordinates)),
28            coordinates,
29        )))
30    }
31}