ANSYS二次开发培训练习题文档格式.docx
《ANSYS二次开发培训练习题文档格式.docx》由会员分享,可在线阅读,更多相关《ANSYS二次开发培训练习题文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
A.
1.拷贝文件
\ansys55\docu\menulist55.ans
\ansys55\docu\UIMENU.GRN
\ansys55\docu\UIFUNC1.GRN
2.在主菜单中加入自定义菜单项
editUIMENU.GRN
在第4780应为
AMainMenu
在第4803行插入以下几行:
Men_Training
Sep_
所得到的结果如下:
Men_Aux12
Men_RunStat
K_LN(BETA)
Fnc_UNDO
Fnc_FINISH
将光标移至第4812行,插入以下一段
!
S413,76,330
TMenu
ATrainingMenu
DANSYSTrainingMENU
Fnc_Training
EEND
删除该行
XINDEXADDEDBYANSYS
以后的全部行
存盘退出
3.编辑新的菜单文件
editnewmenu.grn
键入以下文字
FUIMENU.GRN
DModifiedon98/10/01,Revision(SID)=5.181.1.68-ForusewithANSYS5.5
I1,759,809
NFnc_Training
S627,449,170
TCommand
AANSYSCustomizingTraining
DTrainingExercises
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]WelcometoANSYSTraining
Typ_Char,72,72
Cmd_)/Go
4.修改menulist55.ans文件
editmenulist55.ans
修改文件的前三行,使其指向用户工作目录下的文件
d:
\user\UIMENU.GRN
\user\UIFUNC1.GRN
\user\UIFUNC2.GRN
\user\newmenu.grn
c:
\ansys55\DOCU\UICMDS.HLP
\ansys55\DOCU\UIELEM.HLP
\ansys55\DOCU\UIGUID.HLP
\ansys55\DOCU\UITHRY.HLP
\ansys55\DOCU\UIOTHR.HLP
5.启动ANSYS的launcher
在WorkingDirectory框中键入
按OK键,启动ANSYS界面
APDLE.使用APDL编制一个可以读写有限元模型的小程序,要求读出所有节点号和单元号,节点坐标以及单元节点列表。
1.编辑文件a.dat
edita.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)
2.启动ANSYS,根据自己所熟悉的领域,建立一个有限元模型
3.输入文件a.dat
/input,a,dat
4.检查
分别列出节点数,节点号列表,坐标,单元数,单元号列表,单元节点列表,与nlist,elist等对比。
*status,nnod
*status,nodes
*status,xy
*status,nelm
*status,elems
*status,ndlst
1.利用前面所建立或新建一个有限元模型
2.进入Post-processor
/post26
或
MainMenu->
GeneralPostproc
3.定义节点上的结果手工定义->
NodalResults按对话框提示输入各点的结果数据程序自动定义
/PREP7BLC4,0,0,4,2et,1,42esize,.5amesh,1
/POST1dof,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,1nodes(I)=ndxy(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*100Dnsol,nodes(i),temp,,tmp*Enddo
nsel,allplnsol,temp
1.建立一个自己所熟悉的有限元模型,单元数3~5即可,加载、设置边界条件并求解
6.使用ANSYS列表命令
UtilityMenu->
File->
List->
BinaryFile
7.在弹出的对话框中
[DUMP]Recordstobelist中选ALLRecords
[FORM]Amtofoutputperrecord中选EntireRecords
[FILEAUX2]binaryfiletolist中选择要显示的.rst文件
按OK键确认后,可以得到.rst文件的列表窗口
使用列表窗口的菜单保存列表窗口中的输出结果到文件list.txt
SaveAs
8.拷贝以下文件到工作目录
\ansys55\custom\misc\intel\bintst.fD:
\ansys55\custom\misc\intel\bintrd.fD:
\ansys55\custom\misc\intel\bintwr.fD:
\ansys55\custom\misc\intel\Custom.batD:
\ansys55\custom\misc\intel\MakefileD:
\ansys55\custom\misc\intel\binlib.a
9.运行Custom.bat,编译并连接
custom
在工作目录中可生成一个运行程序bintst.exe
10.运行bintst.exe
bintst>
out.txt
将bintst的运行结果转存到文件out.txt中
比较out.txt与list.txt文件中的结果,并参考手册GuidetointerfacingtoANSYS中FormatofBinaryDataFiles的FormatoftheResultsFile分析文件结构。
E.用户命令:
编译并连接ANSYS提供的示例程序USER01.F;
2.清理用户工作目录下的文件
如果在用户工作目录下存在ANSYS二进制文件读取等程序,请全部删除
3.拷贝以下文件到用户工作目录
\ansys55\custom\user\intel\user01.F
\ansys55\custom\user\intel\Anscust.bat
\ansys55\custom\user\intel\Makefile
11.修改user01.F
修改以下几行
c
c*****user'
SCODEISINSERTEDHERE*****
write(iott,2000)
2000format(//'
*****CALLTOANSYS,INCDUMMYUSER01*****'
//)
c*****donotreturnthisresultcodeinarealuserroutine
user01=-654321
c*****insteadreturnazero*****
cuser01=0
为
SCODEISINSERTEDHERE*****write(iott,2000)2000format(//'
wby***CALLTOANSYS,INCDUMMYUSER01*****'
//)cc*****donotreturnthisresultcodeinarealuser
cuser01=-654321c*****insteadreturnazero*****user01=0c
在format语句中增加的字符是为了在ANSYS运行时表明user01.F确实是自己修改过的版本
将user01的值设成0,是为了使ANSYS给出正确信息,而不是警告
12.修改Makefile
修改ansys55_dir的值使其指向ANSYS主目录
ansys55_dir=C:
\ansys55
修改下面这一行
siappst.lib\
$(ansys55_dir)\custom\lib\intel\siappst.lib\
13.运行ANSCUST.BAT编译并连接
忽略掉如下WARNING提示信息
LINK:
warningLNK4049:
locallydefinedsymbol"
_free"
imported
_malloc"
_fflush"
_fread"
_fwrite"
_ftell"
_fseek"
当出现gotoend时表明编译、连接完成,这时应该在用户工作目录下出现一个可执行程序ansys.exe,约为34MB
14.运行编译连接生成的ANSYS
在用户工作目录下
ansys-pansysul
ansys55cust-custom.\ansys.exe-pansysul
如果在其它目录下运行
\otherdir>
setpath=c:
\ansys55\bin\intel
ansys55cust-customd:
\user\ansys.exe-pansysul
setpath=d:
15.执行用户命令
执行用户命令可以在字符界面下,也可在图形界面下
在出现
BEGIN:
提示信息后,键入以下命令
usr1
或者输入以下命令进行到图形用户界面
/show,win32
/menu,on
在工作站上的用户可以选择
/show,x11
/show,x11c
/show,3D详细说明可以参见ANSYS命令手册中关于/show的说明
在输入框中,键入命令
16.用/UCMD命令自定义用户命令名
在ANSYSBEGIN提示信息后
/UCMD,aaa,1
aaa
以下是一个完整的程序,可由user03.F修改得到
*deck,user03userANSYS,INC
csid5.1copyoffiles.user03.Flastchangedbyjtmon98/03/09
functionuser03(intin,dpin,ch4in,ch8in)
#include"
impcom.inc"
externalwrinqr,ndinqr,ndgxyz,ndnext,HeapAllocPtr,
xHeapDealloc,erhandler
integerwrinqr,ndinqr,ndgxyz,ndnext,HeapAllocPtr
integeruser03,intin(12),iott,i,ksel,xcptr,hXcptr,ycptr,
xhYcptr,zcptr,hZcptr,ndptr,hNdptr,numnp,node
doubleprecisiondpin(12),xyz(3),xmean,ymean,zmean,stdxyz(3),
xsodx,sody,sodz
character*4ch4in(12)
character*8ch8in(12)
ansysdef.inc"
stack.inc"
cGetnodalxyzlocationsandcalculatestandarddeviationof
cxcoordinates,ycoordinates,&
zcoordinates
cgetnumberofcurrentlyselectednodes
numnp=ndinqr(0,DB_NUMSELECTED)
if(numnp.le.0)goto999
callocatememoryforx,y,&
zcoordinatesofnodes
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)
cloopthroughallselectednodes
i=1
node=0
xmean=0.0d0
ymean=0.0d0
zmean=0.0d0
10node=ndnext(node)
if(node.gt.0)then
cgetxyzcoordinates
ksel=ndgxyz(node,xyz
(1))
cstorethisnode'
sxyzcoordinates
dstack(xcptr+i)=xyz
(1)
dstack(ycptr+i)=xyz
(2)
dstack(zcptr+i)=xyz(3)
istack(ndptr+i)=node
cwhilewe'
relooping,accumulatesumstocalculatemeans
xmean=xmean+xyz
(1)
ymean=ymean+xyz
(2)
zmean=zmean+xyz(3)
cincrementindex
i=i+1
cloopbackupfornextselectednode
goto10
endif
callwrdisp(numnp,istack(ndptr+1))
cnode=0,attheendofnodelist
ccalculatemeanofxyzcoordinates
xmean=xmean/numnp
ymean=ymean/numnp
zmean=zmean/numnp
ccalculatestandarddeviationforxyzcoordinates
sodx=0
sody=0
sodz=0
doi=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*****writetooutputfile*****
iott=wrinqr(WR_OUTPUT)
write(iott,2000)stdxyz
(1),stdxyz
(2),stdxyz(3)
2000format(/'
STDFORXCOORDINATES:
'
G12.5,/,
X'
STDFORYCOORDINATES:
STDFORZCOORDINATES:
G12.5)
c*****writetoGUIwindow*****
callerhandler('
user03'
5000,2,
x'
STDFORXCOORDINATES:
%G%/STDFORY
xCOORDINATES:
%G%/STDFORZCOORDINATES:
%G'
stdxyz
(1),'
'
)
creleasedynamicallyallocatedmemory
callHeapDealloc(hXcptr)
callHeapDealloc(hYcptr)
callHeapDealloc(hZcptr)
callHeapDealloc(hNdptr)
c*****requiredreturnvalue*****
999user03=0