====== Function Based Materials ====== ===== FunctionBasedHyperMaterial ===== === Description === 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 $W$ is expressed as the sum of a **deviatoric** $W_{dev}$ and **volumetric** $W_{vol}$ contribution: $$ W\left(\bar{I}_1,\bar{I}_2, J, \bar{I}_4, \bar{I}_5 \right) = W_{dev}\left(\bar{I}_1,\bar{I}_2, J, \bar{I}_4, \bar{I}_5 \right) + W_{vol}\left( J \right) = W_{dev}\left(\bar{I}_1,\bar{I}_2, J, \bar{I}_4, \bar{I}_5 \right) + k_0 \mathcal{f}\left( J \right) $$ The deviatoric potential $W_{dev}$ is defined using a hyperelastic potential law defined in [[doc:user:elements:volumes:hyper_dev_potential]] whilst the volumetric potential $\mathcal{f}(J)$ is defined using a volumic potential law in [[doc:user:elements:volumes:hyper_vol_potential]]. It is also possible to add inelastic deformations $\mathbf{F}^{in}$ (//e.g.// thermal expansion) by using an inelastic potential law in [[doc:user:elements:volumes:hyper_inel_potential]]. The elastic part of the total deformation gradient $\mathbf{F}^e$ writes $$ \mathbf{F}^e = \mathbf{F}\left(\mathbf{F}^{in}\right)^{-1} $$ Note that all computations are done with respect to the **orthotropic axes**. === Parameters === ^ Name ^ Metafor Code ^ Dependency ^ | Density | ''MASS_DENSITY'' | ''TO/TM'' | | Initial bulk modulus ($k_0$) | ''RUBBER_PENAL'' | ''TO/TM'' | | Number of the [[doc:user:elements:volumes:hyper_dev_potential|hyperelastic potential law]] | ''HYPER_ELAST_POTENTIAL_NO'' | - | | Number of the [[doc:user:elements:volumes:hyper_vol_potential|volumic potential law]] \\ (default = QuadraticVolumicPotential) | ''HYPER_VOL_POTENTIAL_NO'' | - | | Number of the [[doc:user:elements:volumes:hyper_inel_potential|inelastic potential law]] \\ (default = None) | ''HYPER_INELAST_POTENTIAL_NO'' | - | | 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'' | ===== TmFunctionBasedOrthoHyperMaterial ===== === Description === 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. === Parameters === ^ Name ^ Metafor Code ^ Dependency ^ | Density | ''MASS_DENSITY'' | ''TO/TM'' | | Initial bulk modulus ($k_0$) | ''RUBBER_PENAL'' | ''TO/TM'' | | Number of the [[doc:user:elements:volumes:hyper_dev_potential|hyperelastic potential law]] | ''HYPER_ELAST_POTENTIAL_NO'' | - | | Number of the [[doc:user:elements:volumes:hyper_vol_potential|volumic potential law]] \\ (default = QuadraticVolumicPotential) | ''HYPER_VOL_POTENTIAL_NO'' | - | | Number of the [[doc:user:elements:volumes:hyper_inel_potential|inelastic potential law]] \\ (default = None) | ''HYPER_INELAST_POTENTIAL_NO'' | - | | 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'' | - | ===== Example Materials ====== Some example materials from the literature using ''FunctionBasedHyperMaterial''. ==== Generalized Neo-Hookean Material with Thermal Expansion ==== Here we create the same material as ''NeoHookeanHyperMaterial'' (see [[doc:user:elements:volumes:hyper_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_NO, 1) materialset(1).put(HYPER_VOL_POTENTIAL_NO, 2) materialset(1).put(HYPER_INELAST_POTENTIAL_NO, 3) The elastic deviatoric potential is the ''NeoHookeanHyperPotential'': ## Elastic (deviatoric) potential materlawset = domain.getMaterialLawSet() 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 as an ''InelasticPotential'': ## Inelastic potential materlawset.define(3, ThermalIsotropicExpansion) materlawset(3).put(HYPER_THERM_EXPANSION, alpha) ==== Holzapfel-Gasser-Ogden Anisotropic Material ==== Here we create a Holzapfel-Gasser-Ogden anisotropic hyperelastic material as presented in [[https://pubmed.ncbi.nlm.nih.gov/15179858/ | 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_NO, 1) materialset(1).put(HYPER_VOL_POTENTIAL_NO, 2) The elastic deviatoric potential is the sum of the ''NeoHookeanHyperPotential'' (isotropic matrix part) and ''HolzapfelGasserOgdenHyperPotential'' with two separate fiber directions. The addition between the two potentials is made using the ''CombinedElasticPotential''. ## Elastic (deviatoric) potential materlawset = domain.getMaterialLawSet() materlawset.define(1, CombinedElasticPotential) materlawset(1).put(HYPER_POTENTIAL1_NO, 3) #Neo-Hookean materlawset(1).put(HYPER_POTENTIAL2_NO, 4) #HGO Isotropic Neo-Hookean potential materlawset.define(3, NeoHookeanHyperPotential) materlawset(3).put(HYPER_C1, C1) Anisotropic Holzapfel-Gasser-Ogden potential with two fiber directions materlawset.define(4, HolzapfelGasserOgdenHyperPotential) materlawset(4).put(HYPER_HGO_K1, k1) materlawset(4).put(HYPER_HGO_K2, k2) materlawset(4).put(HYPER_HGO_DISP, d) # first fiber family with beta orientation materlawset(4).put(HYPER_FIB1_X, np.cos(beta)) materlawset(4).put(HYPER_FIB1_Y, np.sin(beta)) # second fiber family with -beta orientation materlawset(4).put(HYPER_FIB2_X, -np.cos(beta)) materlawset(4).put(HYPER_FIB2_Y, np.sin(beta)) The volumetric potential is the ''LogarithmicVolumicPotential'' ## Volumetric potential materlawset.define(2, LogarithmicVolumicPotential) ==== Bonet-Burton Transversely-Isotropic Material ==== Here we create a Bonet-Burton transversely isotropic hyperelastic material as presented in [[https://www.sciencedirect.com/science/article/pii/S0045782597003393 | 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 from the matrix ($E$, $\nu$, $G$) and from the fibers ($E_a$, $G_a$, $\nu_a$) as $$ n = \frac{E_a}{E} ~~~~|~~~~ m=1-\nu-2\nu^2 $$ $$ \mu = G = 2C_1 = \frac{E}{2(1+\nu)} ~~~~|~~~~ \lambda = k_0 = \frac{E(\nu+n\nu^2)}{m(1+\nu)} $$ $$ \alpha = \mu - G_a = \mu - \frac{E_a}{2(1+\nu_a)} ~~~~|~~~~ \beta= \frac{E\nu^2(1-n)}{4m(1+\nu)} ~~~~|~~~~ \gamma=\frac{E_a(1-\nu)}{8m}-\frac{\lambda+2\mu}{8}+\frac{\alpha}{2}-\beta $$ ## 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_NO, 1) materialset(1).put(HYPER_VOL_POTENTIAL_NO, 2) The elastic deviatoric potential is the sum of the ''NeoHookeanHyperPotential'' (isotropic matrix part) and BonetBurtonHyperPotential with one fiber directions. The addition between the two potentials is made using the CombinedElasticPotential. ## Elastic (deviatoric) potential materlawset = domain.getMaterialLawSet() materlawset.define(1, CombinedElasticPotential) materlawset(1).put(HYPER_POTENTIAL1_NO, 3) #Neo-Hookean materlawset(1).put(HYPER_POTENTIAL2_NO, 4) #Bonet-Burton Isotropic Neo-Hookean potential materlawset.define(3, NeoHookeanHyperPotential) materlawset(3).put(HYPER_C1, mu/2.) #mu=2C1 Transversely isotropic Bonet-Burton potential with one fiber family materlawset.define(4, BonetBurtonHyperPotential) materlawset(4).put(HYPER_BB_ALPHA, alpha) materlawset(4).put(HYPER_BB_BETA, beta) materlawset(4).put(HYPER_BB_GAMMA, gamma) materlawset(4).put(HYPER_BB_USE_LNJ, false) # first fiber family with beta orientation materlawset(4).put(HYPER_FIB1_X, np.cos(beta)) materlawset(4).put(HYPER_FIB1_Y, np.sin(beta)) The volumetric potential is the ''QuadraticVolumicPotential'' ## Volumetric potential materlawset.define(2, QuadraticVolumicPotential)