ANSYS2次开发实例chm.docx

上传人:b****6 文档编号:8110881 上传时间:2023-01-28 格式:DOCX 页数:43 大小:41.67KB
下载 相关 举报
ANSYS2次开发实例chm.docx_第1页
第1页 / 共43页
ANSYS2次开发实例chm.docx_第2页
第2页 / 共43页
ANSYS2次开发实例chm.docx_第3页
第3页 / 共43页
ANSYS2次开发实例chm.docx_第4页
第4页 / 共43页
ANSYS2次开发实例chm.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

ANSYS2次开发实例chm.docx

《ANSYS2次开发实例chm.docx》由会员分享,可在线阅读,更多相关《ANSYS2次开发实例chm.docx(43页珍藏版)》请在冰豆网上搜索。

ANSYS2次开发实例chm.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1