Fortran Coder

查看: 10677|回复: 1
打印 上一主题 下一主题

[求助] 能否帮我看一下有无语法问题?

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
16 元
贡献
6 点
跳转到指定楼层
楼主
发表于 2014-10-15 10:41:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是学机械的,Fortran真的是零基础学起。。最近要用ABAQUS进行二次开发,用Fortran改编了一个子程序,如下。但是ABAQUS调用子程序时提示错误:
Error in job 10_15sub: Problem during linking - Single Precision Abaqus/Explicit User Subroutines.   This error may be due to a mismatch in the Abaqus user subroutine arguments.   These arguments sometimes change from release to release, so user subroutines   used with a previous release of Abaqus may need to be adjusted.
Job 10_15sub aborted due to errors.

我觉得可能是语法有错误,但是不知道哪里有问题,实在很头疼,敬请各位版主和朋友帮我解决一下,多谢!!


subroutine vusdfld(
c Read only -
     *   nblock, nstatev, nfieldv, nprops, ndir, nshr,
     *   jElemUid, kIntPt, kLayer, kSecPt,
     *   stepTime, totalTime, dt, cmname,
     *   coordMp, direct, T, charLength, props,
     *   stateOld,
c Write only -
     *   stateNew, field )
c
      include 'vaba_param.inc'
c
      dimension props(nprops),
     *          jElemUid(nblock), coordMp(nblock, *),
     *          direct(nblock, 3, 3), T(nblock,3,3),
     *          stateOld(nblock, nstatev),
     *          stateNew(nblock, nstatev),
     *          field(nblock, nfieldv)
      character*80 cmname
c Properties array
c     props(1) -> Transverse tensile strength, Yt
c     props(2) -> Matreix compressive strength, Yc
c     props(3) -> Ply shear strength, Sc
c     props(4) -> Fiber buckling strength, Xc
c     props(5) -> Initial shear modulus, G12
c     props(6) -> Nonlinear shear factor, alpha
c     props(7) -> stress max
c
      character*3 cData(maxblk*6)
      dimension jData(maxblk*6)
      dimension stress(maxblk*6),strain(maxblk*6)
c Read properties
      yt    = props(1)
      yc    = props(2)
      sc    = props(3)
      xc    = props(4)
      g12   = props(5)
      alpha = props(6)
      delet = props(7)
c Get stresses and strains from previous increment
      jStatus = 1
      call vgetvrm( 'S', stress, jData, cData, jStatus )
      jStatus = 1
      call vgetvrm( 'LE', strain, jData, cData, jStatus )
c
      call evaluateDamage( nblock, nstatev,
     *     nfieldv, ndir, nshr,
     *     yt, yc, sc, xc, g12, alpha,
     *     delet,
     *     stress, strain,
     *     stateOld,
     *     stateNew, field )
c
      return
      end
c
      subroutine evaluateDamage ( nblock, nstatev,
     *     nfieldv, ndir, nshr,
     *     yt, yc, sc, xc, g12, alpha,
     *     delet,
     *     stress, strain,
     *     stateOld,
     *     stateNew, field )
c
      include 'vaba_param.inc'
c
      dimension stress(nblock,ndir+nshr),
     *     strain(nblock,ndir+nshr),
     *     stateOld(nblock,nstatev),
     *     stateNew(nblock,nstatev),
     *     field(nblock,nfieldv)
      parameter ( zero = 0.d0 )
       delet = props(7)
c
c initialize failure flags from statev.
      do k = 1, nblock
         stateNew(k,1) = stateOld(k,1)
         stateNew(k,2) = stateOld(k,2)
         stateNew(k,3) = stateOld(k,3)
c
         em     = stateOld(k,1)
         efs    = stateOld(k,2)
         damage = stateOld(k,3)
c     
         s11 = stress(k,1)
         s22 = stress(k,2)
         s12 = stress(k,4)
*
         e12 = 2.0*strain(k,4) !e12 is engineering strain
c
c damage index: = 0 if no strain to prevent divide by zero
c
         damage = 0.d0
         if (stress(k,2).gt.delet) then
         stateNew(k,2) = zero
       else
         if (e12.ne.0) then
     *        damage = (3.d0*alpha*g12*s12**2-2.d0*alpha*(s12**3)/e12)/
     *                 (1.d0+3.d0*alpha*g12*s12**2)
c
         f1 = s12**2/(2.d0*g12) + 0.75d0*alpha*s12**4
         f2 = sc**2 /(2.d0*g12) + 0.75d0*alpha*sc**4

c
c matrix tensile/compressive failure
         if (em .lt. 1.d0) then
            if (s22 .lt. 0.d0) then
               em = sqrt((s22/yc)**2 + f1/f2)
            else
               em = sqrt((s22/yt)**2 + f1/f2)
            endif
            stateNew(k,1) = em
         endif
c
c fiber-matrix shear failure
         if (efs .lt. 1.d0) then
            if (s11 .lt. 0.d0) then
               efs = sqrt((s11/xc)**2 + f1/f2)
            else
               efs = 0.d0
            endif
            stateNew(k,2) = efs
         endif
c
c state transition diagram
c
c fv1: matrix compr/tens failure
c fv2: fiber/matrix shear failure
c fv3: material damage (shear nonlinearity)
c                            fv1  fv2  fv3      e1  e2  nu12  g12
c
c (0) no failure              0    0    0  -->  e1  e2  nu12  g12
c (1) matrix (compr/tens)     1    0    0  -->  e1   0   0    g12
c (2) fib/mtx shear           0    1    0  -->  e1  e2   0     0
c (3) matrix & f/m shear      1    1    0  -->  e1   0   0     0
c (4) pure damage             0    0    1  -->  e1  e2  nu12   0
c (5) mtrx & damage           1    0    1  -->  e1   0   0     0
c (6) f/m shear & damage      0    1    1  -->  e1  e2   0     0
c (7) mtrx, f/m shr & damage  1    1    1  -->  e1   0   0     0
c
c     update field variables
c         
         field(k,1) = 0.d0
         field(k,2) = 0.d0
         if (em .ge. 1.d0) then
            field(k,1) = 1.d0
         end if
         if (efs .ge. 1.d0) then
            field(k,2) = 1.d0
         end if
         field(k,3) = damage
         stateNew(k,3) = field(k,3)
         end if
      end do
c
      return
      end

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-10-15 11:33:00 | 只看该作者
1.你没有给出各include 代码,我无法帮你检查。
2.编译器会帮你检查。我认为你的错误不是语法错误,而是编译器与 abaqus 的设置问题。
3.我不懂 abaqus
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 21:57

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表