conspire/domain/vem/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 domain::solid::SolidElements,
12 mechanics::{DeformationGradientRates, DeformationGradients},
13 vem::{
14 NodalCoordinates, NodalVelocities,
15 block::{Block, element::solid::SolidVirtualElement},
16 },
17};
18
19pub type NodalDampingsSolid = crate::domain::solid::NodalDampingsSolid<3>;
20pub type NodalForcesSolid = crate::domain::solid::NodalForcesSolid<3>;
21pub type NodalStiffnessesSolid = crate::domain::solid::NodalStiffnessesSolid<3>;
22pub type NodalStiffnessesSolidSymmetric = crate::domain::solid::NodalStiffnessesSolidSymmetric<3>;
23
24impl<C, F> SolidElements for Block<C, F>
25where
26 C: Solid,
27 F: SolidVirtualElement,
28{
29 type DeformationGradients = DeformationGradients;
30 type DeformationGradientRates = DeformationGradientRates;
31 fn deformation_gradients(
32 &self,
33 nodal_coordinates: &NodalCoordinates,
34 ) -> Vec<Self::DeformationGradients> {
35 self.elements()
36 .iter()
37 .zip(self.elements_nodes())
38 .map(|(element, nodes)| {
39 element.deformation_gradients(&Self::element_coordinates(nodal_coordinates, nodes))
40 })
41 .collect()
42 }
43 fn deformation_gradient_rates(
44 &self,
45 nodal_coordinates: &NodalCoordinates,
46 nodal_velocities: &NodalVelocities,
47 ) -> Vec<Self::DeformationGradientRates> {
48 self.elements()
49 .iter()
50 .zip(self.elements_nodes())
51 .map(|(element, nodes)| {
52 element.deformation_gradient_rates(
53 &Self::element_coordinates(nodal_coordinates, nodes),
54 &Self::element_coordinates(nodal_velocities, nodes),
55 )
56 })
57 .collect()
58 }
59}