conspire/domain/vem/block/element/solid/
mod.rs1pub mod elastic;
2pub mod hyperelastic;
3
4use crate::{
5 math::Tensor,
6 mechanics::{DeformationGradients, Forces, Stiffnesses},
7 vem::block::element::{Element, ElementNodalCoordinates, VirtualElement},
8};
9
10pub type ElementNodalForcesSolid = Forces;
11pub type ElementNodalStiffnessesSolid = Stiffnesses;
12
13pub trait SolidVirtualElement
14where
15 Self: VirtualElement,
16{
17 fn deformation_gradients<'a>(
18 &'a self,
19 nodal_coordinates: ElementNodalCoordinates<'a>,
20 ) -> DeformationGradients;
21}
22
23impl SolidVirtualElement for Element
24where
25 Self: VirtualElement,
26{
27 fn deformation_gradients<'a>(
28 &'a self,
29 nodal_coordinates: ElementNodalCoordinates<'a>,
30 ) -> DeformationGradients {
31 self.gradient_vectors()
32 .iter()
33 .map(|gradient_vectors| {
34 nodal_coordinates
35 .iter()
36 .zip(gradient_vectors)
37 .map(|(&nodal_coordinate, gradient_vector)| {
38 (nodal_coordinate, gradient_vector).into()
39 })
40 .sum()
41 })
42 .collect()
43 }
44}