Skip to main content

conspire/domain/cbm/block/node/solid/
mod.rs

1pub 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 super::Node;
10use crate::{
11    domain::{NodalCoordinates, NodalVelocities},
12    mechanics::{DeformationGradient, DeformationGradientRate},
13};
14
15pub use crate::domain::block::element::solid::SolidElement;
16
17impl SolidElement for Node {
18    type Coordinates = NodalCoordinates<3>;
19    type Velocities = NodalVelocities<3>;
20    type DeformationGradients = DeformationGradient;
21    type DeformationGradientRates = DeformationGradientRate;
22    fn deformation_gradients(
23        &self,
24        nodal_coordinates: &NodalCoordinates<3>,
25    ) -> DeformationGradient {
26        self.neighbors()
27            .iter()
28            .zip(self.gradient_vectors())
29            .map(|(&neighbor, gradient_vector)| {
30                DeformationGradient::from((&nodal_coordinates[neighbor], gradient_vector))
31            })
32            .sum()
33    }
34    fn deformation_gradient_rates(
35        &self,
36        _nodal_coordinates: &NodalCoordinates<3>,
37        nodal_velocities: &NodalVelocities<3>,
38    ) -> DeformationGradientRate {
39        self.neighbors()
40            .iter()
41            .zip(self.gradient_vectors())
42            .map(|(&neighbor, gradient_vector)| {
43                DeformationGradientRate::from((&nodal_velocities[neighbor], gradient_vector))
44            })
45            .sum()
46    }
47}