conspire/constitutive/hybrid/hyperelastic_viscoplastic/additive/hyperelastic/
mod.rs

1use crate::{
2    constitutive::{
3        ConstitutiveError,
4        hybrid::ElasticViscoplasticAdditiveElastic,
5        solid::{hyperelastic::Hyperelastic, hyperelastic_viscoplastic::HyperelasticViscoplastic},
6    },
7    math::Tensor,
8    mechanics::{DeformationGradient, DeformationGradientPlastic, Scalar},
9};
10
11impl<C1, C2, Y1> HyperelasticViscoplastic<Y1> for ElasticViscoplasticAdditiveElastic<C1, C2, Y1>
12where
13    C1: HyperelasticViscoplastic<Y1>,
14    C2: Hyperelastic,
15    Y1: Tensor,
16{
17    /// Calculates and returns the Helmholtz free energy density.
18    ///
19    /// ```math
20    /// a = a_1(\mathbf{F},\mathbf{F}_\mathrm{p}) + a_2(\mathbf{F})
21    /// ```
22    fn helmholtz_free_energy_density(
23        &self,
24        deformation_gradient: &DeformationGradient,
25        deformation_gradient_p: &DeformationGradientPlastic,
26    ) -> Result<Scalar, ConstitutiveError> {
27        Ok(self
28            .0
29            .helmholtz_free_energy_density(deformation_gradient, deformation_gradient_p)?
30            + self.1.helmholtz_free_energy_density(deformation_gradient)?)
31    }
32}