在FORTRAN UMAT子程序中,我使用调用子程序SRT
CALL STRT (STATEV(N), STATEV(N),
2 STATEV(N), NIP(N), FIP(N), DSP(N),
3 POP(65), de_log, T_st)
在主UMAT子程序中,我正在计算de_log和T_st的值。但是,当我试图将新计算的变量包括到子程序STRT和函数F>和DX中时,我遇到了错误。这些函数不采用在主子程序中计算的de_log和T_st的值我不明白为什么函数看不到de_log和t_st的值
SUBROUTINE STRT (GMA, TLP, GIP, NIP, FIP,
2 DSP, POP, de_log, T_st)
C
IMPLICIT REAL*8 (A-H,O-Z)
EXTERNAL F, DFDX
DIMENSION GMA(N), TLP(N), GIP(N),
2 FIP(N), DSP(N), POP(8)
DO I=1,N
X=TLP(I)/GIP(I)
FIP(I)=F(X,POP)
DSP(I)=DX(X,POP)
END DO
RETURN
END
REAL*8 FUNCTION F(X, POP)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION POP(8)
TERM1= (POP(3)*de_log)
TERM2= (T_st**POP(4))
F=POP(2)*(ABS(X))**POP(1)*DSIGN(1.D0,X)
F= F*TERM1*TERM2
RETURN
END
REAL*8 FUNCTION DX(X, POP)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION POP(8)
TERM1= (POP(3)*de_log)
TERM2= (T_st**POP(4))
DX=POP(1)*POP(2)*(ABS(X))**(POP(1)-1.)
DX= DFDX*TERM1*TERM2
RETURN
END
一个过程不能"参见";另一个过程中的变量。将这些参数传递给strt
子例程并不能使它们在f
和dx
函数中可用。您还必须将它们作为参数传递给这些函数。然后您的代码变为:
SUBROUTINE STRT (GMA, TLP, GIP, NIP, FIP,
2 DSP, POP, de_log, T_st)
C
IMPLICIT REAL*8 (A-H,O-Z)
EXTERNAL F, DFDX
DIMENSION GMA(N), TLP(N), GIP(N),
2 FIP(N), DSP(N), POP(8)
DO I=1,N
X=TLP(I)/GIP(I)
FIP(I)=F(X,POP,de_log,T_st)
DSP(I)=DX(X,POP,de_log,T_st)
END DO
RETURN
END
REAL*8 FUNCTION F(X, POP,de_log,T_st)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION POP(8)
TERM1= (POP(3)*de_log)
TERM2= (T_st**POP(4))
F=POP(2)*(ABS(X))**POP(1)*DSIGN(1.D0,X)
F= F*TERM1*TERM2
RETURN
END
REAL*8 FUNCTION DX(X, POP,de_log,T_st)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION POP(8)
TERM1= (POP(3)*de_log)
TERM2= (T_st**POP(4))
DX=POP(1)*POP(2)*(ABS(X))**(POP(1)-1.)
DX= DFDX*TERM1*TERM2
RETURN
END