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 constitutive::solid::Solid,
11 fem::{
12 NodalCoordinates, NodalVelocities,
13 block::{Block, element::solid::SolidFiniteElement},
14 },
15 mechanics::{DeformationGradientList, DeformationGradientRateList},
16};
17
18pub use crate::domain::solid::SolidElements;
19
20impl<C, F, const G: usize, const M: usize, const N: usize, const P: usize> SolidElements
21 for Block<C, F, G, M, N, P>
22where
23 C: Solid,
24 F: SolidFiniteElement<G, M, N, P>,
25{
26 type DeformationGradients = DeformationGradientList<G>;
27 type DeformationGradientRates = DeformationGradientRateList<G>;
28 fn deformation_gradients(
29 &self,
30 nodal_coordinates: &NodalCoordinates<3>,
31 ) -> Vec<Self::DeformationGradients> {
32 self.elements()
33 .iter()
34 .zip(self.connectivity())
35 .map(|(element, nodes)| {
36 element.deformation_gradients(&Self::element_coordinates(nodal_coordinates, nodes))
37 })
38 .collect()
39 }
40 fn deformation_gradient_rates(
41 &self,
42 nodal_coordinates: &NodalCoordinates<3>,
43 nodal_velocities: &NodalVelocities<3>,
44 ) -> Vec<Self::DeformationGradientRates> {
45 self.elements()
46 .iter()
47 .zip(self.connectivity())
48 .map(|(element, nodes)| {
49 element.deformation_gradient_rates(
50 &Self::element_coordinates(nodal_coordinates, nodes),
51 &Self::element_coordinates(nodal_velocities, nodes),
52 )
53 })
54 .collect()
55 }
56}