📄 conver.for
字号:
C$DEBUG
C$LARGE
SUBROUTINE CONVER(ELOAD,IITER,LNODS,MELEM,MEVAB,MTOTV,NCHEK,
. NDOFN,NELEM,NEVAB,NNODE,NTOTV,PVALU,STFOR,
. TLOAD,TOFOR,TOLER) !(Page 213)
C**********************************************************************
C
C*** THIS SUBROUTINE CHECKS FOR CONVERGENCE OF THE ITERATION PROCESS
C
C**********************************************************************
DIMENSION ELOAD(MELEM,MEVAB),LNODS(MELEM,9),STFOR(MTOTV),
. TOFOR(MTOTV),TLOAD(MELEM,MEVAB)
NCHEK=0
RESID=0.0
RETOT=0.0
REMAX=0.0
DO 5 ITOTV=1,NTOTV
STFOR(ITOTV)=0.0
TOFOR(ITOTV)=0.0
5 CONTINUE
DO 40 IELEM=1,NELEM
KEVAB=0
DO 40 INODE=1,NNODE
LOCNO=IABS(LNODS(IELEM,INODE))
DO 40 IDOFN=1,NDOFN
KEVAB=KEVAB+1
NPOSI=(LOCNO-1)*NDOFN+IDOFN
STFOR(NPOSI)=STFOR(NPOSI)+ELOAD(IELEM,KEVAB)
40 TOFOR(NPOSI)=TOFOR(NPOSI)+TLOAD(IELEM,KEVAB)
DO 50 ITOTV=1,NTOTV
REFOR=TOFOR(ITOTV)-STFOR(ITOTV)
RESID=RESID+REFOR*REFOR
RETOT=RETOT+TOFOR(ITOTV)*TOFOR(ITOTV)
AGASH=ABS(REFOR)
50 IF(AGASH.GT.REMAX) REMAX=AGASH
DO 10 IELEM=1,NELEM
DO 10 IEVAB=1,NEVAB
10 ELOAD(IELEM,IEVAB)=TLOAD(IELEM,IEVAB)-ELOAD(IELEM,IEVAB)
RESID=SQRT(RESID)
RETOT=SQRT(RETOT)
RATIO=100.0*RESID/RETOT
IF(RATIO.GT.TOLER) NCHEK=1
IF(IITER.EQ.1) GO TO 20
IF(RATIO.GT.PVALU) NCHEK=999
20 PVALU=RATIO
WRITE(6,30) NCHEK, RATIO,REMAX
WRITE(*,30) NCHEK, RATIO,REMAX
30 FORMAT(1H0,3X,18HCONVERGENCE CODE =,I4,3X,28HNORM OF RESIDUAL SUM
.RATIO =,E14.6,3X,18HMAXIMUM RESIDUAL =,E14.6)
RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -