conspire/domain/cbm/block/node/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 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}