ANSYS二次开发培训练习题

更新时间:2024-01-19 17:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

我从老板那里拿来的,好东西哦,给我加1分吧! ANSYS二次开发培训练习题 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 4.  约定

DOS提示  D:\%user>

DOS输入  copy c:\\ansys55\\docu\\UIFUNC2.GRN ANSYS输入框  ET,1,42 数据文件  :N Men_Training UIDL

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行插入以下几行: Menu_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

ANSYS Training MENU

Fnc_Training :E END :! 删除该行

:X INDEX ADDED BY ANSYS 以后的全部行 存盘退出

3.  编辑新的菜单文件 D:\%user>edit newmenu.grn 键入以下文字 :F UIMENU.GRN

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

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

   

rm_[/TITLE] Welcome to ANSYS Training

   Typ_Char,72,72    

rm_[/TITLE] Welcome to ANSYS Training

Cmd_)/Go

:E END :! 存盘退出

4.  修改menulist55.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界面 APDL

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 或

c get number of currently selected 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 selected 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 selected node

          goto 10

      endif

      call wrdisp (numnp, istack(ndptr+1))

c node = 0, at the end of node list

c calculate mean of xyz coordinates

      xmean = xmean / numnp       ymean = ymean / numnp       zmean = zmean / numnp

c calculate standard 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 allocated memory

      call HeapDealloc(hXcptr)       call HeapDealloc(hYcptr)       call HeapDealloc(hZcptr)       call HeapDealloc(hNdptr)

c ***** required return value ***** 999 user03 = 0

      return       end

      subroutine wrdisp (nnod, nodes) #include \ #include \

      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提供子程序试验矢量与矩阵的操作   

以下是一个完整的程序用来说明矢量矩阵操作{c}={a}

*deck,user01 user parallel ANSYS,INC

      function user01 (intin,dpin,ch4in,ch8in) #include \

      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\?1.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 defined 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 defined 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窗口的输出

本文来源:https://www.bwwdw.com/article/x7oo.html

Top