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 type NodalForcesSolid = crate::fem::solid::NodalForcesSolid<3>;
13pub type NodalStiffnessesSolid = crate::fem::solid::NodalStiffnessesSolid<3>;
14pub type NodalStiffnessesSolidSymmetric = crate::fem::solid::NodalStiffnessesSolidSymmetric<3>;
15
16pub trait SolidVirtualElements<C, F>
17where
18 F: SolidVirtualElement,
19{
20 fn deformation_gradients(
21 &self,
22 nodal_coordinates: &NodalCoordinates,
23 ) -> Vec<DeformationGradients>;
24}
25
26impl<C, F> SolidVirtualElements<C, F> for Block<C, F>
27where
28 F: SolidVirtualElement,
29{
30 fn deformation_gradients(
31 &self,
32 nodal_coordinates: &NodalCoordinates,
33 ) -> Vec<DeformationGradients> {
34 self.elements()
35 .iter()
36 .zip(self.elements_nodes())
37 .map(|(element, nodes)| {
38 element.deformation_gradients(Self::element_coordinates(nodal_coordinates, nodes))
39 })
40 .collect()
41 }
42}