当前位置: 首页 > 计算模拟 >【求助】使用fortran语言编写umat子程序想实现循环积分,但一直报错,求教

【求助】使用fortran语言编写umat子程序想实现循环积分,但一直报错,求教

作者 阳关不锈
来源: 小木虫 600 12 举报帖子
+关注

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
                        Df_eff=statev(6)
                        E_mn=0.5*D0_eff*T0_eff
                        do while(E_mn.lt.Gc)
                            Df_eff=Df_eff+0.001
                                statev(6)=Df_eff
                                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
                        Df_eff=statev(6)+0.001
                        if(Df_eff.le.D0_eff) then
                                dm=dgdf2
                                ftype=1.5
                        endif

这是包含循环部分的程序,请帮我看看do while部分有没有错误,谢谢了! 返回小木虫查看更多

今日热帖
  • 精华评论
  • 阳关不锈

    提示的错误信息是Error: Expecting END SUBROUTINE statement at (1)

  • BeverlyNWPU

    楼主是不是只贴出了程序的一部分,根据报错,这和do while  部分没有关系,而且贴出来的部分if部分并不完整

  • lijf517

    根据提示改啊。在文件最后加上一行: end subroutine umat

  • 阳关不锈

    引用回帖:
    3楼: Originally posted by BeverlyNWPU at 2017-08-17 17:33:01
    楼主是不是只贴出了程序的一部分,根据报错,这和do while  部分没有关系,而且贴出来的部分if部分并不完整

    是的,原子程序很长,所以我只贴出了我修改过的程序,请你帮我看看我自己改的求积分上限的do while语句是否有问题,如果有需要我可以把整个子程序贴上来

  • 阳关不锈

    引用回帖:
    4楼: Originally posted by lijf517 at 2017-08-17 17:55:38
    根据提示改啊。在文件最后加上一行: end subroutine umat

    整个子程序是没有问题的,只有do while那一部分是我改动过的,现在提示错误,肯定是修改过的部分出现了错误,所以就想来问问我改的循环部分有没有错误,如果有需要,我可以把整个子程序贴上来

  • lijf517

    编译器报的是个语法错误,与具体算法没关系。从贴出代码段看,第一行的if一句应该在最后一行加个endif语句来闭合。do while语句没有明显错误。但要注意该循环语句段中有一行特别长,如果编译器选项没设置好的话,这一代码行可能只有前面一百多个字符被识别,后面的会自动被编译器丢弃,也可能会造成语法错误。最后,你的循环语句需要优化下。那个长语句行中,T0_eff和D0_eff的值在循环中一直是固定值,所以请把与这两项相关的乘法除法都移到循环外面计算,不要再循环内一遍又一遍计算已知的值,这是无用功,会降低计算效率

  • 阳关不锈

    引用回帖:
    7楼: Originally posted by lijf517 at 2017-08-18 10:01:50
    编译器报的是个语法错误,与具体算法没关系。从贴出代码段看,第一行的if一句应该在最后一行加个endif语句来闭合。do while语句没有明显错误。但要注意该循环语句段中有一行特别长,如果编译器选项没设置好的话,这 ...

    通过对比改动之前的子程序,问题已经解决了,谢谢您的耐心解答和回复

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓