Hyperelastic law, using a Cauchy stress tensor $\boldsymbol{\sigma}$, stress in the current configuration.
(Quasi-)incompressibility is treated by a volumetric/deviatoric multiplicative split of the deformation gradient, i.e. $\bar{\mathbf{F}} = J^{-1/3}\mathbf{F}$. Hence the deviatoric potential is based on reduced invariants of $\bar{\mathbf{B}} =\bar{\mathbf{F}}\bar{\mathbf{F}}^T $.
The strain-energy density function $\psi$ is expressed as the sum of deviatoric (elastic) $\psi_{e}$ and volumetric $\psi_{vol}$ contributions: $$ \psi = \sum_{i=1}^{N_{e}}\psi_{e}^{(i)} + \sum_{i=1}^{N_{vol}}\psi_{vol}^{(i)} = \sum_{i=1}^{N_{e}}\psi_{e}^{(i)} + k_0 \sum_{i=1}^{N_{vol}}\mathcal{f}^{(i)}\left( J \right) $$
The deviatoric (elastic) potentials $\psi_{e}^{(i)}$ are defined using hyperelastic potential laws defined in Deviatoric Potentials whilst volumetric potentials $\mathcal{f}^{(i)}(J)$ are defined using volumic potential laws in Volumic Potentials.
It is also possible to add inelastic deformations $\mathbf{F}_{in}$ (e.g. thermal expansion) by using inelastic potential laws in Inelastic Potentials. The total deformation gradient $\mathbf{F}$ writes $$ \mathbf{F} = \mathbf{F}_e\prod_{i=1}^{N_{in}}\mathbf{F}_{in}^{(i)} $$
This material can be summarized into the following analogous rheological model:
Note that all computations are done with respect to the orthotropic axes.
| Name | Metafor Code | Dependency |
|---|---|---|
| Density | MASS_DENSITY | TO/TM |
| Initial bulk modulus ($k_0$) | RUBBER_PENAL | TO/TM |
| Array of numbers defining the hyperelastic potential laws [1, 2,…] | HYPER_ELAST_POTENTIAL_NUMS | - |
| Array of numbers defining the volumic potential laws [1, 2,…] (default = QuadraticVolumicPotential) | HYPER_VOL_POTENTIAL_NUMS | - |
| Array of numbers defining the inelastic potential laws [1, 2,…] (default = None) | HYPER_INELAST_POTENTIAL_NUMS | - |
| Material temperature evolution law | TEMP | TM |
| Orthotropic axis | ORTHO_AX1_X | - |
| Orthotropic axis | ORTHO_AX1_Y | - |
| Orthotropic axis | ORTHO_AX1_Z | - |
| Orthotropic axis | ORTHO_AX2_X | - |
| Orthotropic axis | ORTHO_AX2_Y | - |
| Orthotropic axis | ORTHO_AX2_Z | - |
| Orthotropic axis initialized by mesh construction boolean : True - False (default) override OrthoAxis definition | ORTHO_INIT_AS_JACO |
Thermo-mechanical hyperelastic law with orthotropic thermal conduction law, using a Cauchy stress tensor $\boldsymbol{\sigma}$, stress in the current configuration.
Thermal conduction writes in the orthotropic frame $$ \boldsymbol{K}~\nabla T = \left[ \begin{array}{c c c} K_1 & 0 & 0 \\ 0 & K_2 & 0 \\ 0 & 0 & K_3 \end{array} \right] \nabla T, $$ where $\boldsymbol{K}$ is the orthotropic conduction matrix (in material axes) and $\nabla T$ is the temperature gradient.
| Name | Metafor Code | Dependency |
|---|---|---|
| Density | MASS_DENSITY | TO/TM |
| Initial bulk modulus ($k_0$) | RUBBER_PENAL | TO/TM |
| Array of numbers defining the hyperelastic potential laws [1, 2,…] | HYPER_ELAST_POTENTIAL_NUMS | - |
| Array of numbers defining the volumic potential laws [1, 2,…] (default = QuadraticVolumicPotential) | HYPER_VOL_POTENTIAL_NUMS | - |
| Array of numbers defining the inelastic potential laws [1, 2,…] (default = None) | HYPER_INELAST_POTENTIAL_NUMS | - |
| Material temperature evolution law | TEMP | TM |
| Orthotropic axis | ORTHO_AX1_X | - |
| Orthotropic axis | ORTHO_AX1_Y | - |
| Orthotropic axis | ORTHO_AX1_Z | - |
| Orthotropic axis | ORTHO_AX2_X | - |
| Orthotropic axis | ORTHO_AX2_Y | - |
| Orthotropic axis | ORTHO_AX2_Z | - |
| Orthotropic axis initialized by mesh construction boolean : True - False (default) override OrthoAxis definition | ORTHO_INIT_AS_JACO | |
| Conductivity $K_1$ | CONDUCTIVITY_1 | TO/TM |
| Conductivity $K_2$ | CONDUCTIVITY_2 | TO/TM |
| Conductivity $K_3$ | CONDUCTIVITY_3 | TO/TM |
| Heat Capacity $C_p$ | HEAT_CAPACITY | TO/TM |
| Dissipated thermoelastic power fraction $\eta_e$ | DISSIP_TE | - |
| Dissipated (visco)plastic power fraction (Taylor-Quinney factor) | DISSIP_TQ | - |
Visco-hyperelastic law, using a Cauchy stress tensor $\boldsymbol{\sigma}$, stress in the current configuration.
This material is similar to FunctionBasedHyperMaterial with the addition of visco-elastic $\psi_{ve}$ contributions to the strain-energy density function $\psi$ as
$$
\psi = \sum_{i=1}^{N_{ve}}\psi_{ve}^{(i)} + \sum_{i=1}^{N_{e}}\psi_{e}^{(i)} + k_0 \sum_{i=1}^{N_{vol}}\mathcal{f}^{(i)}\left( J \right)
$$
The deviatoric visco-elastic potentials $\psi_{ve}^{(i)}$ are defined using visco-hyperelastic potential laws defined in Deviatoric Potentials.
Note that with this material, it is not mandatory to define any $\psi_{e}^{(i)}$.
| Name | Metafor Code | Dependency |
|---|---|---|
| Density | MASS_DENSITY | TO/TM |
| Initial bulk modulus ($k_0$) | RUBBER_PENAL | TO/TM |
| Array of numbers defining the visco-hyperelastic potential laws [1, 2,…] | HYPER_VE_POTENTIAL_NUMS | - |
| Array of numbers defining the hyperelastic potential laws [1, 2,…] (default = None) | HYPER_ELAST_POTENTIAL_NUMS | - |
| Array of numbers defining the volumic potential laws [1, 2,…] (default = QuadraticVolumicPotential) | HYPER_VOL_POTENTIAL_NUMS | - |
| Array of numbers defining the inelastic potential laws [1, 2,…] (default = None) | HYPER_INELAST_POTENTIAL_NUMS | - |
| Material temperature evolution law | TEMP | TM |
| Orthotropic axis | ORTHO_AX1_X | - |
| Orthotropic axis | ORTHO_AX1_Y | - |
| Orthotropic axis | ORTHO_AX1_Z | - |
| Orthotropic axis | ORTHO_AX2_X | - |
| Orthotropic axis | ORTHO_AX2_Y | - |
| Orthotropic axis | ORTHO_AX2_Z | - |
| Orthotropic axis initialized by mesh construction boolean : True - False (default) override OrthoAxis definition | ORTHO_INIT_AS_JACO |
Some example materials from the literature using FunctionBasedHyperMaterial and VeFunctionBasedHyperMaterial.
Here we create the same material as NeoHookeanHyperMaterial (see Hyperelastic materials)
$$
W = C_1\left(\bar{I_1} - 3\right) + \frac{k_0}{2}\left[ \left(J-1\right)^2 + \ln^2 J\right]
$$
## Neo-Hookean Material materialset.define(1, FunctionBasedHyperMaterial) materialset(1).put(MASS_DENSITY, rho) materialset(1).put(RUBBER_PENAL, k0) materialset(1).put(HYPER_ELAST_POTENTIAL_NUMS, [1]) materialset(1).put(HYPER_VOL_POTENTIAL_NUMS, [2]) materialset(1).put(HYPER_INELAST_POTENTIAL_NUMS, [3])
The elastic deviatoric potential is the NeoHookeanHyperPotential:
## Elastic (deviatoric) potential materlawset.define(1, NeoHookeanHyperPotential) materlawset(1).put(HYPER_C1, C1)
The volumetric potential is the QuadLogVolumicPotential:
## Volumetric potential materlawset.define(2, QuadLogVolumicPotential)
Isotropic thermal expansion is added using a InelasticPotential:
## Inelastic potential materlawset.define(3, ThermalIsotropicExpansion) materlawset(3).put(HYPER_THERM_EXPANSION, alpha)
## Visco-elastic Neo-Hookean with n Maxwell branches materialset.define(1, VeFunctionBasedHyperMaterial) materialset(1).put(MASS_DENSITY, rho) materialset(1).put(RUBBER_PENAL, k0) materialset(1).put(HYPER_VE_POTENTIAL_NUMS, [1]) materialset(1).put(HYPER_VOL_POTENTIAL_NUMS, [2])
We create the GeneralizedMaxwellHyperPotential grid base:
## Generalized Maxwell Potential materlawset.define(1, GeneralizedMaxwellHyperPotential)
The main spring of the grid is the NeoHookeanHyperPotential (purely elastic):
### Main spring is Neo-Hookean materlawset.define(101, NeoHookeanHyperPotential) materlawset(101).put(HYPER_C1, C1) materlawset(1).put(HYPER_MAIN_POTENTIAL_NO, 101) #define law 101 as main spring
We add n parallel MaxwellBranch to the grid:
### n Maxwell Branches
for i in range(0, n):
materlawset.define(102+i, MaxwellBranch)
materlawset(102+i).put(HYPER_MAXWELL_GAMMA, gamma[i])
materlawset(102+i).put(HYPER_VE_TAU, tau[i])
materlawset(1).append(HYPER_MAXWELL_BRANCH_NUMS, 102+i) #add law 102+i to the set of parallel Maxwell branches
The volumetric potential is the QuadLogVolumicPotential:
## Volumetric potential materlawset.define(2, QuadLogVolumicPotential)
Here we create a Holzapfel-Gasser-Ogden anisotropic hyperelastic material as presented in Holzapfel G., Gasser T., Ogden R., 2004, Comparison of a multi-layer structural model for arterial walls with a Fung-type model, and issues of material stability, Journal of biomechanical engineering, 126, 264-75. Note that before version 3570 of Metafor, this material was implemented as HolzapfelGasserOgdenHyperMaterial.
In this case, the material represents arterial wall tissues with two fiber families. $$ W = C_1\left(\bar{I_1} - 3\right) + \frac{k_1}{2k_2}\sum_{i=1}^2\left[ e^{k_2\left< d\left(\bar{I}_1-3\right) + \left(1-3d\right)\left(\bar{I}_4^{(i)}-1\right)\right>^2}-1 \right] + \frac{k_0}{2}\text{ln}^2 J $$
## HGO Material materialset.define(1, FunctionBasedHyperMaterial) materialset(1).put(MASS_DENSITY, rho) materialset(1).put(RUBBER_PENAL, k0) materialset(1).put(HYPER_ELAST_POTENTIAL_NUMS, [1, 2]) materialset(1).put(HYPER_VOL_POTENTIAL_NUMS, [3])
The elastic deviatoric potential is the sum of the NeoHookeanHyperPotential (isotropic matrix part)
materlawset.define(1, NeoHookeanHyperPotential) materlawset(1).put(HYPER_C1, C1)
and HolzapfelGasserOgdenHyperPotential with two separate fiber directions (+-beta in the xy-plane).
materlawset.define(2, HolzapfelGasserOgdenHyperPotential) materlawset(2).put(HYPER_HGO_K1, k1) materlawset(2).put(HYPER_HGO_K2, k2) materlawset(2).put(HYPER_HGO_DISP, d) # 2 fiber orientations in the xy-plane (+-beta) materlawset(2).put(HYPER_FIBS_THETA, [beta, -beta]) materlawset(2).put(HYPER_FIBS_DELTA, [ 0., 0.]) # NB: facultative if 0
The volumetric potential is the LogarithmicVolumicPotential
## Volumetric potential materlawset.define(3, LogarithmicVolumicPotential)
Here we create a Bonet-Burton transversely isotropic hyperelastic material as presented in Bonet J., Burton A. J., 1998, A simple orthotropic, transversely isotropic hyperelastic constitutive equation for large strain computations, Computer Methods in Applied Mechanics and Engineering, 162, 151-164.
For this material, the strain-energy density function writes $$ W = \frac{\mu}{2}\left(\bar{I}_1 - 3\right) + \left[\alpha + \beta \left( \bar{I}_1-3 \right) + \gamma \left( \bar{I}^{(i)}_4 -1\right)\right]\left(\bar{I}^{(i)}_4 - 1\right) - \frac{1}{2}\alpha \left(\bar{I}^{(i)}_5 -1\right) + \frac{\lambda}{2}(J-1)^2 $$
The different constants from $W$ are related to the engineering material constants in the pricipal (1) direction and in the transverse (2, 3) directions Abd Latif M., Perić D., Dettmer W. (2007). Numerical Modeling of Transversely Isotropic Elastic Material at Small and Finite Strains. 909. 142-146. $$ \mu = \frac{E_2}{2\left(1+\nu_{23}\right)} ~~~~~|~~~~~ \lambda = \frac{-E_2\left(E_2\nu_{12}^2 + E_1\nu_{23}\right)}{\left(2E_2\nu_{12}^2+E_1\left[\nu_{23}-1\right]\right)\left(1+\nu_{23}\right)} $$ $$ \alpha = \frac{1}{4}\left(\frac{E_2}{1+\nu_{23}}-2G_{12}\right) ~~~~~|~~~~~ \beta = \frac{E_2}{4}\left(\frac{E_1-2E_1\nu_{12}}{2E_2\nu_{12}^2+E_1\left(\nu_{23}-1\right)}+\frac{1}{1+\nu_{23}}\right) $$ $$ \gamma = \frac{1}{16}\left(2E_1 - 4G_{12} - \frac{E_1 E_2\left(1-2\nu_{12}\right)^2}{2E_2\nu_{12}^2+E_1\left(\nu_{23}-1\right)}-\frac{E_2}{1+\nu_{23}}\right) $$
## Bonet-Burton Material materialset.define(1, FunctionBasedHyperMaterial) materialset(1).put(MASS_DENSITY, rho) materialset(1).put(RUBBER_PENAL, lambda) materialset(1).put(HYPER_ELAST_POTENTIAL_NUMS, [1, 2]) materialset(1).put(HYPER_VOL_POTENTIAL_NUMS, [3])
The elastic deviatoric potential is the sum of the NeoHookeanHyperPotential (isotropic matrix part)
materlawset.define(1, NeoHookeanHyperPotential) materlawset(1).put(HYPER_C1, mu/2.) #mu=2C1
and BonetBurtonHyperPotential with one fiber directions (+beta in xy-plane).
materlawset.define(2, BonetBurtonHyperPotential) materlawset(2).put(HYPER_BB_ALPHA, alpha) materlawset(2).put(HYPER_BB_BETA, beta) materlawset(2).put(HYPER_BB_GAMMA, gamma) materlawset(2).put(HYPER_BB_USE_LNJ, false) # 1 fiber orientation in the xy-plane materlawset(2).put(HYPER_FIBS_THETA, [beta]) materlawset(2).put(HYPER_FIBS_DELTA, [0.])
The volumetric potential is the QuadraticVolumicPotential
## Volumetric potential materlawset.define(3, QuadraticVolumicPotential)