umat子程序編寫常用的fortran函數分享(一)

計算2*2矩陣的跡:

      subroutine trace2x2(a,aii)

      implicit none

      real(8), intent(in) :: a(2,2)

      real(8), intent(out) :: aii  

      aii = a(1,1)+a(2,2)

      return

      end subroutine trace2x2

計算3*3矩陣的跡:

      subroutine trace3x3(a,aii)

      implicit none

      real(8), intent(in) :: a(3,3)

      real(8), intent(out) :: aii 

      aii = a(1,1)+a(2,2)+a(3,3)

      return

      end subroutine trace3x3

將向量(9*1:變形梯度)轉化為3*3矩陣存儲

      subroutine vecmat9(dvin,dmout)

      implicit none

      real(8), intent(in) :: dvin(9)

      real(8), intent(out) :: dmout(3,3)

      integer :: i

      dmout(1,1) = dvin(1)

      dmout(1,2) = dvin(2)

      dmout(1,3) = dvin(3)

      dmout(2,1) = dvin(4)

      dmout(2,2) = dvin(5)

      dmout(2,3) = dvin(6)      

      dmout(3,1) = dvin(7)

      dmout(3,2) = dvin(8)

      dmout(3,3) = dvin(9)

      return

      end subroutine vecmat9 

將3*3的矩陣轉化為向量(9*1:變形梯度)

      subroutine matvec9(dmin,dvout)

      implicit none

      real(8), intent(in) :: dmin(3,3)

      real(8), intent(out) :: dvout(9)

      integer :: i

      dvout(1) = dmin(1,1)

      dvout(2) = dmin(1,2)

      dvout(3) = dmin(1,3)

      dvout(4) = dmin(2,1)

      dvout(5) = dmin(2,2)

      dvout(6) = dmin(2,3)

      dvout(7) = dmin(3,1)

      dvout(8) = dmin(3,2)

      dvout(9) = dmin(3,3) 

      return

      end subroutine matvec9

將3*3的矩陣轉化為向量(6*1:應力應變)

      subroutine matvec6(dmin,dvout)

      implicit none

      real(8), intent(in) :: dmin(3,3)

      real(8), intent(out) :: dvout(6)

      integer :: i

      do i=1,3

          dvout(i)=dmin(i,i)

      end do

      dvout(4) = (dmin(1,2)+dmin(2,1))/2.

      dvout(5) = (dmin(1,3)+dmin(3,1))/2.

      dvout(6) = (dmin(2,3)+dmin(3,2))/2.  

      return

      end subroutine matvec6

將向量(6*1:應力應變)轉化為3*3矩陣

      subroutine vecmat6(dvin,dmout)

      implicit none

      real(8), intent(in) :: dvin(6)

      real(8), intent(out) :: dmout(3,3)

      integer :: i  

      do i=1,3

            dmout(i,i) = dvin(i)

      end do

      dmout(1,2) = dvin(4)

      dmout(2,1) = dvin(4)

      dmout(1,3) = dvin(5)

      dmout(3,1) = dvin(5)

      dmout(3,2) = dvin(6)

      dmout(2,3) = dvin(6)

      return

      end subroutine vecmat6

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
3