conspire/domain/vem/from/
mod.rs1#[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}