1 ************************************************************************
2 * SUBROUTINE PNETU ALL SYSTEMS 97/01/22
4 * EASY TO USE SUBROUTINE FOR LARGE-SCALE UNCONSTRAINED MINIMIZATION.
7 * II NF NUMBER OF VARIABLES.
8 * RI X(NF) VECTOR OF VARIABLES.
9 * II IPAR(7) INTEGER PAREMETERS:
10 * IPAR(1) MAXIMUM NUMBER OF ITERATIONS.
11 * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS.
12 * IPAR(3) MAXIMUM NUMBER OF GRADIENT EVALUATIONS.
13 * IPAR(4) ESTIMATION INDICATOR. IPAR(4)=0-MINIMUM IS NOT
14 * ESTIMATED. IPAR(4)=1-MINIMUM IS ESTIMATED BY THE VALUE
16 * IPAR(5) CHOICE OF DIRECTION VECTORS AFTER RESTARTS.
17 * IPAR(5)=1-THE NEWTON DIRECTIONS ARE USED. IPAR(5)=2-THE
18 * STEEPEST DESCENT DIRECTIONS ARE USED.
19 * IPAR(6) CHOICE OF PRECONDITIONING STRATEGY.
20 * IPAR(6)=1-PRECONDITIONING IS NOT USED.
21 * IPAR(6)=2-PRECONDITIONING BY THE LIMITED MEMORY BFGS METHOD
23 * IPAR(7) THE NUMBER OF LIMITED-MEMORY VARIABLE METRIC UPDATES
24 * IN EACH ITERATION (THEY USE 2*MF STORED VECTORS).
25 * RI RPAR(9) REAL PARAMETERS:
26 * RPAR(1) MAXIMUM STEPSIZE.
27 * RPAR(2) TOLERANCE FOR THE CHANGE OF VARIABLES.
28 * RPAR(3) TOLERANCE FOR THE CHANGE OF FUNCTION VALUES.
29 * RPAR(4) TOLERANCE FOR THE FUNCTION FALUE.
30 * RPAR(5) TOLERANCE FOR THE GRADIENT NORM.
31 * RPAR(6) ESTIMATION OF THE MINIMUM FUNCTION VALUE.
32 * RPAR(7) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
33 * RPAR(8) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
34 * RPAR(9) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
35 * RO F VALUE OF THE OBJECTIVE FUNCTION.
36 * RO GMAX MAXIMUM PARTIAL DERIVATIVE.
37 * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT.
38 * ABS(IPRNT)=1-PRINT OF FINAL RESULTS.
39 * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS.
40 * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL
42 * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION.
43 * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN
44 * MTESX (USUALLY TWO) SUBSEQUENT ITERATIONS.
45 * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN
46 * MTESF (USUALLY TWO) SUBSEQUENT ITERATIONS.
47 * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB.
48 * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG.
49 * ITERM=6-IF THE TERMINATION CRITERION WAS NOT SATISFIED,
50 * BUT THE SOLUTION OBTAINED IS PROBABLY ACCEPTABLE.
51 * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV.
52 * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED.
54 * VARIABLES IN COMMON /STAT/ (STATISTICS) :
55 * IO NRES NUMBER OF RESTARTS.
56 * IO NDEC NUMBER OF MATRIX DECOMPOSITIONS.
57 * IO NIN NUMBER OF INNER ITERATIONS.
58 * IO NIT NUMBER OF ITERATIONS.
59 * IO NFV NUMBER OF FUNCTION EVALUATIONS.
60 * IO NFG NUMBER OF GRADIENT EVALUATIONS.
61 * IO NFH NUMBER OF HESSIAN EVALUATIONS.
64 * S PNET LIMITED MEMORY VARIABLE METRIC METHOD BASED ON THE STRANG
67 * EXTERNAL SUBROUTINES :
68 * SE OBJ COMPUTATION OF THE VALUE OF THE OBJECTIVE FUNCTION.
69 * CALLING SEQUENCE: CALL OBJ(NF,X,FF) WHERE NF IS THE NUMBER
70 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND FF IS
71 * THE VALUE OF THE OBJECTIVE FUNCTION.
72 * SE DOBJ COMPUTATION OF THE GRADIENT OF THE OBJECTIVE FUNCTION.
73 * CALLING SEQUENCE: CALL DOBJ(NF,X,GF) WHERE NF IS THE NUMBER
74 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND GF(NF)
75 * IS THE GRADIENT OF THE OBJECTIVE FUNCTION.
77 SUBROUTINE PNETU(NF,X,IPAR,RPAR,F,GMAX,IPRNT,ITERM)
78 INTEGER NF,IPAR(7),IPRNT,ITERM
79 DOUBLE PRECISION X(*),RPAR(9),F,GMAX
80 INTEGER MF,NB,LGF,LGN,LS,LXO,LGO,LXS,LGS,LXM,LGM,LU1,LU2
81 INTEGER NRES,NDEC,NIN,NIT,NFV,NFG,NFH
82 COMMON /STAT/ NRES,NDEC,NIN,NIT,NFV,NFG,NFH
83 DOUBLE PRECISION RA(:)
87 ALLOCATE (RA(8*NF+2*NF*MF+2*MF))
90 * POINTERS FOR AUXILIARY ARRAYS
103 CALL PNET(NF,NB,X,IPAR,RA,RA,RA(LGF),RA(LGN),RA(LS),RA(LXO),
104 & RA(LGO),RA(LXS),RA(LGS),RA(LXM),RA(LGM),RA(LU1),RA(LU2),RPAR(1),
105 & RPAR(2),RPAR(3),RPAR(4),RPAR(5),RPAR(6),GMAX,F,IPAR(1),IPAR(2),
106 & IPAR(3),IPAR(4),IPAR(5),IPAR(6),MF,IPRNT,ITERM)
110 ************************************************************************
111 * SUBROUTINE PNETS ALL SYSTEMS 97/01/22
113 * EASY TO USE SUBROUTINE FOR LARGE-SCALE BOX CONSTRAINED MINIMIZATION.
116 * II NF NUMBER OF VARIABLES.
117 * RI X(NF) VECTOR OF VARIABLES.
118 * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE
119 * X(I) IS UNBOUNDED. IX(I)=1-LOWER BOUND XL(I).LE.X(I).
120 * IX(I)=2-UPPER BOUND X(I).LE.XU(I). IX(I)=3-TWO SIDE BOUND
121 * XL(I).LE.X(I).LE.XU(I). IX(I)=5-VARIABLE X(I) IS FIXED.
122 * RI XL(NF) VECTOR CONTAINING LOWER BOUNDS FOR VARIABLES.
123 * RI XU(NF) VECTOR CONTAINING UPPER BOUNDS FOR VARIABLES.
124 * II IPAR(7) INTEGER PAREMETERS:
125 * IPAR(1) MAXIMUM NUMBER OF ITERATIONS.
126 * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS.
127 * IPAR(3) MAXIMUM NUMBER OF GRADIENT EVALUATIONS.
128 * IPAR(4) ESTIMATION INDICATOR. IPAR(4)=0-MINIMUM IS NOT
129 * ESTIMATED. IPAR(4)=1-MINIMUM IS ESTIMATED BY THE VALUE
131 * IPAR(5) CHOICE OF DIRECTION VECTORS AFTER RESTARTS.
132 * IPAR(5)=1-THE NEWTON DIRECTIONS ARE USED. IPAR(5)=2-THE
133 * STEEPEST DESCENT DIRECTIONS ARE USED.
134 * IPAR(6) CHOICE OF PRECONDITIONING STRATEGY.
135 * IPAR(6)=1-PRECONDITIONING IS NOT USED.
136 * IPAR(6)=2-PRECONDITIONING BY THE LIMITED MEMORY BFGS METHOD
138 * IPAR(7) THE NUMBER OF LIMITED-MEMORY VARIABLE METRIC UPDATES
139 * IN EACH ITERATION (THEY USE 2*MF STORED VECTORS).
140 * RI RPAR(9) REAL PARAMETERS:
141 * RPAR(1) MAXIMUM STEPSIZE.
142 * RPAR(2) TOLERANCE FOR THE CHANGE OF VARIABLES.
143 * RPAR(3) TOLERANCE FOR THE CHANGE OF FUNCTION VALUES.
144 * RPAR(4) TOLERANCE FOR THE FUNCTION FALUE.
145 * RPAR(5) TOLERANCE FOR THE GRADIENT NORM.
146 * RPAR(6) ESTIMATION OF THE MINIMUM FUNCTION VALUE.
147 * RPAR(7) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
148 * RPAR(8) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
149 * RPAR(9) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PNET.
150 * RO F VALUE OF THE OBJECTIVE FUNCTION.
151 * RO GMAX MAXIMUM PARTIAL DERIVATIVE.
152 * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT.
153 * ABS(IPRNT)=1-PRINT OF FINAL RESULTS.
154 * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS.
155 * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL
157 * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION.
158 * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN
159 * MTESX (USUALLY TWO) SUBSEQUENT ITERATIONS.
160 * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN
161 * MTESF (USUALLY TWO) SUBSEQUENT ITERATIONS.
162 * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB.
163 * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG.
164 * ITERM=6-IF THE TERMINATION CRITERION WAS NOT SATISFIED,
165 * BUT THE SOLUTION OBTAINED IS PROBABLY ACCEPTABLE.
166 * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV.
167 * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED.
169 * VARIABLES IN COMMON /STAT/ (STATISTICS) :
170 * IO NRES NUMBER OF RESTARTS.
171 * IO NDEC NUMBER OF MATRIX DECOMPOSITIONS.
172 * IO NIN NUMBER OF INNER ITERATIONS.
173 * IO NIT NUMBER OF ITERATIONS.
174 * IO NFV NUMBER OF FUNCTION EVALUATIONS.
175 * IO NFG NUMBER OF GRADIENT EVALUATIONS.
176 * IO NFH NUMBER OF HESSIAN EVALUATIONS.
179 * S PNET LIMITED MEMORY VARIABLE METRIC METHOD BASED ON THE STRANG
182 * EXTERNAL SUBROUTINES :
183 * SE OBJ COMPUTATION OF THE VALUE OF THE OBJECTIVE FUNCTION.
184 * CALLING SEQUENCE: CALL OBJ(NF,X,FF) WHERE NF IS THE NUMBER
185 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND FF IS
186 * THE VALUE OF THE OBJECTIVE FUNCTION.
187 * SE DOBJ COMPUTATION OF THE GRADIENT OF THE OBJECTIVE FUNCTION.
188 * CALLING SEQUENCE: CALL DOBJ(NF,X,GF) WHERE NF IS THE NUMBER
189 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND GF(NF)
190 * IS THE GRADIENT OF THE OBJECTIVE FUNCTION.
192 SUBROUTINE PNETS(NF,X,IX,XL,XU,IPAR,RPAR,F,GMAX,IPRNT,ITERM)
193 INTEGER NF,IX(*),IPAR(7),IPRNT,ITERM
194 DOUBLE PRECISION X(*),XL(*),XU(*),RPAR(9),F,GMAX
195 INTEGER MF,NB,LGF,LGN,LS,LXO,LGO,LXS,LGS,LXM,LGM,LU1,LU2
196 INTEGER NRES,NDEC,NIN,NIT,NFV,NFG,NFH
197 COMMON /STAT/ NRES,NDEC,NIN,NIT,NFV,NFG,NFH
198 DOUBLE PRECISION RA(:)
202 ALLOCATE (RA(8*NF+2*NF*MF+2*MF))
205 * POINTERS FOR AUXILIARY ARRAYS
218 CALL PNET(NF,NB,X,IX,XL,XU,RA(LGF),RA(LGN),RA(LS),RA(LXO),
219 & RA(LGO),RA(LXS),RA(LGS),RA(LXM),RA(LGM),RA(LU1),RA(LU2),RPAR(1),
220 & RPAR(2),RPAR(3),RPAR(4),RPAR(5),RPAR(6),GMAX,F,IPAR(1),IPAR(2),
221 & IPAR(3),IPAR(4),IPAR(5),IPAR(6),MF,IPRNT,ITERM)
225 ************************************************************************
226 * SUBROUTINE PNET ALL SYSTEMS 01/09/22
228 * GENERAL SUBROUTINE FOR LARGE-SCALE BOX CONSTRAINED MINIMIZATION THAT
229 * USE THE LIMITED MEMORY VARIABLE METRIC METHOD BASED ON THE STRANG
233 * II NF NUMBER OF VARIABLES.
234 * II NB CHOICE OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED.
235 * NB>0-SIMPLE BOUNDS ACCEPTED.
236 * RI X(NF) VECTOR OF VARIABLES.
237 * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE
238 * X(I) IS UNBOUNDED. IX(I)=1-LOVER BOUND XL(I).LE.X(I).
239 * IX(I)=2-UPPER BOUND X(I).LE.XU(I). IX(I)=3-TWO SIDE BOUND
240 * XL(I).LE.X(I).LE.XU(I). IX(I)=5-VARIABLE X(I) IS FIXED.
241 * RI XL(NF) VECTOR CONTAINING LOWER BOUNDS FOR VARIABLES.
242 * RI XU(NF) VECTOR CONTAINING UPPER BOUNDS FOR VARIABLES.
243 * RO GF(NF) GRADIENT OF THE OBJECTIVE FUNCTION.
244 * RA GN(NF) OLD GRADIENT OF THE OBJECTIVE FUNCTION.
245 * RO S(NF) DIRECTION VECTOR.
246 * RA XO(NF) ARRAY CONTAINING INCREMENTS OF VARIABLES.
247 * RA GO(NF) ARRAY CONTAINING INCREMENTS OF GRADIENTS.
248 * RA XS(NF) AUXILIARY VECTOR.
249 * RA GS(NF) AUXILIARY VECTOR.
250 * RA XM(NF*MF) ARRAY CONTAINING INCREMENTS OF VARIABLES.
251 * RA GM(NF*MF) ARRAY CONTAINING INCREMENTS OF GRADIENTS.
252 * RA U1(MF) AUXILIARY VECTOR.
253 * RA U2(MF) AUXILIARY VECTOR.
254 * RI XMAX MAXIMUM STEPSIZE.
255 * RI TOLX TOLERANCE FOR CHANGE OF VARIABLES.
256 * RI TOLF TOLERANCE FOR CHANGE OF FUNCTION VALUES.
257 * RI TOLB TOLERANCE FOR THE FUNCTION VALUE.
258 * RI TOLG TOLERANCE FOR THE GRADIENT NORM.
259 * RI FMIN ESTIMATION OF THE MINIMUM FUNCTION VALUE.
260 * RO GMAX MAXIMUM PARTIAL DERIVATIVE.
261 * RO F VALUE OF THE OBJECTIVE FUNCTION.
262 * II MIT MAXIMUM NUMBER OF ITERATIONS.
263 * II MFV MAXIMUM NUMBER OF FUNCTION EVALUATIONS.
264 * II MFG MAXIMUM NUMBER OF GRADIENT EVALUATIONS.
265 * II IEST ESTIMATION INDICATOR. IEST=0-MINIMUM IS NOT ESTIMATED.
266 * IEST=1-MINIMUM IS ESTIMATED BY THE VALUE FMIN.
267 * II MOS1 CHOICE OF RESTARTS AFTER A CONSTRAINT CHANGE.
268 * MOS1=1-RESTARTS ARE SUPPRESSED. MOS1=2-RESTARTS WITH
269 * STEEPEST DESCENT DIRECTIONS ARE USED.
270 * II MOS1 CHOICE OF DIRECTION VECTORS AFTER RESTARTS. MOS1=1-THE
271 * NEWTON DIRECTIONS ARE USED. MOS1=2-THE STEEPEST DESCENT
272 * DIRECTIONS ARE USED.
273 * II MOS2 CHOICE OF PRECONDITIONING STRATEGY. MOS2=1-PRECONDITIONING
274 * IS NOT USED. MOS2=2-PRECONDITIONING BY THE LIMITED MEMORY
275 * BFGS METHOD IS USED.
276 * II MF THE NUMBER OF LIMITED-MEMORY VARIABLE METRIC UPDATES
277 * IN EACH ITERATION (THEY USE 2*MF STORED VECTORS).
278 * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT.
279 * ABS(IPRNT)=1-PRINT OF FINAL RESULTS.
280 * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS.
281 * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL
283 * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION.
284 * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN
285 * MTESX (USUALLY TWO) SUBSEQUEBT ITERATIONS.
286 * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN
287 * MTESF (USUALLY TWO) SUBSEQUEBT ITERATIONS.
288 * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB.
289 * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG.
290 * ITERM=6-IF THE TERMINATION CRITERION WAS NOT SATISFIED,
291 * BUT THE SOLUTION OBTAINED IS PROBABLY ACCEPTABLE.
292 * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV.
293 * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED.
295 * VARIABLES IN COMMON /STAT/ (STATISTICS) :
296 * IO NRES NUMBER OF RESTARTS.
297 * IO NDEC NUMBER OF MATRIX DECOMPOSITION.
298 * IO NIN NUMBER OF INNER ITERATIONS.
299 * IO NIT NUMBER OF ITERATIONS.
300 * IO NFV NUMBER OF FUNCTION EVALUATIONS.
301 * IO NFG NUMBER OF GRADIENT EVALUATIONS.
302 * IO NFH NUMBER OF HESSIAN EVALUATIONS.
305 * S PCBS04 ELIMINATION OF BOX CONSTRAINT VIOLATIONS.
306 * S PS1L01 STEPSIZE SELECTION USING LINE SEARCH.
307 * S PYADC0 ADDITION OF A BOX CONSTRAINT.
308 * S PYFUT1 TEST ON TERMINATION.
309 * S PYRMC0 DELETION OF A BOX CONSTRAINT.
310 * S PYTRCD COMPUTATION OF PROJECTED DIFFERENCES FOR THE VARIABLE METRIC
312 * S PYTRCG COMPUTATION OF THE PROJECTED GRADIENT.
313 * S PYTRCS COMPUTATION OF THE PROJECTED DIRECTION VECTOR.
314 * S MXDRCB BACKWARD PART OF THE STRANG FORMULA FOR PREMULTIPLICATION
315 * OF THE VECTOR X BY AN IMPLICIT BFGS UPDATE.
316 * S MXDRCF FORWARD PART OF THE STRANG FORMULA FOR PREMULTIPLICATION
317 * OF THE VECTOR X BY AN IMPLICIT BFGS UPDATE.
318 * S MXDRSU SHIFT OF COLUMNS OF THE RECTANGULAR MATRICES A AND B.
319 * SHIFT OF ELEMENTS OF THE VECTOR U. THESE SHIFTS ARE USED IN
320 * THE LIMITED MEMORY BFGS METHOD.
321 * S MXUDIR VECTOR AUGMENTED BY THE SCALED VECTOR.
322 * RF MXUDOT DOT PRODUCT OF TWO VECTORS.
323 * S MXVNEG COPYING OF A VECTOR WITH CHANGE OF THE SIGN.
324 * S MXVCOP COPYING OF A VECTOR.
325 * S MXVSCL SCALING OF A VECTOR.
326 * S MXVSET INITIATINON OF A VECTOR.
327 * S MXVDIF DIFFERENCE OF TWO VECTORS.
329 * EXTERNAL SUBROUTINES :
330 * SE OBJ COMPUTATION OF THE VALUE OF THE OBJECTIVE FUNCTION.
331 * CALLING SEQUENCE: CALL OBJ(NF,X,FF) WHERE NF IS THE NUMBER
332 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND FF IS
333 * THE VALUE OF THE OBJECTIVE FUNCTION.
334 * SE DOBJ COMPUTATION OF THE GRADIENT OF THE OBJECTIVE FUNCTION.
335 * CALLING SEQUENCE: CALL DOBJ(NF,X,GF) WHERE NF IS THE NUMBER
336 * OF VARIABLES, X(NF) IS THE VECTOR OF VARIABLES AND GF(NF)
337 * IS THE GRADIENT OF THE OBJECTIVE FUNCTION.
340 * LIMITED MEMORY VARIABLE METRIC METHOD BASED ON THE STRANG
343 SUBROUTINE PNET(NF,NB,X,IX,XL,XU,GF,GN,S,XO,GO,XS,GS,XM,GM,U1,U2,
344 & XMAX,TOLX,TOLF,TOLB,TOLG,FMIN,GMAX,F,MIT,MFV,MFG,IEST,MOS1,MOS2,
346 INTEGER NF,NB,IX(*),MIT,MFV,MFG,IEST,MOS1,MOS2,MF,IPRNT,ITERM
347 DOUBLE PRECISION X(*),XL(*),XU(*),GF(*),GN(*),S(*),XO(*),GO(*),
348 & XS(*),GS(*),XM(*),GM(*),U1(*),U2(*),XMAX,TOLX,TOLF,TOLG,TOLB,
350 INTEGER ITERD,ITERS,KD,LD,NTESX,NTESF,MTESX,MTESF,MRED,KIT,
351 & IREST,KBF,MES,MES1,MES2,MES3,MAXST,ISYS,ITES,INITS,KTERS,
352 & IRES1,IRES2,INEW,IOLD,I,N,NRED,MX,MMX
353 DOUBLE PRECISION R,RO,RP,FO,FP,P,PO,PP,GNORM,SNORM,RMIN,RMAX,
354 & UMAX,FMAX,DMAX,ETA0,ETA9,EPS8,EPS9,ALF,ALF1,ALF2,RHO,RHO1,RHO2,
355 & PAR,PAR1,PAR2,A,B,TOLD,TOLS,TOLP,EPS
356 DOUBLE PRECISION MXUDOT
357 INTEGER NRES,NDEC,NIN,NIT,NFV,NFG,NFH
358 COMMON /STAT/ NRES,NDEC,NIN,NIT,NFV,NFG,NFH
359 IF (ABS(IPRNT).GT.1) WRITE(6,'(1X,''ENTRY TO PNET :'')')
399 IF (IEST.LE.0) FMIN=-1.0D 60
400 IF (IEST.GT.0) IEST=1
401 IF (XMAX.LE.0.0D 0) XMAX=1.0D 16
402 IF (TOLX.LE.0.0D 0) TOLX=1.0D-16
403 IF (TOLF.LE.0.0D 0) TOLF=1.0D-14
404 IF (TOLG.LE.0.0D 0) TOLG=1.0D-6
405 IF (TOLB.LE.0.0D 0) TOLB=FMIN+1.0D-16
409 IF (MIT.LE.0) MIT=5000
410 IF (MFV.LE.0) MFV=5000
411 IF (MFG.LE.0) MFG=30000
412 IF (MOS1.LE.0) MOS1=1
413 IF (MOS2.LE.0) MOS2=1
416 KIT=-(IRES1*NF+IRES2)
419 * INITIAL OPERATIONS WITH SIMPLE BOUNDS
423 IF ((IX(I).EQ.3.OR.IX(I).EQ.4) .AND. XU(I).LE.XL(I)) THEN
426 ELSE IF (IX(I).EQ.5 .OR. IX(I).EQ.6) THEN
432 CALL PCBS04(NF,X,IX,XL,XU,EPS9,KBF)
433 CALL PYADC0(NF,N,X,IX,XL,XU,INEW)
441 CALL PYTRCG(NF,NF,IX,GF,UMAX,GMAX,KBF,IOLD)
442 CALL MXVCOP(NF,GF,GN)
444 & WRITE (6,'(1X,''NIT='',I5,2X,''NFV='',I5,2X,''NFG='',I5,2X,
445 & ''F='', G16.9,2X,''G='',E10.3)') NIT,NFV,NFG,F,GMAX
446 CALL PYFUT1(NF,F,FO,UMAX,GMAX,DMAX,TOLX,TOLF,TOLB,TOLG,KD,NIT,KIT,
447 & MIT,NFV,MFV,NFG,MFG,NTESX,MTESX,NTESF,MTESF,ITES,IRES1,IRES2,
449 IF (ITERM.NE.0) GO TO 11080
451 CALL PYRMC0(NF,N,IX,GN,EPS8,UMAX,GMAX,RMAX,IOLD,IREST)
452 IF (UMAX.GT.EPS8*GMAX) IREST=MAX(IREST,1)
457 * DIRECTION DETERMINATION
466 IF (ITERS.LT.0) ITERM=ITERS-5
471 GNORM=SQRT(MXUDOT(NF,GN,GN,IX,KBF))
476 RHO1=MXUDOT(NF,GN,GN,IX,KBF)
478 PAR=MIN(EPS,SQRT(GNORM))
479 IF (PAR.GT.1.0D 1*1.0D-3) THEN
480 PAR=MIN(PAR,1.0D 0/DBLE(NIT))
488 CALL MXVSET(NF,0.0D 0,S)
489 CALL MXVNEG(NF,GN,GS)
490 CALL MXVCOP(NF,GS,XS)
495 B=MXUDOT(NF,XM,GM,IX,KBF)
497 IF (B.GT.0.0D 0) THEN
499 CALL MXDRCB(NF,MX,XM,GM,U1,U2,XS,IX,KBF)
500 A=MXUDOT(NF,GM,GM,IX,KBF)
501 IF (A.GT.0.0D 0) CALL MXVSCL(NF,B/A,XS,XS)
502 CALL MXDRCF(NF,MX,XM,GM,U1,U2,XS,IX,KBF)
505 RHO=MXUDOT(NF,GS,XS,IX,KBF)
511 IF (NRED.GT.MMX) GO TO 12550
513 PP=SQRT(ETA0/MXUDOT(NF,XS,XS,IX,KBF))
515 CALL MXUDIR(NF,PP,XS,XO,X,IX,KBF)
519 CALL MXVDIF(NF,GF,GN,GO)
521 CALL MXVSCL(NF,1.0D 0/PP,GO,GO)
522 ALF=MXUDOT(NF,XS,GO,IX,KBF)
523 IF (ALF.LE.1.0D 0/ETA9) THEN
524 C IF (ALF.LE.1.0D-8*SIG) THEN
526 * CG FAILS (THE MATRIX IS NOT POSITIVE DEFINITE)
541 CALL MXUDIR(NF, ALF,XS,S,S,IX,KBF)
542 CALL MXUDIR(NF,-ALF,GO,GS,GS,IX,KBF)
543 RHO2=MXUDOT(NF,GS,GS,IX,KBF)
544 SNORM=SQRT(MXUDOT(NF,S,S,IX,KBF))
545 IF (RHO2.LE.PAR*RHO1) GO TO 12560
546 IF (NRED.GE.MMX) GO TO 12550
548 IF (B.GT.0.0D 0) THEN
549 CALL MXVCOP(NF,GS,GO)
550 CALL MXDRCB(NF,MX,XM,GM,U1,U2,GO,IX,KBF)
551 IF (A.GT.0.0D 0) CALL MXVSCL(NF,B/A,GO,GO)
552 CALL MXDRCF(NF,MX,XM,GM,U1,U2,GO,IX,KBF)
553 RHO2=MXUDOT(NF,GS,GO,IX,KBF)
555 CALL MXUDIR(NF,ALF,XS,GO,XS,IX,KBF)
558 CALL MXUDIR(NF,ALF,XS,GS,XS,IX,KBF)
562 CALL MXUDIR(NF,ALF,XS,GS,XS,IX,KBF)
565 C SIG=RHO2+ALF*ALF*SIG
569 * AN INEXACT SOLUTION IS OBTAINED
573 * ------------------------------
574 * END OF DIRECTION DETERMINATION
575 * ------------------------------
578 CALL MXVCOP(NF,GN,GF)
579 IF (KD.GT.0) P=MXUDOT(NF,GN,S,IX,KBF)
584 * TEST ON DESCENT DIRECTION
586 IF (SNORM.LE.0.0D 0) THEN
588 ELSE IF (P+TOLD*GNORM*SNORM.LE.0.0D 0) THEN
592 * UNIFORM DESCENT CRITERION
598 * PREPARATION OF LINE SEARCH
601 RMIN=ALF1*GNORM/SNORM
602 RMAX=MIN(ALF2*GNORM/SNORM,XMAX/SNORM)
606 IF (ITERM.NE.0) GO TO 11080
607 IF (IREST.NE.0) GO TO 11040
608 CALL PYTRCS(NF,X,IX,XO,XL,XU,GF,GO,S,RO,FP,FO,F,PO,P,RMAX,ETA9,
610 IF (RMAX.EQ.0.0D 0) GO TO 11075
612 CALL PS1L01(R,RP,F,FO,FP,P,PO,PP,FMIN,FMAX,RMIN,RMAX,TOLS,TOLP,
613 & PAR1,PAR2,KD,LD,NIT,KIT,NRED,MRED,MAXST,IEST,INITS,ITERS,KTERS,
615 IF (ISYS.EQ.0) GO TO 11064
616 CALL MXUDIR(NF,R,S,XO,X,IX,KBF)
617 CALL PCBS04(NF,X,IX,XL,XU,EPS9,KBF)
623 P=MXUDOT(NF,GF,S,IX,KBF)
631 CALL MXVCOP(NF,GO,GF)
636 CALL PYTRCD(NF,X,IX,XO,GF,GO,R,F,FO,P,PO,DMAX,KBF,KD,LD,ITERS)
639 CALL MXDRSU(NF,MX,XM,GM,U1)
640 CALL MXVCOP(NF,XO,XM)
641 CALL MXVCOP(NF,GO,GM)
645 CALL PYADC0(NF,N,X,IX,XL,XU,INEW)
646 IF (INEW.GT.0) IREST=MAX(IREST,1)
650 IF (IPRNT.GT.1.OR.IPRNT.LT.0)
651 & WRITE(6,'(1X,''EXIT FROM PNET :'')')
653 & WRITE (6,'(1X,''NIT='',I5,2X,''NFV='',I5,2X,''NFG='',I5,2X,
654 & ''F='', G16.9,2X,''G='',E10.3,2X,''ITERM='',I3)') NIT,NFV,NFG,
657 & WRITE (6,'(1X,''X='',5(G14.7,1X):/(3X,5(G14.7,1X)))')