错误#6404:此名称没有类型,必须具有显式类型。??? 100
各位大佬请问遇到这种情况怎么解决,而且不论我怎么改,错误都是31个,不增不减。
错误 error #6404: This name does not have a type, and must have an explicit type. [SSTOL] C:\Users\Administrator\Documents\Visual Studio 2015\Projects\D-Paccord\D-Paccord\DP.for 27
往下都是一样的错误,然后就是下面这样的
错误 error #5082: Syntax error, found IDENTIFIER 'SQRT' when expecting one of: .EQV. .NEQV. .XOR. .OR. .AND. .LT. < .LE. <= .EQ. == .NE. /= .GT. > ... C:\Users\Administrator\Documents\Visual Studio 2015\Projects\D-Paccord\D-Paccord\DP.for 110
附上源代码
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
1 RPL,DDSDDT,DRPLDE,DRPLDT,
2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,
4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,JSTEP,KINC)
IMPLICIT NONE
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CMNAME
DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3),
4 JSTEP(4)
DIMENSION DE1(6,6),DE2(6,6),DE(6,6)
DIMENSION DSTRESS1(6),DSTRESS2(6),STRESS1(6),STRESS2(6)
DIMENSION FG1(6),FG2(6),FG(6)
DIMENSION DEP1(6,6),DEP2(6,6)
DIMENSION DDSTRAN(6),ESTRESS(6)
DIMENSION FPSTRESS(6),FFC(6),FFC1(6),FFC2(6),FFCD(6),FFCDE(6),
1FPSTRAN(6),FFCFFC(6,6),FFCFFC1(6,6),FFCFFC2(6,6)
DIMENSION FXY(6),FPSTRESS1(6),FPSTRESS2(6)
C上述为各种数组的定义
SSTOL=1E-3
C误差控制标准
FE=PROPS(1)
FMIU=PROPS(2)
FARF=PROPS(3)
FA=PROPS(4)
FB=PROPS(5)
C上述为五组参数,弹模,泊松比,α,A,B
FG=FE/(2.0*(1.0+FMIU))
FLMD=FMIU*FE/((1.0+FMIU)*(1.0-2.0*FMIU))
FTIME=0.0
FDTIME=1.0
666 CONTINUE
FSDP=STATEV(1)
C等效塑性剪切应变
CALL SINV(STRESS,SINV1,SINV2,NDI,NSHR)
C获取子步增量步起点应力不变量
FI1=SINV1
FI2=SINV2
IF(FI2.LE.1e-5)FI2=1e-5
FSD1=SQRT(FI1**2+FI2**2)
C应力状态到原点的距离
CALL GETDE((FG,FLMD,DE1)
DO I=1,6
DO J=1,6
DE1(I,J)=DE(I,J)
END DO
END DO
999 CONTINUE!子步循环
DO I=1,6
DDSTRAN(I)=DSTRAN(I)*FDTIME
END DO
C子步增量应变
CALL GETFPSTRESS(STRESS,FPSTRESS,FI1)
DO I=1,6
FPSTRESS1(I)=FPSTRESS(I)
END DO
C获取偏应力
CALL GETJ2(STRESS,J2)
FJ21=J2
C获取应力偏量的第二不变量
CALL GETFFC(FPSTRESS1,FFC,FJ21,FARF)
DO I=1,6
FFC1(I)=FFC(I)
END DO
C获取屈服函数对应力求导结果
CALL GETFFCFFC(FFC,FFCFFC)
DO I=1,6
DO J=1,6
FFCFFC1(I,J)=FFCFFC(I,J)
END DO
END DO
! DO I=1,6
! DO J=1,6
! FFCD(I,J)=FFC(J)*FDE(I,J)
! END DO
!END DO
!FFX(1)=FFCD(1,1)+FFCD(1,2)+FFCD(1,3)+FFCD(1,4)+FFCD(1,5)+FFCD(1,6)
!FFX(2)=FFCD(2,1)+FFCD(2,2)+FFCD(2,3)+FFCD(2,4)+FFCD(2,5)+FFCD(2,6)
!FFX(3)=FFCD(3,1)+FFCD(3,2)+FFCD(3,3)+FFCD(3,4)+FFCD(3,5)+FFCD(3,6)
!FFX(4)=FFCD(4,1)+FFCD(4,2)+FFCD(4,3)+FFCD(4,4)+FFCD(4,5)+FFCD(4,6)
!FFX(5)=FFCD(5,1)+FFCD(5,2)+FFCD(5,3)+FFCD(5,4)+FFCD(5,5)+FFCD(5,6)
!FFX(6)=FFCD(6,1)+FFCD(6,2)+FFCD(6,3)+FFCD(6,4)+FFCD(6,5)+FFCD(6,6)
DO I=1,6
DO J=1,6
DO K=1,6
FFCD(K)=FFC1(K)*DE1(K,J)
END DO
FFCDE(J)=FFCD(1)+FFCD(2)+FFCD(3)+FFCD(4)+FFCD(5)+FFCD(6)
END DO
FCF1=0
FCF1=FCF1+FFCDE(I)*FFC1(I)
END DO
FKF1=(0.0-FA/(FA+FB*FSDP)**2)SQRT(2FARF**2+1/3)
FFFC=MATMUL(FFCFFC1,DE1)
CALL GETFPSTRAN(FDLMD,FCF1,FKF1,FFFC,DDSTRAN)
CALL GETDEP(FFCFFC,DE1,FDEP,FCF1,FKF1)
C 获得弹塑性刚度矩阵
CALL GETDSTRESS(DEP,DDSTRAN,DSTRESS)
DO I=1,6
DSTRESS1(I)=DSTRESS(I)
END DO
C获得应力增量
DO I=1,6
STRESS1(I)=STRESS(I)+DSTRESS1(I)
END DO
C终点应力第一次试算值
CALL SINV(STRESS,SINV1,SINV2,NDI,NSHR)
C获取子步增量步终点应力不变量
FI1=SINV1
FI2=SINV2
CALL GETDE(FG1,FG2,FLMD,DE)
DO I=1,6
DO J=1,6
DE2(I,J)=DE(I,J)
C获取子步增量步起点弹性矩阵
CALL GETFPSTRESS(STRESS,FPSTRESS,FI1)
DO I=1,6
FPSTRESS2(I)=FPSTRESS(I)
END DO
C获取偏应力
CALL GETJ2(STRESS,J2)
J22=J2
C获取应力偏量的第二不变量
CALL GETFFC(FPSTRESS1,FJ22,FFC)
DO I=1,6
FFC2(I)=FFC(I)
END DO
C获取屈服函数对应力求导结果
CALL GETFFCFFC(FFC,FFCFFC)
DO I=1,6
DO J=1,6
FFCFFC2(I,J)=FFCFFC(I,J)
END DO
END DO
DO I=1,6
DO J=1,6
DO K=1,6
FFCD(K)=FFC2(K)*FDE(K,J)
END DO
FFCDE(J)=FFCD(1)+FFCD(2)+FFCD(3)+FFCD(4)+FFCD(5)+FFCD(6)
END DO
FCF2=0
FCF2=FCF2+FFCDE(I)*FFC2(I)
END DO
FKF2=(0.0-FA/(FA+FB*FSDP)**2)SQRT(2FARF**2+1/3)
FFFC=MATMUL(FFCFFC2,DE2)
!DO I=1,6
! DO J=1,6
! FFFC(I,J)=FFCFFC2(I,J)*DE2(J,I)
! END DO
!END DO错的
CALL GETFPSTRAN(FDLMD,FCF2,FKF2,FFFC,DDSTRAN)
CALL GETDEP(FFCFFC,DE2,FDEP,FCF2,FKF2)
C 获得弹塑性刚度矩阵
CALL GETDSTRESS(DEP,DDSTRAN,DSTRESS)
DO I=1,6
DSTRESS2(I)=DSTRESS(I)
END DO
C获得应力增量
DO I=1,6
STRESS2(I)=STRESS(I)+DSTRESS2(I)
END DO
C应力第二次试算值
DO I=1,6
ESTRESS(I)=0.5*(DSTRESS2(I)-DSTRESS1(I))
STRESS2(I)=STRESS(I)+0.5*DSTRESS1(I)+0.5*DSTRESS2(I)
END DO
FEIE=0.0
FEIS=0.0
FERR=0.0
DO I=1,6
FEIE=FEIE+ESTRESS(I)*ESTRESS(I)
FEIS=FEIS+STRRESS2(I)*STRESS2(I)
END DO
FERR=SQRT(FEIE/FEIS)
IF (FERR .LE. 1E-8)FERR=1E-8!若误差小于10负八次方就把它等于10的负八次方
FBETA=0.8*SQRT(SSTOL/FERR)!β,Tnew=△T*β
IF(FERR .GT. SSTOL)THEN
IF(FBETA .LE. 0.1)FBETA=0.1!如果子步失败
FDTIME=FBETA*FDTIME!缩小步长
GOTO 999
ELSE
FTIME=FTIME+FDTIME!T=T+△T
IF(FBETA .GE. 2.0)FBETA=2.0
FDTIME=FBETA*FDTIME!DTnew=β*DT
END IF
!根据误差控制标准确定新的增量步长
DO I=1,6
STRESS(I)=STRESS(I)+0.5*DSTRESS1(I)+0.5*DSTRESS2(I)!σ=σ+△σ
END DO
STATEV(1)=FSDP!存疑
C误差标准满足后更新终点状态
IF(FTIME .LT. 1)THEN
IF(FDTIME .GT. (1-FTIME))THEN
FDTIME=1-FTIME
END IF
C继续下一个子步增量步计算
GOTO 888
END IF
FI1=SINV1
FI2=SINV2
STATEV(1)=FSDP
CALL GETDE(FG1,FG2,FLMD,DE)
CALL GETJ2(STRESS,FJ2)
C获取应力偏量的第二不变量
CALL GETFFC(FPSTRESS,FJ2,FFC)
C获取屈服函数对应力求导结果
CALL GETFFCFFC(FFC,FFCFFC)
DO I=1,6
DO J=1,6
DO K=1,6
FFCD(K)=FFC(K)*FDE(K,J)
END DO
FFCDE(J)=FFCD(1)+FFCD(2)+FFCD(3)+FFCD(4)+FFCD(5)+FFCD(6)
END DO
FCF=0
FCF=FCF+FFCDE(I)*FFC(I)
END DO
FKF=(0.0-FA/(FA+FB*FSDP)**2)SQRT(2FARF**2+1/3)
FFFC=MATMUL(FFCFFC,FDE)
CALL GETFPSTRAN(FPBL,FCF,FKF,FFFC,DDSTRAN)
CALL GETDEP(FFFC,FDE,FCF,FKF,FDEP)
C 获得弹塑性刚度矩阵
DO I=1,6
DO J=1,6
DDSDDE(I,J)=FDEP(I,J)
END DO
END DO
C根据终点状态计算弹塑性矩阵,并赋值DDSDDE
RETURN
END
SUBROUTINE GETDSTRESS(FDEP,STRAN,DSTRESS)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION FDEP(6,6),STRAN(6),DSTRESS(6)
DO I=1,6
DSTRESS(I)=FDEP(I,1)*STRAN(1)+FDEP(I,2)*STRAN(2)+
1FDEP(I,3)*STRAN(3)+FDEP(I,4)*STRAN(4)+FDEP(I,5)*STRAN(5)+
1FDEP(I,6)*STRAN(6)
END DO
END SUBROUTINE GETDSTRESS
SUBROUTINE GETDEP(FFCFFC,DE,FDEP,FCF,FCF)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION FFCFFC(6,6),FDE(6,6),FDEP(6,6)
DO I=1,6
DO J=1,6
FDEP(I,J)=DE(I,J)-MATMUL(DE,FFCFFC))/(FCF-FKF)
END DO
END DO
END SUBROUTINE GETDEP
C Fortran90库存函数中,有提供的Matmul,这个函数来做矩阵乘法
C C=matmul(A,B)!只需要一行就OK了
SUBROUTINE GETDE(FG,FLMD,FDE)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION FDE(6,6)
DO I=1,6
DO J=1,6
FDE(I,J)=0.0
END DO
END DO
FDE(1,1)=FLMD+2.0*FG
FDE(2,2)=FLMD+2.0*FG
FDE(3,3)=FLMD+2.0*FG
FDE(4,4)=FG
FDE(5,5)=FG
FDE(6,6)=FG
FDE(1,2)=FLMD
FDE(1,3)=FLMD
FDE(2,1)=FLMD
FDE(2,3)=FLMD
FDE(3,1)=FLMD
FDE(3,2)=FLMD
END
SUBROUTINE GETFPSTRESS(STRESS,FPSTRESS,FI1)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION STRESS(6),FPSTRESS(6)
DO I=1,6
FPSTRESS(I)=STRESS(I)
END DO
DO J=1,3
FPSTRESS(J)=STRESS(J)-FI1/3.0
END DO
END
SUBROUTINE GETJ2(STRESS,J2)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION STRESS(6)
FJ2=1.0/6.0*((STRESS(1)-STRESS(2))**2.0+(STRESS(2)-STRESS(3))**2.0
1+(STRESS(3)-STRESS(1))**2.0+6.0(STRESS(4)**2.0+STRESS(5)**2.0+
2STRESS(6)**2.0))
END
SUBROUTINE GETFFC(FPSTRESS,FFC,FJ2,FARF)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION FPSTRESS(6),FFC(6)
DO I=1,6
FFC(I)=FPSTRESS(I)/(2.0*SQRT(FJ2))
END DO
DO J=1,3
FFC(J)=FFC(J)+FARF
END DO
DO K=4,6
FFC(K)=FFC(K)*2.0
END DO
END
SUBROUTINE GETFFCFFC(FFC,FFCFFC)
IMPLICIT NONE
DIMENSION FFC(6),FFCFFC(6,6)
DO I=1,6
DO J=1,6
FFCFFC(I,J)=FFC(I)*FFC(J)
END DO
END DO
END
SUBROUTINE GETFPSTRAN(FPBL,FCF,FKF,FFFC,DDSTRAN)
IMPLICIT NONE
INCLUDE 'ABA_PARAM.INC'
DIMENSION FPBL(6.6),FFFC(6,6),DDSTRAN(6),FSPYS(6)
DO I=1,6
DO J=1,6
FPBL(I,J)=(1.0/(FCF-FKF))*FFFC(I,J)
END DO
END DO
DO I=1,6
DO J=1,6
FSPYS(I)=FPBL(I,J)*DDSTRAN(J)
END DO
FPSTRAN(I)=FSPYS(1)+FSPYS(2)+FSPYS(3)+FSPYS(4)+FSPYS(5)+
1FSPYS(6)
END DO
END