5.3.6 Neo-Hookean模型
NH模型是一个简单的超弹性模型,基于两个材料参数:剪切模量μ和体积模量κ。这里,像通常做的那样,NH模型理论将同时针对可压缩和不可压缩变形进行阐述。不可压缩形式在理论推导中通常更容易,但对于实际研究,包括有限元模拟,可压缩版本通常更有用,因此在下文中将重点讨论。超弹性模型,如NH模型,主要用于固体、橡胶状材料。这些材料的特征是几乎不可压缩,因此体积模量的实际值通常对橡胶零件的响应影响很小。唯一的例外是零件分高度受限时,例如在受限空间中被压缩的O形圈(见第2章,2.2.9节)。 像所有超弹性材料模型一样,NH模型由其单位参考体积的亥姆霍兹自由能表达式指定。这里,亥姆霍兹自由能被假定为与温度无关,因此与单位参考体积的内能e0相同。对于NH模型,单位参考体积的亥姆霍兹自由能由以下公式给出:
注1:自由能方程对I1是线性的,因此不能准确捕捉许多弹性体在大应变下的非线性响应。
注2:自由能方程不包含对第二不变量I2的任何依赖。如下面的例子所示,这可能导致在加载主要为双轴的情况下应力预测过低。
注3:体积变形的能量对(J - 1)呈二次关系,产生的体积应力对(J - 1)是线性的,见方程(5.74)。
使用方程(5.41)、(4.66)和(4.36),可以容易地证明可压缩NH模型对任意变形状态的柯西应力有以下表达式:
其中μ是剪切模量,κ是体积模量。
对于不可压缩NH模型,柯西应力由方程(5.47)-(5.49)给出,得到单轴、平面和双轴变形的应力表达式如下:
在本文的其余部分,不可压缩单轴变形定义为:
不可压缩平面变形定义为:
不可压缩双轴变形定义为:
对于不可压缩单轴加载,NH材料模型可以用Matlab代码实现如下:
function[stress] = NH(time, strain, params)
%NH Neo-Hookean hyperelastic model
%Incompressible uniaxial loading
%This function is using true stress and strain
mu = params(1);
lambda = exp(strain);
stress = mu * (lambda.^2 - 1./lambda);
end
用Python代码实现如下:
from pylab import *
defNH(strain, params):
"""Neo-Hookean hyperelastic model.
Incompressible uniaxial loading.
This function is using true stress and strain"""
mu = params[0]
lam = exp(strain)
return mu * (lam*lam - 1/lam)
strain = linspace(0, 0.8)
params = [1.0]
stress = NH(strain, params)
plot(strain, stress, '-r')
在这种情况下,NH模型的响应仅由剪切模量μ控制。预测值与与Treloar[15, 16]对
图5.13 Treloar[15, 16]的实验数据与NH材料模型预测的比较
硫化天然橡胶的经典实验数据的比较如图5.13所示。这个图展示了简单拉伸、等双轴拉伸和平面拉伸的实验数据。如图所示,NH模型无法很好地捕捉大应变响应。这个模型的局限性是由于它无法捕捉材料在高度变形时的分子链极限拉伸。
如下面的代码和图所示,也很容易实现可压缩加载的NH模型。这段代码通过数值搜索找到使横向应力σ22 = 0的横向应变,对应于每个施加的应变ε11。
Python代码: "Polymer_Mechanics_Chap05.py"
from pylab import *
import scipy.optimize
defuniaxial_stress(model, trueStrainVec, params):
"""单轴应力计算函数。返回真实应力。"""
stress = zeros(len(trueStrainVec))
for i inrange(len(trueStrainVec)):
lam1 = exp(trueStrainVec[i])
calcS22Abs = lambda x: abs(model([lam1,x,x],params)[1,1])
# 搜索使S22=0的横向拉伸
lam2 = scipy.optimize.fmin(calcS22Abs, x0=1/sqrt(lam1),
xtol=1e-9, ftol=1e-9, disp=False)
stress[i] = model([lam1,lam2,lam2],params)[0,0]
return stress
defNH_3D(stretch, param):
"""新胡克模型。通过拉伸指定3D加载。
param[0]=mu, param[1]=kappa"""
F = array([[stretch[0],0,0], [0,stretch[1],0], [0,0,stretch[2]]])
Fstar = F/det(F)**(1/3)
bstar = dot(Fstar, Fstar.T)
dev_bstar = bstar - trace(bstar)/3 * eye(3)
return param[0]/3 * dev_bstar + param[1]*(det(F)-1) * eye(3)
"NH_compressible_uniaxial.py"
from pylab import *
from Polymer_Mechanics_Chap05 import *
trueStrain = linspace(0, 0.8, 100)
trueStress = uniaxial_stress(NH_3D, trueStrain, [1.0, 100])
plot(trueStrain, trueStress, 'b-')
xlabel('True strain')
ylabel('True stress (MPa)')
grid('on')
show()
图片由Python代码生成:
NH模型的价值在于其简单性——如果已知剪切模量,可以用一种稳健且计算效率高的方法确定任何加载模式下的响应。NH模型的主要局限性在于能够准确预测的条件范围有限。
示例:NH模型中的剪切模量
在这个例子中,我们将证明方程(5.73)中的材料参数μ确实是材料的剪切模量。展示这一点的一种方法是考虑简单剪切的情况,定义为:
将此变形梯度代入方程(5.74)得到剪切应力σ12 = μγ,结合方程(5.4)证明μ即为剪切模量。
另一种证明方程(5.73)中μ为剪切模量的方法是考虑方程(5.75)中σuniax对λ的导数,在λ→1的极限下:
其中ε为单轴小应变。方程(5.82)中的导数根据定义也等于杨氏模量,对不可压缩材料,杨氏模量等于剪切模量的3倍,因此μ确实为材料的剪切模量。
示例:NH模型中的体积模量
本例将证明方程(5.73)中的材料参数κ为材料的体积模量。一种方法是考虑三轴变形情况:
将其代入方程(5.74)得到σ11 = σ22 = σ33 = σ = κ(λ3 - 1)。在小变形下取拉伸导数得:
根据方程(5.9)和表5.1,我们还知道在三轴变形中dσ/dε等于3κ,因此方程(5.73)中的参数κ是材料的初始体积模量。
示例:NH模型的另一种表述
NH模型也可用以下替代方程表示:
这里,应力并非严格分为偏应力和体积应力部分。当体积模量κ较大时,标准NH模型和这种替代NH模型给出相似的预测结果,但随着体积模量的减小,两种模型的预测会有所不同。图5.14展示了标准NH模型和替代NH模型的应力-应变预测。在这个例子中,剪切模量μ取1 MPa,体积模量κ取5 MPa。
图5.14:标准NH模型和替代NH模型预测结果的比较
图中显示了两条曲线,分别代表标准NH模型(实线)和替代NH模型(虚线)的应力-应变关系。横轴为真实应变,范围从-1.0到1.0;纵轴为真实应力(MPa),范围从-4到8。两条曲线在小应变区域基本重合,但在大应变区域有所分离,其中替代模型预测的应力略高于标准模型。