本人介绍了在ANSYS中如何实现弹性地基的模拟,其中既使用了本身可以设置弹性地基刚度的特殊单元,也采用了弹簧单元来间接实现。然而一个不可避免的现象便是在实际中,其实有很多情况下地基是既受拉又受压的,如果继续采用特殊单元,则不能考虑这点。也即是这些特殊的单元无法考虑单向受压的情况,例如在隧道二次衬砌分析中,外部等效围岩就不能使用这些特殊单元。
在前面一期中也介绍了如何使用combin39单元来实现弹性地基的模拟,使用该单元的一个好处便是可以考虑单向作用。本文就简单介绍如何使用该单元实现单向弹簧的模拟。
要利用该单元实现单向弹簧,首先要读懂该单元各个单元关键项的意思,该单元有很多关键项,不同的设置会有不同的单元表现。该单元一共有八种单元表现,罗列如下:
从上述单元表现可见,第B种和第e种情况可实现单向弹簧的功能,这两者的主要区别在于一个是卸载路径与原加载路径相同,一种是卸载路径与加载路劲的原点段平行。
细心的同学可以发现,这儿combin39所谓的单向是指受拉单向,也即是该单元只提供单向受拉的功能,如果要实现我们口中所谓的单向受压,则需要一定的建模技巧。
为验证该单元的单向功能,下面我们做一个小实验。
命令流如下:
finish
/clear
/prep7
et,1,combin39
!Z方向的单向弹簧
keyopt,1,4,0
keyopt,1,3,3
keyopt,1,1,0
keyopt,1,2,1
n,1
n,2,0,0,1.0
!弹簧的初始弹性模量为100
r,1,0.1,100*0.1
e,1,2
d,1,all,0
allsel,all
!弹簧受到拉力100,可以预见最大位移为1
f,2,fz,100
/solu
allsel,all
nsubst,10,,1
autots,on
solve
结果位移云图如下:
在上述命令流下,我们将拉力改为压力,可以预见,由于弹簧只是受拉弹簧,因此结果应该为0.
修改的命令流如下:
!==============
f,2,fz,-100
!=============
修改之后求解,虽然软件显示的是solution is done,然而并没有位移结果,这也表明,该弹簧不能模拟受压。
在保持上述命令流不变的情况下,我们在做一个改变,具体改变就是在单元建立的时候,调换下生成单元的节点序号,也即修改的命令如下:
!===========
e,2,1
!===========
修改之后我们会发现,结果如下
从这个位移云图可见,弹簧被压缩了1,而这与我们口中所说的受压情况很符合。
综合这个小实验,我们可以得到一些有用的结论:
1、Combin39只能模拟单向受拉.
2、Combin39所谓的拉应变是指沿着单元坐标系X的正方向,如果我们需要模拟单向受压,只需调整该单元的单元坐标系。
为体现该单元使用上的一些技能,设有某矩形大板,长80m,宽40m,在中间3m范围内作用有均布荷载,地基刚度为20MPa,采用ANSYS模拟该过程。
一个可以预见的结果便是 由于该板相对于加载面积来讲,其长边太长,会有一种中间凹两边凸的直观效果,因此如果采用弹簧模拟弹性地基,两边的弹簧会处于受拉状态,然而事实是我们只希望地基弹簧只受压不受拉,受拉弹簧退出工作。
我们采用combin39来模拟该过程。命令流如下:
!===========
finish
/clear
/prep7
A=80$B=40$H=0.6
A1=3$B1=2
Q=150e3
ESF=2.0e7 !弹性地基刚度
ET,1,solid186
et,2,surf154 !辅助表面效应单元
et,3,combin39
keyopt,3,4,0
keyopt,3,3,3
keyopt,3,1,0
keyopt,3,2,1
!建模
!===========
!===================
allsel,all
*get,tmmax,node,,num,max !整个模型的最大节点号
esel,s,type,,2
nsle,s,corner
*get,ntol,node,,count !节点总数
*get,etol,elem,,count !单元总数
*get,nmax,node,,num,max !最大节点号
*dim,nodno,,ntol !存储节点号
*dim,nodk,,nmax !存储各节点面积、弹簧刚度
*dim,eleno,,etol !存储单元号
!获得各个单元号
*get,e1,elem,,num,min
eleno(1)=e1
*do,i,2,etol
e1=elnext(e1)
eleno(i)=e1
*enddo
!获得各节点号
*get,n1,node,,num,min
nodno(1)=n1
*do,i,2,ntol
n1=ndnext(n1)
nodno(i)=n1
*enddo
!求每个节点对应的面积
*do,i,1,etol
ei=eleno(i)
n1=nelem(ei,1)
n2=nelem(ei,2)
n3=nelem(ei,3)
n4=nelem(ei,4)
*get,ai,elem,ei,area
*if,n3,ne,n4,then
ai=ai/4.0
nodk(n1)=nodk(n1)+ai
nodk(n2)=nodk(n2)+ai
nodk(n3)=nodk(n3)+ai
nodk(n4)=nodk(n4)+ai
*else
ai=ai/3.0
nodk(n1)=nodk(n1)+ai
nodk(n2)=nodk(n2)+ai
nodk(n3)=nodk(n3)+ai
*endif
*enddo
!求得弹簧刚度
*do,i,1,nmax
nodk(i)=nodk(i)*ESF
*enddo
*do,i,1,ntol
ni=nodno(i)
r,i+1,0.01,nodk(ni)*0.01
*enddo
!创建弹簧单元
type,3
*do,i,1,ntol
ni=nodno(i)
n,tmmax+i,nx(ni),ny(ni),nz(ni)-0.5 !创建节点(重合)
real,i+1
!注意此处生成弹簧单元节点顺序,改变了顺序也即是改变了单元坐标系X的方向。
e,ni,tmmax+i
*enddo
nsel,s,,,tmmax+1,tmmax+ntol
d,all,all
finish
/solu
allsel,all
nsubst,100,,1
autots,on
solve
!===============
最后的竖向位移云图如下:
可见其位移趋势符合常识。弹簧单元的轴力云图如下:
从图中可见,只有中部弹簧受力,两边受拉弹簧轴力为0,说明该过程有效的实现了单向弹簧作用。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删