V10/cmd/lcc/port.bak/d4ssoo.f
SUBROUTINE D4SSOO(E, NX, M, MMAX, KMAX, SLOGN, GAMMA, F,
1 POW, KOPT, DT, HOPT, LNWORK, COST, LOGLO, LOGHI, COSTOL)
INTEGER KMAX, MMAX, NX
INTEGER M, KOPT
REAL E(NX, KMAX), F(KMAX), POW(KMAX), HOPT(1), LNWORK(MMAX), COST(
1 1)
REAL LOGLO, LOGHI, COSTOL
DOUBLE PRECISION SLOGN(MMAX), GAMMA, DT
INTEGER JHI, KHI, KMJ, MMJ, MIN0, I
INTEGER J, K
REAL EXP, RHOMAX, MINOST, AMIN1, AMAX1, HOPTK
INTEGER TEMP
C COMPUTE THE OPTIMAL K AND H.
C REAL HOPT(KMAX+1),COST(KMAX+1)
KOPT = 1
KHI = MIN0(M-1, KMAX)
C COMPUTE HOPT(K), K=1,...,MIN(M,KMAX+1).
TEMP = KHI+1
DO 6 K = 1, TEMP
JHI = MIN0(K, KHI)
C COMPUTE THE FACTORS WHICH CONVERT ERRORS INTO STEP-SIZES.
DO 1 J = 1, JHI
KMJ = K-J
MMJ = M-J
F(J) = GAMMA*POW(J)*((SLOGN(K+1)-SLOGN(M))-(SLOGN(KMJ+1)-
1 SLOGN(MMJ)))
1 CONTINUE
C HOPTK IS THE OPTIMAL STEP-SIZE FOR THE K-COLUMN LOZENGE.
HOPTK = LOGHI
DO 3 I = 1, NX
RHOMAX = LOGLO
DO 2 J = 1, JHI
RHOMAX = AMAX1(RHOMAX, F(J)+E(I, J))
2 CONTINUE
HOPTK = AMIN1(HOPTK, RHOMAX)
3 CONTINUE
COST(K) = LNWORK(K+1)-HOPTK
IF (K .NE. 1) GOTO 4
MINOST = COST(1)
GOTO 5
4 IF (K .LE. KHI) MINOST = AMIN1(MINOST, COST(K))
5 HOPT(K) = EXP(HOPTK)*DT
6 CONTINUE
C OPTIMIZE THE COST TO WITHIN A RELATIVE TOLERANCE OF COSTTOL.
DO 8 K = 1, KHI
IF (COST(K) .GT. MINOST+COSTOL) GOTO 7
KOPT = K
GOTO 9
7 CONTINUE
8 CONTINUE
9 RETURN
END