5 * Revision 1.1.1.1 1996/04/01 15:02:40 mclareni
10 #if defined(CERNLIB_DOUBLE)
11 SUBROUTINE DLHOIN(A,MA,M,N,MAXV,V,NV,NVEC,EPS,IOUT,W,IW)
13 C Solving Systems of Homogeneous Linear Inequalities.
14 C Based on K.S. Koelbig and F. Schwarz, A Programm for Solving
15 C Systems of Homogeneous Linear Inequalities,
16 C Computer Phys. Comm. 17 (1979) 375-382
18 #include "gen/imp64.inc"
22 PARAMETER (NAME = 'DLHOIN')
23 PARAMETER (TEXT = '+++++ CERN F500 DLHOIN ... ')
25 DIMENSION A(MA,*),V(NV,*),IW(MA,*),W(MAXV,*)
28 CALL MTLPRT(NAME,'F500.1','MAXV TOO SMALL')
32 C*****SETS INITIAL VALUES FOR BOOKKEEPING
43 C*****DETERMINES N BASIS VECTORS OF THE INITIAL POLYHEDRAL CONE
45 CALL DMCPY(N,N,A(1,1),A(1,2),A(2,1),V(1,1),V(1,2),V(2,1))
46 CALL DINV(N,V,NV,W,IFAIL)
47 IF(IFAIL .EQ. -1) THEN
48 CALL MTLPRT(NAME,'F500.2','MATRIX A(N,N) SINGULAR')
52 S=DVMPY(N,V(1,I),V(2,I),V(1,I),V(2,I))
53 1 CALL DVSCL(N,1/SQRT(S),V(1,I),V(2,I),V(1,I),V(2,I))
59 81 WRITE(6,'(1X,I9,7E15.6)') J,(V(J,I1),I1=I,MIN(NVEC,I+6))
63 C*****COMPUTES MATRIX OF SCALAR PRODUCTS
67 20 W(K,I)=DVMPY(N,A(IW(I,5),1),A(IW(I,5),2),V(1,K),V(2,K))
73 83 WRITE(6,'(1X,I9,7E15.6)') I,(W(J2,I),J2=J,MIN(NVEC,J+6))
77 C*****DETERMINES REDUNDANT INEQUALITIES AND CHOOSES NEW ONE
81 IF(IW(K,2) .EQ. 0) GO TO 40
83 IF(DVMPY(N,A(K,1),A(K,2),V(1,I),V(2,I)) .GT. 0) IW(K,3)=IW(K,3)+1
88 IF(IW(K,2) .EQ. 0) GO TO 48
89 IF(IW(K,3) .EQ. 0) THEN
91 CALL MTLPRT(NAME,'F500.3',ERRTXT)
94 IF(IW(K,3) .EQ. NVEC) THEN
98 IF(IW(K,3) .LT. NNEG) THEN
103 IF(NNEG .EQ. NVEC) THEN
107 IF(DVMPY(N,A(I,1),A(I,2),V(1,J),V(2,J)) .GE. EPS) GO TO 75
115 IF(IOUT .EQ. 1) WRITE(6,113) TEXT,KNEW
118 C*****COMPUTES VECTOR OF SCALAR PRODUCTS
121 50 W(I,M+1)=DVMPY(N,A(KNEW,1),A(KNEW,2),V(1,I),V(2,I))
126 84 WRITE(6,'(1X,I9,7E15.6)') J,(W(J2,M+1),J2=J,MIN(NVEC,J+6))
130 C*****DETERMINES BASIS VECTORS FOR NEW CONE
135 IF(W(I,M+1)*W(J,M+1) .GT. 0) GO TO 60
139 IF(ABS(W(I,L)) .GT. EPS .OR. ABS(W(J,L)) .GT. EPS) GO TO 62
143 IF(NT .LT. N-2) GO TO 60
145 IF(K .EQ. I .OR. K .EQ. J) GO TO 63
148 IF(IW(L,4) .EQ. 0 .AND. ABS(W(K,L)) .LT. EPS) MT=MT+1
150 IF(MT .EQ. N-2) GO TO 60
153 IF(NTVE .GT. MAXV) THEN
154 CALL MTLPRT(NAME,'F500.1','MAXV TOO SMALL')
158 65 V(L,NTVE)=ABS(W(J,M+1))*V(L,I)+ABS(W(I,M+1))*V(L,J)
161 S=DVMPY(N,V(1,I),V(2,I),V(1,I),V(2,I))
162 66 CALL DVSCL(N,1/SQRT(S),V(1,I),V(2,I),V(1,I),V(2,I))
164 C*****ELIMINATES VECTORS WITH NEGATIVE SCALAR PRODUCT
168 IF(W(I,M+1) .LT. 0) GO TO 70
170 CALL DVCPY(N,V(1,I),V(2,I),V(1,NNEW),V(2,NNEW))
172 DO 71 I = NVEC+1,NTVE
174 71 CALL DVCPY(N,V(1,I),V(2,I),V(1,NNEW),V(2,NNEW))
175 CALL DMSET(N,NTVE-NNEW,0D0,V(1,NNEW+1),V(1,NNEW+2),V(2,NNEW+1))
184 87 WRITE(6,'(1X,I9,7E15.6)') J,(V(J,I2),I2=I,MIN(NVEC,I+6))
188 103 FORMAT('INEQUALITY ',I5,' IS INCONSISTENT')
189 111 FORMAT(7X,A27,'THE N BASIS VECTORS OF THE FIRST CONE'/)
190 112 FORMAT(7X,A27,'THE MATRIX OF SCALAR PRODUCTS'/)
191 113 FORMAT(7X,A27,'THE NEW INEQUALITY HAS INDEX',I5/)
192 114 FORMAT(7X,A27,'THE VECTOR OF SCALAR PRODUCTS'/)
193 115 FORMAT(7X,A27,'THE MATRIX OF BASIS VECTORS'/)