生死单元法
文章目录
- 生死单元法
- 前言
- 一、单元杀死过程
- 二、单元生成
- 三、完整命令
- 总结
前言
通过生成和杀死单元,可以模拟那些单元数随着载荷步的进行不断增加,对按照要求排序后生成和杀死的单元施加载荷和约束,进行循环求解,达到特殊求解要求。如焊接等。
一、单元杀死过程
有限元模型
单元杀死过程
...... !前面步骤参考前面笔记
*do,I,1,nse !对中间区域单元进行循环ekill,neorder(i) !杀死排序后的单元esel,s,live !单元选择eplot !单元显示
*enddo
二、单元生成
......... !前面步骤参考前面笔记
allsel,all
/seg,multi,ealive,0.2 !将生成单元动画显示,间隔0.2秒
*do,I,1,nse !对中间区域单元循环ealive,neorder(i) !生成排序后的单元esel,s,live !选择没有杀死的单元eplot !单元显示esel,all*do,j,1,4d,nelem(neorder(i),j),temp,max_tem !对单元节点约束*enddo
*enddo
/seg,off,ealive,0.2 !结束单元动画生成
anim,1,1
三、完整命令
finish
/clear,start
/filname,lell
/title,fff
/prep7
/unit,si
et,1,13,4
et,2,13,4
!====================
mptemp,1,20,500,800,1200,1500
mpdata,ex,1,1,2.09e11,1.72e11,1.33e11,0.84e11,0.45e11
mpdata,ex,2,1,2.16e11,1.78e11,1.42e11,1.04e11,0.68e11
mpdata,ex,3,1,2.12e11,1.75e11,1.39e11,1.07e11,0.83e11
tb,bkin,1,5
tbtemp,20,1
tbdata,1,315e6,2.09e10
tbtemp,500,2
tbdata,1,212e6,1.72e10
tbtemp,800,3
tbdata,1,153e6,1.33e10
tbtemp,1200,4
tbdata,1,93e6,0.84e10
tbtemp,1500,5
tbdata,1,33e6,0.45e10 !材料1
!=======================
tb,bkin,2,5
tbtemp,20,1
tbdata,1,330e6,2.12e10
tbtemp,500,2
tbdata,1,213e6,1.75e10
tbtemp,800,3
tbdata,1,153e6,1.39e10
tbtemp,1200,4
tbdata,1,73e6,1.07e10
tbtemp,1500,5
tbdata,1,13e6,0.83e10 !材料2
!==========================
tb,bkin,3,5
tbtemp,20,1
tbdata,1,314e6,2.16e10
tbtemp,500,2
tbdata,1,203e6,1.78e10
tbtemp,800,3
tbdata,1,143e6,1.42e10
tbtemp,1200,4
tbdata,1,63e6,1.04e10
tbtemp,1500,5
tbdata,1,13e6,0.68e10! !材料3
!=============================
mp,dens,1,7850
mp,dens,2,7770
mp,dens,3,7860 !密度
mp,alpx,1,1.23e-5
mp,alpx,2,1.38e-5
mp,alpx,3,1.48e-5 !线膨胀系数
mp,nuxy,1,0.3
mp,nuxy,2,0.29
mp,nuxy,3,0.29 !泊松比
mp,kxx,1,33
mp,kxx,2,32
mp,kxx,3,34 !导热系数
mp,c,1,561
mp,c,2,683
mp,c,3,983 !比热容
mp,murx,1,1
mp,murx.2.1
mp,murx,3,1 !相对磁导率
mp,reft,1,20
mp,reft,2,1500
mp,reft,3,20 !参考温度
!==================================
!==================================
*AFUN,DEG
csys,0
width=1
beight=0.3
ar=0.14*tan(30)
ex=0.01*tan(60)
df=ar+ex
cf=df/cos(60)
!============================
k,1,0,0,0
k,2,width/2-0.01-ar,0,0
k,3,width/2+0.01+ar,0,0
k,4,width,0,0
k,5,width/2-0.01,beight/2-0.01,0
k,6,width/2+0.01,beight/2-0.01,0
k,7,width/2-0.01,beight/2+0.01,0
k,8,width/2+0.01,beight/2+0.01,0
k,9,0,beight,0
k,10,width/2-0.01-ar,beight,0
k,11,width/2+0.01+ar,beight,0
k,12,width,beight,0
!=============================
n,1,width/2+0.01+ar,beight,0 !模型中的A点
n,2,width,beight,0 !B点
n,3,width/2+0.01+ar,0,0 !C点
larc,10,11,7,cf
larc,2,3,5,cf
a,1,2,5,7,10,9
a,10,7,5,2,3,6,8,11
a,3,4,12,11,8,6
/traid,off !关掉坐标的三角符号显示
/plots,info,0 !关掉图形屏幕中信息的显示
/devices,vector,1 !采用向量标示
esize,0.03
type,2
mat,2
amesh,2
esize,0.03
type,1
mat,1
amesh,1
mat,3
amesh,3
nummrg,all
numcmp,all
/image,save,vmesh,bmp
/devices,vector,0 !采用光栅显示模式
finish
!===================================
/solu
*get,minx,node,,mnloc,x
nsel,s,loc,x,minx
d,all,ux,0
d,all,temp,20
*get,miny,node,,mnloc,y
nsel,s,loc,y,miny
d,all,uy,0
nsel,all
*get,maxx,node,,mxloc,x
nsel,s,loc,x,maxx
d,all,temp,20
!======================
*set,nna,2
esel,all
*get,emax,elem,,num,max
asel,s,area,,nna
esla
*get,nse,elem,,count
*dim,ne,,nse
*dim,n1,,nse
*dim,n2,,nse
*dim,nex,,nse
*dim,ney,,nse
*dim,neorder,,nse
ii=0
*do,I,1,emax*if,esel(i),eq,1,thenii=ii+1ne(ii)=i*endif
*enddo !将焊缝处单元编号存于数组中
*do,I,1,nse*get,ney(i),elem,ne(i),cent,y*get,nex(i),elem,ne(i),cent,x
*enddo !将焊缝区单元质心x,y坐标分别放入nex,ney数组中
d=0
*do,I,1,nse*if,ney(i),ge,beight/2,thend=d+1n2(d)=ne(i)*endif
*enddo
c=0
*do,I,1,nse*if,ney(i),lt,beight/2,thenc=c+1n1(c)=ne(i)*endif
*enddo !将焊缝上面单元存于n2中,下面存于n1中
esel,none
*do,I,1,desel,a,elem,,n2(i)
*enddo !选取焊缝上边单元
eplot
*create,shanghanf,mac
mine=0
*dim,ne2,,d
*dim,nex2,,d
*dim,ney2,,d
*do,i1,1,desel,u,elem,,mine*get,nse2,elem,,countii=0*do,I,1,emax*if,esel(i),eq,1,thenii=ii+1ne2(ii)=i*endif*enddo*do,I,1,nse2*get,ney2(i),elem,ne2(i),cent,y*get,nex2(i),elem,ne2(i),cent,x*enddominy=1e10minx=1e10*do,I,1,nse2*if,ney2(i),lt,miny,thenminy=ney2(i)minx=nex2(i)mine=ne2(i)*else*if,ney2(i),eq,miny,then*if,nex2(i),lt,minx,thenminy=ney2(i)minx=nex2(i)mine=ne2(i)*endif*endif*endif*enddoneorder(i1)=mine
*enddo !对上半部分单元按y轴进行排序
*end
*create,xiahanf,mac
maxe=0
esel,none
*do,I,1,cesel,a,elem,,n1(i)
*enddo
*dim,ne1,,c
*dim,nex1,,c
*dim,ney1,,c
*do,i1,1,cesel,u,elem,,maxe*get,nse3,elem,,countii=0*do,I,1,emax*if,esel(i),eq,1,thenii=ii+1ne1(ii)=i*endif*enddo*do,I,1,nse3*get,ney1(i),elem,ne1(i),cent,y*get,nex1(i),elem,ne1(i),cent,x*enddomaxy=-1e10maxx=-1e10*do,I,1,nse3*if,ney1(i),gt,maxy,thenmaxy=ney1(i)maxx=nex1(i)maxe=ne1(i)*else*if,ney1(i),eq,maxy,then*if,nex1(i),lt,maxx,thenmaxy=ney1(i)maxx=nex1(i)maxe=ne1(i)*endif*endif*endif*enddoneorder(i1+d)=maxe
*enddo
*end
shanghanf
xiahanf
!===================
max_tem=1500
dt1=1e-3
dt=5
t=0
esel,all
eplot
/auto,1
/replot
*do,I,1,nseekill,neorder(i)esel,s,liveeplot
*enddo
eplot
allsel,all
/seg,multi,ealive,0.2
*do,I,1,nseealive,neorder(i)esel,s,liveeplotesel,all*do,j,1,4d,nelem(neorder(i),j),temp,max_tem*enddo
*enddo
/seg,off,ealive,0.2
anim,1,
总结
生死单元法可以对按照某种条件排序后的单元,进行生成和杀死,在这个过程中单元上的载荷及约束也会跟着生成和杀死,这可以很容易的对那些动态单元进行模拟。