conspire/constitutive/solid/viscoelastic/canonical/
mod.rs1#[cfg(test)]
2mod test;
3
4use crate::{
5 constitutive::{
6 ConstitutiveError,
7 canonical::Canonical,
8 fluid::{hyperviscous::Hyperviscous, viscous::Viscous},
9 solid::{elastic::Elastic, viscoelastic::Viscoelastic},
10 },
11 math::Quantity,
12 mechanics::{
13 CauchyRateTangentStiffness, CauchyStress, DeformationGradient, DeformationGradientRate,
14 FirstPiolaKirchhoffRateTangentStiffness, FirstPiolaKirchhoffStress,
15 SecondPiolaKirchhoffRateTangentStiffness, SecondPiolaKirchhoffStress,
16 },
17 units::{Dissipation, Viscosity},
18};
19
20impl<C1, C2> Viscous for Canonical<C1, C2>
21where
22 C1: Elastic,
23 C2: Viscous,
24{
25 fn bulk_viscosity(&self) -> Quantity<Viscosity> {
26 self.1.bulk_viscosity()
27 }
28 fn shear_viscosity(&self) -> Quantity<Viscosity> {
29 self.1.shear_viscosity()
30 }
31 fn viscous_cauchy_stress(
32 &self,
33 deformation_gradient: &DeformationGradient,
34 deformation_gradient_rate: &DeformationGradientRate,
35 ) -> Result<CauchyStress, ConstitutiveError> {
36 self.1
37 .viscous_cauchy_stress(deformation_gradient, deformation_gradient_rate)
38 }
39 fn viscous_cauchy_rate_tangent_stiffness(
40 &self,
41 deformation_gradient: &DeformationGradient,
42 deformation_gradient_rate: &DeformationGradientRate,
43 ) -> Result<CauchyRateTangentStiffness, ConstitutiveError> {
44 self.1
45 .viscous_cauchy_rate_tangent_stiffness(deformation_gradient, deformation_gradient_rate)
46 }
47 fn viscous_first_piola_kirchhoff_stress(
48 &self,
49 deformation_gradient: &DeformationGradient,
50 deformation_gradient_rate: &DeformationGradientRate,
51 ) -> Result<FirstPiolaKirchhoffStress, ConstitutiveError> {
52 self.1
53 .viscous_first_piola_kirchhoff_stress(deformation_gradient, deformation_gradient_rate)
54 }
55 fn viscous_first_piola_kirchhoff_rate_tangent_stiffness(
56 &self,
57 deformation_gradient: &DeformationGradient,
58 deformation_gradient_rate: &DeformationGradientRate,
59 ) -> Result<FirstPiolaKirchhoffRateTangentStiffness, ConstitutiveError> {
60 self.1.viscous_first_piola_kirchhoff_rate_tangent_stiffness(
61 deformation_gradient,
62 deformation_gradient_rate,
63 )
64 }
65 fn viscous_second_piola_kirchhoff_stress(
66 &self,
67 deformation_gradient: &DeformationGradient,
68 deformation_gradient_rate: &DeformationGradientRate,
69 ) -> Result<SecondPiolaKirchhoffStress, ConstitutiveError> {
70 self.1
71 .viscous_second_piola_kirchhoff_stress(deformation_gradient, deformation_gradient_rate)
72 }
73 fn viscous_second_piola_kirchhoff_rate_tangent_stiffness(
74 &self,
75 deformation_gradient: &DeformationGradient,
76 deformation_gradient_rate: &DeformationGradientRate,
77 ) -> Result<SecondPiolaKirchhoffRateTangentStiffness, ConstitutiveError> {
78 self.1
79 .viscous_second_piola_kirchhoff_rate_tangent_stiffness(
80 deformation_gradient,
81 deformation_gradient_rate,
82 )
83 }
84}
85
86impl<C1, C2> Viscoelastic for Canonical<C1, C2>
87where
88 C1: Elastic,
89 C2: Viscous,
90{
91 fn cauchy_stress(
92 &self,
93 deformation_gradient: &DeformationGradient,
94 deformation_gradient_rate: &DeformationGradientRate,
95 ) -> Result<CauchyStress, ConstitutiveError> {
96 Ok(self.0.cauchy_stress(deformation_gradient)?
97 + self
98 .1
99 .viscous_cauchy_stress(deformation_gradient, deformation_gradient_rate)?)
100 }
101 fn cauchy_rate_tangent_stiffness(
102 &self,
103 deformation_gradient: &DeformationGradient,
104 deformation_gradient_rate: &DeformationGradientRate,
105 ) -> Result<CauchyRateTangentStiffness, ConstitutiveError> {
106 self.1
107 .viscous_cauchy_rate_tangent_stiffness(deformation_gradient, deformation_gradient_rate)
108 }
109}
110
111impl<C1, C2> Hyperviscous for Canonical<C1, C2>
112where
113 C1: Elastic,
114 C2: Hyperviscous,
115{
116 fn viscous_dissipation(
117 &self,
118 deformation_gradient: &DeformationGradient,
119 deformation_gradient_rate: &DeformationGradientRate,
120 ) -> Result<Quantity<Dissipation>, ConstitutiveError> {
121 self.1
122 .viscous_dissipation(deformation_gradient, deformation_gradient_rate)
123 }
124}