/PREP7
CYL4,0,0,20
antype,static
et,1,plane42
r,,0.001
mp,ex,1,2.1E11
mp,nuxy,1,0.3
mp,dens,1,999
esize,2
type,1
amesh,all
lopp=0
*dim,a,array,443,1
/solu
nropt,full,,on
ekill,384
ekill,321
ekill,380
ekill,320
*do,j,1,443,1
/solu
*get,judge,elem,j,attr,live 获取生死单元的value,活着的单元其值应为1,死的单元显示的是-1
*set,a(j,1),judge 将单元死活的信息存入数组a(443,1)中
*if,judge,eq,1,then 判断judge是否等于1,如果等于1,则进行下一步
esel,s,elem,,j 选择j单元
nsle,s 选择j单元的四个节点
esln,s 选择与节点相连接的单元
esel,r,live 在以上单元的基础上再剔选出活单元
num_1=elmiqr(0,13) 确定所选择活单元的个数
*if,num_1,eq,2,then 如果说num_1等于2,则
ekill,j 杀死j单元
esel,s,live 选择或者的单元
eplot 显示单元
lopp=lopp+1
*endif
*endif
*enddo 结束循环
这段程序意在删除采用生死单元后在网格边界出现的畸变边界,如下图所示的边界,
在缺口处,382单元周围除322单元外无其他单元与其相邻,在加载惯性力作用的时候会导致其上的节点位移过大,
而无法继续进行计算。故我编制了*do,i,1,443,1......*enddo这段程序来删除这样的单元。
经分析发现像382这样的单元存在这样的一个特征,其周围只有1个活单元与其相连接,包括其本身也就只有2个单元。
以此为特征作为剔选的标准。
现在问题来了,在运行过程中,并未达到我想要得效果,应该删除的382单元未能删除,经过再三分析,我未能找出程序中的问题。
并且数组a中出现了大量的0值,在之前我就只杀死了4个单元,为什么会有那么多0值的出现,请大家帮忙看下解答解答,感激万分。
|