- ANSYS Workbench有限元分析实例详解(动力学)
- 周炬 苏金英
- 3549字
- 2020-06-27 17:56:40
1.3 低版本程序打开高版本文件的过程
ANSYS近年来一年一度的版本升级,造成了用户使用的版本非常繁杂。以Workbench为例,从Workbench 12.0至Workbench 19.0版本,每个版本均有不同的用户在使用,这样也带来了存盘文件交换的困难。一般来说,高版本程序都可以打开低版本文件,低版本程序在打开高版本文件时可能会“望而兴叹”,但是Workbench可以由低版本程序打开高版本文件。下面以一个简单例子来说明此操作过程,同时可以了解Workbench的存盘文件的体系。
(1)建立高版本文件
以Workbench 16.0版本作为高版本,建立一个静力学分析。如图1-3-1所示,在前处理中已对模型进行了虚拟拓扑(virtual topology)和划分网格(mesh)等处理。注意,图1-3-1的内框区域表示对装配模型进行爆炸视图显示,这是Workbench 16.0以上版本的特征之一。
图1-3-1 Workbench 16.0的分析模型
Workbench 16.0的模型边界条件如图1-3-2所示。对中间两内孔加载Frictionless Support(无摩擦约束,螺栓联结一般采用无摩擦约束较为合理),对上表曲面加载Remote Force(远程力,实际工况采用远程力较为合理)。
图1-3-2 Workbench 16.0的边界条件
Workbench 16.0的模型计算结果如图1-3-3所示,其最大变形位于零件的右侧,数值为0.0044149mm;最大等效应力位于零件上表面的凹槽内,数值为3.103MPa。
图1-3-3 Workbench 16.0的计算结果
(2)准备中间文件
将Workbench 16.0的分析存盘备用。打开对应文件夹,其中“dp0\geom\DM\WORKBENCH\ geom.agdb”为模型文件,它由对应版本的DesignModeler(以下简称DM)模块来打开,其中“dp0\global\MECH\sys-2.mechdb”为网格文件,它也必须由对应版本的Workbench才能打开。由于ANSYS提供了通用网格模型文件(*.cdb),它可以被任何版本的ANSYS程序所调用,因此首先必须生成*.cdb文件。而*.cdb文件只能为ANSYS经典界面所创建。如图1-3-4所示,单击1区的Mechanical APDL,将其拖曳至B4处(与Static Structural中的Model建立关联);再单击2区的Update Project,待模型升级完成后,用右键单击C2处Analysis,在出现的快捷菜单中单击3区的Edit in Mechanical APDL,即可进入经典的APDL模块。
图1-3-4 经典界面的设置
注意
图1-3-4中B4(Model)与C2(Analysis)建立关联,这表示前处理导入经典界面。图1-3-4中B5(Setup)与C2(Analysis)建立关联,这表示边界条件导入经典界面。图1-3-4中B6(Solution)与C2(Analysis)建立关联,这表示后处理导入经典界面。还可以将B4、B5、B6一起与C2(Analysis)建立关联,这表示将所有条件导入经典界面。
如图1-3-5所示,依次单击1区和2区的图标,即可得到充满屏幕的有限元模型轴测图,然后单击3区的Plot→Multi-Plots,即可显示全部模型图。
图1-3-5 经典界面下的模型显示
在经典界面下,导出*.cdb文件在前处理(Preprocessor)栏下。如图1-3-6所示,依次选择1区的Archive Model→Write命令,在出现的对话框中先选择2区的“Data to Archive”为“DB All finite element information”(导出的*.cdb文件只包含有限元模型),在3区中选择存盘路径和文件,最后单击4区的“OK”按钮。
图1-3-6 经典界面下导出cdb文件
退出经典界面。如图1-3-7所示,依次单击View-Files,可以看到该目录下的主要Workbench文件。其中“dp0\APDL\ANSYS\file.cdb”为上步存盘得到的通用网格模型文件。此外,在“dp0\ SYS-2\MECH”目录下,还有file.rst和file.err两个文件,这两个文件就是可供低版本Workbench打开使用的中间文件。只需要将这3个文件复制至Workbench低版本中即可。
图1-3-7 Workbench文件系统
注意
如果文件目录下没有file.err文件,则只需在“dp0\SYS-2\MECH”目录下用记事本创建一个新文本文件,内容为空白,再改文件名及扩展名为file.err即可。
(3)低版本调用中间文件
启动低版本Workbench(本例以Workbench 15.0为例),建立图1-3-8所示的静力学分析流程。注意:A2(External Model中的Setup)与B3(Static Structural中的Model)建立关联后,原Static Structural模块中的Geometry将自动删除。
图1-3-8 启动低版本Workbench分析
如图1-3-9所示,双击A2,在菜单B栏(Location)中单击省略号图标,然后单击Browse,选择之前存盘的file.cdb文件,注意单位的选择与前面一致。
图1-3-9 External Model中的设置
单击Update Project后,再双击B4(Static Structural中的Setup)即可进入Mechanical界面。由于前处理已经由*.cdb文件完成,因此还必须加载边界条件。右键单击Static Structural,依次单击Insert→Commands,Commands的内容为空,如图1-3-10所示。
图1-3-10 边界条件的设置
注意
在Command中插入一段空白,这是因为尽管前文保存的*.rst文件中有相关边界条件的加载信息,但Workbench程序框架中规定必须要有边界条件的设置,所以插入一段空白以满足Workbench程序框架。
如图1-3-11所示,先单击1区的Project→Solution(B5)(注意:必须有此步,否则无法执行后续操作),然后单击2区的Tool→Read Result File,选择之前存盘的file.rst文件,在出现的结果单位系统选择毫米、吨、牛顿单位制(3区),之后Workbench软件会完成导入计算过程。
图1-3-11 导入计算过程的设置
插入最大变形和等效应力结果,如图1-3-12所示,其云图与图1-3-3所示完全一致。
图1-3-12 Workbench 15.0的计算结果
(4)小结
低版本Workbench程序能打开高版本文件,这是因为保存ANSYS计算结果的*.rst文件由C++语言编译。只要在安装ANSYS时预装了相应程序,即可完成此类操作。
另外,很多时候操作者并没有单独保存*.cdb前处理文件,这样也造成不同版本传输文件的困难。但是可以将Workbench存盘目录下的*.dat文件进行略微修改,即可转变为cdb文件。例如,用记事本打开原16版本存盘目录下的dp0\SYS-2\MECH\ds.dat文件,内容如下:
/batch /config,noeldb,1 ! force off writing results to database *get,_wallstrt,active,,time,wall ! ANSYS input file written by Workbench version 16.1 RELEASE ! File used for geometry attach: D:\ansys\161version_files\dp0\Geom\DM\Geom.agdb /title,162version--Static Structural (D5) *DIM,_wb_ProjectScratch_dir,string,248 _wb_ProjectScratch_dir(1) = 'D:\ansys\_ProjectScratch\ScrC074\' *DIM,_wb_SolverFiles_dir,string,248 _wb_SolverFiles_dir(1) = 'D:\ansys\161version_files\dp0\SYS-2\MECH\' *DIM,_wb_userfiles_dir,string,248 _wb_userfiles_dir(1) = 'D:\ansys\161version_files\user_files\' /com,--- Data in consistent NMM units. See Solving Units in the help system for more information. /units,MPA /nopr /wb,file,start ! signify a WB generated input file —————————————————————————————————————————————— /prep7 ! Turn off shape checking because checks already performed inside WB mesher. ! See help system for more information. SHPP,OFF,,NOWARN /nolist etcon,set ! allow ANSYS to choose best KEYOP's for 180x elements /com,*********** Nodes for the whole assembly *********** nblock,3 (1i9,3e20.9e3) 1 3.095139177E+002 2.956840281E+002 1.508471399E+002 2 2.193766319E+002 1.460062297E+002 -6.010647979E+001 3 2.190091118E+002 1.496250198E+002 -7.945050383E+001 4 2.165151084E+002 2.298302489E+002 3.476196544E+001 5 2.408731543E+002 2.160534485E+002 -6.826426802E+001 6 2.173917268E+002 3.010499254E+002 -1.562414054E+001 7 2.175835470E+002 2.889082898E+002 2.270574098E+00 …… -1 —————————————————————————————————————————————— /wb,elem,start ! set before creation of elements /com,*********** Elements for Body 1 "KFJ" *********** et,1,187 eblock,19,solid,,2224 (19i9) 1 1 1 1 0 0 0 0 10 0 1 362 1392 3085 990 21854 28551 21858 21853 26125 26131 …… -1 —————————————————————————————————————————————— !Material Id = {7AF8B194-E2E6-42C7-9668-3BFDFF8C686D} /wb,elem,end ! done creating elements /com,*********** Send User Defined Coordinate System(s) *********** csys,0 toffst,273.15, ! Temperature offset from absolute zero /com,*********** Set Reference Temperature *********** tref,22. /wb,mat,start ! starting to send materials /com,*********** Send Materials *********** MP,DENS,1,7.85e-09, ! tonne mm^-3 MP,ALPX,1,1.2e-05, ! C^-1 MP,C,1,434000000, ! mm^2 s^-2 C^-1 MP,KXX,1,60.5, ! tonne mm s^-3 C^-1 MP,RSVX,1,0.00017, ! ohm mm MP,EX,1,200000, ! tonne s^-2 mm^-1 MP,NUXY,1,0.3, MP,MURX,1,10000, /wb,mat,end ! done sending materials !************************* Model Summary ******************** !KFJ, Structural Steel, matid, 1 —————————————————————————————————————————————— !************************* End Model Summary ******************** ! get the diagonal of the bounding box. Needed later for other things *get,_xmin,node,,mnloc,x *get,_ymin,node,,mnloc,y *get,_zmin,node,,mnloc,z *get,_xmax,node,,mxloc,x *get,_ymax,node,,mxloc,y *get,_zmax,node,,mxloc,z _ASMDIAG=(_xmax-_xmin)*(_xmax-_xmin)+(_ymax-_ymin)*(_ymax-_ymin)+ (_zmax-_zmin)*(_zmax-_zmin) _ASMDIAG=SQRT(_ASMDIAG) /wb,contact,start ! starting to send contact /wb,contact,end ! done creating contacts /golist /wb,load,start ! starting to send loads /com,********* Frictionless Supports X ********* CMBLOCK,_FRICSUX,NODE, 1462 (8i10) 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 …… cmsel,s,_FRICSUX d,all,ux,0 nsel,all /com,********* Frictionless Supports Z ********* CMBLOCK,_FRICSUZ,NODE, 1719 (8i10) 14006 14007 14008 14009 14010 14011 14012 14013 …… cmsel,s,_FRICSUZ d,all,uz,0 nsel,all nsel,all /com,*********** Node Rotations *********** nmod,14006,,,,-0.623264197884388,-3.18566421186846,-11.0758826437836 …… /com,*********** Create Remote Point "Internal Remote Point" *********** ! -------- Remote Point Used by "Remote Force" -------- *set,tid,4 *set,cid,3 et,cid,174 et,tid,170 keyo,tid,2,1 ! Don't fix the pilot node keyo,tid,4,111111 keyo,cid,12,5 ! Bonded Contact keyo,cid,4,1 ! Deformable RBE3 style load keyo,cid,2,2 ! MPC style contact eblock,10,,,854 (15i9) 21660 3 3 3 0 18580 19311 19322 19322 78705 80103 19322 78706 …… -1 *set,_npilot,80106 _npilot50=_npilot type,tid mat ,cid real,cid tshape,pilo en,22514,_npilot tshape /com,*********** Construct Remote Force Using RBE3/CERIG Contact *********** *DIM,_loadvari49x,TABLE,2,1,1,TIME, ! Time values _loadvari49x(1,0,1) = 0. _loadvari49x(2,0,1) = 1. ! Load values _loadvari49x(1,1,1) = 0. _loadvari49x(2,1,1) = -79.9319427460432 *DIM,_loadvari49y,TABLE,2,1,1,TIME, ! Time values _loadvari49y(1,0,1) = 0. _loadvari49y(2,0,1) = 1. ! Load values _loadvari49y(1,1,1) = -0. _loadvari49y(2,1,1) = 4676.61678791046 *DIM,_loadvari49z,TABLE,2,1,1,TIME, ! Time values _loadvari49z(1,0,1) = 0. _loadvari49z(2,0,1) = 1. ! Load values _loadvari49z(1,1,1) = 0. _loadvari49z(2,1,1) = -1767.16342568398 —————————————————————————————————————————————— et,5,14 ! spring element type /com,*********** Construct Weak Springs, Prototype 1 *********** *set,_delta,27.819792641872 type,5 mat,6 real,6 r,6,1.78934555637407e-003 nsel,all *get,_nspr,ndmx _nspr=_nspr+1 esel,s,mat,,1 nsle,s,active *get,_minx,node,0,mnloc,x *get,_miny,node,0,mnloc,y *get,_minz,node,0,mnloc,z *get,_maxx,node,0,mxloc,x *get,_maxy,node,0,mxloc,y *get,_maxz,node,0,mxloc,z *dim,_ntets,arra,8 _ntets(1) = NODE(_minx,_miny,_minz) _ntets(2) = NODE(_minx,_miny,_maxz) _ntets(3) = NODE(_minx,_maxy,_minz) _ntets(4) = NODE(_minx,_maxy,_maxz) _ntets(5) = NODE(_maxx,_miny,_minz) _ntets(6) = NODE(_maxx,_miny,_maxz) _ntets(7) = NODE(_maxx,_maxy,_minz) _ntets(8) = NODE(_maxx,_maxy,_maxz) *do,_i,1,8 n,_nspr,nx(_ntets(_i))+_delta,ny(_ntets(_i)),nz(_ntets(_i)) e,_ntets(_i),_nspr d,_nspr,all _nspr=_nspr+1 n,_nspr,nx(_ntets(_i)),ny(_ntets(_i))+_delta,nz(_ntets(_i)) e,_ntets(_i),_nspr d,_nspr,all _nspr=_nspr+1 n,_nspr,nx(_ntets(_i)),ny(_ntets(_i)),nz(_ntets(_i))+_delta e,_ntets(_i),_nspr d,_nspr,all _nspr=_nspr+1 *enddo *set,_ntets nsel,all esel,all /gst,on,on fini *get,_numnode,node,0,count *get,_numelem,elem,0,count *get, _MAXELEMNUM, elem, 0, NUM, MAX *get, _MAXNODENUM, node, 0, NUM, MAX *get, _MAXELEMTYPE, etyp, 0, NUM, MAX *get, _MAXREALCONST, real, 0, NUM, MAX /go /wb,load,end ! done creating loads /com,--- Number of total nodes = %_numnode% /com,--- Number of contact elements = 854 /com,--- Number of spring elements = 24 /com,--- Number of bearing elements = 0 /com,--- Number of solid elements = 21658 /com,--- Number of total elements = %_numelem% *get,_wallbsol,active,,time,wall /com,*************************************************************************** /com,************************* SOLUTION ******************************** /com,*************************************************************************** /solu antype,0 ! static analysis eqsl,pcg,1e-8,,,,,,1 cntr,print,1 ! print out contact info and also make no initial contact an error nldiag,cont,iter ! print out contact info each equilib-rium iteration resc,,none ! Do not keep any restart files /com,**************************************************** /com,******************* SOLVE FOR LS 1 **************** nsel,s,node,,80106 f,all,fx,%_loadvari49x% f,all,fy,%_loadvari49y% f,all,fz,%_loadvari49z% nsel,all /nopr /gopr nsub,1,1,1 time,1. outres,erase outres,all,none outres,nsol,all outres,rsol,all outres,strs,all outres,epel,all outres,eppl,all stabilize,off ! Stabilization turned OFF by user ! *********** WB SOLVE COMMAND *********** ! check interactive state *get,ANSINTER_,active,,int *if,ANSINTER_,ne,0,then /eof *endif solve /com *************** Write FE CONNECTORS ********* CEWRITE,file,ce,,INTE /com,**************************************************** /com,*************** FINISHED SOLVE FOR LS 1 ************* *set,_DS_PROGRESS ! turn off progress updates to avoid virus scanning bug *get,_wallasol,active,,time,wall /nopr *get,_numnode,node,0,count *get,_numelem,elem,0,count *get, _MAXELEMNUM, elem, 0, NUM, MAX *get, _MAXNODENUM, node, 0, NUM, MAX,,,INTERNAL *get, _MAXELEMTYPE, etyp, 0, NUM, MAX *get, _MAXREALCONST, real, 0, NUM, MAX /gopr *get,_PCGITER,active,,solu,cgiter /post1 xmlo,ENCODING,ISO-8859-1 xmlo,parm /xml,parm,xml fini /gopr *get,_walldone,active,,time,wall _preptime=(_wallbsol-_wallstrt)*3600 _solvtime=(_wallasol-_wallbsol)*3600 _posttime=(_walldone-_wallasol)*3600 _totaltim=(_walldone-_wallstrt)*3600 /wb,file,end ! done with WB generated input
在上述程序中,人为用“——”符将其分为6段。其中第1段表示软件的版本和存盘路径;第2段表示前处理中节点的位置;第3段表示前处理中单元类型和单元定义;第4段表示材料的参数定义;第5段表示边界条件的定义,第6段表示求解设置。
在了解了*.dat文件的基本框架后,将其修改为*.cdb文件的流程如下。
1)删除第1段的全部内容。
2)删除第2段中的以下内容。
etcon,set ! allow ANSYS to choose best KEYOP's for 180x elements
这是因为*.cdb文件采用Mesh200单元形式,所以编辑下面内容:
et,1, 200 keyopt, 1, 1, 9 et, 2,200 keyopt, 2, 1, 11
在第2段最后增加下面内容:
N, R5.3,Loc, -1,
3)保留第3段的全部内容。
4)根据情况选择第4段材料本构的对应参数。
5)删除第5段和第6段的全部内容。
修改后将其扩展名改为cdb,它即可为任意版本ANSYS调用。
注意
Mesh200是一种“分网”单元,对求解没有任何作用。Mesh200单元可以和任何其他ANSYS单元相连。不需要该单元时,可以将其删除或保留于模型中,而不影响计算结果。其中KEYOPT(1)的参数选项为:0(2节点2D线)、1(3节点2D线)、2(2节点3D线)、3(3节点3D线)、4(3节点3D三角形)、5(6节点3D三角形)、6(4节点3D四边形)、7(8节点3D四边形)、8(4节点三棱锥)、9(10节点三棱锥)、10(8节点六面体)、11(20节点六面体)。本例采用了“KEYOPT, 1, 1, 9”和“KEYOPT, 2, 1, 11”,即表示使用了10节点三棱锥和20节点六面体高阶网格单元,如图1-3-13所示。
图1-3-13 Mesh200的参数选项
“N, R5.3,Loc, -1,”在*.cdb文件中常置于“NBLOCK”命令的最后,用于指定节点的位置。其中R5.3表示ANSYS 5.3以后版本均可以采用,Loc表示节点位置依据于坐标系,−1表示绝对坐标系。