Skip to main content

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

1use super::{super::Node, SolidElement};
2use crate::{
3    constitutive::{ConstitutiveError, solid::elastic_hyperviscous::ElasticHyperviscous},
4    domain::{NodalCoordinates, NodalVelocities},
5    math::Quantity,
6    units::Power,
7};
8
9pub use crate::domain::block::element::solid::elastic_hyperviscous::ElasticHyperviscousElement;
10
11impl<C> ElasticHyperviscousElement<C> for Node
12where
13    C: ElasticHyperviscous,
14{
15    fn viscous_dissipation(
16        &self,
17        constitutive_model: &C,
18        nodal_coordinates: &NodalCoordinates<3>,
19        nodal_velocities: &NodalVelocities<3>,
20    ) -> Result<Quantity<Power>, ConstitutiveError> {
21        Ok(constitutive_model.viscous_dissipation(
22            &self.deformation_gradients(nodal_coordinates),
23            &self.deformation_gradient_rates(nodal_coordinates, nodal_velocities),
24        )? * self.volume)
25    }
26    fn dissipation_potential(
27        &self,
28        constitutive_model: &C,
29        nodal_coordinates: &NodalCoordinates<3>,
30        nodal_velocities: &NodalVelocities<3>,
31    ) -> Result<Quantity<Power>, ConstitutiveError> {
32        Ok(constitutive_model.dissipation_potential(
33            &self.deformation_gradients(nodal_coordinates),
34            &self.deformation_gradient_rates(nodal_coordinates, nodal_velocities),
35        )? * self.volume)
36    }
37}