edodo,我给你一个ansys中输出Patran 2 Neutral File 的资料吧!
只支持几种体单元,你可以做参考
!*
!* TITLE : ANSYS to Patran 2 Neutral File translator
!* FUNCTION: This macro translates element and nodal data FOR THE CURRENTLY
!* SELECTED SET OF ELEMENTS into Patran 2 Neutral File (PNF)
!* format
!*
!* LIMITATIONS: 1) only the following element types can be read/written:
!* * SOLID45 = 8-noded hexahedral element
!* * SOLID72 = 4-noded tetrahedral element
!* * SOLID73 = 8-noded hexahedral element
!* * SOLID92 = 10-noded tetrahedral element
!* * SOLID95 = 20-noded hexahedral element
!*
!* USAGE: *USE,kb14,arg1,arg2,arg3
!*
!* where arg1 : *** NOT USED ***
!* arg2 : output file name (extension is .mesh)
!* arg3 : element "domain" number [default=1]
!*
finish ! return to "BEGIN" level
/NOPR ! switch output OFF
/com,
/com,========================================================================
/com,= ANSYS to Patran 2 Neutral File translator =
/com,========================================================================
/com,
ar51 = 'X' !
ar52 = 'Y' ! define some useful parameters
ar53 = 'Z' !
*get,ar33,ACTIVE,0,DBASE,LTIME
ar34 = NINT(ar33/10000-0.5)
ar54='%ar34%:' $ *if,ar34,LT,10,THEN $ ar54='0%ar34%:' $ *endif
ar35 = NINT(MOD(ar33/100,100)-0.5)
ar55='%ar35%:' $ *if,ar35,LT,10,THEN $ ar55='0%ar35%:' $ *endif
ar36 = MOD(ar33,100)
ar56='%ar36%' $ *if,ar36,LT,10,THEN $ ar56='0%ar36%' $ *endif
*dim,month,CHAR,12
month(1) = 'Jan','Feb','Mar','Apr','May','Jun'
month(7) = 'Jul','Aug','Sep','Oct','Nov','Dec'
*get,ar44,ACTIVE,0,DBASE,LDATE
ar37 = MOD(ar44,100)
ar57=' %ar37%' $ *if,ar37,LT,10,THEN $ ar57='0%ar37%' $ *endif
ar58 = month(NINT(MOD(ar44/100,100)))
ar39 = NINT(ar44/10000)
ar59='%ar39%' $ *if,ar39,LT,10,THEN $ ar59='0%ar39%' $ *endif
*set,month ! delete temporary parameter
!
! process input parameters
!
*if,'%arg2%',EQ,'0',THEN
*msg,FATAL
Output file name (ARG2) undefined; exiting...
*endif
ar12 = '%arg2%'
*if,arg3,EQ,0,THEN $ ar13=1 $ *else $ ar13=arg3 $ *endif
/com,
/com, Size data (number of elements, number of nodes) to be written...
/com,
/com, * only elements which have all their nodes selected will be written
/com, * only nodes which are attached to the selected elements will be written
/com,
nsle,S ! select all nodes associated with selected elements
*get,ar70,NODE,,COUNT ! total number of nodes
*get,ar80,ELEM,,COUNT ! total number of elements
*msg,INFO,ar80,ar70,ar12
%/ &
%/ Writing %I elements and %I nodes &
%/ to Patran 2 Neutral File %C.mesh... %/
!
! open file for writing and write header cards...
!
/output,'%ar12%',mesh,,
/sys,printf "n * Writing header cards..."
*vwrite,
('25',2(7X,'0'),7X,'1',5(7X,'0'))
*msg,INFO,ar12,'%ar54%%ar55%%ar56%',ar57,ar58,'20%ar59%'
C %C.mesh: created at %C on %C %C %C
*vwrite,0,0,1,ar70,ar80,1,0
('26',7(1F9.0,TL1),7(' '),'0'/20X,'2.0A',8(' '))
!
! write nodal data cards:
!
/sys,printf "n * Writing nodal data cards..."
*get,ar77,NODE,,NUM,MAX ! highest node number in selected set
*dim,nlist,ARRAY,%ar77%,4 ! array to hold nodal data
*vget,nlist(1,4),NODE,1,NSEL ! mask to hide unselected nodes
*do,ar20,1,3,1
! get nodal x,y,z-coordinates
ar50 = ar5%ar20%
*vmask,nlist(1,4)
*vget,nlist(1,%ar20%),NODE,1,LOC,%ar50%
*enddo
/NOPR ! switch output OFF
*vmask,nlist(1,4)
*vwrite,SEQU,0,2,nlist(1,1),nlist(1,2),nlist(1,3)
(' 1',3(1F9.0,TL1),' ',TL1,5(7X,'0')/3E16.9/'1G',7X,'6',2(7X,'0'),2X,'000000')
*set,nlist ! delete temporary array
!
! write element data cards:
!
/sys,printf "n * Writing element data cards..."
*dim,en,ARRAY,10 ! array to hold element nodal topology
*get,ar88,ELEM,,NUM,MIN ! lowest element number in selected set
*do,ar20,1,ar80,1
*get,ar99,ELEM,%ar88%,ATTR,TYPE ! element type
*get,ar60,ETYPE,%ar99%,ATTR,ENAME ! element "name"
*if,ar60,EQ,95,THEN
! 20-noded hexahedra
ar61 = 8
ar62 = 20
*elseif,ar60,EQ,92,THEN
! 10-noded tetrahedra
ar61 = 5
ar62 = 10
*elseif,ar60,EQ,45,THEN
! 8-noded hexahedra without rotations
ar61 = 8
ar62 = 8
*elseif,ar60,EQ,73,THEN
! 8-noded hexahedra with rotations
ar61 = 8
ar62 = 8
*elseif,ar60,EQ,72,THEN
! 4-noded tetrahedra with rotations
ar61 = 5
ar62 = 4
*else
/output,
*msg,FATAL,ar60,ar88
Unsupported element type %I for element %I; exiting...
*endif
ar63 = NINT(0.5+(ar62+9)/10)
/NOPR ! switch output OFF
*vwrite,ar88,ar61,ar63,ar62,1,ar13,0,0,0,0
(' 2',3(1F9.0,TL1),' ',TL1,5(7X,'0')/4(1F9.0,TL1),3E16.9)
*vget,en(1),ELEM,%ar88%,NODE,1,,,4
*if,ar60,EQ,95,THEN
! 20-noded hexahedra
*vlen,1
*vwrite,en(1),en(2),en(3),en(4),en(5),en(6),en(7),en(8),en(9),en(10)
(10(1F9.0,TL1),' ')
*vget,en(1),ELEM,%ar88%,NODE,11,,,4
*vlen,1
*vwrite,en(1),en(2),en(7),en(8),en(9),en(10),en(3),en(4),en(5),en(6)
(10(1F9.0,TL1),' ')
*elseif,ar60,EQ,92,THEN
! 10-noded tetrahedra
*vlen,1
*vwrite,en(1),en(2),en(3),en(4),en(5),en(6),en(7),en(8),en(9),en(10)
(10(1F9.0,TL1),' ')
*elseif,ar60,EQ,72,THEN
! 4-noded tetrahedra
*vlen,1
*vwrite,en(1),en(2),en(3),en(4)
(4(1F9.0,TL1),' ')
*else
! 8-noded hexahedra
*vlen,1
*vwrite,en(1),en(2),en(3),en(4),en(5),en(6),en(7),en(8)
(8(1F9.0,TL1),' ')
*endif
ar88 = ELNEXT(ar88) ! next element number is selected set
*enddo
*set,en ! delete temporary array
!
! write end-of-file card and close file
!
*vwrite,
('99',2(7X,'0'),7X,'1')
/output,
/com,complete!
finish ! return to "BEGIN" level
/GOPR ! switch output ON
/com,
/com,========================================================================
/com,= finished =
/com,========================================================================
/com, |