目 录
- Blog Links
- 一、前言
- 二、创建法兰
- 三、创建垫片
- 四、创建螺栓
- 五、创建接触
- 六、加载及求解
- 七、后处理
Blog Links
- DalNur | 博客总目录
- ANSYS 有限元分析 概述
- ANSYS 有限元分析 坐标系/工作平面
- ANSYS 有限元分析 几何建模
- ANSYS 有限元分析 网格划分
- ANSYS 有限元分析 选择与组件
- ANSYS 有限元分析 修改与编辑
- ANSYS 有限元分析 接触分析
- ANSYS 有限元分析 加载/求解/输出
- ANSYS 有限元分析 后处理 General Postproc
- ANSYS 有限元分析 后处理 结点解与单元解
- ANSYS 有限元分析 命令流 实例
- ANSYS 静力 分析实例 悬臂梁
- nCodeDL 高周疲劳 分析实例 悬臂梁
一、前言
本文为 ANSYS 有限元分析 系列博客中所采用的法兰分析实例的系列命令流。
二、创建法兰
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
/PREP7 ! 进人前处理器
*AFUN,RAD ! 指定角度单位为弧度(非必要步骤)
pi = ACOS(-1) ! 获取圆周率pi的数值(非必要步骤)
*AFUN,DEG ! 将角度单位切换为度(非必要步骤)
/com,************* 1. 创建坐标系 *************
CSYS,0 ! 激活总体直角坐标系统
xc = 500 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 90 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
LOCAL,15,0,xc,yc,zc,thxy,thyz,thzx ! 创建局部直角坐标系15
CSYS,15 ! 激活局部坐标系15
xc = 1000 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 0 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
CLOCAL,16,1,xc,yc,zc,thxy,thyz,thzx ! 根据激活的局部坐标系15定义新的局部柱坐标系16
/com,************** 2. 创建几何 **************
CSYS,16 ! 激活局部柱坐标系16
WPCSYS,-1 ! 根据当前坐标系定义工作平面
d0 = 40 ! 螺栓孔直径为40
K,1,d0/2,0 $ K,2,d0/2,45 $ K,3,d0/2,90 $ K,4,d0/2,135 $ K,5,d0/2,180
L,1,2 ! 由两个关键点创建一条线(可以是直线或是弧线取决于坐标系)
*REPEAT,4,1,1 ! 上一条命令重复执行4次,始末关键点编号增量为1。
CSYS,15 ! 激活局部坐标系15
CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17
WPCSYS,-1, ! 根据当前坐标系定义工作平面
width = 88 ! 环带宽度为88
num = 55 ! 螺栓总数
Ds = 2000 ! 螺栓分度圆直径
K,6,Ds/2+width/2 $ K,7,Ds/2+width/2,180/num $ K,8,Ds/2,180/num
K,9,Ds/2-width/2,180/num $ K,10,Ds/2-width/2,0
L,6,7
*REPEAT,4,1,1
L,1,6
*REPEAT,5,1,1
/PNUM,KP,1 ! 显示关键点编号
/PNUM,LINE,1 ! 显示线编号
/REPLOT ! Replot
GPLOT ! Multi-Plots
AL,1,10,5,9 ! 创建平面,平面由边界线围成,边界线的编号分别为1、10、5、9。
*REPEAT,4,1,1,1,1 ! 上一条命令重复执行4次,各边界线编号增量均为1。
/PNUM,KP,0 ! 关闭关键点编号显示
/PNUM,LINE,0 ! 关闭线编号显示
/PNUM,AREA,1 ! 显示面的编号
/REPLOT ! Replot
GPLOT ! Multi-Plots
/com,************** 3. 定义材性 **************
ALLSEL,ALL ! *GET前最好全选,以免出现意向不到的错误。
*GET,mtmax,MAT,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量mtmax。
MPTEMP,,,,,,,, ! 为材料属性定义温度表
MPTEMP,1,0 ! 为材料属性定义温度表
MPDATA,EX,mtmax+3,,2e5 ! 定义mtmax+1号材料属性弹性模量
MPDATA,PRXY,mtmax+3,,0.28 ! 定义mtmax+1号材料属性泊松比
MPDATA,DENS,mtmax+3,,2700 ! 定义mtmax+1号材料属性密度
/com,************** 4. 定义单元 **************
! MESH200单元
*GET,etmax,ETYP,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量etmax (etmax=0)。
ET,etmax+2,MESH200 ! 定义单元类型为Mesh200,其单元识别号为etmax+2。
KEYOPT,etmax+2,1,7 ! 设置单元etmax+2的关键选项,即令 Keyoption(1)=7。
! SOLID186单元
ET,etmax+3,SOLID186 ! 定义单元类型为SOLID186,其单元识别号为etmax+3。
KEYOPT,etmax+3,2,1 ! 设置单元关键选项,将单元类型参考号为etmax+1的单元设置为完全积分单元。
/com,************** 5. 设置种子 **************
LESIZE,9, , ,2, , , , ,0 ! 设置组成面的边(线)的网格大小,编号为9的线被分成2段。
*REPEAT,5,1 ! 上一条命令重复执行5次
LESIZE,1, , ,2, , , , ,0 ! 设置线的网格大小,编号为1的线被分成2段。
*REPEAT,4,1 ! 上一条命令重复执行4次
LESIZE,8, , ,2, , , , ,0 ! 设置线的网格大小,编号为8的线被分成2段。
/com,************** 6. 创建网格 **************
MAT,mtmax+3 ! 给随后生成的单元激活一个材料号
TYPE,etmax+2 ! 给随后生成的单元激活一个单元类型号
MSHAPE,0,2D ! 指定划分单元的形状,生成四边形单元。
MSHKEY,1 ! 采用映射网格划分方式划分网格
AMESH,ALL ! 将所有面划分网格
/PNUM,ELEM,1 ! 显示单元编号
/REPLOT ! Replot
EPLOT ! Elements plots
/VIEW,1,-1 ! Left View
/ANG,1
/REP,FAST
MAT,mtmax+3 ! 给随后生成的单元激活一个材料号
TYPE,etmax+3 ! 给随后生成的单元激活一个单元类型号
! 执行拉伸
EXTOPT,ESIZE,8,1, ! EXTOPT:由面单元生成体单元的控制选项;
! 8表示在体生成或体扫略方向上单元分割数量为8;
! 1表示在体生成或体扫略方向上的间隔率为1(默认)。
EXTOPT,ACLEAR,1 ! 体单元网格生成后清除面单元网格即MESH200。
tf = 40 ! 法兰厚度为40
VEXT,ALL, , ,0,0,tf ! 通过给的偏移量由面生体
EPLOT ! Elements plots
/REPLOT ! Replot
/com,************** 7. 镜像及阵列 **************
CSYS,15 ! 激活局部直角坐标系15
VSYMM,Y,ALL, , , ,0,0 ! 对所有几何体进行镜像操作,镜像平面为xoz平面。
CSYS,17 ! 激活局部柱坐标系17
num = 55 ! 螺栓总数
VGEN,4,ALL, , , ,360/num, , ,0 ! 复制体,重复生成次数4,复制全部体。
! 当前激活坐标系下,关键点坐标值的偏移量为(--,360/num,0)
! 单个偏转角度为360/num
/PNUM,ELEM,0 ! 关闭单元编号显示
/REPLOT ! Replot
EPLOT ! Elements plots
NUMMRG,ALL ! 对实体进行合并
NUMCMP,ALL ! 压缩所定义项的编号
ALLSEL,ALL,ELEM ! Selects all elements.
CM,TopFlangeElems,ELEM ! 由所选实体生成一个组件
! 元件名称:TopFlangeElems;元件中的数据类型:单元。
CSYS,16 ! 激活局部柱坐标系16
CLOCAL,19,0 ! 创建局部直角坐标系19
VSYMM,Z,ALL, , , ,0,0 ! 对所有几何体进行镜像操作,镜像平面为局部坐标系19的xoY平面。
ALLSEL,ALL,ELEM ! Selects all elements.
CMSEL,U,TopFlangeElems ! 上一选择集中除去组件TopFlangeElems内的单元
CM,BotFlangeElems,ELEM ! 由所选实体生成一个组件
! 元件名称:BotFlangeElems;元件中的数据类型:单元。
/com,************ 8. 输出cdb文件 *************
ALLSEL,ALL ! 全选 select all entities
CDWRITE,DB,'PartFlange','cdb',,'','' ! 当前模型另存为 PartFlange.cdb 文件。
三、创建垫片
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
/PREP7 ! 进人前处理器
*AFUN,RAD ! 指定角度单位为弧度(非必要步骤)
pi = ACOS(-1) ! 获取圆周率pi的数值(非必要步骤)
*AFUN,DEG ! 将角度单位切换为度(非必要步骤)
/com,************* 1. 创建坐标系 *************
CSYS,0 ! 激活总体直角坐标系统
xc = 500 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 90 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
LOCAL,15,0,xc,yc,zc,thxy,thyz,thzx ! 创建局部直角坐标系15
CSYS,15 ! 激活局部坐标系15
xc = 1000 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 0 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
CLOCAL,16,1,xc,yc,zc,thxy,thyz,thzx ! 根据激活的局部坐标系15定义新的局部柱坐标系16
/com,************* 2. 创建几何体 *************
CSYS,16
tf = 40 ! 法兰盘厚度
CLOCAL,18,0,0,0,tf ! 创建局部直角坐标系18
*GET,vlmax,VOLU,,NUM,MAX ! 获取当前定义的最大几何体编号并将其赋予变量vlmax。
WPCSYS,-1, ! 定义工作平面,工作平面为局部直角坐标系18的xoy平面。
d0 = 40 ! 螺栓孔直径为40
d1 = 70 $ tw = 5 ! 垫片外径为70,垫片厚度为5。
CYL4,0,0,d0/2,0,d1/2,90,tw ! 创建四分之一垫片,其编号为V1,见下图。
CYL4,0,0,d0/2,90,d1/2,180,tw ! 创建四分之一垫片,其编号为V2,见下图。
CYL4,0,0,d0/2,180,d1/2,270,tw ! 创建四分之一垫片,其编号为V3,见下图。
CYL4,0,0,d0/2,270,d1/2,360,tw ! 创建四分之一垫片,其编号为V4,见下图。
VPLOT ! Volumes plots
/PNUM,AREA,0 ! 关闭几何面编号显示
/PNUM,VOLU,1 ! 显示几何体编号
/REPLOT ! Replot
VGLUE,1,2,3,4 ! 粘接1号、2号、3号和4号几何体。
! VGLUE,ALL ! 粘接全部几何体。
/com,************** 3. 定义材性 **************
*GET,mtmax,MAT,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量mtmax。
MPTEMP,1,0 ! 为材料属性定义温度表
MPDATA,EX,mtmax+1,,2e5 ! 定义mtmax+1号材料属性弹性模量
MPDATA,PRXY,mtmax+1,,0.28 ! 定义mtmax+1号材料属性泊松比
MPDATA,DENS,mtmax+1,,7.85e-9 ! 定义mtmax+1号材料属性密度
/com,************** 4. 定义单元 **************
*GET,etmax,ETYP,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量etmax。
ET,etmax+1,SOLID185 ! 定义单元类型为SOLID185,其单元识别号为etmax+1。
KEYOPT,etmax+1,2,2 ! 设置单元关键选项,KEYOPT(2)=2,Enhanced strain formulation。
/com,************** 5. 划分网格 **************
CSYS,18 ! 激活局部主坐标系18
tw = 5 ! 垫片厚度为5
MAT,mtmax+1
TYPE,etmax+1
LSEL,S,LENGTH,,tw ! 按长度选线,选择垫片厚度方向上的全部线。
LESIZE,ALL, , ,3, , , , ,0 ! 分3段(布种子)
LSEL,S,LENGTH,,0,d1/2-d0/2 ! 按长度选线,选择垫片半径方向上的全部线。
LESIZE,ALL, , ,3, , , , ,0 ! 分3段(布种子)
LSEL,S,LINE, ,ALL ! 选择全部线
LSEL,U,LENGTH,,tw ! 上一选择集中除去长度为tw的线
LSEL,U,LENGTH,,0,d1/2-d0/2 ! 上一选择集中除去长度为d1/2-d0/2的线
LESIZE,ALL, , ,10, , , , ,0 ! 分10段(布种子)
VSWEEP,1 ! 对1号几何体进行扫掠分网
VSWEEP,5 ! 对5号几何体进行扫掠分网
VSWEEP,6 ! 对6号几何体进行扫掠分网
VSWEEP,7 ! 对7号几何体进行扫掠分网
! VSWEEP,ALL
/com,************** 6. 环形阵列 **************
CSYS,18 ! 激活局部直角坐标系18
tw = 5 $ tf = 40 ! 分别为垫片厚度和法兰厚度
VSEL,S,VOLU, ,ALL ! 选择所有几何体
VGEN,2,ALL, , , 0,0, -(tw+2*tf) ! 沿局部轴z轴阵列,坐标增量为-(tw+2*tf),生成相关结点和单元。
CSYS,15 ! 激活局部坐标系15
CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17
CSYS,17 ! 激活局部柱坐标系17
num = 55 ! 螺栓总数
VSEL,S,VOLU, ,ALL ! 选择所有几何体
VGEN,4,ALL, , , ,360/num ! 复制体,重复生成次数4。
! 当前激活坐标系下,关键点坐标值的偏移量为(--,360/num,0)
! 单个偏转角度为360/num
NUMMRG,ALL ! 对实体进行合并
NUMCMP,ALL ! 压缩所定义项的编号
ALLSEL,ALL,ELEM ! Selects all elements.
CM,WasherElems,ELEM ! 由所选实体生成一个组件
! 元件名称:WasherElems;元件中的数据类型:单元。
/com,************ 7. 输出cdb文件 *************
ALLSEL,ALL ! 全选 select all entities
CDWRITE,DB,'PartWasher','cdb',,'','' ! 当前模型另存为 PartWasher.cdb 文件。
四、创建螺栓
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
/PREP7 ! 进人前处理器
*AFUN,RAD ! 指定角度单位为弧度(非必要步骤)
pi = ACOS(-1) ! 获取圆周率pi的数值(非必要步骤)
*AFUN,DEG ! 将角度单位切换为度(非必要步骤)
/com,************* 1. 创建坐标系 *************
CSYS,0 ! 激活总体直角坐标系统
xc = 500 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 90 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
LOCAL,15,0,xc,yc,zc,thxy,thyz,thzx ! 创建局部直角坐标系15
CSYS,15 ! 激活局部坐标系15
xc = 1000 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 0 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
CLOCAL,16,1,xc,yc,zc,thxy,thyz,thzx ! 根据激活的局部坐标系15定义新的局部柱坐标系16
/com,************** 2. 定义材料 **************
*GET,mtmax,MAT,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量mtmax。
MPTEMP,,,,,,,, ! 为材料属性定义温度表
MPTEMP,1,0 ! 为材料属性定义温度表
MPDATA,EX,mtmax+1,,2e5 ! 定义mtmax+1号材料属性弹性模量
MPDATA,PRXY,mtmax+1,,0.28 ! 定义mtmax+1号材料属性泊松比
MPDATA,DENS,mtmax+1,,2700 ! 定义mtmax+1号材料属性密度
/com,************** 3. 定义单元 **************
*GET,etmax,ETYP,,NUM,MAX ! 获取当前定义的最大单元类型编号并将其赋予变量etmax。
ET,etmax+1,BEAM189 ! 定义梁单元
/com,************** 4. 定义截面 **************
*GET,scmax,SECP,,NUM,MAX ! 获取当前定义的最大梁截面编号并将其赋予变量scmax。
SECTYPE,scmax+1,BEAM,CSOLID, ,0 ! 定义梁截面
SECOFFSET,CENT ! 设置截面偏置,即梁杆轴端点位于梁截面形心上。
de = 38 ! 螺栓有效直径
SECDATA,de/2,10,3 ! 应力截面直径,圆周方向10份,半径方向3份。
SECTYPE,scmax+2,BEAM,CSOLID, ,0
SECOFFSET,CENT
ds = 26 ! 螺栓缩进段直径
SECDATA,ds/2,10,3
/com,************* 5. 创建关键点 *************
CSYS,16
CLOCAL,19,0 ! 创建局部直角坐标系19
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
startPntZ = -(tf+tw) ! 在局部坐标系19下,梁轴线起点z坐标值。
midPntZ = 0 ! 螺栓预紧力施加位置处
endPntZ= tf+tw ! 在局部坐标系19下,梁轴线终点z坐标值。
*GET,lnmax,LINE,,NUM,MAX ! 获取当前定义的最大几何线编号并将其赋予变量lnmax。
*GET,kpmax,KP,,NUM,MAX ! 获取当前定义的最大关键点编号并将其赋予变量kpmax。
K, ,0,0,startPntZ ! 创建关键点
K, ,0,0,midPntZ
K, ,0,0,20
K, ,0,0,endPntZ
/com,************** 6. 连点成线 **************
LSTR,kpmax+1,kpmax+2 ! 创建直线
*REPEAT,3,1,1
/com,*************** 7. 布种子 ***************
LESIZE,lnmax+1, , ,6,1, , , ,0 ! 单元数量6
LESIZE,lnmax+2, , ,6,1, , , ,0 ! 单元数量6
LESIZE,lnmax+3, , ,3,1, , , ,0 ! 单元数量3
/com,************** 8. 分配属性 **************
TYPE,etmax+1 ! 激活单元类型号
MAT,mtmax+1 ! 激活材料编号
SECNUM,scmax+1 ! 激活截面编号
LMESH,lnmax+1 ! 为编号为lnmax+1的线划分网格
LMESH,lnmax+2 ! 为编号为lnmax+2的线划分网格
TYPE,etmax+1 ! 激活单元类型号
MAT,mtmax+1 ! 激活材料编号
SECNUM,scmax+2 ! 激活截面编号
LMESH,lnmax+3 ! 为编号为lnmax+2的线划分网格
/ESHAPE,1 ! 显示梁截面
/REPLOT ! Replot
/com,************** 9. 环形阵列 **************
CSYS,15 ! 激活局部坐标系15
CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17
CSYS,17 ! 激活局部柱坐标系17
num = 55 ! 螺栓总数
!LSEL,S,LINE, ,ALL ! 选择全部线
LGEN,4,ALL, , , ,360/num, , ,0 ! 执行阵列,额外阵列数为3。
ALLSEL,ALL
NUMMRG,ALL ! 对实体进行合并
NUMCMP,ALL ! 压缩所定义项的编号
/ESHAPE,0 ! 关闭梁截面显示
/REPLOT ! Replot
ALLSEL,ALL,ELEM ! Selects all elements.
CM,BoltElems,ELEM ! 由所选实体生成一个组件
! 元件名称:BoltElems;元件中的数据类型:单元。
/com,*********** 10. 创建预紧单元 ***********
CSYS,15 ! 激活局部坐标系15
CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17
CSYS,17 ! 激活局部柱坐标系17
num = 55 ! 螺栓总数
radius = 1000 ! 法兰螺栓分度圆半径
*DO,i,1,4
CMSEL,S,BoltElems ! 选择组件BoltElems(全部螺栓杆单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
startAngle = (360/num)*(i-1)-(360/num/2-1)
endAngle = (360/num)*(i-1)+(360/num/2-1)
NSEL,R,LOC,Y,startAngle,endAngle
ESLN,,1
ESEL,R,ENAME,,BEAM189 ! 选择BEAM189单元
zmid = 0 ! 预紧力施加位置处的z坐标值
CLOCAL,201,1,radius,360/num*(i-1),0 ! 创建螺栓杆处的局部柱坐标系201
PSMESH,1001+i, , ,ALL, , 15,Z, ,node(0,0,zmid),, , , !螺栓杆中间位置处插入预紧单元
CSYS,17 ! 激活局部柱坐标系17
*ENDDO
ALLSEL,ALL
EPLOT
ALLSEL,ALL,ELEM ! Selects all elements.
CM,BoltElems,ELEM ! 由所选实体生成一个组件
! 元件名称:BoltElems;元件中的数据类型:单元。
/com,************* 11. 输出cdb文件 *************
ALLSEL,ALL ! 全选 select all entities
CDWRITE,DB,'PartBolt','cdb',,'','' ! 当前模型另存为 PartBolt.cdb 文件。
五、创建接触
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
/PREP7 ! 进人前处理器
/com,************** 1. 导入cdb文件 **************
CDREAD,db,'PartFlange','cdb',,'','' ! 导入法兰模型
CDREAD,db,'PartWasher','cdb',,'','' ! 导入垫片模型
CDREAD,db,'PartBolt','cdb',,'','' ! 导入栓杆模型
ALLSEL,ALL
/ESHAPE,0 ! 显示梁截面
/REPLOT ! Replot
EPLOT ! Elements plots
/com,************** 2. 创建坐标系 **************
CSYS,0 ! 激活总体直角坐标系统
xc = 500 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 90 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
LOCAL,15,0,xc,yc,zc,thxy,thyz,thzx ! 创建局部直角坐标系15
CSYS,15 ! 激活局部坐标系15
xc = 1000 $ yc = 0 $ zc = 0 ! 局部坐标系原点位置(相对应当前激活坐标系)
thxy = 0 $ thyz = 0 $ thzx = 0 ! 局部坐标轴旋转角度度(相对应当前激活坐标系)
CLOCAL,16,1,xc,yc,zc,thxy,thyz,thzx ! 根据激活的局部坐标系15定义新的局部柱坐标系16
/com,************** 3. 螺栓端部与上法兰侧垫片间MPC绑定接触
*GET,etmax,ETYP, ,NUM,MAX ! 获取模型空间当前最大单元类型号
*GET,rlmax,RCON, ,NUM,MAX ! 获取模型空间当前最大实常数号
ET,etmax+1,TARGE170 ! 定义目标面单元 - 连续面
KEYOPT,etmax+1,2,1 ! 用户指定 rigid target nodes
ET,etmax+2,CONTA174 ! 定义接触面单元 - 离散面
KEYOPT,etmax+2,2,2 ! 接触算法:MPC。
KEYOPT,etmax+2,4,1 ! 接触探测点位置:On nodal point - normal from contact surface 。
KEYOPT,etmax+2,12,5 ! 接触面行为:始终绑定。
num = 55 ! 螺栓总数
radius = 1000 ! 法兰螺栓分度圆半径
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
startPntZ = -(tf+tw) ! 在局部坐标系15下,梁轴线起点z坐标值。
midPntZ = 0 ! 螺栓预紧力施加位置处
endPntZ= tf+tw ! 在局部坐标系15下,梁轴线终点z坐标值。
d0 = 40 ! 螺栓孔直径/垫片内径
d1 = 70 ! 垫片外径
CSYS,17 ! 激活局部坐标系17
*DO,i,1,4 ! DO循环,分别执行 i=1,2,3,4 共执行4次。
CLOCAL,201,1,radius,360/num*(i-1),0 ! 螺栓杆处的局部柱坐标系201
R,rlmax+i ! 定义新的实常数
REAL,rlmax+i ! 激活实常数
TYPE,etmax+1 ! 激活目标单元类型号
TSHAP,PILO ! 目标单元几何形状为导向结点
CMSEL,S,BoltElems ! 选择组件BoltElems(全部螺栓杆单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
E,NODE(0,0,endPntZ) ! 在结点(0,0,endPntZ)处创建目标单元
ALLSEL,ALL ! 全选,清除上述选择集。
TYPE,etmax+2 ! 激活接触单元类型号
CMSEL,S,WasherElems ! 选择组件WasherElems(全部垫片单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
! 按坐标位置选择结点,最终选出垫片外表面结点。
NSEL,R,LOC,X,0,d1/2+0.5
NSEL,R,LOC,Z,endPntZ-0.5,endPntZ+0.5
ESURF, ,TOP ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL
CSYS,17
*ENDDO
/com,************** 4. 螺栓端部与下法兰侧垫片间MPC绑定接触
*GET,etmax,ETYP, ,NUM,MAX ! 获取模型空间当前最大单元类型号
*GET,rlmax,RCON, ,NUM,MAX ! 获取模型空间当前最大实常数号
ET,etmax+1,TARGE170 ! 定义目标面单元 - 连续面
KEYOPT,etmax+1,2,1 ! 用户指定 rigid target nodes
ET,etmax+2,CONTA174 ! 定义接触面单元 - 离散面
KEYOPT,etmax+2,2,2 ! 接触算法:MPC。
KEYOPT,etmax+2,4,1 ! 接触探测点位置:On nodal point - normal from contact surface 。
KEYOPT,etmax+2,12,5 ! 接触面行为:始终绑定。
num = 55 ! 螺栓总数
radius = 1000 ! 法兰螺栓分度圆半径
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
startPntZ = -(tf+tw) ! 在局部坐标系15下,梁轴线起点z坐标值。
midPntZ = 0 ! 螺栓预紧力施加位置处
endPntZ= tf+tw ! 在局部坐标系15下,梁轴线终点z坐标值。
d0 = 40 ! 螺栓孔直径/垫片内径
d1 = 70 ! 垫片外径
CSYS,17 ! 激活局部坐标系17
*DO,i,1,4 ! DO循环,分别执行 i=1,2,3,4 共执行4次。
CLOCAL,201,1,radius,360/num*(i-1),0 ! 螺栓杆处的局部柱坐标系201
R,rlmax+i ! 定义新的实常数
REAL,rlmax+i ! 激活实常数
TYPE,etmax+1 ! 激活目标单元类型号
TSHAP,PILO ! 目标单元几何形状为导向结点
CMSEL,S,BoltElems ! 选择组件BoltElems(全部螺栓杆单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
E,NODE(0,0,startPntZ) ! 在结点(0,0,startPntZ)处创建目标单元
ALLSEL,ALL ! 全选,清除上述选择集。
TYPE,etmax+2 ! 激活接触单元类型号
CMSEL,S,WasherElems ! 选择组件WasherElems(全部垫片单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
! 按坐标位置选择结点,最终选出垫片外表面结点。
NSEL,R,LOC,X,0,d1/2+0.5
NSEL,R,LOC,Z,startPntZ-0.5,startPntZ+0.5
ESURF, ,TOP ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL
CSYS,17
*ENDDO
/com,************** 5. 创建法兰与垫片间标准接触
*GET,etmax,ETYP, ,NUM,MAX ! 获取模型空间当前最大单元类型号
*GET,rlmax,RCON, ,NUM,MAX ! 获取模型空间当前最大实常数号
R,rlmax+1 ! 定义新的实常数
ET,etmax+1,170 ! 定义目标面单元 - 连续面
ET,etmax+2,174 ! 定义接触面单元 - 离散面
KEYOPT,etmax+2,2,0 ! 接触算法:增广拉格朗日乘子法。
KEYOPT,etmax+2,4,0 ! 接触探测点位置:高斯积分点。
KEYOPT,etmax+2,5,4 ! CNOF/ICONT Automated adjustment: Auto ICONT.
KEYOPT,etmax+2,9,2 ! 初始穿透/间隙效应:包含初始几何穿透或间隙和偏置,但带有坡道效应。
KEYOPT,etmax+2,10,2 ! 接触刚度更新:在每个迭代步基于下层单元目前的平均应力进行更新,
! 但在整个求解过程中实际弹性滑移始终不超过最大允许极限。
MP,MU,etmax+1,0.3 ! 定义摩擦系数
CSYS,17 ! 激活局部坐标系17
REAL,rlmax+1 ! 激活实常数
MAT,etmax+1 ! 激活材料编号
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
TYPE,etmax+1 ! 激活目标单元类型号
CMSEL,S,WasherElems ! 选择组件WasherElems(全部螺栓杆单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的全部结点
NSEL,R,EXT ! 选择表面全部结点
NSEL,R,LOC,Z,-tf-0.5,tf+0.5 ! 选择位于接触面上的全部结点
ESLN,S,0 ! 选择结点附属单元,0表示单元的任何一个结点被选中,则该单元被选中。
ESURF ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL ! 全选,清除上述选择集。
TYPE,etmax+2 ! 激活接触单元类型号
CMSEL,S,TopFlangeElems ! 选择组件TopFlangeElems(上法兰全部单元)
CMSEL,A,BotFlangeElems ! 补选组件BotFlangeElems(上法兰全部单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
NSEL,U,LOC,Z,-tf+0.5,tf-0.5 ! 选择位于接触面上的全部结点
ESURF ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL ! 全选,清除上述选择集。
/com,************** 6. 创建法兰间的标准接触
*GET,etmax,ETYP, ,NUM,MAX ! 获取模型空间当前最大单元类型号
*GET,rlmax,RCON, ,NUM,MAX ! 获取模型空间当前最大实常数号
R,rlmax+1 ! 定义新的实常数
ET,etmax+1,170 ! 定义目标面单元 - 连续面
ET,etmax+2,174 ! 定义接触面单元 - 离散面
KEYOPT,etmax+2,2,0 ! 接触算法:增广拉格朗日乘子法。
KEYOPT,etmax+2,4,0 ! 接触探测点位置:高斯积分点。
KEYOPT,etmax+2,5,4 ! CNOF/ICONT Automated adjustment: Auto ICONT.
KEYOPT,etmax+2,9,2 ! 初始穿透/间隙效应:包含初始几何穿透或间隙和偏置,但带有坡道效应。
KEYOPT,etmax+2,10,2 ! 接触刚度更新:在每个迭代步基于下层单元目前的平均应力进行更新,
! 但在整个求解过程中实际弹性滑移始终不超过最大允许极限。
MP,MU,etmax+1,0.3 ! 定义摩擦系数
CSYS,17 ! 激活局部坐标系17
REAL,rlmax+1 ! 激活实常数
MAT,etmax+1 ! 激活材料编号
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
TYPE,etmax+1 ! 激活目标单元类型号
CMSEL,S,TopFlangeElems ! 选择组件TopFlangeElems(上法兰全部单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
NSEL,R,LOC,Z,-0.5,0.5 ! 选择位于接触面上的全部结点
ESURF ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL ! 全选,清除上述选择集。
TYPE,etmax+2 ! 激活接触单元类型号
CMSEL,S,BotFlangeElems ! 选择组件BotFlangeElems(下法兰全部单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
NSEL,R,LOC,Z,-0.5,0.5 ! 选择位于接触面上的全部结点
ESURF ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL ! 全选,清除上述选择集。(select all entities)
/com,************** 7. 定义加载点 **************
*GET,rlmax,RCON,0,NUM,MAX ! 获取模型空间当前最大实常数号
*GET,etmax,ETYP,,NUM,MAX ! 获取模型空间当前最大单元类型号
*GET,ndmax,NODE,,NUM,MAX ! 获取模型空间当前最大结点编号
R,rlmax+1 ! 定义新实常数
ET,etmax+1,TARGE170 ! 定义目标面单元 - 连续面
KEYOPT,etmax+1,2,1 ! Boundary conditions for rigid target nodes: Specified by user.
ET,etmax+2,CONTA174 ! 定义接触面单元 - 离散面
KEYOPT,etmax+2,2,2 ! Contact algorithm: Multipoint constraint (MPC).
KEYOPT,etmax+2,4,1 ! Location of contact detection point:
! On nodal point - normal from contact surface
KEYOPT,etmax+2,12,5 ! Behavior of contact surface: Bonded (always).
CSYS,17 ! 激活局部坐标系17
num = 55 ! 螺栓总数
tf = 40 ! 法兰厚度
N,ndmax+1,1000,-360/num,0.5*tf ! 新建结点,结点编号为ndmax+1。
NSEL,,NODE,,NODE(1000,-360/num,0.5*tf)
CM,loadNode,Node ! 为加载点创建一组件
ALLSEL,ALL ! 退出选择集,显示全部。
CSYS,15
CMSEL,S,loadNode
NROTAT,ALL ! 旋转结点坐标系,方便加载。
ALLSEL,ALL ! 退出选择集,显示全部。
CSYS,17 ! 激活局部坐标系17
REAL,rlmax+1 ! 激活实常数
TYPE,etmax+1 ! 激活目标单元类型号
TSHAP,PILO
E,ndmax+1 ! 创建目标单元
ALLSEL,ALL ! 退出选择集,显示全部。
REAL,rlmax+1 ! 激活实常数
TYPE,etmax+2 ! 激活目标单元类型号
CMSEL,S,TopFlangeElems ! 选择组件TopFlangeElems(上法兰全部单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
NSEL,R,LOC,Y,-(360/num/2+0.5),-(360/num/2-0.2) ! 选择位于加载面上的全部结点
ESURF ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。
ALLSEL,ALL ! 全选,清除上述选择集。(select all entities)
EPLOT
!NUMCMP,ALL ! 压缩所定义项的编号(存在预紧单元时别瞎压缩全部)
!/DELETE,'PartFlange','cdb' ! 删除部件文件PartFlange.cdb
!/DELETE,'PartWasher','cdb' ! 删除部件文件PartWasher.cdb
!/DELETE,'PartBolt','cdb' ! 删除部件文件PartBolt.cdb
/com,************ 8. 输出装配cdb文件 ************
CDWRITE,DB,'AllAsmbs','cdb',,'','' ! 当前模型另存为 AllAsmbs.cdb 文件。
! AllAsmbs.cdb为装配及接触创建完成后的有限元模型文件。
六、加载及求解
load.csv文件
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
FINISH ! Exits normally from a processor.
/FILNAME,BoltPreloadCase,0 ! Changes the Jobname for the analysis.
FINISH
/PREP7 ! 访问前处理器
*AFUN,DEG ! 设置角度单位为度
SHPP,OFF,,NOWARN ! 关闭单元形状检测警告
/com,************** 1. 导入cdb文件 **************
CDREAD,DB,'AllAsmbs','cdb',,'','' ! 导入装配体模型
/com,************** 2. 读取荷载文件 **************
*DIM,csvLoads,TABLE,7,6,1 ! 矩阵维度:7行6列1页;Table Array 名称为:csvLoads。
*TREAD,csvLoads,'loads','csv','' ! .csv文件名为loads.csv,load.csv文件见上图。
/com,************* 3. 压缩模型编号 **************
NUMCMP,NODE ! 压缩结点编号
NUMCMP,ELEM ! 压缩单元编号
NUMCMP,MAT ! 压缩材料编号
NUMCMP,TYPE ! 压缩单元类型号
NUMCMP,REAL ! 压缩实常数编号
EPLOT ! Plot elements
/com,************ 4. 指定位移边界条件 *************
CSYS,17 ! 激活局部坐标系17
CMSEL,S,BotFlangeElems ! 选择组件BotFlangeElems(下法兰全部单元)
ALLSEL,BELOW,ELEM ! 选择单元以下附属即构成单元的结点
NSEL,R,EXT ! 选择外表面结点
NSEL,R,LOC,Y,(7*360/num/2-0.5),(7*360/num/2+0.5) ! 选择位于加载面上的全部结点
CM,BCNodes,NODE ! 创建组件
CSYS,0
D,BCNodes,ALL,0 ! 约束组件BCNodes内所有结点的全部自由度
ALLSEL,ALL
/com,************ 5. 施加螺栓预紧力 *************
preload=790*1000 ! 施加790KN的预紧力
num = 4 ! 施加预紧力的螺栓个数
*DO,i,1,num
SLOAD,1001+i,9,LOCK,FORC,preload,1,2
*ENDDO
/com,************ 6. 预紧工况分析 *************
/SOLU ! 访问求解器
! 6.1 设置求解控制
ANTYPE,STATIC ! 静力分析
NLGEOM,OFF ! Ignores large-deflection effects 关闭几何非线性
EQSLV,PCG,1E-4 ! 预条件共轭梯度法/公差:1E-4。
NSUBST,2,2,2 ! 荷载子步数2,最大子步数2,最小子步数2。
AUTOTS,ON ! 自动荷载步(浮动荷载步)/默认
OUTRES,ERASE ! Resets OUTRES specifications to their default values.
OUTRES,ALL,ALL ! Writes the solution of the specified solution results item for every substep.
LSWRITE,1 ! LSNUM=1 载荷步文件编号
ALLSEL,ALL
SOLVE ! 提交求解器进行求解
FINISH
! 6.2 删除非必要文件
/DELETE,'','esav',''
/DELETE,'','emat',''
/DELETE,'','PCS',''
/DELETE,'','stat',''
/DELETE,'','mntr',''
/DELETE,'','osav',''
!!! 特别注意:rdb、r001、ldhi文件务必保留,以便后续重启动使用。
/com,************ 7. 荷载工况分析 *************
! 分工况加载求解
loadCaseNum = 7
*DO,i,1,loadCaseNum,1
! 循环变量i的初值为1终止为7增量为1
/FILNAME,LoadCase%i%,0 ! 设置 Job Name
/COPY, 'BoltPreloadCase','rdb','','LoadCase%i%','rdb',''
! 复制文件BoltPreloadCase.rdb并重命名为LoadCase1.rdb
/COPY, 'BoltPreloadCase','r001','','LoadCase%i%','r001',''
/COPY, 'BoltPreloadCase','ldhi','','LoadCase%i%','ldhi',''
/SOLU ! 访问求解器
/DELETE,'parameter','txt',''
PARSAVE,SCALAR,parameter,txt
ANTYPE,STATIC,RESTART,1,2,0 ! 静力/重启动/LDSTEP=1/SUBSTEP=2
PARRES,CHANGE,'parameter','txt',''
NSUBST,5,5,5 ! 荷载子步数5,最大子步数5,最小子步数5。
AUTOTS,ON ! 自动荷载步(浮动荷载步)/默认
KBC,0 ! 渐变方式荷载步
!OUTRES,ALL,ALL ! 写入每个荷载步的全部子步内容
OUTRES,ALL,LAST ! 写入每个荷载步的最后一个子步内容
CSYS,15
F,loadNode,FX,csvLoads(i,1)
F,loadNode,FY,csvLoads(i,2)
F,loadNode,FZ,csvLoads(i,3)
F,loadNode,MX,csvLoads(i,4)
F,loadNode,MY,csvLoads(i,5)
F,loadNode,MZ,csvLoads(i,6)
ALLSEL,ALL
SOLVE
FINISH
/DELETE,,'emat'
/DELETE,,'esav'
/DELETE,,'osav'
/DELETE,,'r001'
/DELETE,,'r002'
/DELETE,,'rdb'
/DELETE,,'full'
/DELETE,,'ldhi'
/DELETE,,'mntr'
/DELETE,,'pcs'
/DELETE,,'pc6'
/DELETE,,'stat'
*ENDDO
以上命令运行后,得到如下 8 个计算结果文件,分别为 BoltPreloadCase.rst、LoadCase1.rst ~ LoadCase7.rst 。其中,BoltPreloadCase.rst 为结构仅在螺栓预紧力作用下的计算结果文件,LoadCase1.rst ~ LoadCase7.rst 为结构在螺栓预紧力和附加外载共同作用下的计算结果文件。
七、后处理
FINISH ! 退出当前处理器
/CLEAR,ALL ! 清除所有
FINISH ! Exits normally from a processor.
/PREP7 ! 访问前处理器
*AFUN,DEG ! 设置角度单位为度
SHPP,OFF,,NOWARN ! 关闭单元形状检测警告
CDREAD,DB,'AllAsmbs','cdb',,'','' ! 导入装配体模型
/com,******************** 1. 螺栓参数 ********************
pi = 3.14159265
As = 1120 ! 应力面积
de = SQRT(As*4/pi) ! 有效直径
d = 42 ! 公称直径
d2 = 39.08 ! 螺纹中径
p = 4.5 ! 螺纹螺距
num = 4 ! 螺栓个数
loadCaseNum = 7 ! 工况个数
preload=790*1000 ! 预紧力
W = pi*(de**3)/32.0 ! 抗弯截面模量
Wt = 2*W ! 抗扭截面模量
! 螺栓等效应力计算
/POST1
num = 55 ! 螺栓总数
radius = 1000 ! 法兰螺栓分度圆半径
tf = 40 $ tw = 5 ! 分别为法兰厚度及垫片厚度
startPntZ = -(tf+tw) ! 在局部坐标系15下,梁轴线起点z坐标值。
midPntZ = 0 ! 螺栓预紧力施加位置处(梁单元预紧位置点)
endPntZ= tf+tw ! 在局部坐标系15下,梁轴线终点z坐标值。
d0 = 40 ! 螺栓孔直径/垫片内径
d1 = 70 ! 垫片外径
calBoltNum = 4 ! 模型中螺栓个数
*DEL,boltResults
*DIM,boltResults,ARRAY,calBoltNum,9
torsion = preload*d2*(p/(pi*d2)+1.155*0.09)/2 ! 预紧扭矩 VDI2230-Part1
tau = torsion/wt ! 预紧扭转剪应力
/COPY, 'BoltPreloadCase','rst','','LoadCase0','rst','' ! 复制预紧力工况结果文件
/com,************* 2. 内力提取并计算等效应力 *************
*DO,i,0,loadCaseNum,1
! 工况循环
FILE,LoadCase%i%,'rst' ! .rst文件名
INRES,ALL ! 从结果文件中读取全部数据
SET,LAST ! 从结果文件中读取最后一个荷载步的数据
loadCaseNum = i
*DO,j,1,calBoltNum,1
! 螺栓循环
CSYS,17
ESEL,S,ENAME,,189 ! 选择189单元
ALLSEL,BELOW,ELEM ! 选择单元附属结点
startAngle = (360/num)*(j-1)-(360/num/2-1)
endAngle = (360/num)*(j-1)+(360/num/2-1)
NSEL,R,LOC,Y,startAngle,endAngle
NSEL,R,LOC,Z,startPntZ+7.5-0.5,startPntZ+2*7.5+0.5
ESLN,R,1 ! 单元全部结点被选中该单元才被选中
*GET,elenum,ELEM,,NUM,Min ! 获取梁单元编号
ETABLE,ForceX,SMISC,1 ! 梁单元始端截面轴向力
ETABLE,MomentY,SMISC,2 ! 梁单元始端截面绕局部y轴弯矩
ETABLE,MomentZ,SMISC,3 ! 梁单元始端截面绕局部z轴弯矩
! ETABLE,ForceX,SMISC,14 ! 梁单元终端截面轴向力
! ETABLE,MomentY,SMISC,15 ! 梁单元终端截面绕局部y轴弯矩
! ETABLE,MomentZ,SMISC,16 ! 梁单元终端截面绕局部z轴弯矩
*GET,FxVal,ELEM,elenum,ETAB,ForceX ! 获取梁单元终端截面轴向力数值
*GET,MyVal,ELEM,elenum,ETAB,MomentY ! 获取梁单元终端截面绕局部y轴弯矩数值
*GET,MzVal,ELEM,elenum,ETAB,MomentZ ! 获取梁单元终端截面绕局部z轴弯矩数值
boltID = j ! 螺栓编号
MyzVal = SQRT( MyVal**2 + MzVal**2 ) ! 合弯矩
sigmaN = ABS(FxVal/As) ! 拉压正应力绝对值
sigmaM = MyzVal/W ! 弯曲正应力绝对值
Sigma = sigmaN + sigmaM ! 最大正应力
eqvStress = SQRT( Sigma**2 + 3*(0.5*tau)**2 ) ! VDI2230-Part1
ALLSEL,ALL
CSYS,17
boltResults(j,1) = loadCaseNum
boltResults(j,2) = boltID
boltResults(j,3) = FxVal/1E3
boltResults(j,4) = MyzVal/1E6
boltResults(j,5) = sigmaN
boltResults(j,6) = sigmaM
boltResults(j,7) = sigma
boltResults(j,8) = tau
boltResults(j,9) = eqvStress
*ENDDO
!*
!* 汇总计算结果输出
!*
outFileName='BoltResultsLoadCase%i%' ! 指定.txt文件名
*CFOPEN,outFileName,'txt' ! 打开文件LoadCase1BoltResults.txt
*VWRITE,
(' LoadCaseNum BoltNum N (kN) M (kN·m) SigmaN (N/mm^2) SigmaM (N/mm^2) Sigma (N/mm^2) Tau (N/mm^2) EqvStress (N/mm^2) ')
*VWRITE,boltResults(1,1), boltResults(1,2),boltResults(1,3), boltResults(1,4), boltResults(1,5), boltResults(1,6), boltResults(1,7), boltResults(1,8), boltResults(1,9)
(F9.1,F13.1, F12.2, F11.3, F16.2, F18.2, F19.2, F18.2, F19.2)
*CFCLOS
*ENDDO
该命令流运行后,将得到 8 个 .txt 文件,文件内存储这每个工况下,每个螺栓的计算结果数据,如下图所示。