首页/文章/ 详情

umat子程序编写常用的fortran函数分享(一)

1年前浏览571

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


来源:易木木响叮当
二次开发
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-02
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 229粉丝 305文章 369课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈