|  | 
 
| 我是学机械的,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
 
 
 | 
 |