本实例涉及的模型是一个信号传输系统的有限元模型,该模型主要由电缆(cable)和固定夹(clamp)组成。模型的特点是所有clamp的设计、划分网格方式均相同,且clamp数量有134个之多。故在生成模型时可以将一个已经划分好网格的clamp“复 制”并“粘贴”到期望的位置,方便快捷,省去重复构建134个clamp的繁杂劳动。本文将重点讲解如何用APDL语言实现clamp的“复 制粘贴”。
在进行clamp的“复 制、粘贴”之前,做了一些前期准备工作,这里只做简单描述,这些工作非本文重点。
1,cable的模型已构建完成。
2,已将一个clamp作为原始clamp,将其划分好网格,并建立局部坐标系,坐标系编号为11。
3,已在模型中构建134个局部坐标系,编号为1011~1144,这些局部坐标系标明了“粘贴”clamp的所有期望位置。
/PREP7
!打开ansys前处理模块。在ansys经典版本中,有前处理模块、求解器模块、后处理模块等。在使用某个模块的功能前,必须先打开对应的模块。
CSYS,11
!激活局部坐标系11,即原始clamp的坐标系。
CMSEL,S,CLAMP
!选择原始clamp的 所有元素。
NSLE,S,1
!选择与原始clamp元素相关的节点。
*GET,NUMNODE1,NODE,,COUNT
*GET,MINODE1,NODE,,NUM,MIN
!获取上述节点的节点总数,赋值给NUMNODE1。获取上述节点的最小的一个节点编号,赋值给MINODE1。这两个语句在做*Do循环时是经常用到,是很实用的两个*Get语句,经常一起出现。关于*Get的用法形式有很多,其主要功能是赋值,其他的用法可查看ANSYS的help文档。个人认为*Get是个相当重要的APDL命令。
*DEL,NODE11,,NOPR
!严谨起见,如果在Database中已有叫做NODE11的数组存在,会先删除该数组。
*DIM,NODE11,ARRAY,NUMNODE1,4
!定义数组NODE11,此数组的维度是NUMNODE1(原始clamp的节点总数)个横行,4个竖列。定义此数组将用于储存原始clamp以及复 制出的新clamp的所有节点的节点编号、x坐标、y坐标、z坐标。下文中将有该数组的图解及详细解释。
*DO,I,1,NUMNODE1,1
!开始Do循环,循环变量是I,从1开始,到NUMNODE1为止,每次循环I递加1。对原始clamp的所有节点做循环。
NODE11(I,1)=MINODE1
!将节点编号存入数组NODE11
*GET,NODE11(I,2),NODE,MINODE1,LOC,X
!将节点的x坐标存入数组NODE11。注意,之前的语句已激活了原始clamp的局部坐标系11,故此处是在局部坐标系11下的x坐标值。在操作坐标值时,务必要弄清楚坐标值是在哪个坐标系下的,在实际工作中,这一点很容易出错。下面的y、z坐标同理。
*GET,NODE11(I,3),NODE,MINODE1,LOC,Y
!将节点的y坐标存入数组NODE11
*GET,NODE11(I,4),NODE,MINODE1,LOC,Z
!将节点的z坐标存入数组NODE11
MINODE1=NDNEXT(MINODE1)
某个节点循环完成后,将集 合中下一个节点编号赋值给MINODE1,然后开始下一次循环。NDNEXT(节点编号)是找到某个节点集 合的下一个节点的节点编号的命令。在实际工作中,还会对元素编号进行循环,会用到ELNEXT(element 编号)的命令,作用是找到某个元素集 合的下一个元素的元素编号。这两个用法很常见。
*ENDDO
!结束循环。至此,已将原始clamp的所有节点的节点编号、x坐标值、y坐标值、z坐标值存储至数组NODE11中。
*CREATE,MOVE_CLAMP
! *CREATE是创建宏文件的命令,此处创建了名为MOVE_CLAMP的宏文件。以下至*END命令为止,是宏文件的详细内容。下文中将用*USE命令调用该宏文件。
ALLS ALL
!此命令用于选择模型中所有的集 合,包括所有的节点、元素、keypoint、线、面等。
*GET,NODEMX,NODE,,NUM,MAX
!获取模型中最大的节点编号,赋值给变量NODEMX
*VFILL,NODE11(1,1),RAMP,NODEMX+1,1
!*VFILL用于填充数组。数组NODE11的结构如下图,该数组有名为loop的参数,即每行的行号。此处*VFILL是要将节点编号这一竖列重新填充,填充时每行的计算规则为:((NODEMX+1)+(n-1)*1),即NODEMX+n,其中n为该行对应loop编号。这个操作的作用是产生了新的clamp的节点编号。
CMSEL,S,CLAMP
!选择原始clamp的所有元素
NSLE,S,1
!选择上述元素对应的所有节点。
NGEN,2,NODEMX,ALL, , , , , ,1,
!在原始clamp的位置处复 制其所有节点,新节点的节点编号将与数组NODE11的新节点编号一一对应。
EGEN,2,NODEMX,ALL, , , , , , , , , , ,
!在原始clamp的位置处复 制其所有的元素。
CMSEL,U,CLAMP
!此时选中的元素包括原始clamp的元素和新复 制出来的元素,用CMSEL,U,CLAMP命令不选择原始clamp的元素,则剩下的就是新复 制出来的元素。
CM,CLAMP_%ARG1%,ELEM
!将新复 制出来的元素命名为CLAMP_%ARG1%,即新的clamp。此时新复 制出的clamp跟原始clamp处在同一位置,完全重合在一起,下面的命令流将会把新clamp移至期望的位置。此处的%是起连字符作用。如,若ARG1=1011,则此时为CLAMP_1011。ARG1是在模型中构建的局部坐标系的编号。在使用宏文件时,ARG1将会被分别赋值1011~1144。
NSLE,S,1
!选择集合CLAMP_%ARG1%元素对应的所有节点。
CSYS,ARG1
!激活局部坐标系ARG1
/NOPR
SHPP,OFF
!关闭元素形状检查。将新clamp移至期望位置的过程中,节点是逐个移动的。当某个节点移动时,该节点组成的元素将产生形状畸变,此时ansys就会报错,命令流无法继续移动下一个节点。故此处关闭元素形状检查。
/NERR,0,100000000, ,0,0,
*DO,TT,1,NUMNODE1,1
!对所有复 制出的新的clamp节点进行循环。循环变量是TT,循环NUMNODE1(新clamp的节点总数)次,每次循环TT递加1。
NMODIF,NODE11(TT,1),NODE11(TT,2),NODE11(TT,3),NODE11(TT,4)
!此时已经激活局部坐标系ARG1,此时NODE11第一竖列储存的节点编号也是复 制出的新节点编号。在局部坐标系ARG1下,NMODIF命令将所有新节点移至x= NODE11(TT,2)、y= NODE11(TT,3)、z= NODE11(TT,4)的位置处。节点构成的元素也将随之移动至期望位置。至此,一个新的clamp的节点和元素移动完成。
*ENDDO
/NERR,5,1000000, ,0,5,
/GOPR
SHPP,ON
!重新开启元素形状检查。
*END
!宏文件编辑结束
*DO,KK,1011,1144,1
!对所有局部坐标系进行循环,循环变量KK初始值为1011,终了值是1144,每次循环KK递加1,从1011至1144循环134次。
*USE,MOVE_CLAMP,KK
!*USE使用宏文件,MOVE_CLAMP是宏文件名称,即上文中用*CREATE命令生成的宏文件。KK是带入的参数,即ARG1,表示不同的局部坐标系编号。注意:使用宏文件时,功能是很强大的,其格式为 *USE,FILE_NAME, ARG1, ARG2, ARG3… 即可以加若干个不同参数,此例中只用了一个参数。
*ENDDO
!循环结束,所有clamp“复 制粘贴”完成。