ANSYS2次开发实例chm.docx
- 文档编号:8110881
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:43
- 大小:41.67KB
ANSYS2次开发实例chm.docx
《ANSYS2次开发实例chm.docx》由会员分享,可在线阅读,更多相关《ANSYS2次开发实例chm.docx(43页珍藏版)》请在冰豆网上搜索。
ANSYS2次开发实例chm
问:
二次开发的例题_chm?
?
?
UPF
E.使用ANSYS列表命令列出ANSYS某一结果文件的内容;编译并连接ANSYS二进制文件读写程序BINTST.F,读写二进制文件并与列表方式相比较。
1. 建立一个自己所熟悉的有限元模型,单元数3~5即可,加载、设置边界条件并求解
6. 使用ANSYS列表命令
UtilityMenu->File->List->BinaryFile
7. 在弹出的对话框中
[DUMP]Recordstobelist中选ALLRecords
[FORM]Amtofoutputperrecord中选EntireRecords
[FILEAUX2]binaryfiletolist中选择要显示的.rst文件
按OK键确认后,可以得到.rst文件的列表窗口
使用列表窗口的菜单保存列表窗口中的输出结果到文件list.txt
File->SaveAs
8. 拷贝以下文件到工作目录
D:
\user>copyc:
\ansys55\custom\misc\intel\bintst.fD:
\user>copyc:
\ansys55\custom\misc\intel\bintrd.fD:
\user>copyc:
\ansys55\custom\misc\intel\bintwr.fD:
\user>copyc:
\ansys55\custom\misc\intel\Custom.batD:
\user>copyc:
\ansys55\custom\misc\intel\MakefileD:
\user>copyc:
\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文件中的结果,并参考手册GuidetointerfacingtoANSYS中FormatofBinaryDataFiles的FormatoftheResultsFile分析文件结构。
E.用户命令:
编译并连接ANSYS提供的示例程序USER01.F;在ANSYS命令行中使用/UCMD给用户命令赋新的名称,并运行。
1. 清理用户工作目录下的文件
如果在用户工作目录下存在ANSYS二进制文件读取等程序,请全部删除
2. 拷贝以下文件到用户工作目录
D:
\user>copyc:
\ansys55\custom\user\intel\user01.F
D:
\user>copyc:
\ansys55\custom\user\intel\Anscust.bat
D:
\user>copyc:
\ansys55\custom\user\intel\Makefile
1. 修改user01.F
修改以下几行
c
c ***** user'SCODEISINSERTEDHERE*****
write(iott,2000)
2000format(//'***** CALLTOANSYS,INCDUMMYUSER01 *****'//)
c
c ***** donotreturnthisresultcodeinarealuserroutine
user01=-654321
c ***** insteadreturnazero *****
c user01=0
c
为
c
c ***** user'SCODEISINSERTEDHERE***** write(iott,2000) 2000format(//'wby*** CALLTOANSYS,INCDUMMYUSER01 *****'//)cc ***** donotreturnthisresultcodeinarealuser
c user01=-654321c ***** insteadreturnazero ***** user01=0c
在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.BAT编译并连接
忽略掉如下WARNING提示信息
LINK:
warningLNK4049:
locallydefinedsymbol"_free"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_malloc"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_fflush"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_fread"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_fwrite"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_ftell"imported
LINK:
warningLNK4049:
locallydefinedsymbol"_fseek"imported
当出现gotoend时表明编译、连接完成,这时应该在用户工作目录下出现一个可执行程序ansys.exe,约为34MB
4. 运行编译连接生成的ANSYS
在用户工作目录下
D:
\user>ansys-pansysul
或
D:
\user>ansys55cust-custom.\ansys.exe-pansysul
如果在其它目录下运行
D:
\otherdir>setpath=c:
\ansys55\bin\intel
D:
\otherdir>ansys55cust-customd:
\user\ansys.exe-pansysul
或
D:
\otherdir>setpath=d:
\user
D:
\otherdir>ansys-pansysul
5. 执行用户命令
执行用户命令可以在字符界面下,也可在图形界面下
在出现
BEGIN:
提示信息后,键入以下命令
usr1
或者输入以下命令进行到图形用户界面
/show,win32
/menu,on
在工作站上的用户可以选择
/show,x11
/show,x11c
/show,3D详细说明可以参见ANSYS命令手册中关于/show的说明
在输入框中,键入命令
usr1
6. 用/UCMD命令自定义用户命令名
在ANSYSBEGIN提示信息后
/UCMD,aaa,1
aaa
E.编译并连接ANSYS提供的示例程序USER03.F,使用动态数组保存有限元模型信息,如节点号、单元号、节点坐标、单元节点列表。
使用UPF读写数据库子程序,读写模型中的有限元模型信息和载荷信息,并打印。
以下是一个完整的程序,可由user03.F修改得到
*deck,user03 user ANSYS,INC
csid5.1copyoffiles.user03.Flastchangedbyjtmon98/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
doubleprecision 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 Getnodalxyzlocationsandcalculatestandarddeviationof
c xcoordinates,ycoordinates,&zcoordinates
c
c getnumberofcurrentlyselectednodes
numnp=ndinqr(0,DB_NUMSELECTED)
if(numnp.le.0)goto999
c allocatememoryforx,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)
c loopthroughallselectednodes
i=1
node=0
xmean=0.0d0
ymean=0.0d0
zmean=0.0d0
10 node=ndnext(node)
if(node.gt.0)then
c getxyzcoordinates
ksel=ndgxyz(node,xyz
(1))
c storethisnode'sxyzcoordinates
dstack(xcptr+i)=xyz
(1)
dstack(ycptr+i)=xyz
(2)
dstack(zcptr+i)=xyz(3)
istack(ndptr+i)=node
c whilewe'relooping,accumulatesumstocalculatemeans
xmean=xmean+xyz
(1)
ymean=ymean+xyz
(2)
zmean=zmean+xyz(3)
c incrementindex
i=i+1
c loopbackupfornextselectednode
goto10
endif
callwrdisp(numnp,istack(ndptr+1))
c node=0,attheendofnodelist
c calculatemeanofxyzcoordinates
xmean=xmean/numnp
ymean=ymean/numnp
zmean=zmean/numnp
c calculatestandarddeviationforxyzcoordinates
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:
',G12.5,/,
X 'STDFORZCOORDINATES:
',G12.5)
c ***** writetoGUIwindow *****
callerhandler('user03',5000,2,
x'STDFORXCOORDINATES:
%G%/STDFORY
xCOORDINATES:
%G%/STDFORZCOORDINATES:
%G',stdxyz
(1),'')
c releasedynamicallyallocatedmemory
callHeapDealloc(hXcptr)
callHeapDealloc(hYcptr)
callHeapDealloc(hZcptr)
callHeapDealloc(hNdptr)
c ***** requiredreturnvalue *****
999 user03=0
return
end
subroutinewrdisp(nnod,nodes)
#include"impcom.inc"
#include"ansysdef.inc"
integernnod,nodes(nnod)
externalwrinqr,disget
integerwrinqr,disget
integeriott,i,rc,k
doubleprecisionvalue(4)
iott=wrinqr(WR_OUTPUT)
doi=1,nnod
rc=disget(nodes(i),1,value
(1))
if(rc.eq.0)then
write(iott,1000)nodes(i)
1000 format('Nodes=',i3,' Noxdisplacementconstraint')
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提供子程序试验矢量与矩阵的操作
以下是一个完整的程序用来说明矢量矩阵操作{c}={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
doubleprecision dpin(12)
character*4 ch4in(12)
character*8 ch8in(12)
c
doubleprecisiona(3),b(4,3),c(4)
integeri,j,k
dataa/5,6,7/
datab/3,3,9,8,4,7,4,3,5,9,5,2/
iott=wrinqr
(2)
callvzero(c
(1),4)
write(iott,*)'***matrixb='
doi=1,4
write(iott,101)(b(i,k),k=1,3)
enddo
write(iott,*)'***vectora='
doi=1,3
write(iott,100)a(i)
enddo
callmaxv(b(1,1),a
(1),c
(1),4,3)
write(iott,*)'***vectorc='
doi=1,4
write(iott,100)c(i)
enddo
100format(F9.2,3x)
101format(3(F9.2,3x))
user01=0
c
return
end
E.用户自定义材料
1. 拷贝相关文件
D:
\user>copyc:
\ansys55\custom\user\intel\userpl.F
2. 运行编译连接(参见用户命令)
3. 启动ANSYS(参见用户命令)
D:
\user>ansys55cust-custom.\ansys.exe-pansysul
4. 编辑命令流文件a.dat
D:
\user>edita.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-pansysul
6. 输入a.dat,记录结果
/input,a,dat
E.用户单元
1. 拷贝相关文件
D:
\user>copyc:
\ansys55\custom\user\intel\uec101.F
D:
\user>copyc:
\ansys55\custom\user\intel\uel101.F
2. 编辑uel101.F
将下面的程序段
c
callTrackBegin('uel101')
c
c---defineinitialdata
c ---elmdatpointersdefinedinelparm
mat=elmdat(PMAT)
修改为:
c
callTrackBegin('uel101')
iott=wrinqr
(2)
write(iott,*)'Inuserelement',elem
c
c---defineinitialdata
c ---elmd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ANSYS2 开发 实例 chm