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 solid::{NodalForcesSolid, NodalStiffnessesSolid},
14 },
15 mechanics::DeformationGradientList,
16};
17
18pub trait SolidFiniteElementBlock<
19 C,
20 F,
21 const G: usize,
22 const M: usize,
23 const N: usize,
24 const P: usize,
25> where
26 F: SolidFiniteElement<G, M, N, P>,
27{
28 fn deformation_gradients(
29 &self,
30 nodal_coordinates: &NodalCoordinates,
31 ) -> Vec<DeformationGradientList<G>>;
32}
33
34impl<C, F, const G: usize, const M: usize, const N: usize, const P: usize>
35 SolidFiniteElementBlock<C, F, G, M, N, P> for Block<C, F, G, M, N, P>
36where
37 F: SolidFiniteElement<G, M, N, P>,
38{
39 fn deformation_gradients(
40 &self,
41 nodal_coordinates: &NodalCoordinates,
42 ) -> Vec<DeformationGradientList<G>> {
43 self.elements()
44 .iter()
45 .zip(self.connectivity())
46 .map(|(element, nodes)| {
47 element.deformation_gradients(&Self::element_coordinates(nodal_coordinates, nodes))
48 })
49 .collect()
50 }
51}