在使用fortran编写UMAT子程序时求积分上限时一直报错? 20

浏览:1153 回答:6

需要求一个积分的上限,求积分上限的程序是这样的

E_mn=0.5*D0_eff*T0_eff
   do while(E_mn.lt.Gsc)
       Df_eff=Df_eff+0.001
    E_mn=E_mn+0.001*exp(T0_eff*D0_eff/(Gc-0.5*T0_eff*D0_eff)*(1.0-Df_eff/D0_eff))*T0_eff
   end do

这是那一整部分程序

if (ftype.lt.1.0) then
! else  ! check for matrix failure
     if  (sigma_N.ge.0) then; 
      elt_m=(sigma_N/yt)**2+(tau_T/st)**2+(tau_L/sl)**2
  else
   elt_m=(tau_T/(st+sigma_N/tan(2*phio)))**2 &
       +(tau_L/(sl+sigma_N/tan(2*phio)))**2
  endif 
        if ((elt_m .ge. 1.0).and.(sigma_N.ge.0)) then !---------matrix tensile cracking---------
   Gnc=Gnct
   
     ftype=1.0
     T0_eff=T_eff/sqrt(elt_m)
     D0_eff=D_eff/sqrt(elt_m)
   Gc=Gnc+(Gsc-Gnc)*(Gs/(Gn+Gs))**eta
   Df_eff=D0_eff
   E_mn=0.5*D0_eff*T0_eff
   do while(E_mn.lt.Gc)
       Df_eff=Df_eff+0.001
    E_mn=E_mn+0.001*exp(T0_eff*D0_eff/(Gc-0.5*T0_eff*D0_eff)*(1.0-Df_eff/D0_eff))*T0_eff
   end do
   if(Df_eff.le.D0_eff) then
    dm=dgdf2
    ftype=1.5
   endif
      else if ((elt_m .ge. 1).and.(sigma_N.lt.0)) then !---------matrix compressive cracking---------
   
   ftype=2.0
   T0_eff=T_eff/sqrt(elt_m)
     D0_eff=D_eff/sqrt(elt_m)
     Df_eff=D0_eff
   E_mn=0.5*D0_eff*T0_eff
   do while(E_mn.lt.Gsc)
       Df_eff=Df_eff+0.001
    E_mn=E_mn+0.001*exp(T0_eff*D0_eff/(Gc-0.5*T0_eff*D0_eff)*(1.0-Df_eff/D0_eff))*T0_eff
   end do
   endif      
       
   if(Df_eff.le.D0_eff) then
    dm=dgdf2
    ftype=2.5
      endif
      else 
   dm=0.0
   ftype=0.0
     endif
 endif

但是提交之后一直报错,Error: Expecting END SUBROUTINE statement at (1)。

不知道是哪里有问题,请懂的前辈不吝赐教。

或者说,提示这样的错误是程序哪里出了问题呢?

邀请回答 我来回答

全部回答

(3)
默认 最新
技术邻问答
如果觉得回答对你有帮助,请记得及时采纳哦
2017年11月15日
评论 点赞
干货有限元
如果没看错 你的do while 那个值 越来越小 所以跳不出循环来
2017年8月18日
评论 点赞
干货有限元
subroutine 结束后 要有end语句呀
2017年8月16日
评论 3 点赞

没解决?试试专家一对一服务

换一批