2013-11-22 16:47:08| 分类: ANSYS 实例 - GUI | 标签: |举报 |字号大中小 订阅
9. 进一步的探讨
前面的计算结果表明:使用函数加载有可能使载荷步、子步以及斜坡还是跃变加载方式的设置失效。下面试图解决这个问题。
(1) 使用命令流计算每个节点上的压力值
我们看到,如果采用常数方式加载,几种设置都是有效的。因此,解决问题的第一个办法就是将函数方式加载转换为常数方式。为此,需要根据有载荷节点的坐标计算出每个节点上的压力,再对该节点施加常数形式的压力。这可以使用如下命令流来实现:
!***********************
CSYS, 1 ! 转换到总体圆柱坐标系,y 值为角度
!*
*del,all ! 删除所有定义的参数
*afun,deg ! 设置角度单位为 "度"
ASEL, S, , , 3 ! 压力载荷作用在 Area 3
NSLA, S, 1 ! 选择附着在面上的所有节点
cm, sf_node, NODE
!*
*get, nnum, NODE, 0, Count ! 当前选择集中的节点总数
*get, nmin, NODE, 0, NUM, Min ! 当前选择集中的最小节点编号
*get, nmax, NODE, 0, NUM, Max ! 当前选择集中的最大节点编号
!*
*DIM,yy,ARRAY,nnum,1,1, , ,
!*
im=1 ! 计算有多少个不同的 y 值
yy(1)=0 ! 本例中,第一个 y 值可以设为 0.
*do, i, nmin, nmax
*if, nsel(i), eq, 1, then ! 如果节点 i 在当前选择集中
y0=NY(i)
pp=1
!*
*do, k, 1, im
*if, abs(y0-yy(k)),le,abs(y0*1e-5), then
pp=-1
*exit
*endif
*enddo
!*
*if, pp, gt, 0, then
im=im+1
yy(im)=y0
*endif
*endif
*enddo
!*
*do, i, 1, im-1
y0=yy(i)
*do, j, i+1, im
y1=yy(j)
*if, y1, lt, y0, then
yy(i) = y1
yy(j) = y0
y0=y1
*endif
*enddo
*enddo
!*
SFADELE, all, ,all ! 清除原来定义的表面载荷
*do, i, 1, im-1 ! 需要选择两排节点,才能生成面元以施加压力
CMSEL,S,SF_NODE
y0=yy(i)
y1=yy(i+1)
NSEL,R,LOC,Y,y0-0.01,y1+0.01
y2 = (y0+y1)/2
p = 8 + 7*cos(y2) ! 注 1
! 注意这里在 * 号前后不能有空格否则后面的内容会被当作注解处理
! cos(y0/42*90) 如果当前坐标系是总体直角坐标系 (csys, 0)
!*
SF, all,PRES,p
*enddo
!*
allsel,all
csys, 0
save
!***********************
节点压力值如下图所示 [注 2]:
注 1: 如果采用最初的压力函数:P = 8E7 + 7E7 * cos(Y),求解时立即出现有单元高度扭曲的错误信息,求解无法完成。故参考前面的内容,将压力函数设置为: P = 8 + 7 * cos(Y),计算可以完成。
注 2: 由图 61 可见,虽然是使用 SF 命令施加节点压力,但是实际上 ANSYS 是根据所选择的节点,考虑到所划分的网格,由这些节点生成了若干表面单元,并在这些表面单元上施加载荷。
最后一步的计算结果如下,结果显示在以总体 z 轴为轴线的圆柱坐标系中 (RSYS, 1):
评论