在使用fortran编写UMAT子程序时求积分上限时一直报错? 20
浏览:1217 回答: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)。
不知道是哪里有问题,请懂的前辈不吝赐教。
或者说,提示这样的错误是程序哪里出了问题呢?