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表示绝对坐标系。