Skip to main content

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 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}