conspire/domain/cbm/block/solid/elastic_hyperviscous/
mod.rs1use super::super::{Block, node::solid::elastic_hyperviscous::ElasticHyperviscousElement};
2use crate::{
3 constitutive::{ConstitutiveError, solid::elastic_hyperviscous::ElasticHyperviscous},
4 domain::{ElementModelError, NodalCoordinates, NodalVelocities},
5 math::Quantity,
6 units::Power,
7};
8
9pub use crate::domain::solid::elastic_hyperviscous::ElasticHyperviscousElements;
10
11impl<C> ElasticHyperviscousElements<3> for Block<C>
12where
13 C: ElasticHyperviscous,
14{
15 fn viscous_dissipation(
16 &self,
17 nodal_coordinates: &NodalCoordinates<3>,
18 nodal_velocities: &NodalVelocities<3>,
19 ) -> Result<Quantity<Power>, ElementModelError> {
20 self.nodes
21 .iter()
22 .map(|node| {
23 node.viscous_dissipation(
24 &self.constitutive_model,
25 nodal_coordinates,
26 nodal_velocities,
27 )
28 })
29 .sum::<Result<_, ConstitutiveError>>()
30 .map_err(|error| ElementModelError::upstream(error, self))
31 }
32 fn dissipation_potential(
33 &self,
34 nodal_coordinates: &NodalCoordinates<3>,
35 nodal_velocities: &NodalVelocities<3>,
36 ) -> Result<Quantity<Power>, ElementModelError> {
37 self.nodes
38 .iter()
39 .map(|node| {
40 node.dissipation_potential(
41 &self.constitutive_model,
42 nodal_coordinates,
43 nodal_velocities,
44 )
45 })
46 .sum::<Result<_, ConstitutiveError>>()
47 .map_err(|error| ElementModelError::upstream(error, self))
48 }
49}