conspire/domain/fem/block/solid/
mod.rs1pub mod elastic;
2pub mod elastic_hyperviscous;
3pub mod elastic_viscoplastic;
4pub mod hyperelastic;
5pub mod hyperelastic_viscoplastic;
6pub mod hyperviscoelastic;
7pub mod viscoelastic;
8
9use crate::{
10 fem::{
11 NodalCoordinates,
12 block::{Block, element::solid::SolidFiniteElement},
13 },
14 mechanics::DeformationGradientList,
15};
16
17pub trait SolidElements<C, F, const G: usize, const M: usize, const N: usize, const P: usize>
18where
19 F: SolidFiniteElement<G, M, N, P>,
20{
21 fn deformation_gradients(
22 &self,
23 nodal_coordinates: &NodalCoordinates<3>,
24 ) -> Vec<DeformationGradientList<G>>;
25}
26
27impl<C, F, const G: usize, const M: usize, const N: usize, const P: usize>
28 SolidElements<C, F, G, M, N, P> for Block<C, F, G, M, N, P>
29where
30 F: SolidFiniteElement<G, M, N, P>,
31{
32 fn deformation_gradients(
33 &self,
34 nodal_coordinates: &NodalCoordinates<3>,
35 ) -> Vec<DeformationGradientList<G>> {
36 self.elements()
37 .iter()
38 .zip(self.connectivity())
39 .map(|(element, nodes)| {
40 element.deformation_gradients(&Self::element_coordinates(nodal_coordinates, nodes))
41 })
42 .collect()
43 }
44}