Skip to main content

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

1#[cfg(test)]
2mod test;
3
4use crate::{
5    constitutive::{ConstitutiveError, hybrid::ElasticAdditive, solid::hyperelastic::Hyperelastic},
6    math::Quantity,
7    mechanics::DeformationGradient,
8    units::EnergyDensity,
9};
10
11impl<C1, C2> Hyperelastic for ElasticAdditive<C1, C2>
12where
13    C1: Hyperelastic,
14    C2: Hyperelastic,
15{
16    /// Calculates and returns the Helmholtz free energy density.
17    ///
18    /// ```math
19    /// a(\mathbf{F}) = a_1(\mathbf{F}) + a_2(\mathbf{F})
20    /// ```
21    fn helmholtz_free_energy_density(
22        &self,
23        deformation_gradient: &DeformationGradient,
24    ) -> Result<Quantity<EnergyDensity>, ConstitutiveError> {
25        Ok(self.0.helmholtz_free_energy_density(deformation_gradient)?
26            + self.1.helmholtz_free_energy_density(deformation_gradient)?)
27    }
28}