计算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