conspire/domain/vem/block/solid/
mod.rs

1pub mod elastic;
2pub mod hyperelastic;
3
4use crate::{
5    mechanics::DeformationGradients,
6    vem::{
7        NodalCoordinates,
8        block::{Block, element::solid::SolidVirtualElement},
9    },
10};
11
12pub use crate::fem::solid::{NodalForcesSolid, NodalStiffnessesSolid};
13
14pub trait SolidVirtualElementBlock<C, F>
15where
16    F: SolidVirtualElement,
17{
18    fn deformation_gradients(
19        &self,
20        nodal_coordinates: &NodalCoordinates,
21    ) -> Vec<DeformationGradients>;
22}
23
24impl<C, F> SolidVirtualElementBlock<C, F> for Block<C, F>
25where
26    F: SolidVirtualElement,
27{
28    fn deformation_gradients(
29        &self,
30        nodal_coordinates: &NodalCoordinates,
31    ) -> Vec<DeformationGradients> {
32        self.elements()
33            .iter()
34            .zip(self.elements_nodes())
35            .map(|(element, nodes)| {
36                element.deformation_gradients(Self::element_coordinates(nodal_coordinates, nodes))
37            })
38            .collect()
39    }
40}