把源代码给您看看,这里goto语句用的真的不好吗?
SUBROUTINE UCP(DECRA,DESWA,STATEV,SERD,EC0,ESW0,P,QTILD,
1 TEMP,DTEMP,PREDEF,DPRED,TIME,DTIME,CMNAME,LEXIMP,LEND,
2 COORDS,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
C
DIMENSION DECRA(5),DESWA(5),STATEV(*),PREDEF(*),DPRED(*),
1 TIME(2),COORDS(*)
C
C DEFINE CONSTANTS
C
AA=0.009
DD=70.0
AIWA=0.0
BB=0.001
QQ=10000.0
RT=8.314
XX_sat=8.0
miu=7.0
omig=0.015
NN=1.2
YY=0.1
C
c set initial RR, XX
c
IF(KSTEP.EQ.1.AND.KINC.EQ.1) THEN
STATEV(4)=2.0
STATEV(3)=0.0
ENDIF
IF(KSTEP.GE.2.AND.KINC.EQ.1) THEN
STATEV(4)=STATEV(4)+YY/STATEV(3)
ENDIF
IF(KINC.EQ.1) THEN
STATEV(1)=STATEV(4)
STATEV(2)=0.0
ENDIF
c
c set FLAG_SIGN (elastic or inelastic)
c
IF(KINC.EQ.1) THEN
FLAG_SIGN=0
ENDIF
c
RR=STATEV(1)
XX=STATEV(2)
c
KK=1.5**0.5*(QTILD-AIWA)-RR
IF(KK.LT.0) THEN
DECRA(1)=0
DECRA(5)=0
FLAG_SIGN=1
GOTO 100
ELSE
SV=KK
DFSV=1.5**0.5
END IF
c
IF(FLAG_SIGN.EQ.0) THEN
GOTO 100
ENDIF
c
c calculat inelastic strain rate
c
DECRA(1)=1.5**0.5*AA*(SV/DD)**NN*EXP(BB*(SV/DD)**(NN+1))
1 *EXP(-QQ/(RT*TEMP))*DTIME
IF(LEXIMP.EQ.1) THEN
DECRA(5)=1.5**0.5*AA*NN*(SV/DD)**(NN-1)*(1/DD)*DFSV
2 *EXP(BB*(SV/DD)**(NN+1))*EXP(-QQ/RT*TEMP)*DTIME
3 +1.5**0.5*AA*(SV/DD)**NN*EXP(BB*(SV/DD)**(NN+1))
4 *BB*(NN+1)*(SV/DD)**NN
5 *(1/DD)*DFSV*EXP(-QQ/(RT*TEMP))*DTIME
END IF
c
c calculat XX
c
CR_rate=DECRA(1)/DTIME
XX_rate=miu*CR_rate*(XX_sat-XX)
XX=XX+XX_rate*DTIME
STATEV(2)=XX
STATEV(3)=STATEV(3)+XX_rate*DTIME
STATEV(1)=STATEV(4)+XX_rate*(1-omig)
c
100 RETURN
END