相关文章汇总如下:
ANYS提供两种工作方式,GUI图形用户界面(GraphicalUser Interface又称图形用户接口)操作和命令流。
ANYS命令流方式,融合GUI方式、APDL、UPFs、UIDL、MAC,甚至TCL/TK于一个文本文件中,可通过/input命令(或UtilityMenu>File>Read Input From)读入并执行,也可通过拷贝该文件的内容粘贴到命令行中执行。一般命令流通常由ANSYS命令和APDL功能语句组成。
APDL的全称是ANSYS Parametric Design Language,也被叫做ANSYS参数化设计语言。APDL是用来自动完成某些功能或建模的类似于FORTRAN的解释性语言,提供一般程序语言的功能。它包含三个方面的内容:工具条、参量和宏命令。
APDL的运用主要体现在用户可以利用程序设计语言将ANSYS命令组织起来,编写出参数化的用户程序,从而实现有限元分析的全过程,即建立参数化的CAD模型、参数化的网格划分与控制、参数化的材料定义、参数化的载荷和边界条件定义、参数化的分析控制和求解以及参数化的后处理。
在后处理中读取结果的步骤一般是:
finish
/post1
/cwd, d:/test
file, demo.rst
set, first
allsel
nsel, stat
eplot ! 或 gplot、nplot、 kplot
/view, 1, 1,1,1
/replot
(1)弹出窗口,并列出基本信息,同时列出每个载荷步的标题。
set, list
(2)读取某个载荷步或某个子步的求解结果
set,list,0 或者 set,list,1 读取结果文件,并列出每个载荷步的基本信息
set,list,2 读取结果文件,并列出基本信息,同时列出每个载荷步的标题
set,first 从结果文件中读取第一个载荷步
set,last 从结果文件中读取最后一个载荷步
set, next 从结果文件中读取下一个载荷步
set, previous 从结果文件中读取前一个载荷步
set,near,,,time 从结果文件中读取最接近该时间的载荷步
set, next, 3 从结果文件中读取下一个载荷步的第三个子步`
PLDISP, 0
绘制节点的位移等值线图:
绘制单元的位移等值线图:
绘制位移的矢量图:
只绘制单元图:
只绘制节点图:
eplot ! 或 gplot、nplot、 kplot
/view, 1, 1,1,1
/replot
说明:
gplot: 各元素综合显示
kplot: 显示选择的关键点
lplot:显示选择的线
aplot:显示选择的面
vplot:显示选择的体
nplot:显示选择的节点
eplot:显示选择的单元
plnsol,u,x
plnsol,u,y
plnsol,u,z
plnsol,u,sum
plesol,u,x
plesol,u,y
plesol,u,z
plesol,u,sum
plvect,u $ plvect,s
/contour,,18,-16,,500
set,first
pldisp,0
anmode,10,0.5e-1
对等值位移图的动画制作,utility meun-》plotctrls-》animate-》deformed results,输入帧数为10,时间间隔为0.5秒。
Display type. Defaults to ZBUF for raster mode displays or BASIC for vector mode displays:
Value | Description |
---|---|
BASIC or 0 | Basic display (no hidden or section operations). |
SECT or 1 | Section display (plane view). Use the /CPLANE command to define the cutting plane. |
HIDC or 2 | Centroid hidden display (based on item centroid sort). |
HIDD or 3 | Face hidden display (based on face centroid sort). |
HIDP or 4 | Precise hidden display (like HIDD but with more precise checking). Because all facets are sorted, this mode can be extremely slow, especially for large models. |
CAP or 5 | Capped hidden display (same as combined SECT and HIDD with model in front of section plane removed). |
ZBUF or 6 | Z-buffered display (like HIDD but using software Z-buffering). |
ZCAP or 7 | Capped Z-buffered display (same as combined SECT and ZBUF with model in front of section plane removed). |
ZQSL or 8 | QSLICE Z-buffered display (same as SECT but the edge lines of the remaining 3-D model are shown). |
HQSL or 9 | QSLICE precise hidden display (like ZQSL but using precise hidden). |
/TYPE,1,6 ! Z-buffered display
/TYPE,1,5 ! Capped hidden display
/TYPE,1,7 ! Capped Z-buffered display
该命令仅仅用于截面和加盖显示。
Specifies the cutting plane:
Value | Description |
---|---|
0 | Cutting plane is normal to the viewing vector [/VIEW] and passes through the focus point [/FOCUS] (default). |
1 | The working plane [WPLANE] is the cutting plane. |
!0: Normal to view
/CPLANE, 0
!1: Working plane
/CPLANE, 1
转动模型,就可以看到相应截面的结果图。这个截面始终平行面向用户屏幕。
! Normal to view
/CPLANE, 0
需要自定义工作平面,来显示截图。通过菜单Utility Menu -> WorkPlane。
! Working plane
/CPLANE,1 ! Cutting plane defined to use the WP
命令:WPSTYL,STAT
GUI:Utility Menu > List > Status > Working Plane
或
GUI:Utility Menu > WorkPlane > Show WP Status
命令:WPSTYL, DEFA
(3)显示当前工作平面的坐标轴
(4)打开选取截面的位置的菜单。
(5)选取某个节点作为截面。
(6)截面显示的参数设置窗口。
/TYPE,1,5 ! Capped hidden display
(8)变形图的剖面形式的动画
/VIEW, WN, XV, YV, ZV
Defines the viewing direction for the display.
/VIEW, 1 ,WP ! View will be normal to the WP
/VIEW, 1 ,1,1,1
/DIST, WN, DVAL, KFACT
Specifies the viewing distance for magnifications and perspective.
/DIST,1,.01 ! Zoom in on the cross section
/DIST,1,5 ! Zoom in on the cross section
WPOFFS, XOFF, YOFF, ZOFF
Offsets the working plane.
WPOFFS,XOFF, YOFF,ZOFF !偏移工作平面
WPROTA,THXY,THYZ,THZX !旋转工作平面
WPCSYS, WN,KCN !根据当前坐标系来定义工作平面
WPLANE, WN,XORIC,YORIG,ZORIG,XXAX,YXAX,ZXAX ,XPLAN, YPLAN,ZPLAN !通过三个点的位置来定义一个工作平面
NWPLAN,WN,NORIG,NXAX,NPLAN !通过3个节点来指定工作平面
KWPLAN,WN,KORIG,KXAX,KPLAN !3个关键点定义一个工作平面
LWPLAN,WN,NL1,RATIO !通过垂直于一条线的某个位置来定义工作平面
KWPAVE,Pl,P2,P3,P4,P5,P6,P7,P8,P9 !移动工作平面的原点到拾取关键点的中间位置
NWPAVE,NI,N2,N3, N4,N5,N6,N7,N8 ,N9 !移动工作平面原点到指定节点的中间位置
WPAVE,X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3 !移动工作平面原点到指定坐标的中间位置`
```python
WPOFFS,0,0,0.1
WPOFFS,0,0,-0.2
执行菜单栏中的Utility Menu > WorkPlane > Offset WP by Increments命令,弹出“Offset WP”对话框.
一个例子如下:
CSYS !激活总体笛卡尔坐标系
WPCSYS !工作平面与当前坐标系重合
WPOFFS,0,0,0.15 !工作平面在Z轴上偏移0.15m,就是查看Z=0.15m平面上应力图
/TYPE,1,1 !剖面显示
/CPLANE,1 !定义工作平面为切平面,即工作平面为剖面
plnslou,s,x !显示x方向应力
(1)ANSYS的宏文件的后缀是.mac,可以用记事本打开。将写完的某个分析过程全部放在mac文件里面,并且将该文件放在工作目录下,然后再ANSYS的命令输入窗口可以直接输入name.mac,即可运行该宏文件。
(2)当然我们也可以通过命令创建这样的一个宏文件。
*CREATE,MAC !!! CREATE MACRO FILE FOR POST PROCESSING
/POST1
EPLOT ! PLOT ELEMENTS
PRERR ! PRINT THE ENERGY NORM PERCENT ERROR (SEPC)
NSEL,ALL
ESEL,ALL
*status,parm ! SHOW STATUS OF PARAMETERS
*END !!! CLOSE MACRO FILE
最终在工作目录下会生成一个名称为MAC的宏文件,APDL命令中create和end之间的内容会被写入一个新的宏文件中。
APDL命令相关代码如下:
*get,nodecount,node,,count
*get,elemcount,elem,,count
/STAT
/UIS, MSGPOP, 3
allsel
*cfopen, get_nodedata, txt
!****************************************
! (1) 获取节点数量
*get, node_max, NODE, 0, NUM, MAX
*get, node_min, NODE, 0, NUM, MIN
*get, node_count, NODE, 0, COUNT
*vwrite, node_min
("Node 's Min Index: ", 3X, f10.0)
*vwrite, node_max
("Node 's Min Index: ", 3X, f10.0)
*vwrite, node_count
("Node 's Count: ", 3X, f10.0)
*vwrite
('title = id, X, Y, Z')
!****************************************
! (2) 遍历和写文件
*do, i, node_min, node_max
xx=NX(i)
yy=NY(i)
zz=NZ(i)
*vwrite,'NODE', i,xx,yy,zz
(1X, a, 3X, 1f8.0, 3f16.8)
*enddo
!****************************************
*cfclose
!****************************************
! (2) 遍历和写文件
*del,nodepos
*dim,nodepos,ARRAY,node_max,3
*do,i, node_min, node_max
*get,nodepos(i,1),NODE,i,LOC,X
*get,nodepos(i,2),NODE,i,LOC,Y
*get,nodepos(i,3),NODE,i,LOC,Z
*enddo
*vwrite,sequ,nodepos(1,1),nodepos(1,2),nodepos(1,3)
(f8.0, 3f16.8)
!****************************************
!****************************************
! (2) 遍历和写文件
*do, i, node_min, node_max
*get,xx,NODE,i,LOC,X
*get,yy,NODE,i,LOC,Y
*get,zz,NODE,i,LOC,Z
*get,axy,NODE,i,ANG,XY
*get,ayz,NODE,i,ANG,YZ
*get,azx,NODE,i,ANG,ZX
*vwrite,'NODE', i,xx,yy,zz
(1X, a, 3X, 1f8.0, 3f16.8)
*enddo
alls !allsel
*CFOPEN,output,txt
*GET,num_nodes_,NODE,0,COUNT !Get the number of nodes
*GET,node_,NODE,0,NUM,MIN !Get label of the first node
*DO,i,1,num_nodes_,1
! Define some parameters
*GET,nx_,NODE,node_,LOC,X
*GET,ny_,NODE,node_,LOC,Y
*GET,nz_,NODE,node_,LOC,Z
! Write line
*VWRITE,node_,nx_,ny_,nz_
(F8.0,',',f16.8,',',f16.8,',',f16.8)
!(F8.0,',',E10.3,',',E10.3,',',E10.3)
! select the next node
*GET,node_,NODE,node_,NXTH
*ENDDO
*CFCLOSE
!****************************************
! (2) 遍历和写文件
*do, i, node_min, node_max
*get,uxx,NODE,i,U,X
*get,uyy,NODE,i,U,Y
*get,uzz,NODE,i,U,Z
*get,usum,NODE,i,U,SUM
*get,rxx,NODE,i,ROT,X
*get,ryy,NODE,i,ROT,Y
*get,rzz,NODE,i,ROT,Z
*get,rsum,NODE,i,ROT,SUM
*vwrite,'NODE', i,uxx,uyy,uzz,usum,rxx,ryy,rzz,rsum
(1X, a, 3X, 1f8.0, 8f16.8)
*enddo
!****************************************
APDL命令相关代码如下:
!***********************************************************************
! Purpose: 导出所有单元在当前频率点的振动位移数据
! Author: 爱看书的小沐
! Date: 2022-02-21
! Platform: Ansys 15.0 win64
! ***********************************************************************
/UIS, MSGPOP, 3
allsel
*cfopen, get_elemdata, txt
!****************************************
! (1) 获取单元数量
*get, elem_max, ELEM, 0, NUM, MAX
*get, elem_min, ELEM, 0, NUM, MIN
*get, elem_count, ELEM, 0, COUNT
*vwrite, elem_min
("Elem 's Min Index: ", 3X, f10.0)
*vwrite, elem_max
("Elem 's Min Index: ", 3X, f10.0)
*vwrite, elem_count
("Elem 's Count: ", 3X, f10.0)
*vwrite
('title = id, X, Y, Z, AREA')
!****************************************
! (2) 遍历和写文件
*do, i, elem_min, 100
*get, ex, ELEM, i, CENT, X
*get, ey, ELEM, i, CENT, Y
*get, ez, ELEM, i, CENT, Z
*get, earea, ELEM, i, AREA
*vwrite,'ELEM', i,ex,ey,ez,earea
(1X, a, 3X, 1f8.0, 4f16.8)
*enddo
!****************************************
*cfclose
!***********************************************************************
! Purpose: 导出所有节点和单元在当前频率点的振动位移数据
! Author: 爱看书的小沐
! Date: 2022-02-21
! Platform: Ansys 15.0 win64
! ***********************************************************************
*get,nodenum,node,,num,max
*dim,nodepos,array,nodenum,3
*do,i,1,nodenum,1
*get,nodepos(i,1),node,i,loc,x
*get,nodepos(i,2),node,i,loc,y
*get,nodepos(i,3),node,i,loc,z
*enddo
*get,elemnum,elem,,num,max
*dim,elemlist,array,elemnum,6
*do,i,1,elemnum,1
*do,ii,1,6,1
*get,elemlist(i,ii),elem,i,node,ii
*enddo
*enddo
*cfopen,geomfile,txt
*vwrite,0
(F8.0,'node data:')
*vwrite,sequ,nodepos(1,1),nodepos(1,2),nodepos(1,3)
(F8.0,3f16.8)
*vwrite,0
(F8.0,'element data:')
*vwrite,sequ,elemlist(1,1),elemlist(1,2),elemlist(1,3),elemlist(1,4),elemlist(1,5),elemlist(1,6)
(F8.0,6f8.0)
*vwrite,0
(F8.0)
*cfclos
!***********************************************************************
! Purpose: 导出所有节点在所有频率点的振动位移数据(直接使用菜单命令)
! Author: 爱看书的小沐
! Date: 2022-02-21
! Platform: Ansys 15.0 win64
! ***********************************************************************
!ernorm, off
!/rmdir, 'results'
!/mkdir, 'results'
outname = 'results/dlist'
/output,%outname%,txt,
dlist
outname = 'results/elist'
/output,%outname%,txt,
elist
outname = 'results/nlist'
/output,%outname%,txt,
nlist
outname = 'results/ecent'
/output,%outname%,txt,
/format,,f,15,8
presol,cent
!*do,i,1,60,1
!set,,,,,,,i
*do,i,1,30,1
set,i,last
/format,,f,15,10
/output
outname = 'results/prnsol/t'
outname = strcat(outname, chrval(i))
/output,%outname%,txt,
prnsol,u,sum
outname = 'results/presol_m/t'
outname = strcat(outname, chrval(i))
/output,%outname%,txt,
presol,m
*enddo
/output
!***********************************************************************
! Purpose: 导出所有节点在所有频率点的振动位移数据(调用apdl底层接口语句)
! Author: 爱看书的小沐
! Date: 2022-02-21
! Platform: Ansys 15.0 win64
! ***********************************************************************
!Export nodal coordinates to CSV
!NOTE: *VWRITE command can only be executed from an external file by e.g /INPUT
/UIS, MSGPOP, 3
alls
*do,n,1,30,1
set,n,last
*CFOPEN,output%n%,vol
*vwrite,
('frames 1')
*vwrite,
('interval 1')
*GET,num_nodes_,NODE,0,COUNT !Get the number of nodes
*GET,node_,NODE,0,NUM,MIN !Get label of the first node
*GET,node_max,NODE,0,NUM,MAX !Get label of the first node
*vwrite, node_max !num_nodes_
('points', F8.0)
*DO,i,1,num_nodes_,1
! Define some parameters
*GET,nx_,NODE,node_,LOC,X
*GET,ny_,NODE,node_,LOC,Y
*GET,nz_,NODE,node_,LOC,Z
! Write line
*VWRITE,node_,nx_,ny_,nz_
(F8.0,3f16.8)
! select the next node
*GET,node_,NODE,node_,NXTH
*ENDDO !!! i
*vwrite, 1
frame %d
*GET,node_,NODE,0,NUM,MIN !Get label of the first node
*DO,i,1,num_nodes_,1
! Define some parameters
*GET,nx_,NODE,node_,U,X
*GET,ny_,NODE,node_,U,Y
*GET,nz_,NODE,node_,U,Z
! Write line
*VWRITE,node_,nx_,ny_,nz_
(F8.0,3f16.10)
! select the next node
*GET,node_,NODE,node_,NXTH
*ENDDO !!!i
*CFCLOSE
*ENDDO !!!n
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!