conspire/domain/vem/block/solid/
mod.rs1pub 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}