ANSYS二次开发培训练习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ANSYS二次开发培训练习题More to Engineer BBS /enginelt/
UIDL
E.使用UIDL在ANSYS主菜单中增加一个菜单项,点击后可以出现一个子菜单或激活一个对话框。

APDL
E. 使用APDL编制一个可以读写有限元模型的小程序,要求读出所有节点号和单元号,节点坐标以及单元节点列表。

E. 使用DNSOL,DESOL定义计算结果
UPF
E.使用ANSYS列表命令列出ANSYS某一结果文件的内容;编译并连接ANSYS二进制文件读写程序BINTST.F,读写二进制文件并与列表方式相比较。

E. 编译并连接ANSYS提供的示例程序USER01.F;在ANSYS命令行中使用/UCMD给用户命令赋新的名称,并运行。

E. 编译并连接ANSYS提供的示例程序USER03.F,使用动态数组保存有限元模型信息,如节点号、单元号、节点坐标、单元节点列表。

使用UPF读写数据库子程序,读写模型中的有限元模型信息和载荷信息,并打印。

E. 使用ANSYS提供子程序试验矢量与矩阵的操作
E. 试验用户自定义材料
E. 试验用户单元
E. 使用/DEBUG命令调试ANSYS单元矩阵及载荷矢量
练习题答案:
说明:
1.以下练习答案以ANSYS 5.5.1 UP199810001 Windows 95/98/NT的University Low版本(产品号
为ansysul)为例,其它版本与此类似。

2.假定机器中已经安装了Digital Visual Fortran 5.0C以上的版本
假设ANSYS安装目录为C:\ANSYS55
3.假设用户工作目录为D:\user
U I D L
E. 使用UIDL在ANSYS主菜单中增加一个菜单项,点击后可以出现一个子菜单或激活一个对话框。

A.
1.拷贝文件
D:\user>copy c:\ansys55\docu\menulist55.ans
D:\user>copy c:\ansys55\docu\UIMENU.GRN
D:\user>copy c:\ansys55\docu\UIFUNC1.GRN
D:\user>copy c:\ansys55\docu\UIFUNC2.GRN
2.在主菜单中加入自定义菜单项
D:\user>edit UIMENU.GRN
在第4780应为
:A Main Menu
在第4803行插入以下几行:
Men_Training
Sep_
所得到的结果如下:
Men_Aux12
Men_RunStat
K_LN(BETA)
Sep_
K_LN(BETA)
Fnc_UNDO
Sep_
Men_Training
Sep_
Fnc_FINISH
将光标移至第4812行,插入以下一段
:!
:N Men_Training
:S 413, 76, 330
:T Menu
:A Training Menu
:D ANSYS Training MENU
Fnc_Training
:E END
:!
删除该行
:X INDEX ADDED BY ANSYS
以后的全部行
存盘退出
3.编辑新的菜单文件
D:\user>edit newmenu.grn
键入以下文字
:F UIMENU.GRN
:D Modified on 98/10/01, Revision (SID) = 5.181.1.68 - For use with ANSYS
5.5
:I 1, 759, 809
:!
:N Fnc_Training
:S 627, 449, 170
:T Command
:A ANSYS Customizing Training
:D Training Exercises
:C )*GET,_z1,ACTIVE,,TITLE,,START,1
:C )*GET,_z2,ACTIVE,,TITLE,,START,9
:C )*GET,_z3,ACTIVE,,TITLE,,START,17
:C )*GET,_z4,ACTIVE,,TITLE,,START,25
:C )*GET,_z5,ACTIVE,,TITLE,,START,33
:C )*GET,_z6,ACTIVE,,TITLE,,START,41
:C )*GET,_z7,ACTIVE,,TITLE,,START,49
:C )*GET,_z8,ACTIVE,,TITLE,,START,57
:C )*GET,_z9,ACTIVE,,TITLE,,START,65
Fmt_H
Inp_NoApply
Cmd_)/NOPR
Cmd_)/TITLE
Fld_2
Prm_[/TITLE] Welcome to ANSYS Training
Typ_Char,72,72
Prm_[/TITLE] Welcome to ANSYS Training
Cmd_)/Go
:E END
:!
存盘退出
4.修改menulist5
5.ans文件
D:\user>edit menulist55.ans
修改文件的前三行,使其指向用户工作目录下的文件
d:\user\UIMENU.GRN
d:\user\UIFUNC1.GRN
d:\user\UIFUNC2.GRN
d:\user\newmenu.grn
c:\ansys55\DOCU\UICMDS.HLP
c:\ansys55\DOCU\UIELEM.HLP
c:\ansys55\DOCU\UIGUID.HLP
c:\ansys55\DOCU\UITHRY.HLP
c:\ansys55\DOCU\UIOTHR.HLP
5.启动ANSYS的launcher
在Working Directory框中键入
d:\user
按OK键,启动ANSYS界面
A P D L
E. 使用APDL编制一个可以读写有限元模型的小程序,要求读出所有节点号和单元号,节点坐标以
及单元节点列表。

A.
1.编辑文件a.dat
D:\user>edit a.dat
*Get,nnod,NODE,0,COUNT
*Dim,xy,array,nnod,2
*Dim,nodes,array,nnod
*Get,nd,NODE,0,NUM,MIN
*Do,I,1,nnod,1
nodes(I)= nd
xy(I,1) = Nx(nd)
xy(I,2) = Ny(nd)
nd = Ndnext(nd)
*Enddo
*Get,nelm,ELEM,0,COUNT
*Dim,elems,array,nelm
*Dim,ndlst,array,nelm,4
*Get,el,ELEM,0,NUM,MIN
*Do,I,1,nelm,1
elems(I)= el
*Do,J,1,4
ndlst(I,J) = Nelem(el,J)
*Enddo
el = Elnext(nd)
*Enddo
2.启动ANSYS,根据自己所熟悉的领域,建立一个有限元模型
3.输入文件a.dat
/input,a,dat
4.检查
分别列出节点数,节点号列表,坐标,单元数,单元号列表,单元节点列表,与nlist,elist等对比。

*status,nnod
*status,nodes
*status,xy
*status,nelm
*status,elems
*status,ndlst
E. 使用DNSOL,DESOL定义计算结果
1.利用前面所建立或新建一个有限元模型
2.进入Post-processor
/post26

Main Menu->General Postproc
3.定义节点上的结果
手工定义
->Nodal Results按对话框提示输入各点的结果数据
程序自动定义
/PREP7
BLC4,0,0,4,2
et,1,42
esize,.5
amesh,1
/POST1
dof,temp
*Get,nnod,NODE,0,COUNT
*Dim,xy,array,nnod,2
*Dim,nodes,array,nnod
*Get,nd,NODE,0,NUM,MIN
*Do,I,1,nnod,1
nodes(I)= nd
xy(I,1) = Nx(nd)
xy(I,2) = Ny(nd)
nd = Ndnext(nd)
*Enddo
*Do,i,1,nnod,1
dist = sqrt((xy(i,1)-2)*(xy(i,1)-2)+(xy(i,2)-1)*(xy(i,2)-1)) tmp = dist*100
Dnsol,nodes(i),temp,,tmp
*Enddo
nsel,all
plnsol,temp
U P F
E. 使用ANSYS列表命令列出ANSYS某一结果文件的内容;编译并连接ANSYS二进制文件读写程序BINTST.F,读写二进制文件并与列表方式相比较。

1.建立一个自己所熟悉的有限元模型,单元数3~5即可,加载、设置边界条件并求解
6.使用ANSYS列表命令
Utility Menu->File->List->Binary File
7.在弹出的对话框中
[DUMP] Records to be list中选ALL Records
[FORM] Amt of output per record中选Entire Records
[FILEAUX2] binary file to list中选择要显示的.rst文件
按OK键确认后,可以得到.rst文件的列表窗口
使用列表窗口的菜单保存列表窗口中的输出结果到文件list.txt
File->Save As
8.拷贝以下文件到工作目录
D:\user>copy c:\ansys55\custom\misc\intel\bintst.f
D:\user>copy c:\ansys55\custom\misc\intel\bintrd.f
D:\user>copy c:\ansys55\custom\misc\intel\bintwr.f
D:\user>copy c:\ansys55\custom\misc\intel\Custom.bat
D:\user>copy c:\ansys55\custom\misc\intel\Makefile
D:\user>copy c:\ansys55\custom\misc\intel\binlib.a
9.运行Custom.bat,编译并连接
D:\user>custom
在工作目录中可生成一个运行程序bintst.exe
10.运行bintst.exe
D:\user>bintst > out.txt
将bintst的运行结果转存到文件out.txt中
比较out.txt 与list.txt文件中的结果,并参考手册Guide to interfacing to ANSYS中Format of Binary Data Files的Format of the Results File分析文件结构。

E. 用户命令:编译并连接ANSYS提供的示例程序USER01.F;在ANSYS命令行中使用/UCMD给用户命令赋新的名称,并运行。

1.清理用户工作目录下的文件
如果在用户工作目录下存在ANSYS二进制文件读取等程序,请全部删除
2.拷贝以下文件到用户工作目录
D:\user>copy c:\ansys55\custom\user\intel\user01.F
D:\user>copy c:\ansys55\custom\user\intel\Anscust.bat
D:\user>copy c:\ansys55\custom\user\intel\Makefile
1.修改user01.F
修改以下几行
c
c ***** user'S CODE IS INSERTED HERE *****
write (iott,2000)
2000 format (//' ***** CALL TO ANSYS,INC DUMMY USER01 *****'//)
c
c ***** do not return this result code in a real user routine
user01 = -654321
c ***** instea
d return a zero *****
c user01 = 0
c

c
c ***** user'S CODE IS INSERTED HERE *****
write (iott,2000)
2000 format (//' wby*** CALL TO ANSYS,INC DUMMY USER01 *****'//) c
c ***** do not return this result code in a real user
c user01 = -654321
c ***** instea
d return a zero *****
user01 = 0
c
在format语句中增加的字符是为了在ANSYS运行时表明user01.F确实是自己修改过的版本
将user01的值设成0,是为了使ANSYS给出正确信息,而不是警告
2.修改Makefile
修改ansys55_dir的值使其指向ANSYS主目录
ansys55_dir=C:\ansys55
修改下面这一行
siappst.lib \

$(ansys55_dir)\custom\lib\intel\siappst.lib \
3.运行ANSCUST.BA T编译并连接
忽略掉如下W ARNING提示信息
LINK : warning LNK4049: locally defined symbol "_free" imported
LINK : warning LNK4049: locally defined symbol "_malloc" imported
LINK : warning LNK4049: locally defined symbol "_fflush" imported
LINK : warning LNK4049: locally defined symbol "_fread" imported
LINK : warning LNK4049: locally defined symbol "_fwrite" imported
LINK : warning LNK4049: locally defined symbol "_ftell" imported
LINK : warning LNK4049: locally defined symbol "_fseek" imported
当出现goto end时表明编译、连接完成,这时应该在用户工作目录下出现一个可执行程序ansys.exe,约为34MB
4.运行编译连接生成的ANSYS
在用户工作目录下
D:\user>ansys -p ansysul

D:\user>ansys55cust -custom .\ansys.exe -p ansysul
如果在其它目录下运行
D:\otherdir>set path=c:\ansys55\bin\intel
D:\otherdir>ansys55cust -custom d:\user\ansys.exe -p ansysul

D:\otherdir>set path=d:\user
D:\otherdir>ansys -p ansysul
5.执行用户命令
执行用户命令可以在字符界面下,也可在图形界面下
在出现
BEGIN:
提示信息后,键入以下命令
usr1
或者输入以下命令进行到图形用户界面
/show,win32
/menu,on
在工作站上的用户可以选择
/show,x11
/show,x11c
/show,3D
详细说明可以参见ANSYS命令手册中关于/show的说明
在输入框中,键入命令
usr1
6.用/UCMD命令自定义用户命令名
在ANSYS BEGIN提示信息后
/UCMD,aaa,1
aaa
E. 编译并连接ANSYS提供的示例程序USER03.F,使用动态数组保存有限元模型信息,如节点号、单元号、节点坐标、单元节点列表。

使用UPF读写数据库子程序,读写模型中的有限元模型信息和载荷信息,并打印。

以下是一个完整的程序,可由user03.F修改得到
*deck,user03 user ANSYS,INC c sid 5.1 copy of file er03.F last changed by jtm on 98/03/09
function user03 (intin,dpin,ch4in,ch8in)
#include "impcom.inc"
external wrinqr,ndinqr,ndgxyz,ndnext,HeapAllocPtr,
x HeapDealloc,erhandler
integer wrinqr,ndinqr,ndgxyz,ndnext,HeapAllocPtr
integer user03, intin(12), iott, i, ksel, xcptr, hXcptr, ycptr, x hYcptr, zcptr, hZcptr, ndptr, hNdptr, numnp, node
double precision dpin(12),xyz(3), xmean, ymean, zmean, stdxyz(3), x sodx, sody, sodz
character*4 ch4in(12)
character*8 ch8in(12)
#include "ansysdef.inc"
#include "stack.inc"
c
c Get nodal xyz locations an
d calculat
e standard deviation of
c x coordinates, y coordinates, & z coordinates
c
c get number of currently selecte
d nodes
numnp = ndinqr (0,DB_NUMSELECTED)
if (numnp .le. 0) go to 999
c allocate memory for x, y, & z coordinates of nodes
xcptr = HeapAllocPtr(numnp,'XCoords ',HEAP_DOUBLE,hXcptr)
ycptr = HeapAllocPtr(numnp,'YCoords ',HEAP_DOUBLE,hYcptr)
zcptr = HeapAllocPtr(numnp,'ZCoords ',HEAP_DOUBLE,hZcptr)
ndptr = HEapAllocPtr(numnp,'Nodes ',HEAP_INTEGER,hNdptr)
c loop through all selecte
d nodes
i=1
node = 0
xmean = 0.0d0
ymean = 0.0d0
zmean = 0.0d0
10 node = ndnext(node)
if (node .gt. 0) then
c get xyz coordinates
ksel = ndgxyz (node,xyz(1))
c store this node's xyz coordinates
dstack(xcptr + i) = xyz(1)
dstack(ycptr + i) = xyz(2)
dstack(zcptr + i) = xyz(3)
istack(ndptr + i) = node
c while we're looping, accumulate sums to calculate means xmean = xmean + xyz(1)
ymean = ymean + xyz(2)
zmean = zmean + xyz(3)
c increment index
i = i + 1
c loop back up for next selecte
d node
goto 10
endif
call wrdisp (numnp, istack(ndptr+1))
c node = 0, at the en
d of nod
e list
c calculate mean of xyz coordinates
xmean = xmean / numnp
ymean = ymean / numnp
zmean = zmean / numnp
c calculate standar
d deviation for xyz coordinates
sodx = 0
sody = 0
sodz = 0
do i=1, numnp
sodx = sodx + (dstack(xcptr+i) - xmean)**2
sody = sody + (dstack(ycptr+i) - ymean)**2
sodz = sodz + (dstack(zcptr+i) - zmean)**2
enddo
stdxyz(1) = sqrt(sodx / (numnp-1))
stdxyz(2) = sqrt(sody / (numnp-1))
stdxyz(3) = sqrt(sodz / (numnp-1))
c ***** write to output file *****
iott = wrinqr(WR_OUTPUT)
write (iott,2000) stdxyz(1),stdxyz(2),stdxyz(3)
2000 format (/' STD FOR X COORDINATES:',G12.5,/,
X ' STD FOR Y COORDINATES:',G12.5,/,
X ' STD FOR Z COORDINATES:',G12.5)
c ***** write to GUI window *****
call erhandler ('user03',5000,2,
x 'STD FOR X COORDINATES: %G %/ STD FOR Y
x COORDINATES: %G %/ STD FOR Z COORDINATES: %G',stdxyz(1),' ')
c release dynamically allocate
d memory
call HeapDealloc(hXcptr)
call HeapDealloc(hYcptr)
call HeapDealloc(hZcptr)
call HeapDealloc(hNdptr)
c ***** require
d return valu
e *****
999 user03 = 0
return
end
subroutine wrdisp (nnod, nodes)
#include "impcom.inc"
#include "ansysdef.inc"
integer nnod, nodes(nnod)
external wrinqr, disget
integer wrinqr, disget
integer iott,i,rc,k
double precision value(4)
iott = wrinqr(WR_OUTPUT)
do i=1,nnod
rc = disget(nodes(i), 1, value(1))
if (rc .eq. 0) then
write (iott,1000) nodes(i)
1000 format ('Nodes=',i3,' No x displacement constraint') else
write (iott,1010) nodes(i), (value(k), k=1,4)
1010 format ('Nodes=',i3,' UX=',4(F8.2,','))
endif
enddo
return
end
将上面程序编译并连接,
启动ANSYS ,并输入下面的命令流,观察OUTPUT 窗口的输出信息
/prep7
blc4,0,0,4,2
et,1,42
esize,.5
amesh,1
nsel,s,loc,x,4
d,all,ux,8
nsel,s,loc,x,0
d,all,ux,-9
nsel,all
usr3
E. 使用ANSYS 提供子程序试验矢量与矩阵的操作
⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧=765a ⎥⎥⎥⎥


⎢⎢⎢⎢
⎣⎡=238549973543b
以下是一个完整的程序用来说明矢量矩阵操作{c}=[b]{a}
*deck,user01 user parallel ANSYS,INC function user01 (intin,dpin,ch4in,ch8in)
#include "impcom.inc"
external wrinqr
integer wrinqr
integer user01,intin(12), iott
double precision dpin(12)
character*4 ch4in(12)
character*8 ch8in(12)
c
double precision a(3), b(4,3), c(4)
integer i,j,k
data a /5,6,7/
data b /3,3,9,8, 4,7,4,3, 5,9,5,2/
iott = wrinqr(2)
call vzero (c(1), 4)
write (iott, *) '*** matrix b ='
do i=1,4
write (iott, 101) (b(i,k), k=1,3)
enddo
write (iott, *) '*** vector a='
do i=1,3
write (iott, 100) a(i)
enddo
call maxv(b(1,1),a(1),c(1), 4,3)
write (iott, *) '*** vector c='
do i=1,4
write (iott, 100) c(i)
enddo
100 format (F9.2, 3x)
101 format (3(F9.2, 3x))
user01 = 0
c
return
end
E. 用户自定义材料
1.拷贝相关文件
D:\user>copy c:\ansys55\custom\user\intel\userpl.F
2.运行编译连接(参见用户命令)
3.启动ANSYS(参见用户命令)
D:\user>ansys55cust -custom .\ansys.exe -p ansysul 4.编辑命令流文件a.dat
D:\user>edit a.dat
/PREP7
et,1,42
mp,ex,1,2e6
mp,nuxy,1,.3
r,1,100,0
tb,user,1
tbdata,1,100,2e3
blc4,0,0,4,2
esize,.5
type,1
mat,1
real,1
amesh,1
nsel,s,loc,x,0
d,all,all,0
nsel,s,loc,x,4
nsel,r,loc,y,0
f,all,fy,-1000
nsel,all
/solu
antype,static
time,1
solve
5.启动ANSYS(参见用户命令)
D:\user>ansys55cust -custom .\ansys.exe -p ansysul 6.输入a.dat,记录结果
/input,a,dat
E. 用户单元
1.拷贝相关文件
D:\user>copy c:\ansys55\custom\user\intel\uec101.F D:\user>copy c:\ansys55\custom\user\intel\uel101.F 2.编辑uel101.F
将下面的程序段
c
call TrackBegin ('uel101')
c
c --- define initial data
c --- elmdat pointers define
d in elparm
mat = elmdat(PMAT)
修改为:
c
call TrackBegin ('uel101')
iott=wrinqr(2)
write (iott, *) 'In user element',elem
c
c --- define initial data
c --- elmdat pointers define
d in elparm
mat = elmdat(PMAT)
3.运行编译连接(参见用户命令)
4.编辑命令流文件a.dat
D:\user>edit a.dat
/PREP7
et,1,USER101
mp,ex,1,2e6
mp,nuxy,1,.3
r,1,100,0
k
k,,100,0
l,1,2
esize,10
type,1
mat,1
real,1
lmesh,1
nsel,s,loc,x,0
d,all,all,0
nsel,s,loc,x,100
f,all,fx,1000
nsel,all
/solu
antype,static
time,1
solve
5.启动ANSYS(参见用户命令)
D:\user>ansys55cust -custom .\ansys.exe -p ansysul
6.输入a.dat,注意OUTPUT窗口中打印出来的信息,记录结果
/input,a,dat
7.修改命令流文件a.dat,将单元类型换成LINK8,重新分析,并与LINK8对比
D:\user>edit a.dat
/PREP7
et,1,LINK8
mp,ex,1,2e6
E. 使用/DEBUG命令调试ANSYS单元矩阵及载荷矢量
1.在ANSYS中以自己最熟悉的单元建立一个有限元模型,然后加载荷、边界条件,设定求解参
数,如Time, Deltime等
2.在ANSYS Input Box框中输入以下命令
/DEBUG,-3,,,1
3.求解,键入求解命令
SOLVE
4.观察OUTPUT窗口的输出
More to Engineer BBS /enginelt/。

相关文档
最新文档