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