conspire/domain/vem/block/element/solid/
mod.rs

1pub 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}