您的位置:网站首页 > Ansys教程

ANSYS模型转到MSC.MARC介绍

时间:2011-02-14 09:11:31 来源:未知

 本文介绍了ANSYS模型转到MSC.MARC的相关内容。

  !选中所有单元

  ALLSEL,ALL

  ! 得到当前模型中的总节点数

  *GET,NNode,NODE,,COUNT, , , ,

  !输出节点

  *CFOPEN,Node,txt

  *VWRITE

  ('coordinates')

  *VWRITE,chrval(3),chrval(NNode),chrval(0),chrval(1)

  (4A5)

  *DO,I,1,NNode

  *VWRITE,I,NX(I),NY(I),NZ(I)

  (F8.0,3F13.5)

  *ENDDO

  *CFCLOS

  !打开单元文件

  *CFOPEN,ELEM,txt

  !得到所有单元数

  ESEL,S,ENAME,,65

  ALLSEL,ALL

  *GET,NElem,ELEM,,COUNT, , , ,

  *VWRITE,chrval(NElem)

  ('Number of Element: ', A8)

  !对单元集进行循环

  *DO,I,1,NElem

  !得到当前单元的类型

  *GET,ENAME,ELEM,I,ATTR,ENAM

  !如果是65号(65号单元)

  *IF,ENAME,EQ,65,THEN

  !得到该单元的节点编号

  *GET,EN1,ELEM,I,NODE,1

  *GET,EN2,ELEM,I,NODE,2

  *GET,EN3,ELEM,I,NODE,3

  *GET,EN4,ELEM,I,NODE,4

  *GET,EN5,ELEM,I,NODE,5

  *GET,EN6,ELEM,I,NODE,6

  *GET,EN7,ELEM,I,NODE,7

  *GET,EN8,ELEM,I,NODE,8

  *VWRITE,I,EN1,EN2,EN3,EN4,EN5,EN6,EN7,EN8

  (F8.0,8F8.0)

  *END IF

  *ENDDO

  *CFCLOS

  !Fortran程序,把ansys结果转换为MARC模型文件格式

  program main

  implicit none;

  integer Key;

  write(*,*) "Input 1 for node, 2 for element"

  read(*,*) Key

  if (Key==1) then

  call Node_IO()

  end if

  if (Key==2) then

  call Elem_IO()

  end if

  stop

  end program

  subroutine Node_IO()

  implicit none

  integer NNode,I, J

  real*8,pointer :: Node(:,:)

  real*8 x;

  character :: filename*10;

  write(*,*) "Please input node filename"

  read(*,'(A10)') filename

  open(66,file=filename)

  read(66,*) NNode

  allocate (Node(NNode,3))

  do I=1,NNode

  read(66,*) x, (Node(I,J), J=1,3)

  end do

  close (66)

  filename=filename//"NEW"

  open (66,file=filename)

  write(66,'(4I10)') 3, NNode, 0, 1

  do I=1, NNode

  write(66,'(I10, 3E20.8)') I, (Node(I,J), J=1,3)

  end do

  close (66)

  return

  end subroutine Node_IO

  subroutine Elem_IO()

  implicit none

  integer NElem,NumNode,ElemTyp,I, J

  integer,pointer :: Elem(:,:)

  real*8 x;

  real*8,pointer :: y(:)

  character :: filename*10, outformat*11,CharEtype;

  write(*,*) "Please input node filename"

  read(*,'(A10)') filename

  write(*,*) "Please input Element type & Number of Nodes per element"

  read(*,*) ElemTyp, NumNode

  open(66,file=filename)

  read(66,*) NElem

  allocate (Elem(NElem, NumNode))

  allocate (y(NumNode))

  do I=1, NElem

  read(66,*) x, (y(j),j=1,NumNode)

  do J=1, NumNode

  Elem(I,J)=int(y(j))

  end do

  end do

  close (66)

  filename=filename//"NEW"

  write(CharEtype,'(I1)') NumNode

  write(outformat,'(A6,A,A4)') "(2I10,", CharEtype, "I10)"

  open (66,file=filename)

  write(66,'(3I10)') 0, 0, 1

  do I=1, NElem

  write(66,outformat) I, ElemTyp, (Elem(I,J), J=1,ElemTyp)

  end do

  close (66)

  return

  end subroutine Elem_IO