Package: hyperelastic
Constitutivehyperelasticmaterial formulations forFElupe.This package provides the essential building blocks for constitutive hyperelastic material formulations. This includes material behaviour-independent spaces and frameworks as well as material behaviour-dependent model formulations.Spaces(hyperelastic.spaces) are full or partial deformations on which a given material formulation should be projected to, e.g. to the distortional (part of the deformation) space. GeneralizedTotal-LagrangeFrameworks(hyperelastic.frameworks) for isotropic hyperelastic material formulations based on the invariants of the right Cauchy-Green deformation tensor and the principal stretches enable a clean coding of isotropic material formulations.Thehyperelastic.math-module provides helpers in reduced vector (Voigt) storage for symmetric three-dimensional second-order tensors along with a matrix storage for (at least minor) symmetric three-dimensional fourth-order tensors. Shear terms are not doubled for strain-like tensors, instead all math operations take care of the reduced vector storage.$$ \boldsymbol{C} = \begin{bmatrix} C_{11} & C_{22} & C_{33} & C_{12} & C_{23} & C_{13} \end{bmatrix}^T $$InstallationInstall Python, fire up 🔥 a terminal and run 🏃pipinstallhyperelasticUsageMaterial model formulations have to be created as classes with methods for the evaluation of thegradient(stress) and thehessian(elasticity) of the strain energy function. It depends on the framework which derivatives have to be defined, e.g. the derivatives w.r.t. the invariants of the right Cauchy-Green deformation tensor or w.r.t. the principal stretches. An instance of aFrameworkhas to befinalizedby the application on aSpace.Deformation (Full) SpaceDistortional SpaceDilatational SpaceⓘNoteDefine your own material model formulation with manual, automatic or symbolic differentiation with the help of your favourite package, e.g.PyTorch,JAX,Tensorflow,TensorTRAX,SymPy, etc.First, let's import hyperelastic (and its math module).importhyperelasticashelimporthyperelastic.mathashmInvariant-based material formulationsA minimal template for an invariant-based material formulation applied on the distortional space:classMyInvariantsModel:defgradient(self,I1,I2,I3,statevars):"""The gradient as the partial derivative of the strain energy function w.r.t.the invariants of the right Cauchy-Green deformation tensor."""returndWdI1,dWdI2,dWdI3,statevarsdefhessian(self,I1,I2,I3,statevars_old):"""The hessian as the second partial derivatives of the strain energy functionw.r.t. the invariants of the right Cauchy-Green deformation tensor."""returnd2WdI1I1,d2WdI2I2,d2WdI3I3,d2WdI1I2,d2WdI2I3,d2WdI1I3model=MyInvariantsModel()framework=hel.InvariantsFramework(model)umat=hel.DistortionalSpace(framework)Available isotropic hyperelastic invariant-based material formulationsThe typical polynomial-based material formulations (Neo-Hooke,Mooney-Rivlin,Yeoh) are all available as submodels of the third order deformation material formulation.Third-Order-Deformation (James-Green-Simpson)(code)TorchModel(code)Principal stretch-based material formulationsA minimal template for a principal stretch-based material formulation applied on the distortional space:classMyStretchesModel:defgradient(self,λ,statevars):"""The gradient as the partial derivative of the strain energy function w.r.t.the principal stretches."""return[dWdλ1,dWdλ2,dWdλ3],statevarsdefhessian(self,λ,statevars_old):"""The hessian as the second partial derivatives of the strain energy functionw.r.t. the principal stretches."""returnd2Wdλ1dλ1,d2Wdλ2dλ2,d2Wdλ3dλ3,d2Wdλ1dλ2,d2Wdλ2dλ3,d2Wdλ1dλ3model=MyStretchesModel()framework=hel.StretchesFramework(model)umat=hel.DistortionalSpace(framework)Available isotropic hyperelastic stretch-based material formulationsOgden(code)LabIn theLab,Simulationson homogeneous load cases provide a visualization of the material response behaviour.importnumpyasnpimporthyperelasticstretch=np.linspace(0.7,2.5,181)parameters={"C10":0.3,"C01":0.2}defmaterial(C10,C01):tod=hyperelastic.models.invariants.ThirdOrderDeformation(C10=C10,C01=C01)framework=hyperelastic.InvariantsFramework(tod)returnhyperelastic.DeformationSpace(framework)ux=hyperelastic.lab.Simulation(loadcase=hyperelastic.lab.Uniaxial(label="uniaxial"),stretch=np.linspace(0.7,2.5),material=material,labels=parameters.keys(),parameters=parameters.values(),)ps=hyperelastic.lab.Simulation(loadcase=hyperelastic.lab.Planar(label="planar"),stretch=np.linspace(1.0,2.5),material=material,labels=parameters.keys(),parameters=parameters.values(),)bx=hyperelastic.lab.Simulation(loadcase=hyperelastic.lab.Biaxial(label="biaxial"),stretch=np.linspace(1.0,1.75),material=material,labels=parameters.keys(),parameters=parameters.values(),)fig,ax=ux.plot_stress_stretch(lw=2)fig,ax=ps.plot_stress_stretch(ax=ax,lw=2)fig,ax=bx.plot_stress_stretch(ax=ax,lw=2)ax.legend()ax.set_title(rf"Mooney-Rivlin (C10={parameters['C10']}, C01={parameters['C01']})")LicenseHyperelastic - Constitutive hyperelastic material formulations for FElupe (C) 2024 Andreas Dutzler, Graz (Austria).This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along with this program. If not, seehttps://www.gnu.org/licenses/.