5 * Revision 1.1.1.1 1996/04/01 15:03:27 mclareni
10 SUBROUTINE LOCSCH (IIMIN,N,NFREE,IFREE,X,FX,XLOW,XHI,DELTA,SUFTOL,
12 INTEGER IIMIN, N, NFREE, NFCNT
14 DOUBLE PRECISION FX, DELTA, SUFTOL, FY, FZ
15 DOUBLE PRECISION X(N), XLOW(N), XHI(N), Y(N), Z(N), P(N)
16 INTEGER I, II, ILOC, ITEST
17 DOUBLE PRECISION A, B, B1, D, DELX, DFUN, E, EPSMCH, ETA, FA,
18 1 FBEST, FSAV, FTEST, FU, FV, FW, GTEST1, GTEST2,
19 2 GTP, GU, OLDF, PE, PNORM, R, RR, RTEPS,
20 3 SCXBD, SFTBND, SMAX, SNMAX, SOPP, SPMAX, SS,
21 4 SSAV, STP, STPDN, STPNEG, STPPOS, STPUP, T,
22 5 TOL, U, XBEST, XLAMDA, XV, XW, YSAV
37 IF(STPUP.LT.STPDN) GOTO 20
43 30 IF(STP.LT.SMAX) SMAX=STP
46 50 IF(DELX.GT.SMAX) DELX=SMAX
54 FTEST=SUFTOL*(1.0D+0+ABS(FX))
55 IF(ABS(FX-FY).GT.FTEST.OR.DELX.EQ.SMAX) GOTO 70
59 CALL ORTHVC(N,NFREE,IFREE,X,FX,XLOW,XHI,Y,FY,P,SPMAX,SNMAX)
62 IF(SMAX.GE.SNMAX.OR.NFREE.EQ.1) GOTO 90
69 90 IF(DELX.GT.SMAX) DELX=SMAX
77 FTEST=SUFTOL*(1.0D+0+ABS(FY))
78 IF(ABS(FY-FZ).GT.FTEST.OR.(5.0D+0*DELX).GT.SMAX) GOTO 120
81 120 IF(FY.EQ.FZ) GOTO 210
85 U=MIN(2.0D+0*DELX,SMAX)
90 U=MIN(2.0D+0*DELX,SOPP)
91 XLAMDA=SOPP/0.9D+0+DELX
101 160 CALL RLEN(NFREE,P,PNORM)
109 170 CALL NEWPTQ(RTEPS,T,ETA,SFTBND,XLAMDA,U,FU,GU,XBEST,FBEST,XW,FW,X
110 1V,FV,A,FA,B,OLDF,B1,SCXBD,E,D,RR,SS,GTEST1,GTEST2,TOL,ILOC,ITEST)
111 IF(ITEST.NE.1) GOTO 190
118 IF(IIMIN.EQ.2) FU=-FU
122 190 IF(ITEST.NE.0) GOTO 210
125 Z(II)=Y(II)+XBEST*P(I)
128 210 IF(FZ.EQ.FX) RETURN
137 CALL MXSTEP(X(II),XLOW(II),XHI(II),P(I),STPPOS,STPNEG)
138 IF(STPPOS.LT.SPMAX) SPMAX=STPPOS
139 IF(STPNEG.LT.SNMAX) SNMAX=STPNEG
141 CALL RLEN(NFREE,P,PNORM)
143 U=MIN(2.0D+0,0.9D+0*SPMAX)
145 IF(FZ.LT.FX) GOTO 270
146 DELX=DELTA/(PNORM+RTEPS)
147 IF(DELX.GT.0.9D+0*SNMAX) DELX=0.9D+0*SNMAX
150 Y(II)=X(II)-DELX*P(I)
153 IF(IIMIN.EQ.2) FY=-FY
155 IF(FY.LT.FX) GOTO 250
156 IF(DELX.LT.1.0D+0) GTP=(FX-FY)/DELX
162 U=MIN(2.0D+0*DELX,0.9D+0*SNMAX)
171 280 CALL NEWPTQ(RTEPS,T,ETA,SFTBND,XLAMDA,U,FU,GU,XBEST,FBEST,XW,FW,X
172 1V,FV,A,FA,B,OLDF,B1,SCXBD,E,D,RR,SS,GTEST1,GTEST2,TOL,ILOC,ITEST)
173 IF(ITEST.NE.1) GOTO 300
180 IF(IIMIN.EQ.2) FU=-FU
183 300 IF(ITEST.NE.0) RETURN
186 Z(II)=X(II)+XBEST*P(I)