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
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















