📄 flesim.for
字号:
SUBROUTINE FLESIM(X,FX,N,FT,STEP,IT,IMOS,ICOVG)
DIMENSION X(N),A(30,30),F(30)
IF(IT.EQ.1) GO TO 87
FT=0.0000001
87 ITER=0
ALPHA=1.0
BETA=0.5
GAMA=2.0
VN=FLOAT(N)
K1=N+1
K2=N+2
K3=N+3
K4=N+4
D1=STEP/(VN*SQRT(2.0))*(SQRT(VN+1.)+VN-1.)
D2=STEP/(VN*SQRT(2.0))*(SQRT(VN+1.)-1.)
DO 1 J=1,N
1 A(1,J)=X(J)
DO 2 I=2,K1
DO 3 J=1,N
3 A(I,J)=D2+X(J)
L=I-1
2 A(I,L)=D1+X(L)
DO 10 I=1,K1
DO 11 J=1,N
11 X(J)=A(I,J)
CALL OBF(X,F(I))
10 CONTINUE
86 IF(ITER.EQ.IMOS) GO TO 85
ITER=ITER+1
FH=F(1)
IH=1
DO 20 I=2,K1
IF(F(I).LE.FH) GO TO 20
FH=F(I)
IH=I
20 CONTINUE
FL=F(1)
IL=1
DO 30 I=2,K1
IF(FL.LE.F(I)) GO TO 30
FL=F(I)
IL=I
30 CONTINUE
DO 40 J=1,N
S=0.0
DO 41 I=1,K1
41 S=S+A(I,J)
A(K2,J)=1./VN*(S-A(IH,J))
A(K3,J)=(1.+ALPHA)*A(K2,J)-ALPHA*A(IH,J)
40 X(J)=A(K3,J)
CALL OBF(X,F(K3))
IF(F(K3).LT.FL) GO TO 60
IF(IH.EQ.1) GO TO 51
FS=F(1)
GO TO 52
51 FS=F(2)
52 DO 53 I=1,K1
IF(IH.EQ.I) GO TO 53
IF(F(I).LE.FS) GO TO 53
FS=F(I)
53 CONTINUE
IF(F(K3).GT.FS) GO TO 54
GO TO 55
60 DO 61 J=1,N
A(K4,J)=(1.-GAMA)*A(K2,J)+GAMA*A(K3,J)
61 X(J)=A(K4,J)
CALL OBF(X,F(K4))
IF(F(K4).LT.FL) GO TO 66
GO TO 55
54 IF(F(K3).GT.FH) GO TO 57
DO 58 J=1,N
58 A(IH,J)=A(K3,J)
57 DO 59 J=1,N
A(K4,J)=BETA*A(IH,J)+(1.-BETA)*A(K2,J)
59 X(J)=A(K4,J)
CALL OBF(X,F(K4))
IF(FH.GT.F(K4))GO TO 66
DO 90 J=1,N
DO 90 I=1,K1
90 A(I,J)=0.5*(A(I,J)+A(IL,J))
DO 91 I=1,K1
DO 62 J=1,N
62 X(J)=A(I,J)
91 CALL OBF(X,F(I))
GO TO 86
66 DO 67 J=1,N
67 A(IH,J)=A(K4,J)
F(IH)=F(K4)
GO TO 76
55 DO 80 J=1,N
80 A(IH,J)=A(K3,J)
F(IH)=F(K3)
76 DO 73 J=1,N
73 X(J)=A(K2,J)
CALL OBF(X,F(K2))
DIFER=0.0
DO 74 I=1,K1
74 DIFER=DIFER+(F(I)-F(K2))*(F(I)-F(K2))
DIFER=1./VN*SQRT(DIFER)
IF(DIFER.GE.FT) GO TO 86
FX=F(K2)
ICOVG=1
GO TO 88
85 ICOVG=-1
88 RETURN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -