1 * SUBROUTINE MXBSBM ALL SYSTEMS 92/12/01
3 * MULTIPLICATION OF A BLOCKED SYMMETRIC MATRIX A BY A VECTOR X.
7 * II L BLOCK DIMENSION.
8 * RI ABL(L*(L+1)/2) VALUES OF NONZERO ELEMENTS OF THE GIVEN BLOCK.
9 * II JBL(L) INDICES OF THE INDIVIDUAL BLOCKS
10 * RI X(N) UNPACKED INPUT VECTOR.
11 * RI Y(N) UNPACKED OR PACKED OUTPUT VECTOR EQUAL TO A*X.
12 * II JOB FORM OF THE VECTOR Y. JOB=1-UNPACKED FORM. JOB=2-PACKED
15 SUBROUTINE MXBSBM(L,ABL,JBL,X,Y,JOB)
17 DOUBLE PRECISION ABL(*),X(*),Y(*)
21 PARAMETER (ZERO = 0.0D 0)
35 IF (IP.GT.0) TEMP=X(IP)
40 IF (IP.GT.0.AND.JP.GT.0) THEN
41 Y(IP)=Y(IP)+ABL(K)*X(JP)
42 Y(JP)=Y(JP)+ABL(K)*TEMP
46 IF (IP.GT.0) Y(IP)=Y(IP)+ABL(K)*TEMP
51 IF (IP.GT.0.AND.JP.GT.0) THEN
52 Y(I)=Y(I)+ABL(K)*X(JP)
57 IF (IP.GT.0) Y(I)=Y(I)+ABL(K)*TEMP
62 * SUBROUTINE MXBSBU ALL SYSTEMS 92/12/01
64 * CORRECTION OF A BLOCKED SYMMETRIC MATRIX A. THE CORRECTION IS DEFINED
65 * AS A:=A+ALF*X*TRANS(X) WHERE ALF IS A GIVEN SCALING FACTOR AND X IS
69 * II L BLOCK DIMENSION.
70 * RI ABL(L*(L+1)/2) VALUES OF NONZERO ELEMENTS OF THE GIVEN BLOCK.
71 * II JBL(L) INDICES OF THE INDIVIDUAL BLOCKS
72 * RI ALF SCALING FACTOR.
73 * RI X(N) UNPACKED OR PACKED INPUT VECTOR.
74 * II JOB FORM OF THE VECTOR X. JOB=1-UNPACKED FORM. JOB=2-PACKED
77 SUBROUTINE MXBSBU(L,ABL,JBL,ALF,X,JOB)
79 DOUBLE PRECISION ABL(*),ALF,X(*)
88 IF (IP.GT.0.AND.JP.GT.0) THEN
89 ABL(K)=ABL(K)+ALF*X(IP)*X(JP)
99 IF (IP.GT.0.AND.JP.GT.0) THEN
100 ABL(K)=ABL(K)+ALF*X(I)*X(J)
107 * SUBROUTINE MXBSMI ALL SYSTEMS 91/12/01
109 * BLOCKS OF THE SYMMETRIC BLOCKED MATRIX ARE SET TO THE UNIT MATRICES.
112 * II NBLKS NUMBER OF BLOCKS OF THE MATRIX.
113 * RI ABL(NBLA) VALUES OF THE NONZERO ELEMENTS OF THE MATRIX.
114 * II IBLBG(NBLKS+1) BEGINNINGS OF THE BLOCKS IN THE MATRIX.
117 * MXDSMI DENSE SYMMETRIC MATRIX IS SET TO THE UNIT MATRIX.
119 SUBROUTINE MXBSMI(NBLKS,ABL,IBLBG)
120 INTEGER NBLKS,IBLBG(*)
121 DOUBLE PRECISION ABL(*)
122 INTEGER I,K,KBEG,KLEN
127 CALL MXDSMI(KLEN,ABL(K))
132 * SUBROUTINE MXDCMD ALL SYSTEMS 91/12/01
134 * MULTIPLICATION OF A COLUMNWISE STORED DENSE RECTANGULAR MATRIX A
135 * BY A VECTOR X AND ADDITION OF THE SCALED VECTOR ALF*Y.
138 * II N NUMBER OF ROWS OF THE MATRIX A.
139 * II M NUMBER OF COLUMNS OF THE MATRIX A.
140 * RI A(N*M) RECTANGULAR MATRIX STORED COLUMNWISE IN THE
141 * ONE-DIMENSIONAL ARRAY.
142 * RI X(M) INPUT VECTOR.
143 * RI ALF SCALING FACTOR.
144 * RI Y(N) INPUT VECTOR.
145 * RO Z(N) OUTPUT VECTOR EQUAL TO A*X+ALF*Y.
148 * S MXVDIR VECTOR AUGMENTED BY THE SCALED VECTOR.
149 * S MXVSCL SCALING OF A VECTOR.
151 SUBROUTINE MXDCMD(N,M,A,X,ALF,Y,Z)
153 DOUBLE PRECISION A(*),X(*),ALF,Y(*),Z(*)
155 CALL MXVSCL(N,ALF,Y,Z)
158 CALL MXVDIR(N,X(J),A(K+1),Z,Z)
163 * SUBROUTINE MXDCMU ALL SYSTEMS 91/12/01
165 * UPDATE OF A COLUMNWISE STORED DENSE RECTANGULAR MATRIX A. THIS MATRIX
166 * IS UPDATED BY THE RULE A:=A+ALF*X*TRANS(Y).
169 * II N NUMBER OF ROWS OF THE MATRIX A.
170 * II M NUMBER OF COLUMNS OF THE MATRIX A.
171 * RU A(N*M) RECTANGULAR MATRIX STORED COLUMNWISE IN THE
172 * ONE-DIMENSIONAL ARRAY.
173 * RI ALF SCALAR PARAMETER.
174 * RI X(N) INPUT VECTOR.
175 * RI Y(M) INPUT VECTOR.
177 SUBROUTINE MXDCMU(N,M,A,ALF,X,Y)
179 DOUBLE PRECISION A(*),ALF,X(*),Y(*)
180 DOUBLE PRECISION TEMP
186 A(K+I)=A(K+I)+TEMP*X(I)
192 * SUBROUTINE MXDCMV ALL SYSTEMS 91/12/01
194 * RANK-TWO UPDATE OF A COLUMNWISE STORED DENSE RECTANGULAR MATRIX A.
195 * THIS MATRIX IS UPDATED BY THE RULE A:=A+ALF*X*TRANS(U)+BET*Y*TRANS(V).
198 * II N NUMBER OF ROWS OF THE MATRIX A.
199 * II M NUMBER OF COLUMNS OF THE MATRIX A.
200 * RU A(N*M) RECTANGULAR MATRIX STORED COLUMNWISE IN THE
201 * ONE-DIMENSIONAL ARRAY.
202 * RI ALF SCALAR PARAMETER.
203 * RI X(N) INPUT VECTOR.
204 * RI U(M) INPUT VECTOR.
205 * RI BET SCALAR PARAMETER.
206 * RI Y(N) INPUT VECTOR.
207 * RI V(M) INPUT VECTOR.
209 SUBROUTINE MXDCMV(N,M,A,ALF,X,U,BET,Y,V)
211 DOUBLE PRECISION A(*),ALF,X(*),U(*),BET,Y(*),V(*)
212 DOUBLE PRECISION TEMPA,TEMPB
219 A(K+I)=A(K+I)+TEMPA*X(I)+TEMPB*Y(I)
225 * SUBROUTINE MXDPGB ALL SYSTEMS 91/12/01
227 * SOLUTION OF A SYSTEM OF LINEAR EQUATIONS WITH A DENSE SYMMETRIC
228 * POSITIVE DEFINITE MATRIX A+E USING THE FACTORIZATION A+E=L*D*TRANS(L)
229 * OBTAINED BY THE SUBROUTINE MXDPGF.
232 * II N ORDER OF THE MATRIX A.
233 * RI A(N*(N+1)/2) FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
235 * RU X(N) ON INPUT THE RIGHT HAND SIDE OF A SYSTEM OF LINEAR
236 * EQUATIONS. ON OUTPUT THE SOLUTION OF A SYSTEM OF LINEAR
238 * II JOB OPTION. IF JOB=0 THEN X:=(A+E)**(-1)*X. IF JOB>0 THEN
239 * X:=L**(-1)*X. IF JOB<0 THEN X:=TRANS(L)**(-1)*X.
244 SUBROUTINE MXDPGB(N,A,X,JOB)
246 DOUBLE PRECISION A(*),X(*)
250 * PHASE 1 : X:=L**(-1)*X
256 X(I) = X(I) - A(IJ)*X(J)
263 * PHASE 2 : X:=D**(-1)*X
273 * PHASE 3 : X:=TRANS(L)**(-1)*X
280 X(I) = X(I) - A(IJ)*X(J)
287 * SUBROUTINE MXDPGF ALL SYSTEMS 89/12/01
289 * FACTORIZATION A+E=L*D*TRANS(L) OF A DENSE SYMMETRIC POSITIVE DEFINITE
290 * MATRIX A+E WHERE D AND E ARE DIAGONAL POSITIVE DEFINITE MATRICES AND
291 * L IS A LOWER TRIANGULAR MATRIX. IF A IS SUFFICIENTLY POSITIVE
295 * II N ORDER OF THE MATRIX A.
296 * RU A(N*(N+1)/2) ON INPUT A GIVEN DENSE SYMMETRIC (USUALLY POSITIVE
297 * DEFINITE) MATRIX A STORED IN THE PACKED FORM. ON OUTPUT THE
298 * COMPUTED FACTORIZATION A+E=L*D*TRANS(L).
299 * IO INF AN INFORMATION OBTAINED IN THE FACTORIZATION PROCESS. IF
300 * INF=0 THEN A IS SUFFICIENTLY POSITIVE DEFINITE AND E=0. IF
301 * INF<0 THEN A IS NOT SUFFICIENTLY POSITIVE DEFINITE AND E>0. IF
302 * INF>0 THEN A IS INDEFINITE AND INF IS AN INDEX OF THE
303 * MOST NEGATIVE DIAGONAL ELEMENT USED IN THE FACTORIZATION
305 * RU ALF ON INPUT A DESIRED TOLERANCE FOR POSITIVE DEFINITENESS. ON
306 * OUTPUT THE MOST NEGATIVE DIAGONAL ELEMENT USED IN THE
307 * FACTORIZATION PROCESS (IF INF>0).
308 * RO TAU MAXIMUM DIAGONAL ELEMENT OF THE MATRIX E.
311 * P.E.GILL, W.MURRAY : NEWTON TYPE METHODS FOR UNCONSTRAINED AND
312 * LINEARLY CONSTRAINED OPTIMIZATION, MATH. PROGRAMMING 28 (1974)
315 SUBROUTINE MXDPGF(N,A,INF,ALF,TAU)
316 DOUBLE PRECISION ALF,TAU
318 DOUBLE PRECISION A(*)
319 DOUBLE PRECISION BET,DEL,GAM,RHO,SIG,TOL
320 INTEGER I,IJ,IK,J,K,KJ,KK,L
325 * ESTIMATION OF THE MATRIX NORM
334 BET = MAX(BET,ABS(A(KK)))
338 GAM = MAX(GAM,ABS(A(KJ)))
341 BET = MAX(TOL,BET,GAM/N)
343 DEL = TOL*MAX(BET,1.0D0)
348 * DETERMINATION OF A DIAGONAL CORRECTION
359 GAM = MAX(GAM,ABS(A(KJ)))
362 RHO = MAX(ABS(SIG),GAM/BET,DEL)
363 IF (TAU.LT.RHO-SIG) THEN
368 * GAUSSIAN ELIMINATION
381 A(IJ) = A(IJ) - A(IK)*GAM
385 IF (L.GT.0 .AND. ABS(ALF).GT.DEL) INF = L
388 * SUBROUTINE MXDRMM ALL SYSTEMS 91/12/01
390 * MULTIPLICATION OF A ROWWISE STORED DENSE RECTANGULAR MATRIX A BY
394 * II N NUMBER OF COLUMNS OF THE MATRIX A.
395 * II M NUMBER OF ROWS OF THE MATRIX A.
396 * RI A(M*N) RECTANGULAR MATRIX STORED ROWWISE IN THE
397 * ONE-DIMENSIONAL ARRAY.
398 * RI X(N) INPUT VECTOR.
399 * RO Y(M) OUTPUT VECTOR EQUAL TO A*X.
401 SUBROUTINE MXDRMM(N,M,A,X,Y)
403 DOUBLE PRECISION A(*),X(*),Y(*)
404 DOUBLE PRECISION TEMP
406 DOUBLE PRECISION ZERO
407 PARAMETER (ZERO=0.0D 0)
412 TEMP=TEMP+A(K+I)*X(I)
419 * SUBROUTINE MXDRCB ALL SYSTEMS 91/12/01
421 * BACKWARD PART OF THE STRANG FORMULA FOR PREMULTIPLICATION OF
422 * THE VECTOR X BY AN IMPLICIT BFGS UPDATE.
425 * II N NUMBER OF ROWS OF THE MATRICES A AND B.
426 * II M NUMBER OF COLUMNS OF THE MATRICES A AND B.
427 * RI A(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
428 * RI B(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
429 * RI U(M) VECTOR OF SCALAR COEFFICIENTS.
430 * RO V(M) VECTOR OF SCALAR COEFFICIENTS.
431 * RU X(N) PREMULTIPLIED VECTOR.
432 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
433 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
434 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
438 * S MXUDIR VECTOR AUGMENTED BY THE SCALED VECTOR.
439 * RF MXUDOT DOT PRODUCT OF VECTORS.
442 * H.MATTHIES, G.STRANG: THE SOLUTION OF NONLINEAR FINITE ELEMENT
443 * EQUATIONS. INT.J.NUMER. METHODS ENGN. 14 (1979) 1613-1626.
445 SUBROUTINE MXDRCB(N,M,A,B,U,V,X,IX,JOB)
446 INTEGER N,M,IX(*),JOB
447 DOUBLE PRECISION A(*),B(*),U(*),V(*),X(*)
448 DOUBLE PRECISION MXUDOT
452 V(I)=U(I)*MXUDOT(N,X,A(K),IX,JOB)
453 CALL MXUDIR(N,-V(I),B(K),X,X,IX,JOB)
458 * SUBROUTINE MXDRCF ALL SYSTEMS 91/12/01
460 * FORWARD PART OF THE STRANG FORMULA FOR PREMULTIPLICATION OF
461 * THE VECTOR X BY AN IMPLICIT BFGS UPDATE.
464 * II N NUMBER OF ROWS OF THE MATRICES A AND B.
465 * II M NUMBER OF COLUMNS OF THE MATRICES A AND B.
466 * RI A(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
467 * RI B(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
468 * RI U(M) VECTOR OF SCALAR COEFFICIENTS.
469 * RI V(M) VECTOR OF SCALAR COEFFICIENTS.
470 * RU X(N) PREMULTIPLIED VECTOR.
471 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
472 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
473 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
477 * S MXUDIR VECTOR AUGMENTED BY THE SCALED VECTOR.
478 * RF MXUDOT DOT PRODUCT OF VECTORS.
481 * H.MATTHIES, G.STRANG: THE SOLUTION OF NONLINEAR FINITE ELEMENT
482 * EQUATIONS. INT.J.NUMER. METHODS ENGN. 14 (1979) 1613-1626.
484 SUBROUTINE MXDRCF(N,M,A,B,U,V,X,IX,JOB)
485 INTEGER N,M,IX(*),JOB
486 DOUBLE PRECISION A(*),B(*),U(*),V(*),X(*)
487 DOUBLE PRECISION TEMP,MXUDOT
491 TEMP=U(I)*MXUDOT(N,X,B(K),IX,JOB)
492 CALL MXUDIR(N,V(I)-TEMP,A(K),X,X,IX,JOB)
497 * SUBROUTINE MXDRSU ALL SYSTEMS 91/12/01
499 * SHIFT OF COLUMNS OF THE RECTANGULAR MATRICES A AND B. SHIFT OF
500 * ELEMENTS OF THE VECTOR U. THESE SHIFTS ARE USED IN THE LIMITED
501 * MEMORY BFGS METHOD.
504 * II N NUMBER OF ROWS OF THE MATRIX A AND B.
505 * II M NUMBER OF COLUMNS OF THE MATRIX A AND B.
506 * RU A(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
507 * RU B(N*M) RECTANGULAR MATRIX STORED AS A ONE-DIMENSIONAL ARRAY.
510 SUBROUTINE MXDRSU(N,M,A,B,U)
512 DOUBLE PRECISION A(*),B(*),U(*)
517 CALL MXVCOP(N,A(L),A(K))
518 CALL MXVCOP(N,B(L),B(K))
524 * SUBROUTINE MXDSMI ALL SYSTEMS 88/12/01
526 * DENSE SYMMETRIC MATRIX A IS SET TO THE UNIT MATRIX WITH THE SAME
530 * II N ORDER OF THE MATRIX A.
531 * RO A(N*(N+1)/2) DENSE SYMMETRIC MATRIX STORED IN THE PACKED FORM
532 * WHICH IS SET TO THE UNIT MATRIX (I.E. A:=I).
534 SUBROUTINE MXDSMI(N,A)
536 DOUBLE PRECISION A(*)
538 DOUBLE PRECISION ZERO,ONE
539 PARAMETER (ZERO=0.0D 0,ONE=1.0D 0)
551 * SUBROUTINE MXDSMS ALL SYSTEMS 91/12/01
553 * SCALING OF A DENSE SYMMETRIC MATRIX.
556 * II N ORDER OF THE MATRIX A.
557 * RU A(N*(N+1)/2) DENSE SYMMETRIC MATRIX STORED IN THE PACKED FORM
558 * WHICH IS SCALED BY THE VALUE ALF (I.E. A:=ALF*A).
559 * RI ALF SCALING FACTOR.
561 SUBROUTINE MXDSMS( N, A, ALF)
563 DOUBLE PRECISION A(*), ALF
571 * SUBROUTINE MXLIIM ALL SYSTEMS 96/12/01
573 * MATRIX MULTIPLICATION FOR LIMITED STORAGE INVERSE COLUMN UPDATE
577 * II N NUMBER OF VARIABLES.
578 * II M NUMBER OF QUASI-NEWTON STEPS.
579 * RI D(N) DIAGONAL OF A DECOMPOSED TRIDIAGONAL MATRIX.
580 * RI DL(N) SUBDIAGONAL OF A DECOMPOSED TRIDIAGONAL MATRIX.
581 * RI DU(N) SUPERDIAGONAL OF A DECOMPOSED TRIDIAGONAL MATRIX.
582 * RI DU2(N) SECOND SUPERDIAGONAL OF A DECOMPOSED TRIDIAGONAL MATRIX.
583 * II ID(N) PERMUTATION VECTOR.
584 * RI XM(N*M) SET OF VECTORS FOR INVERSE COLUMN UPDATE.
585 * RI GM(M) SET OF VALUES FOR INVERSE COLUMN UPDATE.
586 * II IM(M) SET OF INDICES FOR INVERSE COLUMN UPDATE.
587 * RI U(N) INPUT VECTOR.
588 * RO V(N) OUTPUT VECTOR.
591 * S MXSGIB BACK SUBSTITUTION AFTER INCOMPLETE LU DECOMPOSITION.
592 * S MXVCOP COPYING OF A VECTOR.
593 * S MXVDIR VECTOR AUGMENTED BY THE SCALED VECTOR.
595 SUBROUTINE MXLIIM(N,M,A,IA,JA,IP,ID,XM,GM,IM,U,V,S)
597 DOUBLE PRECISION A(*),GM(*),S(*),U(*),V(*),XM(*)
598 INTEGER IA(*),ID(*),IM(*),IP(*),JA(*)
601 CALL MXSGIB(N,A,IA,JA,IP,ID,V,S,0)
604 CALL MXVDIR(N,U(IM(I))/GM(I),XM(L),V,V)
609 * SUBROUTINE MXSCMD ALL SYSTEMS 92/12/01
611 * MULTIPLICATION OF A DENSE RECTANGULAR MATRIX A BY A VECTOR X AND
612 * ADDITIOON OF THE SCALED VECTOR ALF*Y.
615 * II N NUMBER OF ROWS OF THE MATRIX A.
616 * II NA NUMBER OF COLUMNS OF THE MATRIX A.
617 * II MA NUMBER OF ELEMENTS IN THE FIELD A.
618 * RI A(MA) RECTANGULAR MATRIX STORED AS A TWO-DIMENSIONAL ARRAY.
619 * II IA(NA+1) POSITION OF THE FIRST RORWS ELEMENTS IN THE FIELD A.
620 * II JA(MA) COLUMN INDICES OF ELEMENTS IN THE FIELD A.
621 * RI X(NA) INPUT VECTOR.
622 * RI ALF SCALING FACTOR.
623 * RI Y(N) INPUT VECTOR.
624 * RO Z(N) OUTPUT VECTOR EQUAL TO A*X+ALF*Y.
627 * S MXVSCL SCALING OF A VECTOR.
629 SUBROUTINE MXSCMD(N,NA,A,IA,JA,X,ALF,Y,Z)
630 INTEGER N,NA,IA(*),JA(*)
631 DOUBLE PRECISION A(*),X(*),ALF,Y(*),Z(*)
633 CALL MXVSCL(N,ALF,Y,Z)
639 IF (JP.GT.0) Z(JP)=Z(JP)+A(K)*X(I)
645 * SUBROUTINE MXSCMM ALL SYSTEMS 92/12/01
647 * MULTIPLICATION OF A DENSE RECTANGULAR MATRIX A BY A VECTOR X.
650 * II N NUMBER OF ROWS OF THE MATRIX A.
651 * II NA NUMBER OF COLUMNS OF THE MATRIX A.
652 * II MA NUMBER OF ELEMENTS IN THE FIELD A.
653 * RI A(MA) RECTANGULAR MATRIX STORED AS A TWO-DIMENSIONAL ARRAY.
654 * II IA(NA+1) POSITION OF THE FIRST RORWS ELEMENTS IN THE FIELD A.
655 * II JA(MA) COLUMN INDICES OF ELEMENTS IN THE FIELD A.
656 * RI X(NA) INPUT VECTOR.
657 * RO Y(N) OUTPUT VECTOR EQUAL TO A*X.
660 * S MXVSET INITIATION OF A VECTOR.
662 SUBROUTINE MXSCMM(N,NA,A,IA,JA,X,Y)
663 INTEGER N,NA,IA(*),JA(*)
664 DOUBLE PRECISION A(*),X(*),Y(*)
666 CALL MXVSET(N,0.0D 0,Y)
672 IF (JP.GT.0) Y(JP)=Y(JP)+A(K)*X(I)
678 * SUBROUTINE MXSGIB ALL SYSTEMS 95/12/01
680 * SOLUTION OF A SYSTEM OF LINEAR EQUATIONS WITH A SPARSE UNSYMMETRIC
681 * MATRIX A USING INCOMPLETE FACTORIZATION OBTAINED BY THE SUBROUTINE
685 * II N MATRIX DIMENSION.
686 * II M NUMBER OF MATRIX NONZERO ELEMENTS.
687 * RU A(M) NONZERO ELEMENTS OF THE MATRIX A.
688 * II IA(N+1) ROW POINTERS OF THE MATRIX A.
689 * II JA(M) COLUMN INDICES OF THE MATRIX A.
690 * IO IP(N) PERMUTATION VECTOR.
691 * II ID(N) DIAGONAL POINTERS OF THE MATRIX A.
692 * RU X(N) ON INPUT THE RIGHT HAND SIDE OF A SYSTEM OF LINEAR
693 * EQUATIONS. ON OUTPUT THE SOLUTION OF A SYSTEM OF LINEAR
695 * RA Y(N) AUXILIARY VECTOR.
696 * JOB OPTION. JOB=0 - SOLUTION WITH THE ORIGINAL MATRIX.
697 * JOB=1 - SOLUTION WITH THE MATRIX TRANSPOSE.
699 SUBROUTINE MXSGIB(N,A,IA,JA,IP,ID,X,Y,JOB)
701 PARAMETER (CON=1.0D120)
703 DOUBLE PRECISION A(*),X(*),Y(*)
704 INTEGER IA(*),ID(*),IP(*),JA(*)
705 DOUBLE PRECISION APOM
706 INTEGER J,JJ,JP,K,KSTOP,KSTRT
711 DO 10 JJ = KSTRT,KSTOP
715 X(K) = X(K) - A(JJ)*X(JP)
716 IF (ABS(X(K)).GE.CON) X(K) = SIGN(CON,X(K))
723 DO 30 JJ = KSTRT,KSTOP
726 IF (JP.GT.K) X(K) = X(K) - A(JJ)*X(JP)
727 IF (JP.EQ.K) APOM = A(JJ)
731 CALL MXVSFP(N,IP,X,Y)
733 CALL MXVSBP(N,IP,X,Y)
738 DO 50 JJ = KSTRT,KSTOP
741 IF (JP.GT.K) X(JP) = X(JP) - A(JJ)*X(K)
747 DO 70 JJ = KSTRT,KSTOP
750 IF (JP.LT.K) X(JP) = X(JP) - A(JJ)*X(K)
756 * SUBROUTINE MXSGIF ALL SYSTEMS 95/12/01
758 * INCOMPLETE FACTORIZATION OF A GENERAL SPARSE MATRIX A.
761 * II N MATRIX DIMENSION.
762 * II M NUMBER OF MATRIX NONZERO ELEMENTS.
763 * RU A(M) NONZERO ELEMENTS OF THE MATRIX A.
764 * II IA(N+1) ROW POINTERS OF THE MATRIX A.
765 * II JA(M) COLUMN INDICES OF THE MATRIX A.
766 * IO IP(N) PERMUTATION VECTOR.
767 * IO ID(N) DIAGONAL POINTERS OF THE MATRIX A.
768 * RA IW(N) AUXILIARY VECTOR.
769 * RI TOL PIVOT TOLERANCE.
770 * IO INF INFORMATION.
772 SUBROUTINE MXSGIF(N,A,IA,JA,IP,ID,IW,TOL,INF)
773 DOUBLE PRECISION ZERO,ONE,CON
774 PARAMETER (ZERO=0.0D0,ONE=1.0D0,CON=1.0D-30)
777 DOUBLE PRECISION A(*)
778 INTEGER IA(*),ID(*),IP(*),IW(*),JA(*)
779 DOUBLE PRECISION TEMP
780 INTEGER I,II,J,JJ,JSTOP,JSTRT,K,KK,KSTOP,KSTRT
783 IF (IP(I).LE.0 .OR. IP(I).GT.N) THEN
788 20 CALL MXVINS(N,0,IW)
793 DO 30 JJ = KSTRT,KSTOP
796 IF (IP(J).EQ.K) ID(K) = JJ
802 IF (TOL.GT.ZERO) A(ID(K)) = (ONE+TOL)*A(ID(K))
803 IF (ABS(A(ID(K))).LT.TOL) A(ID(K)) = A(ID(K)) +
805 DO 50 JJ = KSTRT,KSTOP
810 TEMP = A(JJ)/A(ID(J))
812 DO 40 II = JSTRT,JSTOP
816 IF (KK.NE.0) A(KK) = A(KK) - TEMP*A(II)
822 IF (ABS(A(KK)).LT.CON) THEN
824 IF (A(KK).EQ.ZERO) THEN
827 A(KK) = SIGN(CON,A(KK))
830 DO 60 JJ = KSTRT,KSTOP
837 * SUBROUTINE MXSPCA ALL SYSTEMS 93/12/01
839 * REWRITE SYMMETRIC MATRIX INTO THE PERMUTED FACTORIZED COMPACT SCHEME.
840 * MOIDIFIED VERSION FOR THE USE WITH MXSPCJ.
843 * II N SIZE OF THE SYSTEM SOLVED.
844 * II NB NUMBER OF NONZEROS IN THE UPPER TRIANGLE OF THE ORIGINAL
846 * II ML SIZE OF THE COMPACT FACTOR.
847 * RU A(MMAX) NUMERICAL VALUES OF THE SPARSE HESSIAN APPROXIMATION
848 * STORED AT THE POSITIONS 1, ...,NB.
849 * IU JA(MMAX) INDICES OF THE NONZERO ELEMENTS OF THE HESSIAN MATRIX IN
850 * THE PACKED ROW FORM AT THE FIRST NB POSITIONS.
852 * IN THE PERMUTED FACTOR STORED IN A(NB+1), ..., A(2*NB),
853 * INDICES OF COMPACT SCHEME IN A(2*NB+1), ..., A(2*NB+ML).
854 * II PSL(N+1) POINTER VECTOR OF THE COMPACT FORM OF THE TRIANGULAR
855 * FACTOR OF THE HESSIAN APPROXIMATION.
856 * RI T CORRECTION FACTOR THAT IS ADDED TO THE DIAGONAL.
859 SUBROUTINE MXSPCA(N,NB,ML,A,IA,JA,T)
860 INTEGER N,NB,ML,IA(*),JA(*)
861 DOUBLE PRECISION A(*),T
864 J=ABS(JA(IA(I)+NB+ML))
869 * SUBROUTINE MXSPCB ALL SYSTEMS 92/12/01
871 * SOLUTION OF A SYSTEM OF LINEAR EQUATIONS WITH A SPARSE SYMMETRIC
872 * POSITIVE DEFINITE MATRIX A+E USING THE FACTORIZATION A+E=L*D*TRANS(L)
873 * STORED IN THE COMPACT SCHEME. THIS FACTORIZATION CAN BE OBTAINED
874 * USING THE SUBROUTINE MXSPCF.
877 * II N ORDER OF THE MATRIX A.
878 * RI A(MMAX) FACTORS L,D OF THE FACTORIZATION A+E=L*D*TRANS(L)
879 * STORED USING THE COMPACT SCHEME OF STORING.
880 * II PSL(N+1) POINTER ARRAY OF THE FACTORIZED SPARSE MATRIX
881 * II SL(MMAX) ARRAY OF COLUMN INDICES OF THE FACTORS L AND D
882 * STORED USING THE COMPACT SCHEME.
883 * RU X(N) ON INPUT THE RIGHT HAND SIDE OF A SYSTEM OF LINEAR
884 * EQUATIONS. ON OUTPUT THE SOLUTION OF A SYSTEM OF LINEAR
886 * II JOB OPTION. IF JOB=0 THEN X:=(A+E)**(-1)*X. IF JOB>0 THEN
887 * X:=L**(-1)*X. IF JOB<0 THEN X:=TRANS(L)**(-1)*X.
892 SUBROUTINE MXSPCB(N,A,PSL,SL,X,JOB)
894 DOUBLE PRECISION A(*),X(*)
895 INTEGER PSL(*),SL(*),JOB
903 DO 200 J=PSL(I)+I,PSL(I+1)+I-1
904 X(SL(IS))=X(SL(IS)) - A(J)*X(I)
914 X(I) = X(I)/A(PSL(I)+I-1)
923 DO 500 J=PSL(I)+I,PSL(I+1)+I-1
924 X(I)=X(I)-A(J)*X(SL(IS))
931 * SUBROUTINE MXSPCC ALL SYSTEMS 92/12/01
933 * SPARSE MATRIX REORDER, SYMBOLIC FACTORIZATION, DATA STRUCTURES
934 * TRANSFORMATION - INITIATION OF THE DIRECT SPARSE SOLVER.
935 * MODIFIED VERSION WITH CHANGED DATA STRUCTURES.
938 * II N ACTUAL NUMBER OF VARIABLES.
939 * II NJA NUMBER OF NONZERO ELEMENTS OF THE MATRIX.
940 * IO ML SIZE OF THE COMPACT STRUCTURE OF THE TRIANGULAR FACTOR
941 * OF THE HESSIAN APPROXIMATION.
942 * II MMAX SIZE OF THE ARRAYS JA,A.
943 * RO A(MMAX) NUMERICAL VALUES OF THE SPARSE HESSIAN APPROXIMATION
944 * STORED AT THE POSITIONS 1, ...,NJA. LOWER TRIANGULAR
945 * FACTOR OF THE HESSIAN APPROXIMATION STORED AT THE
946 * POSITIONS NJA+1, ..., NJA+MB.
947 * II IA(N) POINTERS OF THE DIAGONAL ELEMENTS OF THE HESSIAN MATRIX.
948 * II JA(MMAX) INDICES OF THE NONZERO ELEMENTS OF THE HESSIAN MATRIX IN
949 * THE PACKED ROW FORM AT THE FIRST NJA POSITIONS. COMPACT
950 * STRUCTURE OF INDICES OF ITS TRIANGULAR FACTOR IS ROWWISE
952 * II PSL(N+1) POINTER VECTOR OF THE COMPACT FORM OF THE TRIANGULAR
953 * FACTOR OF THE HESSIAN APPROXIMATION.
954 * IO PERM(N) PERMUTATION VECTOR.
955 * IO INVP(N) INVERSE PERMUTATION VECTOR.
956 * IA WN11(N) AUXILIARY VECTOR.
957 * IA WN12(N) AUXILIARY VECTOR.
958 * IA WN13(N) AUXILIARY VECTOR.
959 * IA WN14(N) AUXILIARY VECTOR.
960 * IO ITERM TERMINATION INDICATOR. TERMINATION IF ITERM .NE. 0.
965 * S MXSTG1 WIDTHENING OF THE PACKED FORM OF THE SPARSE MATRIX.
966 * S MXSSMN SPARSE MATRIX REORDERING.
967 * S MXVSIP INVERSE PERMUTATION COMPUTING.
968 * S MXSPCI SYMBOLIC FACTORIZATION.
969 * S MXSTL1 PACKING OF THE WIDTHENED FORM OF THE SPARSE MATRIX.
971 SUBROUTINE MXSPCC(N,NJA,ML,MMAX,A,IA,JA,PSL,PERM,INVP,WN11,WN12,
973 INTEGER N,NJA,MMAX,ML,ITERM
974 INTEGER PERM(*),INVP(*),WN11(*),WN12(*),WN13(*),WN14(*)
975 INTEGER PSL(*),IA(*),JA(*)
976 INTEGER JSTRT,JSTOP,I,J,K,L,NJASAVE
977 INTEGER LL,LL1,NJABIG,KSTRT
978 DOUBLE PRECISION A(*)
980 IF (2*NJA.GE.MMAX) THEN
985 * WIDTHENING OF THE PACKED FORM
988 CALL MXSTG1(N,NJA,IA,JA,WN12,WN11)
991 * REORDERING OF THE SPARSE MATRIX
993 CALL MXSSMN(N,IA,JA,PERM,WN11,WN12,WN13)
995 * FIND THE INVERSE PERMUTATION VECTOR INVP
997 CALL MXVSIP(N,PERM,INVP)
999 * SHRINK THE STRUCTURE
1001 CALL MXSTL1(N,NJA,IA,JA,WN11)
1007 * WN11 CONTAINS BEGINNINGS OF THE FACTOR ROWS
1025 WN11(I+1)=WN11(I)+WN12(I)
1028 * CREATE UPPER TRIANGULAR STRUCTURE NECESSARY FOR THE TRANSFER
1034 DO 200 J=JSTRT,JSTOP
1053 * SORT INDICES IN THE PERMUTED UPPER TRIANGLE
1061 WN11(I)=WN11(I-1)+WN12(I-1)
1070 CALL MXVSR5(JSTOP-JSTRT,JSTRT-1,JA(NJABIG+JSTRT),
1071 & A,A(NJASAVE+JSTRT))
1075 * WIDTHENING OF THE PERMUTED PACKED FORM.
1078 CALL MXSTG1(N,NJA,IA,JA,WN12,WN11)
1081 * SYMBOLIC FACTORIZATION.
1083 CALL MXSPCI(N,ML,MMAX-2*NJA,IA,JA,PSL,A(2*NJASAVE+1),PERM,
1084 & INVP,WN11,WN12,WN13,ITERM)
1085 IF (ITERM.NE.0) THEN
1090 * RETRIEVE PARAMETERS
1092 CALL MXSTL1(N,NJA,IA,JA,WN11)
1094 * SHIFT PERMUTED UPPER TRIANGLE.
1097 JA(NJA+I)=JA(NJABIG+I)
1100 * SHIFT STRUCTURE SL.
1102 IF (2*NJASAVE+ML.GE.MMAX) THEN
1107 JA(2*NJASAVE+I)=A(2*NJASAVE+I)
1119 DO 700 J=JSTRT,JSTOP-1
1126 KSTRT=JA(2*NJASAVE+I)+N+1+2*NJASAVE
1127 DO 800 J=KSTRT+PSL(I+1)-PSL(I)-1,KSTRT,-1
1129 IF (WN12(L).NE.0) THEN
1143 JA(NJASAVE+I)=JA(2*NJASAVE+I)
1146 JA(ML+NJASAVE+I)=A(I)
1151 * SUBROUTINE MXSPCD ALL SYSTEMS 92/12/01
1153 * COMPUTATION OF A DIRECTION OF NEGATIVE CURVATURE WITH RESPECT TO A
1154 * SPARSE SYMMETRIC MATRIX A USING THE FACTORIZATION A+E=L*D*TRANS(L)
1155 * STORED IN THE COMPACT SPARSE FORM.
1158 * II N ORDER OF THE MATRIX A.
1159 * II MMAX LENGTH OF THE PRINCIPAL MATRIX VECTORS (SL,A).
1160 * RI A(MMAX) FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1161 * SUBROUTINE MXSPGF.IT CONTAINS THE NUMERICAL VALUES OF THE
1162 * FACTORS STORED IN THE COMPACT FORM ACCORDING TO THE
1163 * INFORMATION IN THE VECTORS PSL,SL.
1164 * II PSL(N+1) POINTER VECTOR OF THE FACTORIZED MATRIX A.
1165 * II SL(MMAX) COMPACT SHEME OF THE FACTORIZED MATRIX A.
1166 * RO X(N) COMPUTED DIRECTION OF NEGATIVE CURVATURE (I.E.
1167 * TRANS(X)*A*X<0) IF IT EXISTS.
1168 * II INF INFORMATION OBTAINED IN THE FACTORIZATION PROCESS. THE
1169 * DIRECTION OF NEGATIVE CURVATURE EXISTS ONLY IF INF>0.
1172 * P.E.GILL, W.MURRAY : NEWTON TYPE METHODS FOR UNCONSTRAINED AND
1173 * LINEARLY CONSTRAINED OPTIMIZATION, MATH. PROGRAMMING 28 (1974)
1176 SUBROUTINE MXSPCD(N,A,PSL,SL,X,INF)
1177 INTEGER N,INF,PSL(*),SL(*)
1178 DOUBLE PRECISION A(*),X(*)
1181 * RIGHT HAND SIDE FORMATION
1186 IF (INF .LE. 0) RETURN
1193 DO 200 J=PSL(I)+I,PSL(I+1)+I-1
1194 X(I)=X(I)-A(J)*X(SL(IS))
1200 * SUBROUTINE MXSPCF ALL SYSTEMS 90/12/01
1202 * NUMERICAL FACTORIZATION A+E=L*D*TRANS(L) OF A SPARSE
1203 * SYMMETRIC POSITIVE DEFINITE MATRIX A+E WHERE D AND E ARE DIAGONAL
1204 * POSITIVE DEFINITE MATRICES AND L IS A LOWER TRIANGULAR MATRIX. IF
1205 * A IS SUFFICIENTLY POSITIVE DEFINITE THEN E=0. THE STRUCTURE ON
1206 * INPUT WAS OBTAINED BY THE SYMBOLIC FACTORIZATION AND IT MAKES
1207 * USE OF THE COMPACT SCHEME OF STORING THE SPARSE MATRIX IN THE
1208 * POINTER ARRAY PSL ,INDEX ARRAY SL. NUMERICAL VALUES OF THE FACTOR
1209 * CAN BE FOUND IN THE ARRAY A.
1212 * II N ORDER OF THE MATRIX A.
1213 * RU A(MMAX) ON INPUT NUMERICAL VALUES OF THE LOWER HALF OF THE
1214 * MATRIX THAT IS BEEING FACTORIZED(INCLUDING THE DIAGONAL
1215 * ELEMENTS. ON OUTPUT IT CONTAINS FACTORS L AND D AS IF THEY
1216 * FORM THE LOWER HALF OF THE MATRIX.STRUCTURE INFORMATION
1217 * IS SAVED IN THE COMPACT SCHEME IN THE PAIR OF VECTORS PSL
1219 * II PSL(NF+1) POINTER VECTOR OF THE FACTOR
1220 * II SL(MMAX) STRUCTURE OF THE FACTOR IN THE COMPACT FORM
1221 * IA WN11(NF+1) AUXILIARY VECTOR.
1222 * IA WN12(NF+1) AUXILIARY VECTOR.
1223 * RA RN01(NF+1) AUXILIARY VECTOR.
1224 * IO INF AN INFORMATION OBTAINED IN THE FACTORIZATION PROCESS. IF
1225 * INF=0 THEN A IS SUFFICIENTLY POSITIVE DEFINITE AND E=0. IF
1226 * INF<0 THEN A IS NOT SUFFICIENTLY POSITIVE DEFINITE AND E>0. IF
1227 * INF>0 THEN THEN A IS INDEFINITE AND INF IS AN INDEX OF THE
1228 * MOST NEGATIVE DIAGONAL ELEMENT USED IN THE FACTORIZATION
1230 * RU ALF ON INPUT A DESIRED TOLERANCE FOR POSITIVE DEFINITENESS. ON
1231 * OUTPUT THE MOST NEGATIVE DIAGONAL ELEMENT USED IN THE
1232 * FACTORIZATION PROCESS (IF INF>0).
1233 * RO TAU MAXIMUM DIAGONAL ELEMENT OF THE MATRIX E.
1236 * S.C.EISENSTAT,M.C.GURSKY,M.H.SCHULTZ,A.H.SHERMAN:YALE SPARSE MATRIX
1237 * PACKAGE I. THE SYMMETRIC CODES,YALE UNIV. RES. REPT.
1240 SUBROUTINE MXSPCF(N,A,PSL,SL,WN11,WN12,RN01,INF,ALF,TAU)
1241 INTEGER N,PSL(*),SL(*),WN11(*),WN12(*),INF
1242 DOUBLE PRECISION A(*),RN01(*),ALF
1243 DOUBLE PRECISION BET,GAM,DEL,RHO,SIG,TOL,TADD,TBDD,TAU
1244 INTEGER I, J, K, L, II
1245 INTEGER ISTRT,ISTOP,NEWK,KPB,ISUB
1254 BET=MAX(BET,ABS(A(PSL(I)+I-1)))
1255 DO 50 J=PSL(I)+I,PSL(I+1)+I-1
1256 GAM = MAX( GAM, ABS(A(J)) )
1259 BET = MAX(TOL,BET,GAM/N)
1267 * DETERMINATION OF A DIAGONAL CORRECTION
1273 IF (K.EQ.0) GO TO 400
1277 TBDD=TADD*A(PSL(K)+K-1)
1281 IF (ISTOP.LT.ISTRT) GO TO 200
1283 I=SL(K)+(KPB-PSL(K))+1
1287 DO 300 II=ISTRT,ISTOP
1289 RN01(ISUB)=RN01(ISUB)+A(II+K)*TBDD
1293 400 SIG=A(PSL(J)+J-1)-RHO
1294 IF (ALF.GT.SIG) THEN
1301 IF (ISTOP.LT.ISTRT) GO TO 370
1307 DO 500 II=ISTRT,ISTOP
1309 A(II+J)=(A(II+J)-RN01(ISUB))
1313 DO 350 K=PSL(J)+J,PSL(J+1)+J-1
1314 GAM=MAX(GAM,ABS(A(K)))
1317 370 RHO=MAX(ABS(SIG),GAM/BET,DEL)
1318 IF (TAU.LT.RHO-SIG) THEN
1323 * GAUSSIAN ELIMINATION
1326 DO 550 II=ISTRT,ISTOP
1330 IF (L.NE.0.AND.ABS(ALF).GT.DEL) INF=L
1333 * SUBROUTINE MXSPCI ALL SYSTEMS 89/12/01
1335 * SYMBOLIC FACTORIZATION OF A SPARSE SYMMETRIC MATRIX GIVEN IN THE
1336 * NORMAL SCHEME PA,SA. ON OUTPUT WE HAVE POINTER VECTOR OF THE FACTOR
1337 * PSL AND VECTOR OF COLUMN INDICES SL. ML IS THE NUMBER OF THE INDICES
1338 * USED FOR THE VECTOR SL, WHERE WE HAVE FACTOR IN THE COMPACT FORM.
1341 * II N ORDER OF THE MATRIX A.
1342 * IO ML NUMBER OF THE NONZERO ELEMENTS IN THE FACTOR'S COMPACT SCHEME
1343 * II MMAX LENGTH OF THE ARRAY SL. IN THE CASE OF THE
1344 * INSUFFICIENT SPACE IT IS TO BE INCREASED.
1345 * II PA(N+1) POINTER VECTOR OF THE INPUT MATRIX
1346 * II SA(MMAX) VECTOR OF THE COLUMN INDICES OF THE INPUT MATRIX
1347 * IO PSL(N+1) POINTER VECTOR OF THE FACTOR
1348 * RO SL(MMAX) COMPACT SCHEME OF THE INDICES OF THE FACTOR
1349 * II PERM(N) PERMUTATION VECTOR
1350 * II INVP(N) INVERSE PERMUTATION VECTOR
1351 * IA WN11(N+1) WORK VECTOR OF THE LENGTH N+1
1352 * IA WN12(N+1) WORK VECTOR OF THE LENGTH N+1
1353 * IA WN13(N+1) WORK VECTOR OF THE LENGTH N+1
1354 * IO ISPACE AN INFORMATION ON SPACE OBTAINED DURING THE PROCESS
1355 * OF THE FACTORIZATION.
1356 * ISPACE=0 THE FACTORIZATION HAS TERMINATED NORMALLY
1357 * ISPACE=1 INSUFFICIENT SPACE AVAILABLE
1360 * S.C.EISENSTAT,M.C.GURSKY,M.H.SCHULTZ,A.H.SHERMAN:YALE SPARSE MATRIX
1361 * PACKAGE I. THE SYMMETRIC CODES,ACM TRANS. ON MATH. SOFTWARE.
1363 * NOTE: TYPE OF SL CHANGED FOR THE UFO APPLICATION.
1365 SUBROUTINE MXSPCI(N,ML,MMAX,PA,SA,PSL,SL,PERM,INVP,
1366 & WN11,WN12,WN13,ISPACE)
1367 INTEGER N,MMAX,PA(*),SA(*),PSL(*)
1368 INTEGER PERM(*),INVP(*),WN11(*),WN12(*),WN13(*)
1369 INTEGER ISPACE,I,INZ,J,JSTOP,JSTRT,K,KNZ,KXSUB,MRGK,LMAX,ML
1370 INTEGER NABOR,NODE,NP1,NZBEG,NZEND,RCHM,MRKFLG,M
1371 DOUBLE PRECISION SL(*)
1385 IF (MRGK.NE.0) WN13(K)=WN13(MRGK)
1390 IF (JSTRT.GT.JSTOP) GO TO 1500
1392 DO 300 J=JSTRT,JSTOP
1394 IF (NABOR.EQ.NODE) GO TO 300
1396 IF (NABOR.LE.K) GO TO 300
1400 IF (RCHM.LE.NABOR) GO TO 200
1404 IF (WN13(NABOR).NE.WN13(K)) MRKFLG=1
1407 IF (MRKFLG.NE.0.OR.MRGK.EQ.0) GO TO 350
1408 IF (WN11(MRGK).NE.0) GO TO 350
1410 KNZ=PSL(MRGK+1)-(PSL(MRGK)+1)
1414 IF (I.EQ.0) GO TO 800
1415 INZ=PSL(I+1)-(PSL(I)+1)
1418 IF (INZ.LE.LMAX) GO TO 500
1422 DO 700 J=JSTRT,JSTOP
1426 IF (RCHM.LT.NABOR) GO TO 600
1427 IF (RCHM.EQ.NABOR) GO TO 700
1434 800 IF (KNZ.EQ.LMAX) GO TO 1400
1435 IF (NZBEG.GT.NZEND) GO TO 1200
1437 DO 900 JSTRT=NZBEG,NZEND
1438 IF (SL(N+1+JSTRT)-I .GE.0) THEN
1439 IF (SL(N+1+JSTRT).EQ.I) THEN
1448 DO 1100 J=JSTRT,NZEND
1449 IF (SL(N+1+J).NE.I) GO TO 1200
1451 IF (I.GT.N) GO TO 1400
1457 * A VARIANT IS USED WHEN CALLED SO THAT SL(X)=A(NB+X)
1459 IF (NZEND.GE.MMAX-N-1) GO TO 1600
1461 DO 1300 J=NZBEG,NZEND
1468 1400 IF (KNZ.GT.1) THEN
1484 * SUBROUTINE MXSPCM ALL SYSTEMS 92/12/01
1486 * MULTIPLICATION OF A GIVEN VECTOR X BY A SPARSE SYMMETRIC POSITIVE
1487 * DEFINITE MATRIX A+E USING THE FACTORIZATION A+E=L*D*TRANS(L) OBTAINED
1488 * BY THE SUBROUTINE MXSPGN. FACTORS ARE STORED IN THE COMPACT FORM.
1491 * II N ORDER OF THE MATRIX A.
1492 * RI A(MMAX) FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1493 * SUBROUTINE MXSPGN.IT CONTAINS THE NUMERICAL VALUES OF THE
1494 * FACTORS STORED IN THE COMPACT FORM ACCORDING TO THE
1495 * INFORMATION IN THE VECTORS PSL,SL.
1496 * II PSL(N+1) POINTER ARRAY OF THE FACTORIZED SPARSE MATRIX
1497 * II SL(MMAX) INDICES OF THE COMPACT SCHEME OF THE FACTORS.
1498 * RU X(N) ON INPUT THE GIVEN VECTOR, ON OUTPUT THE RESULT
1499 * OF MULTIPLICATION.
1500 * RA RN01(N) AUXILIARY VECTOR.
1501 * II JOB OPTION. IF JOB=0 THEN X:=(A+E)*X. IF JOB>0 THEN
1502 * X:=TRANS(L)*X. IF JOB<0 THEN X:=L*X.
1504 SUBROUTINE MXSPCM(N,A,PSL,SL,X,RN01,JOB)
1506 INTEGER PSL(*),SL(*),JOB
1507 DOUBLE PRECISION A(*),X(*),RN01(*),ZERO
1508 PARAMETER(ZERO=0.0D0)
1514 * FIRST PHASE:X=TRANS(L)*X
1519 DO 200 J=PSL(I)+I,PSL(I+1)+I-1
1520 X(I)=X(I)+A(J)*X(SL(IS))
1526 * SECOND PHASE:X=D*X
1530 X(I) = X(I)*A(PSL(I)+I-1)
1539 DO 500 J=PSL(I)+I,PSL(I+1)+I-1
1540 RN01(SL(IS))=RN01(SL(IS))+A(J)*X(I)
1550 * SUBROUTINE MXSPCN ALL SYSTEMS 93/12/01
1552 * ESTIMATION OF THE MINIMUM EIGENVALUE AND THE CORRESPONDING EIGENVECTOR
1553 * OF A SPARSE SYMMETRIC POSITIVE DEFINITE MATRIX A+E USING THE
1554 * FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE SUBROUTINE MXSPCF.
1557 * II N ORDER OF THE MATRIX A.
1558 * RI A(MMAX) FACTORS L,D OF THE FACTORIZATION A+E=L*D*TRANS(L)
1559 * STORED USING THE COMPACT SCHEME OF STORING.
1560 * II PSL(N+1) POINTER ARRAY OF THE FACTORIZED SPARSE MATRIX
1561 * II SL(MMAX) ARRAY OF COLUMN INDICES OF THE FACTORS L AND D
1562 * STORED USING THE COMPACT SCHEME.
1563 * SUBROUTINE MXDPGF.
1564 * RO X(N) ESTIMATED EIGENVECTOR.
1565 * RO ALF ESTIMATED EIGENVALUE.
1566 * II JOB OPTION. IF JOB=0 THEN ONLY ESTIMATED EIGENVALUE IS
1567 * COMPUTED. IS JOB>0 THEN BOTH ESTIMATED EIGENVALUE AND
1568 * ESTIMATED EIGENVECTOR ARE COMPUTED.
1570 SUBROUTINE MXSPCN(N,A,PSL,SL,X,ALF,JOB)
1572 DOUBLE PRECISION A(*),X(*),ALF
1573 INTEGER PSL(*),SL(*),JOB
1574 DOUBLE PRECISION XP,XM,FP,FM,MXVDOT
1576 DOUBLE PRECISION ZERO,ONE
1577 PARAMETER (ZERO=0.0D 0,ONE=1.0D 0)
1579 * COMPUTATION OF THE VECTOR V WITH POSSIBLE MAXIMUM NORM SUCH
1580 * THAT L*D**(1/2)*V=U WHERE U HAS ELEMENTS +1 OR -1
1591 DO 3 I=PSL(K)+K,PSL(K+1)+K-1
1592 FP=FP+ABS(X(SL(IS))+A(I)*XP)
1593 FM=FM+ABS(X(SL(IS))+A(I)*XM)
1599 DO 4 I=PSL(K)+K,PSL(K+1)+K-1
1600 X(SL(IS))=X(SL(IS))+A(I)*XP
1606 DO 5 I=PSL(K)+K,PSL(K+1)+K-1
1607 X(SL(IS))=X(SL(IS))+A(I)*XM
1613 * COMPUTATION OF THE VECTOR X SUCH THAT
1614 * D**(1/2)*TRANS(L)*X=V
1619 FP=SQRT(A(PSL(K)+K-1))
1623 X(K)=X(K)/A(PSL(K)+K-1)
1629 * FIRST ESTIMATION OF THE MINIMUM EIGENVALUE BY THE FORMULA
1630 * ALF=(TRANS(U)*U)/(TRANS(V)*V)
1638 DO 8 I=PSL(K)+K,PSL(K+1)+K-1
1639 X(K)=X(K)-A(I)*X(SL(IS))
1647 * SECOND ESTIMATION OF THE MINIMUM EIGENVALUE BY THE FORMULA
1648 * ALF=SQRT(TRANS(U)*U)/SQRT(TRANS(X)*X)
1653 * INVERSE ITERATIONS
1657 * SCALING THE VECTOR X BY ITS NORM
1662 CALL MXSPCB(N,A,PSL,SL,X,0)
1663 FM=SQRT(MXVDOT(N,X,X))
1668 * SCALING THE VECTOR X BY ITS NORM
1675 * FUNCTION MXSPCP ALL SYSTEMS 92/12/01
1677 * COMPUTATION OF THE NUMBER MXSPCP=TRANS(X)*D**(-1)*X WHERE D IS A
1678 * DIAGONAL MATRIX IN THE FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1679 * SUBROUTINE MXSPGN. THE FACTORS ARE STORED IN THE COMPACT FORM.
1682 * II N ORDER OF THE MATRIX A.
1683 * RI A(MMAX) FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1684 * SUBROUTINE MXSPGN.IT CONTAINS THE NUMERICAL VALUES OF THE
1685 * FACTORS STORED IN THE COMPACT FORM ACCORDING TO THE
1686 * INFORMATION IN THE VECTORS PSL,SL.
1687 * II PSL(N+1) POINTER VECTOR OF THE FACTORIZED MATRIX A.
1688 * RI X(N) INPUT VECTOR
1689 * RR MXSPCP COMPUTED NUMBER MXSPCP=TRANS(X)*D**(-1)*X
1691 FUNCTION MXSPCP(N,A,PSL,X)
1693 DOUBLE PRECISION A(*), X(*), MXSPCP
1694 DOUBLE PRECISION TEMP
1698 TEMP = TEMP + X(I)*X(I)/A(PSL(I)+I-1)
1703 * FUNCTION MXSPCQ ALL SYSTEMS 92/12/01
1705 * COMPUTATION OF THE NUMBER MXSPCQ=TRANS(X)*D*X WHERE D IS A
1706 * DIAGONAL MATRIX IN THE FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1707 * SUBROUTINE MXSPGN. FACTORS ARE STORED IN THE COMPACT FORM.
1710 * II N ORDER OF THE MATRIX A.
1711 * RI A(MMAX) FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1712 * SUBROUTINE MXSPGN.IT CONTAINS THE NUMERICAL VALUES OF THE
1713 * FACTORS STORED IN THE COMPACT FORM ACCORDING TO THE
1714 * INFORMATION IN THE VECTORS PSL,SL.
1715 * II PSL(N+1) POINTER VECTOR OF THE FACTORIZED MATRIX A
1716 * RI X(N) INPUT VECTOR
1717 * RR MXSPCQ COMPUTED NUMBER MXSPCQ=TRANS(X)*D*X
1719 FUNCTION MXSPCQ(N,A,PSL,X)
1721 DOUBLE PRECISION A(*), X(*), MXSPCQ
1722 DOUBLE PRECISION TEMP
1724 DOUBLE PRECISION ZERO
1725 PARAMETER (ZERO = 0.0D0)
1728 TEMP = TEMP + X(I)*X(I)*A(PSL(I)+I-1)
1733 * SUBROUTINE MXSPCT ALL SYSTEMS 92/12/01
1735 * REWRITE SYMMETRIC MATRIX INTO THE PERMUTED FACTORIZED COMPACT SCHEME.
1736 * MOIDIFIED VERSION FOR THE USE WITH MXSPCJ.
1739 * II N SIZE OF THE SYSTEM SOLVED.
1740 * II NB NUMBER OF NONZEROS IN THE UPPER TRIANGLE OF THE ORIGINAL
1742 * II ML SIZE OF THE COMPACT FACTOR.
1743 * II MMAX DECLARED LENGTH OF THE ARRAYS JA,A.
1744 * RU A(MMAX) NUMERICAL VALUES OF THE SPARSE HESSIAN APPROXIMATION
1745 * STORED AT THE POSITIONS 1, ...,NB.
1746 * IU JA(MMAX) INDICES OF THE NONZERO ELEMENTS OF THE HESSIAN MATRIX IN
1747 * THE PACKED ROW FORM AT THE FIRST NB POSITIONS.
1749 * IN THE PERMUTED FACTOR STORED IN A(NB+1), ..., A(2*NB),
1750 * INDICES OF COMPACT SCHEME IN A(2*NB+1), ..., A(2*NB+ML).
1751 * II PSL(N+1) POINTER VECTOR OF THE COMPACT FORM OF THE TRIANGULAR
1752 * FACTOR OF THE HESSIAN APPROXIMATION.
1753 * IO ITERM ERROR FLAG. IF ITERM < 0 - LACK OF SPACE IN JA.
1756 SUBROUTINE MXSPCT(N,NB,ML,MMAX,A,JA,PSL,ITERM)
1757 INTEGER N,NB,ML,MMAX,JA(*)
1758 INTEGER PSL(*),ITERM
1759 DOUBLE PRECISION A(*)
1762 * WN11 CONTAINS BEGINNINGS OF THE FACTOR ROWS
1768 IF (MMAX.LE.NB+PSL(N+1)+N-1) THEN
1772 IF (MMAX.LE.2*NB+ML) THEN
1776 DO 50 I=NB+1,NB+PSL(N+1)+N-1
1779 DO 100 I=NB+ML+1,2*NB+ML
1785 * SUBROUTINE MXSPTB ALL SYSTEMS 94/12/01
1787 * SOLUTION OF A SYSTEM OF LINEAR EQUATIONS WITH A SPARSE SYMMETRIC
1788 * POSITIVE DEFINITE MATRIX A+E USING INCOMPLETE ILUT-TYPE FACTORIZATION
1789 * A+E=L*D*TRANS(L) OBTAINED BY THE SUBROUTINE MXSPTF.
1792 * II N ORDER OF THE MATRIX A.
1793 * RI A(MMAX) INCOMPLETE FACTORIZATION A+E=L*D*TRANS(L) OBTAINED BY THE
1794 * SUBROUTINE MXSPTF.
1795 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
1796 * II JA(MMAX) INDICES OF THE NONZERO ELEMENTS OF A.
1797 * RU X(N) ON INPUT THE RIGHT HAND SIDE OF A SYSTEM OF LINEAR
1798 * EQUATIONS. ON OUTPUT THE SOLUTION OF A SYSTEM OF LINEAR
1800 * II JOB OPTION. IF JOB=0 THEN X:=(A+E)**(-1)*X. IF JOB>0 THEN
1801 * X:=L**(-1)*X. IF JOB<0 THEN X:=TRANS(L)**(-1)*X.
1806 SUBROUTINE MXSPTB(N,A,IA,JA,X,JOB)
1807 INTEGER N,IA(*),JA(*),JOB
1808 DOUBLE PRECISION A(*),X(*)
1810 DOUBLE PRECISION TEMP,SUM
1817 IF (K.LE.0) GO TO 300
1819 DO 200 J=IA(I)+1,IA(I+1)-1
1821 IF (K.GT.0) X(K)=X(K)-A(J)*TEMP
1823 IF (JOB.EQ.0) X(I)=TEMP
1832 IF (K.LE.0) GO TO 600
1835 DO 500 J=IA(I)+1,IA(I+1)-1
1837 IF (K.GT.0) SUM=SUM+A(J)*X(K)
1845 * SUBROUTINE MXSPTF ALL SYSTEMS 03/12/01
1847 * INCOMPLETE CHOLESKY FACTORIZATION A+E=L*D*TRANS(L) OF A SPARSE
1848 * SYMMETRIC POSITIVE DEFINITE MATRIX A+E WHERE D AND E ARE DIAGONAL
1849 * POSITIVE DEFINITE MATRICES AND L IS A LOWER TRIANGULAR MATRIX.
1850 * METHOD IS BASED ON THE SIMPLE IC(0) ALGORITHM WITHOUT DIAGONAL
1851 * COMPENSATION. SPARSE RIGHT-LOOKING IMPLEMENTATION.
1854 * II N ORDER OF THE MATRIX A.
1855 * RI A(M) SPARSE SYMMETRIC (USUALLY POSITIVE DEFINITE) MATRIX.
1856 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
1857 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
1858 * IA WN01(N+1) AMXILIARY ARRAY.
1859 * IO INF AN INFORMATION OBTAINED IN THE FACTORIZATION PROCESS. IF
1860 * INF=0 THEN A IS SUFFICIENTLY POSITIVE DEFINITE AND E=0. IF
1861 * INF<0 THEN A IS NOT SUFFICIENTLY POSITIVE DEFINITE AND E>0. IF
1862 * INF>0 THEN A IS INDEFINITE AND INF IS AN INDEX OF THE
1863 * MOST NEGATIVE DIAGONAL ELEMENT USED IN THE FACTORIZATION
1865 * RU ALF ON INPUT A DESIRED TOLERANCE FOR POSITIVE DEFINITENESS.
1866 * ON OUTPUT THE MOST NEGATIVE DIAGONAL ELEMENT USED IN THE
1867 * FACTORIZATION PROCESS (IF INF>0).
1868 * RO TAU MAXIMUM DIAGONAL ELEMENT OF THE MATRIX E.
1871 * P.E.GILL, W.MURRAY : NEWTON TYPE METHODS FOR UNCONSTRAINED AND
1872 * LINEARLY CONSTRAINED OPTIMIZATION, MATH. PROGRAMMING 28 (1974)
1875 SUBROUTINE MXSPTF(N,A,IA,JA,WN01,INF,ALF,TAU)
1876 INTEGER N,IA(*),JA(*),WN01(*),INF
1877 DOUBLE PRECISION A(*),ALF,TAU
1878 INTEGER I,J,K,L,II,LL,K1,L1,L2,JSTRT,JSTOP,IDIAG,KSTRT,KSTOP,NJA
1879 DOUBLE PRECISION PTOL,BET,GAM,TEMP,DEL,DIAG,NDIAG,INVDIAG
1883 * INITIALIZE AMXILIARY VECTOR
1886 CALL MXVINS(N,0,WN01)
1888 * GILL-MURRAY MODIFICATION
1896 IF (JA(IDIAG).LE.0) GO TO 2
1898 BET=MAX(BET,ABS(TEMP))
1899 DO 1 J=IA(I)+1,IA(I+1)-1
1900 IF (JA(J).LE.0) GO TO 1
1902 GAM=MAX(GAM,ABS(TEMP))
1905 BET=MAX(PTOL,BET,GAM/DBLE(N))
1908 * COMPUTE THE PRECONDITIONER
1914 IF (JA(KSTRT).LE.0) GO TO 8
1916 IF (ALF.GT.DIAG) THEN
1921 DO 3 J=KSTRT+1,KSTOP
1922 IF (JA(J).LE.0) GO TO 3
1924 GAM=MAX(GAM,ABS(TEMP))
1927 INVDIAG=MAX(ABS(DIAG),GAM/BET,DEL)
1928 IF (TAU.LT.INVDIAG-DIAG) THEN
1932 INVDIAG=1.0D 0/INVDIAG
1935 * RIGHT-LOOKING UPDATE
1942 IF (K1.GT.0) WN01(K1)=II
1947 DO 6 I=KSTRT+1,KSTOP
1955 IF (L1.LE.0) GO TO 5
1958 A(L)=A(L)-(A(L2)*INVDIAG)*NDIAG
1963 * CLEAR THE POINTERS
1967 IF (K1.GT.0) WN01(K1)=0
1970 IF (LL.GT.0.AND.ABS(ALF).GT.DEL) INF=LL
1973 * SUBROUTINE MXSRMD ALL SYSTEMS 92/12/01
1975 * MULTIPLICATION OF TRANSPOSE OF A DENSE RECTANGULAR MATRIX A BY
1976 * A VECTOR X AND ADDITION OF A SCALED VECTOR ALF*Y.
1979 * II N NUMBER OF ROWS OF THE MATRIX A.
1980 * II NA NUMBER OF COLUMNS OF THE MATRIX A.
1981 * II MA NUMBER OF ELEMENTS IN THE FIELD A.
1982 * RI A(MA) RECTANGULAR MATRIX STORED AS A TWO-DIMENSIONAL ARRAY.
1983 * II IA(NA+1) POSITION OF THE FIRST RORWS ELEMENTS IN THE FIELD A.
1984 * II JA(MA) COLUMN INDICES OF ELEMENTS IN THE FIELD A.
1985 * RI X(N) INPUT VECTOR.
1986 * RI ALF SCALING FACTOR.
1987 * RI Y(NA) INPUT VECTOR.
1988 * RO Z(NA) OUTPUT VECTOR EQUAL TO TRANS(A)*X+ALF*Y.
1990 SUBROUTINE MXSRMD(NA,A,IA,JA,X,ALF,Y,Z)
1991 INTEGER NA,IA(*),JA(*)
1992 DOUBLE PRECISION A(*),X(*),ALF,Y(*),Z(*)
1993 DOUBLE PRECISION TEMP
2001 IF (JP.GT.0) TEMP=TEMP+A(K)*X(JP)
2008 * SUBROUTINE MXSRMM ALL SYSTEMS 92/12/01
2010 * MULTIPLICATION OF TRANSPOSE OF A DENSE RECTANGULAR MATRIX A BY
2014 * II N NUMBER OF ROWS OF THE MATRIX A.
2015 * II NA NUMBER OF COLUMNS OF THE MATRIX A.
2016 * II MA NUMBER OF ELEMENTS IN THE FIELD A.
2017 * RI A(MA) RECTANGULAR MATRIX STORED AS A TWO-DIMENSIONAL ARRAY.
2018 * II IA(NA+1) POSITION OF THE FIRST RORWS ELEMENTS IN THE FIELD A.
2019 * II JA(MA) COLUMN INDICES OF ELEMENTS IN THE FIELD A.
2020 * RI X(N) INPUT VECTOR.
2021 * RO Y(M) OUTPUT VECTOR EQUAL TO TRANS(A)*X.
2023 SUBROUTINE MXSRMM(NA,A,IA,JA,X,Y)
2024 INTEGER NA,IA(*),JA(*)
2025 DOUBLE PRECISION A(*),X(*),Y(*)
2026 DOUBLE PRECISION TEMP
2034 IF (JP.GT.0) TEMP=TEMP+A(K)*X(JP)
2041 * SUBROUTINE MXSRSP ALL SYSTEMS 95/12/01
2042 * PURPOSE : CREATE ROW PERMUTATIONS FOR OBTAINING DIAGONAL NONZEROS.
2045 * II N NUMBER OF COLUMNS OF THE MATRIX.
2046 * II M NUMBER OF NONZEROS MEMBERS IN THE MATRIX.
2047 * II IA(M+1) ROW POINTERS OF THE SPARSE MATRIX.
2048 * II JA(M) COLUMN INDICES OF THE SPARSE MATRIX.
2049 * IO IP(N) PERMUTATION VECTOR.
2050 * II NR NUMBER OF STRUCTURALLY INDEPENDENT ROWS.
2051 * IA IW1(N) AMXILIARY VECTOR.
2052 * IA IW2(N) AMXILIARY VECTOR.
2053 * IA IW3(N) AMXILIARY VECTOR.
2054 * IA IW4(N) AMXILIARY VECTOR.
2056 SUBROUTINE MXSRSP(N,IA,JA,IP,NR,IW1,IW2,IW3,IW4)
2058 INTEGER IA(*),IP(*),IW1(*),IW2(*),IW3(*),IW4(*),JA(*)
2059 INTEGER I,I1,I2,II,J,J1,K,KK,L
2061 IW2(I) = IA(I+1) - IA(I) - 1
2068 * EACH PASS ROUND THIS LOOP EITHER RESULTS IN A NEW ASSIGNMENT
2069 * OR GIVES A ROW WITH NO ASSIGNMENT.
2076 * LOOK FOR A CHEAP ASSIGNMENT
2079 IF (I1.LT.0) GO TO 30
2084 IF (IP(I).EQ.0) GO TO 80
2087 * NO CHEAP ASSIGNMENT IN ROW.
2091 * BEGIN LOOKING FOR ASSIGNMENT CHAIN STARTING WITH ROW J.
2094 IW4(J) = IA(J+1) - IA(J) - 1
2096 * INNER LOOP. EXTENDS CHAIN BY ONE OR BACKTRACKS.
2100 IF (I1.LT.0) GO TO 50
2108 IF (IW3(I).EQ.L) GO TO 40
2110 * COLUMN I HAS NOT YET BEEN ACCESSED DURING THIS PASS.
2116 IW4(J1) = I2 - II - 1
2120 * BACKTRACKING STEP.
2124 IF (J.EQ.-1) GO TO 100
2128 * NEW ASSIGNMENT IS MADE.
2132 IW2(J) = I2 - II - 1
2136 IF (J.EQ.-1) GO TO 100
2137 II = IA(J+1) - IW4(J) - 2
2143 * IF MATRIX IS STRUCTURALLY SINGULAR, WE NOW COMPLETE THE
2152 IF (IP(I).NE.0) GO TO 120
2162 IF (IW2(I).NE.0) GO TO 140
2169 * SUBROUTINE MXSSDA ALL SYSTEMS 91/12/01
2171 * A SPARSE SYMMETRIC MATRIX A IS AUGMENTED BY THE SCALED UNIT MATRIX
2172 * SUCH THAT A:=A+ALF*I (I IS THE UNIT MATRIX OF ORDER N).
2175 * II N ORDER OF THE MATRIX A.
2176 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2178 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2179 * RI ALF SCALING FACTOR.
2181 SUBROUTINE MXSSDA(N,A,IA,ALF)
2183 DOUBLE PRECISION A(*), ALF
2186 A(IA(I))=A(IA(I))+ALF
2190 * FUNCTION MXSSDL ALL SYSTEMS 88/12/01
2192 * DETERMINATION OF A MINIMUM DIAGONAL ELEMENT OF A SPARSE SYMMETRIC
2196 * II N ORDER OF THE MATRIX A
2197 * RI A(MMAX) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2199 * II IA(N+1) POINTER VECTOR OF THE DIAGONAL OF THE SPARSE MATRIX.
2200 * II JA(MMAX) INDICES OF NONZERO ELEMENTS OF THE SPARSE MATRIX.
2201 * IO INF INDEX OF INIMUM DIAGONAL ELEMENT OF THE MATRIX A.
2202 * RR MXSSDL MINIMUM DIAGONAL ELEMENT OF THE MATRIX A.
2204 FUNCTION MXSSDL(N,A,IA,JA,INF)
2205 INTEGER N,IA(*),JA(*),INF
2206 DOUBLE PRECISION A(*),MXSSDL
2207 DOUBLE PRECISION CON
2208 PARAMETER (CON=1.0D 60)
2214 IF (JA(J).GT.0.AND.MXSSDL.GT.A(J)) THEN
2221 * SUBROUTINE MXSSMD ALL SYSTEMS 93/12/01
2223 * MULTIPLICATION OF A SPARSE SYMMETRIC MATRIX A BY A VECTOR X
2224 * AND ADDITION OF A SCALED VECTOR ALF*Y.
2227 * II N ORDER OF THE MATRIX A.
2228 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2230 * II IA(N) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2231 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2232 * RI X(N) INPUT VECTOR.
2233 * RI ALF SCALING FACTOR.
2234 * RI Y(NA) INPUT VECTOR.
2235 * RO Z(NA) OUTPUT VECTOR EQUAL TO A*X+ALF*Y.
2237 SUBROUTINE MXSSMD(N,A,IA,JA,X,ALF,Y,Z)
2238 INTEGER N,IA(*),JA(*)
2239 DOUBLE PRECISION A(*),X(*),ALF,Y(*),Z(*)
2240 INTEGER I,J,K,JSTRT,JSTOP
2248 IF (JA(JSTRT).GT.0) THEN
2249 DO 200 J=JSTRT,JSTOP
2251 IF (J.EQ.JSTRT) THEN
2253 ELSE IF (K.GT.0) THEN
2262 * SUBROUTINE MXSSMG ALL SYSTEMS 91/12/01
2264 * GERSHGORIN BOUNDS OF THE EIGENVALUAE OF A DENSE SYMMETRIC MATRIX.
2265 * AMIN .LE. ANY EIGENVALUE OF A .LE. AMAX.
2268 * II N DIMENSION OF THE MATRIX A.
2269 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2271 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2272 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2273 * RO AMIN LOWER BOUND OF THE EIGENVALUE OF A.
2274 * RO AMAX UPPER BOUND OF THE EIGENVALUE OF A.
2276 SUBROUTINE MXSSMG(N,A,IA,JA,AMIN,AMAX,X)
2277 INTEGER N,IA(*),JA(*)
2278 DOUBLE PRECISION A(*),AMIN,AMAX,X(*)
2279 INTEGER I,J,K,JSTRT,JSTOP
2280 DOUBLE PRECISION CMAX
2281 PARAMETER (CMAX=1.0D 60)
2289 IF (JA(JSTRT).GT.0) THEN
2290 DO 2 K=JSTRT+1,JSTOP
2304 AMAX=MAX(AMAX,A(K)+X(I))
2305 AMIN=MIN(AMIN,A(K)-X(I))
2310 * SUBROUTINE MXSSMI ALL SYSTEMS 92/12/01
2312 * SPARSE SYMMETRIC MATRIX A IS SET TO THE UNIT MATRIX WITH THE SAME
2316 * II N ORDER OF THE MATRIX A.
2317 * RU A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2319 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2320 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2322 SUBROUTINE MXSSMI(N,A,IA)
2324 DOUBLE PRECISION A(*)
2326 DO 100 I=1,IA(N+1)-1
2335 * SUBROUTINE MXSSMM ALL SYSTEMS 92/12/01
2337 * MULTIPLICATION OF A SPARSE SYMMETRIC MATRIX BY A VECTOR X.
2340 * II N ORDER OF THE MATRIX A.
2341 * II M NUMBER OF NONZERO ELEMENTS OF THE MATRIX A.
2342 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2344 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2345 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2346 * RI X(N) INPUT VECTOR.
2347 * RO Y(N) OUTPUT VECTOR WHERE Y := A * X.
2349 SUBROUTINE MXSSMM(N,A,IA,JA,X,Y)
2350 INTEGER N,IA(*),JA(*)
2351 DOUBLE PRECISION A(*),X(*),Y(*)
2352 INTEGER I,J,K,JSTRT,JSTOP
2360 IF (JA(JSTRT).GT.0) THEN
2361 DO 200 J=JSTRT,JSTOP
2363 IF (J.EQ.JSTRT) THEN
2365 ELSE IF (K.GT.0) THEN
2374 * SUBROUTINE MXSSMN ALL SYSTEMS 89/12/01
2376 * THIS SUBROUTINE FINDS THE PERMUTATION VECTOR PERM FOR THE
2377 * SPARSE SYMMETRIC MATRIX GIVEN IN THE VECTOR PAIR PA,SA.IT USES
2378 * THE SO-CALLED NESTED DISSECTION METHOD.
2381 * II N ORDER OF THE MATRIX A.
2382 * II MMAX LENGTH OF THE PRINCIPAL MATRIX VECTORS.
2383 * II PA(N+1) POINTER VECTOR OF THE INPUT MATRIX.
2384 * II SA(MMAX) VECTOR OF THE COLUMN INDICES OF THE INPUT MATRIX.
2385 * IO PERM(N) PERMUTATION VECTOR.
2386 * IA WN11(N+1) AMXILIARY VECTOR.
2387 * IA WN12(N+1) AMXILIARY VECTOR.
2388 * IA WN13(N+1) AMXILIARY VECTOR.
2391 * NESTED DISSECTION METHOD
2393 SUBROUTINE MXSSMN(N,PA,SA,PERM,WN11,WN12,WN13)
2395 INTEGER PA(*),SA(*),PERM(*)
2396 INTEGER WN11(*),WN12(*),WN13(*)
2397 INTEGER I,J,K,NUM,ROOT,NLVL,LVLEND,LBEGIN,ICS
2398 INTEGER NN,N1,MINDEG,N2,LVSIZE,NDEG,NUNLVL,MIDLVL
2399 INTEGER TEMP,NPUL,NSEP,I1,I2,I3,I4,J1,J2
2405 200 IF ( WN11(I) .EQ. 0 ) GO TO 2000
2412 300 LBEGIN = LVLEND + 1
2416 DO 500 K = LBEGIN, LVLEND
2418 DO 400 J=PA(NN),PA(NN+1)-1
2420 IF (N2.EQ.NN) GO TO 400
2421 IF (WN11(N2).EQ.0) GO TO 400
2428 IF (LVSIZE.GT.0) GO TO 300
2429 WN12(NLVL+1) = LVLEND + 1
2434 ICS = WN12(NLVL+1) - 1
2435 IF ( NLVL .EQ. 1 .OR. NLVL .EQ. ICS )GO TO 1470
2439 IF ( ICS .EQ. J1 ) GO TO 1000
2443 DO 800 K=PA(NN),PA(NN+1)-1
2445 IF (N1.EQ.NN) GO TO 800
2446 IF ( WN11(N1) .GT. 0 ) NDEG = NDEG + 1
2448 IF ( NDEG .GE. MINDEG ) GO TO 900
2458 1100 LBEGIN = LVLEND + 1
2461 WN12(NUNLVL) = LBEGIN
2462 DO 1300 K = LBEGIN, LVLEND
2464 DO 1200 J=PA(NN),PA(NN+1)-1
2466 IF (N2.EQ.NN) GO TO 1200
2467 IF (WN11(N2).EQ.0) GO TO 1200
2474 IF (LVSIZE.GT.0) GO TO 1100
2475 WN12(NUNLVL+1) = LVLEND + 1
2480 IF (NUNLVL .LE.NLVL) GO TO 1470
2482 IF (NLVL.LT.ICS) GO TO 700
2484 IF ( NLVL .GE. 3 ) GO TO 1600
2485 NSEP = WN12(NLVL+1) - 1
2492 1600 MIDLVL = (NLVL+2)/2
2494 I1 = WN12(MIDLVL + 1)
2496 I2 = WN12(MIDLVL+2) - 1
2505 J2 = IABS(PA(NN+1)) - 1
2508 IF (N2.EQ.NN) GO TO 1750
2509 IF ( PA(N2) .GT. 0 ) GO TO 1750
2522 IF ( NUM .GE. N ) GO TO 2100
2526 IF (N.LT.2) GO TO 2300
2536 * FUNCTION MXSSMQ ALL SYSTEMS 92/12/01
2538 * VALUE OF A QUADRATIC FORM WITH A SPARSE SYMMETRIC MATRIX A.
2541 * II N ORDER OF THE MATRIX A.
2542 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2544 * II IA(N+1) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2545 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2546 * RI X(N) INPUT VECTOR.
2547 * RI Y(N) INPUT VECTOR.
2548 * RR MXSSMQ VALUE OF THE QUADRATIC FORM MXSSMQ=TRANS(Y)*A*X.
2550 FUNCTION MXSSMQ(N,A,IA,JA,X,Y)
2551 INTEGER N,IA(*),JA(*)
2552 DOUBLE PRECISION A(*), X(*), Y(*), MXSSMQ
2553 DOUBLE PRECISION TEMP1,TEMP2
2554 INTEGER I,J,K,JSTRT,JSTOP
2560 IF (JA(JSTRT).GT.0) THEN
2562 DO 200 J=JSTRT,JSTOP
2564 IF (J.EQ.JSTRT) THEN
2565 TEMP2=TEMP2+A(J)*Y(I)
2566 ELSE IF (K.GT.0) THEN
2567 TEMP2=TEMP2+2*Y(K)*A(J)
2570 TEMP1=TEMP1+X(I)*TEMP2
2576 * SUBROUTINE MXSSMY ALL SYSTEMS 93/12/01
2578 * CORRECTION OF A SPARSE SYMMETRIC MATRIX A. THE CORRECTION IS DEFINED
2579 * AS A:=A+SUM OF (HALF*(X*TRANS(Y)+Y*TRANS(X)))(I)/SIGMA(I) WHERE
2580 * SIGMA(I) IS A DOT PRODUCT TRANS(X)*X WHERE ONLY CONTRIBUTIONS
2581 * CORRESPONDING TO NONZEROS IN ROW I ARE SUMMED UP, X AND Y ARE GIVEN
2585 * II N ORDER OF THE MATRIX A.
2586 * RI A(M) ELEMENTS OF THE SPARSE SYMMETRIC MATRIX STORED IN THE
2588 * II IA(N) POINTERS OF THE DIAGONAL ELEMENTS OF A.
2589 * II JA(M) INDICES OF THE NONZERO ELEMENTS OF A.
2590 * RA XS(N) AMXILIARY VECTOR - USED FOR SIGMA(I).
2591 * RI X(N) VECTOR IN THE CORRECTION TERM.
2592 * RI Y(N) VECTOR IN THE CORRECTION TERM.
2594 SUBROUTINE MXSSMY(N,A,IA,JA,XS,X,Y)
2595 INTEGER N,IA(*),JA(*)
2596 DOUBLE PRECISION A(*),X(*),Y(*),XS(*),SIGMA,TEMP
2597 INTEGER I,J,K,JSTRT,JSTOP
2598 CALL MXVSET(N,0.0D 0,XS)
2606 IF (JA(JSTRT).GT.0) THEN
2608 DO 100 J=JSTRT,JSTOP
2611 SIGMA=SIGMA+Y(K)*Y(K)
2612 IF (K.NE.I) XS(K)=XS(K)+Y(I)*Y(I)
2625 IF (JA(JSTRT).GT.0) THEN
2626 IF (XS(I).EQ.0.0D 0) THEN
2631 DO 300 J=JSTRT,JSTOP
2634 IF (XS(K).EQ.0.0D 0) THEN
2635 A(J)=A(J)+0.5D 0*TEMP*Y(K)
2637 A(J)=A(J)+0.5D 0*(TEMP*Y(K)+Y(I)*X(K)/XS(K))
2645 * SUBROUTINE MXSTG1 ALL SYSTEMS 89/12/01
2647 * WIDTHENING THE PACKED FORM OF THE VECTORS IA, JA OF THE SPARSE MATRIX
2650 * II N ORDER OF THE SPARSE MATRIX.
2651 * IU M NUMBER OF NONZERO ELEMENTS IN THE MATRIX.
2652 * II MMAX LENGTH OF THE ARRAY JA.
2653 * II IA(N+1) POINTER VECTOR OF THE INPUT MATRIX.
2654 * II JA(MMAX) VECTOR OF THE COLUMN INDICES OF THE INPUT MATRIX.
2655 * IA PD(N+1) AMXILIARY VECTOR.
2656 * IA WN11(N+1) AMXILIARY VECTOR.
2658 SUBROUTINE MXSTG1(N,M,IA,JA,PD,WN11)
2660 INTEGER IA(*),PD(*),JA(*),WN11(*)
2663 * UPPER TRIANGULAR INFORMATION TO THE AMXILIARY ARRAY
2672 * LOWER TRIANGULAR INFORMATION TO THE AMXILIARY ARRAY
2675 DO 200 J=IA(I)+1,IA(I+1)-1
2681 * BY PARTIAL SUMMING WE GET POINTERS OF THE WIDE STRUCTURE
2682 * WN11(I) POINTS AT THE END OF THE ROW I
2686 WN11(I)=WN11(I)+WN11(I-1)
2689 * DEFINE LENGTH OF THE WITHENED STRUCTURE
2693 * SHIFT OF UPPER TRIANGULAR ROWS
2699 DO 500 J=IA(I+1)-1,IA(I),-1
2705 * FORMING OF THE LOWER TRIANGULAR PART
2708 DO 700 J=WN11(I)+IA(I)+2-IA(I+1),WN11(I)
2719 * SUBROUTINE MXSTL1 ALL SYSTEMS 91/12/01
2721 * PACKING OF THE WIDTHENED FORM OF THE VECTORS IA, JA OF THE SPARSE
2725 * II N ORDER OF THE SPARSE MATRIX.
2726 * IU M NUMBER OF NONZERO ELEMENTS IN THE MATRIX.
2727 * II MMAX LENGTH OF THE ARRAY JA.
2728 * IU IA(N+1) POINTER VECTOR OF THE INPUT MATRIX.
2729 * IU JA(MMAX) VECTOR OF THE COLUMN INDICES OF THE INPUT MATRIX.
2730 * IA PD(N+1) AMXILIARY VECTOR.
2732 SUBROUTINE MXSTL1(N,M,IA,JA,PD)
2734 INTEGER IA(*),PD(*),JA(*)
2735 INTEGER I,J,L,JSTRT,JSTOP
2745 IF (ABS(JA(J)).EQ.I) THEN
2752 * REWRITE THE STRUCTURE
2755 DO 100 J=PD(I),IA(I+1)-1
2763 * SET THE LENGTH OF THE PACKED STRUCTURE
2768 * SUBROUTINE MXSTL2 ALL SYSTEMS 90/12/01
2770 * PACKING OF THE WIDTHENED FORM OF THE VECTORS A,IA,JA OF THE SPARSE
2774 * II N ORDER OF THE SPARSE MATRIX.
2775 * IU M NUMBER OF NONZERO ELEMENTS IN THE MATRIX.
2776 * II MMAX LENGTH OF THE ARRAY JA.
2777 * RU A(MMAX) VECTOR OF NUMERICAL VALUES OF THE MATRIX BEING SHRINKED.
2778 * IU IA(N+1) POINTER VECTOR OF THE INPUT MATRIX.
2779 * IU JA(MMAX) VECTOR OF THE COLUMN INDICES OF THE INPUT MATRIX.
2780 * IA PD(N+1) AMXILIARY VECTOR.
2782 SUBROUTINE MXSTL2(N,M,A,IA,JA,PD)
2784 INTEGER IA(*),PD(*),JA(*)
2785 DOUBLE PRECISION A(*)
2786 INTEGER I,J,L,JSTRT,JSTOP
2796 IF (ABS(JA(J)).EQ.I) THEN
2803 * REWRITE THE STRUCTURE
2806 DO 100 J=PD(I),IA(I+1)-1
2815 * SET THE LENGTH OF THE PACKED STRUCTURE
2820 * SUBROUTINE MXTPGB ALL SYSTEMS 93/12/01
2822 * BACK SUBSTITUTION FOR A DECOMPOSED TRIDIAGONAL MATRIX.
2825 * II N ORDER OF THE TRIDIAGONAL MATRIX T.
2826 * RI D(N) ELEMENTS OF THE DIAGONAL MATRIX D IN THE DECOMPOSITION
2828 * RI E(N) SUBDIAGONAL ELEMENTS OF THE LOWER TRIANGULAR MATRIX L IN
2829 * THE DECOMPOSITION T=L*D*TRANS(L).
2830 * RU X(N) ON INPUT THE RIGHT HAND SIDE OF A SYSTEM OF LINEAR
2831 * EQUATIONS. ON OUTPUT THE SOLUTION OF A SYSTEM OF LINEAR
2833 * II JOB OPTION. IF JOB=0 THEN X:=T**(-1)*X. IF JOB>0 THEN
2834 * X:=L**(-1)*X. IF JOB<0 THEN X:=TRANS(L)**(-1)*X.
2836 SUBROUTINE MXTPGB(N,D,E,X,JOB)
2838 DOUBLE PRECISION D(*),E(*),X(*)
2842 * PHASE 1 : X:=L**(-1)*X
2845 X(I)=X(I)-X(I-1)*E(I-1)
2850 * PHASE 2 : X:=D**(-1)*X
2858 * PHASE 3 : X:=TRANS(L)**(-1)*X
2861 X(I)=X(I)-X(I+1)*E(I)
2866 * SUBROUTINE MXTPGF ALL SYSTEMS 03/12/01
2868 * CHOLESKI DECOMPOSITION OF A TRIDIAGONAL MATRIX.
2871 * II N ORDER OF THE TRIDIAGONAL MATRIX T.
2872 * RU D(N) ON INPUT DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX T.
2873 * ON OUTPUT ELEMENTS OF THE DIAGONAL MATRIX D IN THE
2874 * DECOMPOSITION T=L*D*TRANS(L).
2875 * RU E(N) ON INPUT SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX T.
2876 * ON OUTPUT SUBDIAGONAL ELEMENTS OF THE LOWER TRIANGULAR MATRIX L
2877 * IN THE DECOMPOSITION T=L*D*TRANS(L).
2878 * IO INF AN INFORMATION OBTAINED IN THE FACTORIZATION PROCESS. IF
2879 * INF=0 THEN A IS SUFFICIENTLY POSITIVE DEFINITE AND E=0. IF
2880 * INF<0 THEN A IS NOT SUFFICIENTLY POSITIVE DEFINITE AND E>0. IF
2881 * INF>0 THEN A IS INDEFINITE AND INF IS AN INDEX OF THE
2882 * MOST NEGATIVE DIAGONAL ELEMENT USED IN THE FACTORIZATION
2884 * RU ALF ON INPUT A DESIRED TOLERANCE FOR POSITIVE DEFINITENESS. ON
2885 * OUTPUT THE MOST NEGATIVE DIAGONAL ELEMENT USED IN THE
2886 * FACTORIZATION PROCESS (IF INF>0).
2887 * RO TAU MAXIMUM DIAGONAL ELEMENT OF THE MATRIX E.
2889 SUBROUTINE MXTPGF(N,D,E,INF,ALF,TAU)
2891 DOUBLE PRECISION D(*),E(*),ALF,TAU
2892 DOUBLE PRECISION DI,EI,BET,GAM,DEL,TOL
2894 DOUBLE PRECISION ZERO,ONE,TWO
2895 PARAMETER (ZERO=0.0D 0,ONE=1.0D 0,TWO=2.0D 0)
2900 * ESTIMATION OF THE MATRIX NORM
2907 BET=MAX(BET,ABS(D(I+1)))
2908 GAM=MAX(GAM,ABS(E(I)))
2910 BET=MAX(TOL,TWO*BET,GAM/MAX(ONE,DBLE(N-1)))
2911 DEL=TOL*MAX(BET,ONE)
2919 IF (I.LT.N) GAM=E(I)**2
2920 DI=MAX(ABS(EI),GAM/BET,DEL)
2921 IF (TAU.LT.DI-EI) THEN
2926 * GAUSSIAN ELIMINATION
2932 D(I+1)=D(I+1)-E(I)*EI
2935 IF (L.GT.0.AND.ABS(ALF).GT.DEL) INF = L
2938 * SUBROUTINE MXUCOP ALL SYSTEMS 99/12/01
2940 * COPY OF THE VECTOR WITH INITIATION OF THE ACTIVE PART.
2943 * II N VECTOR DIMENSION.
2944 * RI X(N) INPUT VECTOR.
2945 * RO Y(N) OUTPUT VECTOR WHERE Y:= X.
2946 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
2947 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
2948 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
2951 SUBROUTINE MXUCOP(N,X,Y,IX,JOB)
2953 DOUBLE PRECISION X(*),Y(*)
2959 ELSE IF (JOB.GT.0) THEN
2961 IF (IX(I).GE. 0) THEN
2969 IF (IX(I).NE.-5) THEN
2978 * FUNCTION MXUDEL ALL SYSTEMS 99/12/01
2980 * SQUARED NORM OF A SHIFTED VECTOR IN A BOUND CONSTRAINED CASE.
2983 * II N VECTOR DIMENSION.
2984 * RI A SCALING FACTOR.
2985 * RI X(N) INPUT VECTOR.
2986 * RI Y(N) INPUT VECTOR.
2987 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
2988 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
2989 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
2991 * RR MXUDEL SQUARED NORM OF Y+A*X.
2993 FUNCTION MXUDEL(N,A,X,Y,IX,JOB)
2995 DOUBLE PRECISION A,X(N),Y(N),MXUDEL
2997 DOUBLE PRECISION TEMP
3001 TEMP=TEMP+(Y(I)+A*X(I))**2
3003 ELSE IF (JOB.GT.0) THEN
3005 IF (IX(I).GE. 0) TEMP=TEMP+(Y(I)+A*X(I))**2
3009 IF (IX(I).NE.-5) TEMP=TEMP+(Y(I)+A*X(I))**2
3015 * SUBROUTINE MXUDIF ALL SYSTEMS 99/12/01
3017 * VECTOR DIFFERENCE IN A BOUND CONSTRAINED CASE.
3020 * II N VECTOR DIMENSION.
3021 * RI X(N) INPUT VECTOR.
3022 * RI Y(N) INPUT VECTOR.
3023 * RO Z(N) OUTPUT VECTOR WHERE Z:= X - Y.
3024 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3025 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3026 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3029 SUBROUTINE MXUDIF(N,X,Y,Z,IX,JOB)
3031 DOUBLE PRECISION X(*),Y(*),Z(*)
3037 ELSE IF (JOB.GT.0) THEN
3039 IF (IX(I).GE. 0) Z(I)=X(I)-Y(I)
3043 IF (IX(I).NE.-5) Z(I)=X(I)-Y(I)
3048 * SUBROUTINE MXUDIR ALL SYSTEMS 99/12/01
3050 * VECTOR AUGMENTED BY THE SCALED VECTOR IN A BOUND CONSTRAINED CASE.
3053 * II N VECTOR DIMENSION.
3054 * RI A SCALING FACTOR.
3055 * RI X(N) INPUT VECTOR.
3056 * RI Y(N) INPUT VECTOR.
3057 * RO Z(N) OUTPUT VECTOR WHERE Z:= Y + A*X.
3058 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3059 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3060 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3063 SUBROUTINE MXUDIR(N,A,X,Y,Z,IX,JOB)
3065 DOUBLE PRECISION A, X(*), Y(*), Z(*)
3069 Z(I) = Y(I) + A*X(I)
3071 ELSE IF (JOB.GT.0) THEN
3073 IF (IX(I).GE. 0) Z(I) = Y(I) + A*X(I)
3077 IF (IX(I).NE.-5) Z(I) = Y(I) + A*X(I)
3082 * FUNCTION MXUDOT ALL SYSTEMS 99/12/01
3084 * DOT PRODUCT OF VECTORS IN A BOUND CONSTRAINED CASE.
3087 * II N VECTOR DIMENSION.
3088 * RI X(N) INPUT VECTOR.
3089 * RI Y(N) INPUT VECTOR.
3090 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3091 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3092 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3094 * RR MXUDOT VALUE OF DOT PRODUCT MXUDOT=TRANS(X)*Y.
3096 FUNCTION MXUDOT(N,X,Y,IX,JOB)
3098 DOUBLE PRECISION X(*),Y(*),MXUDOT
3099 DOUBLE PRECISION TEMP
3101 DOUBLE PRECISION ZERO
3102 PARAMETER (ZERO = 0.0D 0)
3108 ELSE IF (JOB.GT.0) THEN
3110 IF (IX(I).GE. 0) TEMP=TEMP+X(I)*Y(I)
3114 IF (IX(I).NE.-5) TEMP=TEMP+X(I)*Y(I)
3120 * SUBROUTINE MXUNEG ALL SYSTEMS 00/12/01
3122 * COPY OF THE VECTOR WITH INITIATION OF THE ACTIVE PART.
3125 * II N VECTOR DIMENSION.
3126 * RI X(N) INPUT VECTOR.
3127 * RO Y(N) OUTPUT VECTOR WHERE Y:= X.
3128 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3129 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3130 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3133 SUBROUTINE MXUNEG(N,X,Y,IX,JOB)
3135 DOUBLE PRECISION X(*),Y(*)
3141 ELSE IF (JOB.GT.0) THEN
3143 IF (IX(I).GE. 0) THEN
3151 IF (IX(I).NE.-5) THEN
3160 * FUNCTION MXUNOR ALL SYSTEMS 99/12/01
3162 * EUCLIDEAN NORM OF A VECTOR IN A BOUND CONSTRAINED CASE.
3165 * II N VECTOR DIMENSION.
3166 * RI X(N) INPUT VECTOR.
3167 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3168 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3169 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3171 * RR MXUNOR EUCLIDEAN NORM OF X.
3173 FUNCTION MXUNOR(N,X,IX,JOB)
3175 DOUBLE PRECISION X(*),MXUNOR
3176 DOUBLE PRECISION POM,DEN
3178 DOUBLE PRECISION ZERO
3179 PARAMETER (ZERO=0.0D 0)
3183 DEN=MAX(DEN,ABS(X(I)))
3185 ELSE IF (JOB.GT.0) THEN
3187 IF (IX(I).GE. 0) DEN=MAX(DEN,ABS(X(I)))
3191 IF (IX(I).NE.-5) DEN=MAX(DEN,ABS(X(I)))
3195 IF (DEN.GT.ZERO) THEN
3198 POM=POM+(X(I)/DEN)**2
3200 ELSE IF (JOB.GT.0) THEN
3202 IF (IX(I).GE. 0) POM=POM+(X(I)/DEN)**2
3206 IF (IX(I).NE.-5) POM=POM+(X(I)/DEN)**2
3210 MXUNOR=DEN*SQRT(POM)
3213 * SUBROUTINE MXUZER ALL SYSTEMS 99/12/01
3215 * VECTOR ELEMENTS CORRESPONDING TO ACTIVE BOUNDS ARE SET TO ZERO.
3218 * II N VECTOR DIMENSION.
3219 * RO X(N) OUTPUT VECTOR SUCH THAT X(I)=A FOR ALL I.
3220 * II IX(N) VECTOR CONTAINING TYPES OF BOUNDS.
3221 * II JOB OPTION. IF JOB.GT.0 THEN INDEX I IS NOT USED WHENEVER
3222 * IX(I).LE.-1. IF JOB.LT.0 THEN INDEX I IS NOT USED WHENEVER
3225 SUBROUTINE MXUZER(N,X,IX,JOB)
3227 DOUBLE PRECISION X(*)
3229 IF (JOB.EQ.0) RETURN
3231 IF (IX(I).LT.0) X(I)=0.0D 0
3235 * SUBROUTINE MXVCOP ALL SYSTEMS 88/12/01
3237 * COPYING OF A VECTOR.
3240 * II N VECTOR DIMENSION.
3241 * RI X(N) INPUT VECTOR.
3242 * RO Y(N) OUTPUT VECTOR WHERE Y:= X.
3244 SUBROUTINE MXVCOP(N,X,Y)
3246 DOUBLE PRECISION X(*),Y(*)
3253 * SUBROUTINE MXVCOR ALL SYSTEMS 93/12/01
3255 * CORRECTION OF A VECTOR.
3258 * II N VECTOR DIMENSION.
3259 * RI A CORRECTION FACTOR.
3260 * RU X(N) CORRECTED VECTOR. ZERO ELEMENTS OF X ARE SET TO BE EQUAL A.
3262 SUBROUTINE MXVCOR(N,A,X)
3264 DOUBLE PRECISION A,X(*)
3265 DOUBLE PRECISION ZERO
3266 PARAMETER (ZERO=0.0D 0)
3269 IF (X(I).EQ.ZERO) X(I)=A
3273 * SUBROUTINE MXVDIF ALL SYSTEMS 88/12/01
3275 * VECTOR DIFFERENCE.
3278 * RI X(N) INPUT VECTOR.
3279 * RI Y(N) INPUT VECTOR.
3280 * RO Z(N) OUTPUT VECTOR WHERE Z:= X - Y.
3282 SUBROUTINE MXVDIF(N,X,Y,Z)
3284 DOUBLE PRECISION X(*),Y(*),Z(*)
3291 * SUBROUTINE MXVDIR ALL SYSTEMS 91/12/01
3293 * VECTOR AUGMENTED BY THE SCALED VECTOR.
3296 * II N VECTOR DIMENSION.
3297 * RI A SCALING FACTOR.
3298 * RI X(N) INPUT VECTOR.
3299 * RI Y(N) INPUT VECTOR.
3300 * RO Z(N) OUTPUT VECTOR WHERE Z:= Y + A*X.
3302 SUBROUTINE MXVDIR(N,A,X,Y,Z)
3305 DOUBLE PRECISION X(*),Y(*),Z(*)
3308 Z(I) = Y(I) + A*X(I)
3312 * FUNCTION MXVDOT ALL SYSTEMS 91/12/01
3314 * DOT PRODUCT OF TWO VECTORS.
3317 * II N VECTOR DIMENSION.
3318 * RI X(N) INPUT VECTOR.
3319 * RI Y(N) INPUT VECTOR.
3320 * RR MXVDOT VALUE OF DOT PRODUCT MXVDOT=TRANS(X)*Y.
3322 FUNCTION MXVDOT(N,X,Y)
3324 DOUBLE PRECISION X(*),Y(*),MXVDOT
3325 DOUBLE PRECISION TEMP
3329 TEMP = TEMP + X(I)*Y(I)
3334 * SUBROUTINE MXVICP ALL SYSTEMS 93/12/01
3336 * COPYING OF AN INTEGER VECTOR.
3339 * II N DIMENSION OF THE INTEGER VECTOR.
3340 * II IX(N) INPUT INTEGER VECTOR.
3341 * IO IY(N) OUTPUT INTEGER VECTOR SUCH THAT IY(I):= IX(I) FOR ALL I.
3343 SUBROUTINE MXVICP(N,IX,IY)
3344 INTEGER N,IX(*),IY(*)
3351 * SUBROUTINE MXVINB ALL SYSTEMS 91/12/01
3353 * UPDATE OF AN INTEGER VECTOR.
3356 * II N DIMENSION OF THE INTEGER VECTOR.
3357 * II M DIMENSION OF THE CHANGED INTEGER VECTOR.
3358 * II IX(N) INTEGER VECTOR.
3359 * IU JA(M) INTEGER VECTOR WHICH IS UPDATED SO THAT JA(I)=-JA(I)
3360 * IF IX(JA(I)).LT.0.
3362 SUBROUTINE MXVINB(M,IX,JA)
3363 INTEGER M,IX(*),JA(*)
3367 IF (IX(JA(I)).LT.0) JA(I)=-JA(I)
3371 * SUBROUTINE MXVINE ALL SYSTEMS 94/12/01
3373 * ELEMENTS OF THE INTEGER VECTOR ARE REPLACED BY THEIR ABSOLUTE VALUES.
3376 * II N DIMENSION OF THE INTEGER VECTOR.
3377 * IU IX(N) INTEGER VECTOR WHICH IS UPDATED SO THAT IX(I):=ABS(IX(I))
3380 SUBROUTINE MXVINE(N,IX)
3388 * SUBROUTINE MXVINI ALL SYSTEMS 99/12/01
3390 * ELEMENTS CORRESPONDING TO FIXED VARIABLES ARE SET TO -5.
3393 * II N DIMENSION OF THE INTEGER VECTOR.
3394 * IU IX(N) INTEGER VECTOR WHICH IS UPDATED SO THAT IX(I):=ABS(IX(I))
3397 SUBROUTINE MXVINI(N,IX)
3401 IF (ABS(IX(I)).EQ.5) IX(I)=-5
3405 * SUBROUTINE MXVINP ALL SYSTEMS 91/12/01
3407 * INITIATION OF A INTEGER PERMUTATION VECTOR.
3410 * II N DIMENSION OF THE INTEGER VECTOR.
3411 * IO IP(N) INTEGER VECTOR SUCH THAT IP(I)=I FOR ALL I.
3413 SUBROUTINE MXVINP(N,IP)
3422 * SUBROUTINE MXVINS ALL SYSTEMS 90/12/01
3424 * INITIATION OF THE INTEGER VECTOR.
3427 * II N DIMENSION OF THE INTEGER VECTOR.
3428 * II IP INTEGER PARAMETER.
3429 * IO IX(N) INTEGER VECTOR SUCH THAT IX(I)=IP FOR ALL I.
3431 SUBROUTINE MXVINS(N,IP,IX)
3440 * SUBROUTINE MXVLIN ALL SYSTEMS 92/12/01
3442 * LINEAR COMBINATION OF TWO VECTORS.
3445 * II N VECTOR DIMENSION.
3446 * RI A SCALING FACTOR.
3447 * RI X(N) INPUT VECTOR.
3448 * RI B SCALING FACTOR.
3449 * RI Y(N) INPUT VECTOR.
3450 * RO Z(N) OUTPUT VECTOR WHERE Z:= A*X + B*Y.
3452 SUBROUTINE MXVLIN(N,A,X,B,Y,Z)
3454 DOUBLE PRECISION A, X(*), B, Y(*), Z(*)
3457 Z(I) = A*X(I) + B*Y(I)
3461 * FUNCTION MXVMAX ALL SYSTEMS 91/12/01
3463 * L-INFINITY NORM OF A VECTOR.
3466 * II N VECTOR DIMENSION.
3467 * RI X(N) INPUT VECTOR.
3468 * RR MXVMAX L-INFINITY NORM OF THE VECTOR X.
3470 FUNCTION MXVMAX(N,X)
3472 DOUBLE PRECISION X(*),MXVMAX
3474 DOUBLE PRECISION ZERO
3475 PARAMETER (ZERO=0.0D 0)
3478 MXVMAX=MAX(MXVMAX,ABS(X(I)))
3482 * FUNCTION MXVMX1 ALL SYSTEMS 91/12/01
3484 * L-INFINITY NORM OF A VECTOR WITH INDEX DETERMINATION.
3487 * II N VECTOR DIMENSION.
3488 * RI X(N) INPUT VECTOR.
3489 * IO K INDEX OF ELEMENT WITH MAXIMUM ABSOLUTE VALUE.
3490 * RR MXVMX1 L-INFINITY NORM OF THE VECTOR X.
3492 FUNCTION MXVMX1(N,X,K)
3494 DOUBLE PRECISION X(*),MXVMX1
3499 IF (ABS(X(I)).GT.MXVMX1) THEN
3506 * SUBROUTINE MXVMUL ALL SYSTEMS 89/12/01
3508 * VECTOR IS PREMULTIPLIED BY THE POWER OF A DIAGONAL MATRIX.
3511 * II N VECTOR DIMENSION.
3512 * RI D(N) DIAGONAL MATRIX STORED AS A VECTOR WITH N ELEMENTS.
3513 * RI X(N) INPUT VECTOR.
3514 * RO Y(N) OUTPUT VECTOR WHERE Y:=(D**K)*X.
3515 * II K INTEGER EXPONENT.
3517 SUBROUTINE MXVMUL(N,D,X,Y,K)
3519 DOUBLE PRECISION D(*),X(*),Y(*)
3523 ELSE IF (K.EQ.1) THEN
3527 ELSE IF (K.EQ.-1) THEN
3538 * SUBROUTINE MXVNEG ALL SYSTEMS 88/12/01
3540 * CHANGE THE SIGNS OF VECTOR ELEMENTS.
3543 * II N VECTOR DIMENSION.
3544 * RI X(N) INPUT VECTOR.
3545 * RO Y(N) OUTPUT VECTOR WHERE Y:= - X.
3547 SUBROUTINE MXVNEG(N,X,Y)
3549 DOUBLE PRECISION X(*),Y(*)
3556 * FUNCTION MXVNOR ALL SYSTEMS 91/12/01
3558 * EUCLIDEAN NORM OF A VECTOR.
3561 * II N VECTOR DIMENSION.
3562 * RI X(N) INPUT VECTOR.
3563 * RR MXVNOR EUCLIDEAN NORM OF X.
3565 FUNCTION MXVNOR(N,X)
3567 DOUBLE PRECISION X(*),MXVNOR
3568 DOUBLE PRECISION DEN,POM
3570 DOUBLE PRECISION ZERO
3571 PARAMETER (ZERO=0.0D0)
3574 DEN = MAX(DEN,ABS(X(I)))
3577 IF (DEN.GT.ZERO) THEN
3579 POM = POM + (X(I)/DEN)**2
3582 MXVNOR = DEN*SQRT(POM)
3585 * SUBROUTINE MXVSAB ALL SYSTEMS 91/12/01
3587 * L-1 NORM OF A VECTOR.
3590 * II N VECTOR DIMENSION.
3591 * RI X(N) INPUT VECTOR.
3592 * RR MXVSAB L-1 NORM OF THE VECTOR X.
3594 FUNCTION MXVSAB(N,X)
3596 DOUBLE PRECISION X(N),MXVSAB
3598 DOUBLE PRECISION ZERO
3599 PARAMETER (ZERO=0.0D 0)
3602 MXVSAB=MXVSAB+ABS(X(I))
3606 * SUBROUTINE MXVSAV ALL SYSTEMS 91/12/01
3607 * PORTABILITY : ALL SYSTEMS
3608 * 91/12/01 LU : ORIGINAL VERSION
3611 * DIFFERENCE OF TWO VECTORS RETURNED IN THE SUBSTRACTED ONE.
3614 * II N VECTOR DIMENSION.
3615 * RI X(N) INPUT VECTOR.
3616 * RU Y(N) UPDATE VECTOR WHERE Y:= X - Y.
3618 SUBROUTINE MXVSAV(N,X,Y)
3620 DOUBLE PRECISION X(*),Y(*)
3621 DOUBLE PRECISION TEMP
3630 * SUBROUTINE MXVSBP ALL SYSTEMS 91/12/01
3632 * VECTOR X(N) IS PERMUTED ACCORDING TO THE FORMULA
3636 * II N LENGTH OF VECTORS.
3637 * II PERM(N) INPUT PERMUTATION VECTOR.
3638 * RU X(N) VECTOR THAT IS TO BE PERMUTED.
3639 * RA RN01(N) AMXILIARY VECTOR.
3641 SUBROUTINE MXVSBP(N,PERM,X,RN01)
3643 DOUBLE PRECISION RN01(*),X(*)
3652 * SUBROUTINE MXVSCL ALL SYSTEMS 88/12/01
3654 * SCALING OF A VECTOR.
3657 * II N VECTOR DIMENSION.
3658 * RI X(N) INPUT VECTOR.
3659 * RI A SCALING FACTOR.
3660 * RO Y(N) OUTPUT VECTOR WHERE Y:= A*X.
3662 SUBROUTINE MXVSCL(N,A,X,Y)
3664 DOUBLE PRECISION A, X(*), Y(*)
3671 * SUBROUTINE MXVSET ALL SYSTEMS 88/12/01
3673 * A SCALAR IS SET TO ALL THE ELEMENTS OF A VECTOR.
3676 * II N VECTOR DIMENSION.
3677 * RI A INITIAL VALUE.
3678 * RO X(N) OUTPUT VECTOR SUCH THAT X(I)=A FOR ALL I.
3680 SUBROUTINE MXVSET(N,A,X)
3683 DOUBLE PRECISION X(*)
3690 * SUBROUTINE MXVSFP ALL SYSTEMS 91/12/01
3692 * VECTOR X(N) IS PERMUTED ACCORDING TO THE FORMULA
3696 * II N LENGTH OF VECTORS.
3697 * II PERM(N) INPUT PERMUTATION VECTOR.
3698 * RU X(N) VECTOR THAT IS TO BE PERMUTED.
3699 * RA RN01(N) AMXILIARY VECTOR.
3701 SUBROUTINE MXVSFP(N,PERM,X,RN01)
3703 DOUBLE PRECISION RN01(*),X(*)
3713 * SUBROUTINE MXVSIP ALL SYSTEMS 91/12/01
3715 * THE VECTOR OF THE INVERSE PERMUTATION IS COMPUTED.
3718 * II N LENGTH OF VECTORS.
3719 * II PERM(N) INPUT PERMUTATION VECTOR.
3720 * IO INVP(N) INVERSE PERMUTATION VECTOR.
3722 SUBROUTINE MXVSIP(N,PERM,INVP)
3723 INTEGER N,PERM(*),INVP(*)
3731 * SUBROUTINE MXVSR2 ALL SYSTEMS 92/12/01
3736 * II MCOLS NUMBER OF INTEGER VALUES OF THE SORTED ARRAY.
3737 * RI DEG(MCOLS) VALUES OF THE SORTED ARRAY.
3738 * RO ORD(MCOLS) SORTED OUTPUT.
3739 * RA RADIX(MCOLS+1) AUXILIARY ARRAY.
3740 * II WN01(MCOLS) INDICES OF THE SORTED ARRAY.
3741 * II LENGTH NUMBER OF SORTED PIECES.
3743 SUBROUTINE MXVSR2(MCOLS,DEG,ORD,RADIX,WN01,LENGTH)
3744 INTEGER MCOLS,WN01(*)
3745 DOUBLE PRECISION DEG(*),ORD(*),RADIX(*)
3746 INTEGER LENGTH,I,L,L1,L2
3748 * RADIX IS SHIFTED : 0-(MCOLS-1) --- 1-MCOLS
3756 RADIX(L+1)=RADIX(L+1)+1
3759 * RADIX COUNTS THE NUMBER OF VERTICES WITH DEG(I)>=L
3767 * ARRAY ORD IS FILLED
3778 * SUBROUTINE MXVSR5 ALL SYSTEMS 92/12/01
3783 * II K NUMBER OF INTEGER VALUES OF THE SORTED ARRAY.
3784 * II L CORRECTION FOR THE ABSOLUTE INDEX IN THE SORTED ARRAY
3785 * IU ARRAY(K) INTEGER SORTED ARRAY.
3786 * RO ARRAYC(K) REAL OUTPUT ARRAY.
3787 * RU ARRAYD(K) REAL ARRAY WHICH IS PERMUTED IN THE SAME WAY
3788 * AS THE INTEGER SORTED ARRAY.
3790 SUBROUTINE MXVSR5(K,L,ARRAY,ARRAYC,ARRAYD)
3793 DOUBLE PRECISION ARRAYC(*),ARRAYD(*)
3794 INTEGER IS,LA,LT,LS,LLS,I,J,JS,KHALF
3797 * NOTHING TO BE SORTED
3799 IF (K.LE.1) GO TO 400
3803 * L - CORRECTION FOR THE ABSOLUTE INDEX IN THE SORTED ARRAY
3808 IF (LS.GT.KHALF) THEN
3819 100 IF (LA.GE.ARRAY(J)) THEN
3822 ARRAYC(INT(LD))=JS+L
3826 ARRAYD(JS)=ARRAYD(J)
3827 ARRAYC(INT(ARRAYD(J)))=JS+L
3831 IF (J.GE.1) GO TO 100
3834 ARRAYC(INT(LD))=JS+L
3841 * SUBROUTINE MXVSR7 ALL SYSTEMS 94/12/01
3846 * II K LENGTH OF SORTED VECTOR.
3847 * IU ARRAY(K) SORTED ARRAY.
3848 * IU ARRAYB(K) SECOND SORTED ARRAY.
3850 SUBROUTINE MXVSR7(K,ARRAY,ARRAYB)
3852 INTEGER ARRAY(*),ARRAYB(*)
3853 INTEGER IS,LA,LB,LT,LS,LLS,I,J,JS,KHALF
3855 * NOTHING TO BE SORTED
3857 IF (K.LE.1) GO TO 400
3864 IF (LS.GT.KHALF) THEN
3875 100 IF (LA.GE.ARRAY(J)) THEN
3881 ARRAYB(JS)=ARRAYB(J)
3885 IF (J.GE.1) GO TO 100
3894 * SUBROUTINE MXVSRT ALL SYSTEMS 91/12/01
3899 * II K LENGTH OF SORTED VECTOR.
3900 * IU ARRAY(K) SORTED ARRAY.
3902 SUBROUTINE MXVSRT(K,ARRAY)
3905 INTEGER IS,LA,LT,LS,LLS,I,J,JS,KHALF
3907 * NOTHING TO BE SORTED
3909 IF (K.LE.1) GO TO 400
3916 IF (LS.GT.KHALF) THEN
3926 100 IF (LA.GE.ARRAY(J)) THEN
3934 IF (J.GE.1) GO TO 100
3942 * SUBROUTINE MXVSUM ALL SYSTEMS 88/12/01
3944 * SUM OF TWO VECTORS.
3947 * II N VECTOR DIMENSION.
3948 * RI X(N) INPUT VECTOR.
3949 * RI Y(N) INPUT VECTOR.
3950 * RO Z(N) OUTPUT VECTOR WHERE Z:= X + Y.
3952 SUBROUTINE MXVSUM(N,X,Y,Z)
3954 DOUBLE PRECISION X(*),Y(*),Z(*)
3961 * FUNCTION MXVVDP ALL SYSTEMS 92/12/01
3963 * COMPUTATION OF THE NUMBER MXVVDP=TRANS(X)*D**(-1)*Y WHERE D IS A
3964 * DIAGONAL MATRIX STORED AS A VECTOR.
3967 * II N VECTOR DIMENSION.
3968 * RI D(N) DIAGONAL MATRIX STORED AS A VECTOR.
3969 * RI X(N) INPUT VECTOR.
3970 * RI Y(N) INPUT VECTOR.
3971 * RR MXVVDP COMPUTED NUMBER MXVVDP=TRANS(X)*D**(-1)*Y.
3973 FUNCTION MXVVDP(N,D,X,Y)
3975 DOUBLE PRECISION D(*), X(*), Y(*), MXVVDP
3976 DOUBLE PRECISION TEMP
3978 DOUBLE PRECISION ZERO
3979 PARAMETER (ZERO = 0.0D 0)
3982 TEMP = TEMP + X(I)*Y(I)/D(I)
3987 * SUBROUTINE MXWDIR ALL SYSTEMS 92/12/01
3989 * VECTOR AUGMENTED BY THE SCALED VECTOR IN THE PACKED CASE.
3992 * II L PACKED VECTOR DIMENSION.
3993 * II N VECTOR DIMENSION.
3994 * II JBL(L) INDICES OF PACKED VECTOR.
3995 * RI A SCALING FACTOR.
3996 * RI X(L) PACKED INPUT VECTOR.
3997 * RI Y(N) UNPACKED INPUT VECTOR.
3998 * RO Z(N) UNPACKED OR PACKED OUTPUT VECTOR WHERE Z:= Y + A*X.
3999 * II JOB FORM OF THE VECTOR Z. JOB=1-UNPACKED FORM. JOB=2-PACKED
4002 SUBROUTINE MXWDIR(L,JBL,A,X,Y,Z,JOB)
4003 INTEGER L,JBL(*),JOB
4004 DOUBLE PRECISION A, X(*), Y(*), Z(*)
4009 IF (IP.GT.0) Z(IP)=Y(IP)+A*X(I)
4014 IF (IP.GT.0) Z(I)=Y(IP)+A*X(I)
4019 * FUNCTION MXWDOT ALL SYSTEMS 92/12/01
4021 * DOT PRODUCT OF TWO VECTORS IN THE PACKED CASE.
4024 * II L PACKED OR UNPACKED VECTOR DIMENSION.
4025 * II N UNPACKED VECTOR DIMENSION.
4026 * II JBL(L) INDICES OF PACKED VECTOR.
4027 * RI X(L) UNPACKED OR PACKED INPUT VECTOR.
4028 * RI Y(N) UNPACKED INPUT VECTOR.
4029 * II JOB FORM OF THE VECTOR X. JOB=1-UNPACKED FORM. JOB=2-PACKED
4031 * RR MXWDOT VALUE OF DOT PRODUCT MXWDOT=TRANS(X)*Y.
4033 FUNCTION MXWDOT(L,JBL,X,Y,JOB)
4034 INTEGER L,JBL(*),JOB
4035 DOUBLE PRECISION X(*), Y(*), MXWDOT
4036 DOUBLE PRECISION TEMP
4042 IF (IP.GT.0) TEMP=TEMP+X(IP)*Y(IP)
4047 IF (IP.GT.0) TEMP=TEMP+X(I)*Y(IP)