5 * Revision 1.1.1.1 1996/04/01 15:02:19 mclareni
10 SUBROUTINE D501N1(K,N,M,A,AL,AU,X,NX,Y,SY,WORK,DPHI,DSCAL,LAMU,
11 + F,DF,IAFR,MFR,SUB,EPS0,EPS,MODE,VERS,NERROR)
13 *************************************************************************
14 * LEAMAX, VERSION: 15.03.1993
15 *************************************************************************
17 * THIS ROUTINE COMPUTES FUNCTION VALUES, DERIVATIVES, THE GRADIENT,
18 * AND THE SCALING PARAMETERS. IT ALSO DETERMINES THE ACTIVE SET OF
19 * CONSTRAINTS AND THE LAGRANGE MULTIPLIER.
21 ************************************************************************
23 #include "gen/imp64.inc"
24 #include "gen/def64.inc"
27 DIMENSION A(*),AL(*),AU(*),X(*),Y(*),SY(*),WORK(*),DPHI(*)
28 DIMENSION DSCAL(*),LAMU(*),F(*),DF(N,*),IAFR(*)
33 ************************************************************************
34 * COMPUTE INITIAL VALUES
35 ************************************************************************
42 ************************************************************************
43 * COMPUTE FUNCTION VALUES AND DERIVATIVES (IF MODE NOTEQUAL ZERO)
44 ************************************************************************
46 CALL D501SF(VERS,SUB,MODE,M,A,N,F,DF,K,NX,X,Y,SY,WORK(N+1),NERROR)
47 IF(NERROR .NE. 0) RETURN
51 ************************************************************************
52 * APPROXIMATE DERIVATIVES
53 ************************************************************************
56 H =ABS(A(J))*HREL+HABS
57 IF (A(J)+H .GT. AU(J)) H=-H
60 + (VERS,SUB,MODE,M,A,N,WORK,DF,K,NX,X,Y,SY,WORK(N+1),NERROR)
61 IF(NERROR .NE. 0) RETURN
63 CALL DVSUB(N,WORK(1),WORK(2),F(1),F(2),DF(1,J),DF(2,J))
64 10 CALL DVSCL(N,1/H,DF(1,J),DF(2,J),DF(1,J),DF(2,J))
67 ************************************************************************
68 * COMPUTE THE GRADIENT OF THE OBJECTIVE FUNCTION
69 ************************************************************************
71 CALL DMMPY(M,N,DF(1,1),DF(2,1),DF(1,2),F(1),F(2),DPHI(1),DPHI(2))
73 ************************************************************************
74 * DETERMINE THE DIAGONAL MATRIX DSCAL FOR SCALING THE PROBLEM
75 ************************************************************************
81 30 DSCAL(I)=MAX(DSCAL(I),SQRT(AI))
83 ************************************************************************
84 * DETERMINE FREE VARIABLES AND STORE THEIR INDECES IN IAFR
85 * DETERMINE LAGRANGE-MULTIPLIER LAMU
86 ************************************************************************
90 40 GR=GR+(DSCAL(I)*A(IAFR(I)))**2
93 CALL DVSET(M,Z0,LAMU(1),LAMU(2))
98 IF(AU(I)-AL(I) .LT. EPS*(ABS(AU(I))+ABS(AL(I)))+2*HABS) THEN
102 IF(A(I) .GE. AU(I)-(EPS * ABS(AU(I)) + HABS )) THEN
104 IF(DPHI(I) .GT. -GR) THEN
110 ELSE IF(A(I) .LE. AL(I)+(EPS * ABS(AL(I)) + HABS )) THEN
112 IF(DPHI(I) .LT. GR) THEN
126 ************************************************************************
127 * DELETE ROWS OF DSCAL AND COLUMNS OF DF
128 * WHICH BELONG TO NON-FREE VARIABLES
129 ************************************************************************
132 DSCAL(I)=DSCAL(IAFR(I))
134 60 DF(L,I)=DF(L,IAFR(I))