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 ! 创建局部直角坐标系15CSYS,15 ! 激活局部坐标系15xc = 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 ! 激活局部柱坐标系16WPCSYS,-1 ! 根据当前坐标系定义工作平面d0 = 40 ! 螺栓孔直径为40K,1,d0/2,0 $ K,2,d0/2,45 $ K,3,d0/2,90 $ K,4,d0/2,135 $ K,5,d0/2,180L,1,2 ! 由两个关键点创建一条线(可以是直线或是弧线取决于坐标系)*REPEAT,4,1,1 ! 上一条命令重复执行4次,始末关键点编号增量为1。CSYS,15 ! 激活局部坐标系15CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17WPCSYS,-1, ! 根据当前坐标系定义工作平面width = 88 ! 环带宽度为88num = 55 ! 螺栓总数Ds = 2000 ! 螺栓分度圆直径K,6,Ds/2+width/2 $ K,7,Ds/2+width/2,180/num $ K,8,Ds/2,180/numK,9,Ds/2-width/2,180/num $ K,10,Ds/2-width/2,0L,6,7*REPEAT,4,1,1L,1,6*REPEAT,5,1,1/PNUM,KP,1 ! 显示关键点编号/PNUM,LINE,1 ! 显示线编号/REPLOT ! ReplotGPLOT ! Multi-PlotsAL,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 ! ReplotGPLOT ! 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 ! ReplotEPLOT ! Elements plots/VIEW,1,-1 ! Left View/ANG,1/REP,FASTMAT,mtmax+3 ! 给随后生成的单元激活一个材料号TYPE,etmax+3 ! 给随后生成的单元激活一个单元类型号! 执行拉伸EXTOPT,ESIZE,8,1, ! EXTOPT:由面单元生成体单元的控制选项;! 8表示在体生成或体扫略方向上单元分割数量为8;! 1表示在体生成或体扫略方向上的间隔率为1(默认)。EXTOPT,ACLEAR,1 ! 体单元网格生成后清除面单元网格即MESH200。tf = 40 ! 法兰厚度为40VEXT,ALL, , ,0,0,tf ! 通过给的偏移量由面生体EPLOT ! Elements plots/REPLOT ! Replot/com,************** 7. 镜像及阵列 **************CSYS,15 ! 激活局部直角坐标系15VSYMM,Y,ALL, , , ,0,0 ! 对所有几何体进行镜像操作,镜像平面为xoz平面。CSYS,17 ! 激活局部柱坐标系17num = 55 ! 螺栓总数VGEN,4,ALL, , , ,360/num, , ,0 ! 复 制体,重复生成次数4,复 制全部体。! 当前激活坐标系下,关键点坐标值的偏移量为(--,360/num,0)! 单个偏转角度为360/num/PNUM,ELEM,0 ! 关闭单元编号显示/REPLOT ! ReplotEPLOT ! Elements plotsNUMMRG,ALL ! 对实体进行合并NUMCMP,ALL ! 压缩所定义项的编号ALLSEL,ALL,ELEM ! Selects all elements.CM,TopFlangeElems,ELEM ! 由所选实体生成一个组件! 元件名称:TopFlangeElems;元件中的数据类型:单元。CSYS,16 ! 激活局部柱坐标系16CLOCAL,19,0 ! 创建局部直角坐标系19VSYMM,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 entitiesCDWRITE,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 ! 创建局部直角坐标系15CSYS,15 ! 激活局部坐标系15xc = 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,16tf = 40 ! 法兰盘厚度CLOCAL,18,0,0,0,tf ! 创建局部直角坐标系18*GET,vlmax,VOLU,,NUM,MAX ! 获取当前定义的最大几何体编号并将其赋予变量vlmax。WPCSYS,-1, ! 定义工作平面,工作平面为局部直角坐标系18的xoy平面。d0 = 40 ! 螺栓孔直径为40d1 = 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 ! ReplotVGLUE,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 ! 激活局部主坐标系18tw = 5 ! 垫片厚度为5MAT,mtmax+1TYPE,etmax+1LSEL,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 ! 激活局部直角坐标系18tw = 5 $ tf = 40 ! 分别为垫片厚度和法兰厚度VSEL,S,VOLU, ,ALL ! 选择所有几何体VGEN,2,ALL, , , 0,0, -(tw+2*tf) ! 沿局部轴z轴阵列,坐标增量为-(tw+2*tf),生成相关结点和单元。CSYS,15 ! 激活局部坐标系15CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17CSYS,17 ! 激活局部柱坐标系17num = 55 ! 螺栓总数VSEL,S,VOLU, ,ALL ! 选择所有几何体VGEN,4,ALL, , , ,360/num ! 复 制体,重复生成次数4。! 当前激活坐标系下,关键点坐标值的偏移量为(--,360/num,0)! 单个偏转角度为360/numNUMMRG,ALL ! 对实体进行合并NUMCMP,ALL ! 压缩所定义项的编号ALLSEL,ALL,ELEM ! Selects all elements.CM,WasherElems,ELEM ! 由所选实体生成一个组件! 元件名称:WasherElems;元件中的数据类型:单元。/com,************ 7. 输出cdb文件 *************ALLSEL,ALL ! 全选 select all entitiesCDWRITE,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 ! 创建局部直角坐标系15CSYS,15 ! 激活局部坐标系15xc = 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, ,0SECOFFSET,CENTds = 26 ! 螺栓缩进段直径SECDATA,ds/2,10,3/com,************* 5. 创建关键点 *************CSYS,16CLOCAL,19,0 ! 创建局部直角坐标系19tf = 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,midPntZK, ,0,0,20K, ,0,0,endPntZ/com,************** 6. 连点成线 **************LSTR,kpmax+1,kpmax+2 ! 创建直线*REPEAT,3,1,1/com,*************** 7. 布种子 ***************LESIZE,lnmax+1, , ,6,1, , , ,0 ! 单元数量6LESIZE,lnmax+2, , ,6,1, , , ,0 ! 单元数量6LESIZE,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 ! 激活局部坐标系15CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17CSYS,17 ! 激活局部柱坐标系17num = 55 ! 螺栓总数!LSEL,S,LINE, ,ALL ! 选择全部线LGEN,4,ALL, , , ,360/num, , ,0 ! 执行阵列,额外阵列数为3。ALLSEL,ALLNUMMRG,ALL ! 对实体进行合并NUMCMP,ALL ! 压缩所定义项的编号/ESHAPE,0 ! 关闭梁截面显示/REPLOT ! ReplotALLSEL,ALL,ELEM ! Selects all elements.CM,BoltElems,ELEM ! 由所选实体生成一个组件! 元件名称:BoltElems;元件中的数据类型:单元。/com,*********** 10. 创建预紧单元 ***********CSYS,15 ! 激活局部坐标系15CLOCAL,17,1 ! 根据激活的局部坐标系15定义新的局部柱坐标系17CSYS,17 ! 激活局部柱坐标系17num = 55 ! 螺栓总数radius = 1000 ! 法兰螺栓分度圆半径*DO,i,1,4CMSEL,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,endAngleESLN,,1ESEL,R,ENAME,,BEAM189 ! 选择BEAM189单元zmid = 0 ! 预紧力施加位置处的z坐标值CLOCAL,201,1,radius,360/num*(i-1),0 ! 创建螺栓杆处的局部柱坐标系201PSMESH,1001+i, , ,ALL, , 15,Z, ,node(0,0,zmid),, , , !螺栓杆中间位置处插入预紧单元CSYS,17 ! 激活局部柱坐标系17*ENDDOALLSEL,ALLEPLOTALLSEL,ALL,ELEM ! Selects all elements.CM,BoltElems,ELEM ! 由所选实体生成一个组件! 元件名称:BoltElems;元件中的数据类型:单元。/com,************* 11. 输出cdb文件 *************ALLSEL,ALL ! 全选 select all entitiesCDWRITE,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 ! ReplotEPLOT ! 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 ! 创建局部直角坐标系15CSYS,15 ! 激活局部坐标系15xc = 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 nodesET,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 ! 螺栓杆处的局部柱坐标系201R,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.5NSEL,R,LOC,Z,endPntZ-0.5,endPntZ+0.5ESURF, ,TOP ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。ALLSEL,ALLCSYS,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 nodesET,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 ! 螺栓杆处的局部柱坐标系201R,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.5NSEL,R,LOC,Z,startPntZ-0.5,startPntZ+0.5ESURF, ,TOP ! 在存在已选单元的自由面上生成重叠单元,即创建接触单元。ALLSEL,ALLCSYS,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 ! 激活局部坐标系17REAL,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 ! 激活局部坐标系17REAL,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 surfaceKEYOPT,etmax+2,12,5 ! Behavior of contact surface: Bonded (always).CSYS,17 ! 激活局部坐标系17num = 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,15CMSEL,S,loadNodeNROTAT,ALL ! 旋转结点坐标系,方便加载。ALLSEL,ALL ! 退出选择集,显示全部。CSYS,17 ! 激活局部坐标系17REAL,rlmax+1 ! 激活实常数TYPE,etmax+1 ! 激活目标单元类型号TSHAP,PILOE,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为装配及接触创建完成后的有限元模型文件。


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 ! 激活局部坐标系17CMSEL,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,0D,BCNodes,ALL,0 ! 约束组件BCNodes内所有结点的全部自由度ALLSEL,ALL/com,************ 5. 施加螺栓预紧力 *************preload=790*1000 ! 施加790KN的预紧力num = 4 ! 施加预紧力的螺栓个数*DO,i,1,numSLOAD,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,ALLSOLVE ! 提交求解器进行求解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,txtANTYPE,STATIC,RESTART,1,2,0 ! 静力/重启动/LDSTEP=1/SUBSTEP=2PARRES,CHANGE,'parameter','txt',''NSUBST,5,5,5 ! 荷载子步数5,最大子步数5,最小子步数5。AUTOTS,ON ! 自动荷载步(浮动荷载步)/默认KBC,0 ! 渐变方式荷载步!OUTRES,ALL,ALL ! 写入每个荷载步的全部子步内容OUTRES,ALL,LAST ! 写入每个荷载步的最后一个子步内容CSYS,15F,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,ALLSOLVEFINISH/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


FINISH ! 退出当前处理器/CLEAR,ALL ! 清除所有FINISH ! Exits normally from a processor./PREP7 ! 访问前处理器*AFUN,DEG ! 设置角度单位为度SHPP,OFF,,NOWARN ! 关闭单元形状检测警告CDREAD,DB,'AllAsmbs','cdb',,'','' ! 导入装配体模型/com,******************** 1. 螺栓参数 ********************pi = 3.14159265As = 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 ! 抗扭截面模量! 螺栓等效应力计算/POST1num = 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,9torsion = preload*d2*(p/(pi*d2)+1.155*0.09)/2 ! 预紧扭矩 VDI2230-Part1tau = 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,17ESEL,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,endAngleNSEL,R,LOC,Z,startPntZ+7.5-0.5,startPntZ+2*7.5+0.5ESLN,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-Part1ALLSEL,ALLCSYS,17boltResults(j,1) = loadCaseNumboltResults(j,2) = boltIDboltResults(j,3) = FxVal/1E3boltResults(j,4) = MyzVal/1E6boltResults(j,5) = sigmaNboltResults(j,6) = sigmaMboltResults(j,7) = sigmaboltResults(j,8) = tauboltResults(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
