41 parameter(nicntl=10, ncntl=10)
61 & (m,n,ne,ip,irn,a,iperm,num,jperm,pr,q,l,d,rinf)
64 INTEGER(8),
INTENT(IN) :: NE
65 INTEGER :: IRN(NE),IPERM(M),JPERM(),Q(M),L(M)
66 INTEGER(8),
INTENT(IN) :: IP(N+1)
67 INTEGER(8),
INTENT(OUT) :: PR(N)
70 INTEGER :: I,II,J,,JORD,Q0,QLEN,IDUM,,ISP,JSP,
72 INTEGER(8) :: K,KK,KK1,KK2
73 REAL CSP,DI,DNEW,DQ0,AI,A0,BV,TBV,RLX
75 parameter(zero=0.0e0,minone=-1.0e0,one=1.0e0)
92 DO 20 k = ip(j),ip(j+1)-1_8
95 IF (ai.GT.d(i)) d(i) = ai
96 IF (jperm(j).NE.0)
GO TO 20
99 IF (iperm(i).NE.0)
GO TO 20
104 IF (ai.LE.a0)
GO TO 20
109 IF (a0.NE.minone .AND. a0.LT.bv)
THEN
111 IF (iperm(i0).NE.0)
GO TO 30
122 IF (num.EQ.n)
GO TO 1000
124 IF (jperm(j).NE.0)
GO TO 95
125 DO 50 k = ip(j),ip(j+1)-1_8
128 IF (ai.LT.bv)
GO TO 50
129 IF (iperm(i).EQ.0)
GO TO 90
133 IF (kk1.GT.kk2)
GO TO 50
136 IF (iperm(ii).NE.0)
GO TO 70
137 IF (abs(a(kk)).GE.bv)
GO TO 80
150 IF (num.EQ.n)
GO TO 1000
157 IF (jperm(jord).NE.0)
GO TO 100
164 DO 115 k = ip(j),ip(j+1)-1_8
167 IF (csp.GE.dnew)
GO TO 115
168 IF (iperm(i).EQ.0)
THEN
172 IF (csp.GE.tbv)
GO TO 160
175 IF (dnew.GE.tbv)
THEN
189 IF (qlen.EQ.0)
GO TO 160
191 IF (csp.GE.d(i))
GO TO 160
199 IF (qlen.EQ.0)
GO TO 153
201 IF (d(i).LT.tbv)
GO TO 153
209 DO 155 k = ip(j),ip(j+1)-1_8
211 IF (l(i).GE.up)
GO TO 155
212 dnew =
min(dq0,abs(a(k)))
213 IF (csp.GE.dnew)
GO TO 155
214 IF (iperm(i).EQ.0)
THEN
218 IF (csp.GE.tbv)
GO TO 160
221 IF (di.GE.tbv .OR. di.GE.dnew)
GO TO 155
223 IF (dnew.GE.tbv)
THEN
224 IF (di.NE.minone)
THEN
231 IF (di.EQ.minone)
THEN
242 160
IF (csp.EQ.minone)
GO TO 190
248 DO 170 jdum = 1,num+1
253 IF (j.EQ.-1)
GO TO 190
271 1000
IF (m.EQ.n .and. num.EQ.n)
GO TO 2000
280 INTEGER IDUM,K,POS,POSK,QK
284 IF (pos.LE.1)
GO TO 20
290 IF (di.LE.d(qk))
GO TO 20
294 IF (pos.LE.1)
GO TO 20
300 IF (di.GE.d(qk))
GO TO 20
304 IF (pos.LE.1)
GO TO 20
316 INTEGER I,IDUM,K,POS,POSK
326 IF (posk.GT.qlen)
GO TO 20
328 IF (posk.LT.qlen)
THEN
335 IF (di.GE.dk)
GO TO 20
343 IF (posk.GT.qlen)
GO TO 20
345 IF (posk.LT.qlen)
THEN
352 IF (di.LE.dk)
GO TO 20
367 INTEGER I,IDUM,K,POS,POSK,QK
370 IF (qlen.EQ.pos0)
THEN
379 IF (pos.LE.1)
GO TO 20
383 IF (di.LE.d(qk))
GO TO 20
387 IF (pos.LE.1)
GO TO 20
391 IF (pos.NE.pos0)
RETURN
394 IF (posk.GT.qlen)
GO TO 40
396 IF (posk.LT.qlen)
THEN
403 IF (di.GE.dk)
GO TO 40
410 IF (pos.LE.1)
GO TO 34
414 IF (di.GE.d(qk))
GO TO 34
418 IF (pos.LE.1)
GO TO 34
422 IF (pos.NE.pos0)
RETURN
425 IF (posk.GT.qlen)
GO TO 40
427 IF (posk.LT.qlen)
THEN
434 IF (di.LE.dk)
GO TO 40
448 INTEGER :: LENL(*),LENH(*),W(*)
458 DO 15 ii = ip(j)+int(lenl(j),8),ip(j)+int(lenh(j)-1,8)
465 IF (split(s).EQ.ha)
GO TO 15
466 IF (split(s).GT.ha)
THEN
472 21
DO 22 s = nval,pos,-1
473 split(s+1) = split(s)
478 IF (nval.EQ.xx)
GO TO 11
481 11
IF (nval.GT.0) val = split((nval+1)/2)
486 INTEGER,
INTENT(IN) :: N
487 INTEGER(8),
INTENT(IN) :: NE
488 INTEGER(8),
INTENT(IN) :: IP(N+1)
489 INTEGER,
INTENT(INOUT) :: IRN(NE)
490 REAL,
INTENT(INOUT) :: (NE)
493 INTEGER :: J, LEN, HI
494 INTEGER(8) :: , IPJ, TD, , LAST, MID, R, S
496 INTEGER(8) :: TODO(TDLEN)
498 len = int(ip(j+1) - ip(j))
499 IF (len.LE.1)
GO TO 100
501 IF (len.LT.thresh)
GO TO 400
503 todo(2) = ipj +int(len,8)
508 key = a((first+last)/2)
509 DO 475 k = first,last-1
511 IF (ha.EQ.key)
GO TO 475
512 IF (ha.GT.key)
GO TO 470
519 DO 450 k = first,last-1
520 IF (a(k).LE.key)
GO TO 450
529 IF (mid-first.GE.last-mid)
THEN
541 IF (td.EQ.0_8)
GO TO 400
542 IF (todo(td)-todo(td-1).GE.int(thresh,8))
GO TO 500
545 400
DO 200 r = ipj+1_8,ipj+int(len-1,8)
546 IF (a(r-1) .LT. a(r))
THEN
551 DO 300 s = r-1,ipj+1_8,-1_8
552 IF (a(s-1) .LT. ha)
THEN
569 & W,LEN,LENL,LENH,FC,IW,IW4,RLX,RINF)
571 INTEGER,
INTENT(IN) :: M,N
572 INTEGER(8),
INTENT(IN) :: NE
573 INTEGER,
INTENT(OUT) :: NUMX
574 INTEGER(8),
INTENT(IN) :: IP(N+1)
575 INTEGER :: IRN(NE),IPERM(N),
576 & w(n),len(n),lenl(n),lenh(n),fc(n),iw(m),iw4(3*n+m)
578 INTEGER :: NUM,NVAL,WLEN,I,J,L,CNT,MOD, IDUM
579 INTEGER(8) :: K, II, KDUM1,
580 REAL :: BVAL,BMIN,BMAX
584 len(j) = int(ip(j+1) - ip(j))
592 CALL smumps_mtransu(cnt,mod,m,n,irn,ne,ip,len,fc,iw,
594 & iw4(1),iw4(n+1),iw4(2*n+1),iw4(2*n+m+1))
602 DO 25 k = ip(j),ip(j+1)-1_8
603 IF (a(k).GT.bval) bval = a(k)
605 IF (bval.LT.bmax) bmax = bval
607 bmax = 1.001e0 * bmax
613 l = int(ip(j+1) - ip(j))
616 DO 45 k = ip(j),ip(j+1)-1_8
617 IF (a(k).LT.bmax)
GO TO 46
620 46 lenl(j) = int(k - ip(j))
621 IF (lenl(j).EQ.l)
GO TO 48
626 IF (num.EQ.numx)
THEN
632 IF (bmax-bmin .LE. rlx)
GO TO 1000
634 IF (nval.LE.1)
GO TO 1000
637 IF (k.GT.wlen)
GO TO 71
639 DO 55 ii = ip(j)+int(len(j)-1,8),
640 & ip(j)+int(lenl(j),8),-1_8
641 IF (a(ii).GE.bval)
GO TO 60
643 IF (iw(i).NE.j)
GO TO 55
649 len(j) = int(ii - ip(j) + 1)
650 IF (lenl(j).EQ.lenh(j))
THEN
657 71
IF (num.LT.numx)
GO TO 81
662 IF (bmax-bmin .LE. rlx)
GO TO 1000
664 IF (nval.EQ.0. or. bval.EQ.bmin)
GO TO 1000
667 IF (k.GT.wlen)
GO TO 88
669 DO 85 ii = ip(j)+int(len(j),8),ip(j)+int(lenh(j)-1,8)
670 IF (a(ii).LT.bval)
GO TO 86
673 len(j) = int(ii - ip(j))
674 IF (lenl(j).EQ.lenh(j))
THEN
684 CALL smumps_mtransu(cnt,mod,m,n,irn,ne,ip,len,fc,iw,
686 & iw4(1),iw4(n+1),iw4(2*n+1),iw4(2*n+m+1))
688 1000
IF (m.EQ.n .and. numx.EQ.n)
GO TO 2000
694 & (
id,mod,m,n,irn,lirn,ip,lenc,fc,iperm,num,numx,
697 INTEGER :: ID,MOD,,N,NUM,NUMX
698 INTEGER(8),
INTENT(IN) :: LIRN
699 INTEGER :: ARP(N),CV(M),IRN(LIRN),
700 & fc(n),iperm(m),lenc(n),out(n),pr(n)
701 INTEGER(8),
INTENT(IN) :: (N)
702 INTEGER I,J,J1,JORD,NFC,K,KK,
703 & num0,num1,num2,id0,id1,last
704 INTEGER(8) :: , IN2, II
726 DO 100 jord = num0+1,n
731 IF (arp(j).GE.lenc(j))
GO TO 30
732 in1 = ip(j) + int(arp(j),8)
733 in2 = ip(j) + int(lenc(j) - 1,8)
736 IF (iperm(i).EQ.0)
GO TO 80
739 30 out(j) = lenc(j) - 1
742 IF (in1.LT.0)
GO TO 50
743 in2 = ip(j) + int(lenc(j) - 1,8)
747 IF (cv(i).EQ.id1)
GO TO 40
752 out(j1) = int(in2 - ii) - 1
759 IF (nfc.GT.num2)
THEN
769 arp(j) = int(ii - ip(j)) + 1
773 IF (j.EQ.-1)
GO TO 95
774 ii = ip(j) + int(lenc(j) - out(j) - 2,8)
778 95
IF (num.EQ.num1)
THEN
784 101
DO 110 jord = last+1,n
786 fc(nfc) = fc(jord-num0)
792 & JPERM,L32,OUT,PR,Q,L,U,D,RINF)
795 INTEGER(8),
INTENT(IN) :: NE
796 INTEGER :: IRN(NE),IPERM(M),Q(M),L32(max(M,N))
797 INTEGER(8) :: IP(N+1), PR(N), L(M), JPERM(N), OUT(N)
798 REAL A(NE),U(M),D(M),RINF,RINF3
799 INTEGER :: I,I0,II,J,JJ,JORD,Q0,QLEN,JDUM,JSP,
801 INTEGER(8) :: K, KK, KK1, KK2, K0, K1, K2, ISP
802 REAL :: CSP,DI,DMIN,DNEW,DQ0,VJ,RLX
805 parameter(zero=0.0e0,one=1.0e0)
810 lord = (jperm(1).EQ.6)
823 IF (int(ip(j+1)-ip(j)) .GT. n/10 .AND. n.GT.50)
GO TO 30
824 DO 20 k = ip(j),ip(j+1)-1
826 IF (a(k).GT.u(i))
GO TO 20
835 IF (jperm(j).EQ.0_8)
THEN
839 ELSEIF (d(j).GT.u(i))
THEN
849 IF (num.EQ.n)
GO TO 1000
854 IF (jperm(j).NE.0)
GO TO 95
857 IF (k1.GT.k2)
GO TO 95
862 IF (di.GT.vj)
GO TO 50
863 IF (di.LT.vj .OR. di.EQ.rinf)
GO TO 55
864 IF (iperm(i).NE.0 .OR. iperm(i0).EQ.0)
GO TO 50
872 IF (iperm(i).EQ.0)
GO TO 90
875 IF (a(k)-u(i).GT.vj)
GO TO 60
879 IF (kk1.GT.kk2)
GO TO 60
882 IF (iperm(ii).GT.0)
GO TO 70
883 IF (a(kk)-u(ii).LE.d(jj))
GO TO 80
896 IF (num.EQ.n)
GO TO 1000
902 IF (jperm(jord).NE.0)
GO TO 100
910 DO 115 k = ip(j),ip(j+1)-1_8
913 IF (dnew.GE.csp)
GO TO 115
914 IF (iperm(i).EQ.0)
THEN
919 IF (dnew.LT.dmin) dmin = dnew
930 IF (csp.LE.d(i))
THEN
934 IF (d(i).LE.dmin)
THEN
949 IF (qlen.EQ.0)
GO TO 160
951 IF (d(i).LT.rinf) dmin = d(i)*(one+rlx)
952 IF (dmin.GE.csp)
GO TO 160
957 IF (qlen.EQ.0)
GO TO 153
959 IF (d(i).GT.dmin)
GO TO 153
964 IF (dq0.GE.csp)
GO TO 160
965 IF (dmin.GE.csp)
GO TO 160
968 vj = dq0 - a(jperm(j)) + u(q0)
971 IF (csp.NE.rinf)
THEN
973 IF (a(k1).GE.di)
THEN
975 IF (k0.GE.k1-6)
GO TO 178
983 IF (k0.GE.k1-6)
GO TO 178
985 178
DO 179 k = k0+1,k1
986 IF (a(k).LT.di)
GO TO 179
992 181
IF (k1.EQ.jperm(j)) k1 = k1 - 1
998 IF (q(i).GE.low)
GO TO 155
1000 IF (dnew.GE.di)
GO TO 155
1002 IF (dnew.GT.d(i))
GO TO 155
1003 IF (iperm(i).EQ.0)
THEN
1009 IF (dnew.GE.d(i))
GO TO 155
1011 IF (dnew.LE.dmin)
THEN
1031 160
IF (csp.EQ.rinf)
GO TO 190
1039 IF (jj.EQ.-1)
GO TO 180
1046 180
DO 182 jj = up,m
1048 u(i) = u(i) + d(i) - csp
1050 190
DO 191 jj = up,m
1055 DO 192 jj = low,up-1
1070 d(j) = a(k) - u(irn(k))
1076 IF (iperm(i).EQ.0) u(i) = zero
1078 IF (m.EQ.n .and. num.EQ.n)
GO TO 2000
1083 & (m,n,irn,lirn,ip,lenc,iperm,num,pr,arp,cv,out)
1086 INTEGER(8),
INTENT(IN) :: LIRN
1087 INTEGER :: ARP(N),CV(M),IRN(LIRN),IPERM(M),LENC(N)
1088INTEGER(8),
INTENT(IN) :: IP(N)
1090 INTEGER :: I,J,J1,JORD,K,KK
1091 INTEGER(8) :: II, IN1, IN2
1098 arp(j) = lenc(j) - 1
1106 IF (in1.LT.0_8)
GO TO 30
1107 in2 = ip(j) + int(lenc(j) - 1,8)
1111 IF (iperm(i).EQ.0)
GO TO 80
1115 out(j) = lenc(j) - 1
1118 IF (in1.LT.0_8)
GO TO 50
1119 in2 = ip(j) + int(lenc(j) - 1,8)
1123 IF (cv(i).EQ.jord)
GO TO 40
1128 out(j1) = int(in2 - ii - 1_8)
1133 IF (j.EQ.-1)
GO TO 1000
1138 arp(j) = int(in2 - ii - 1_8)
1142 IF (j.EQ.-1)
GO TO 1000
1143 ii = ip(j) + int(lenc(j) - out(j) - 2,8)
1148 IF (m.EQ.n .and. num.EQ.n)
GO TO 2000
1155 INTEGER RW(M),CW(N),IPERM(M)
1162 IF (iperm(i).EQ.0)
THEN
1172 IF (cw(j).NE.0)
GO TO 30
subroutine smumps_mtransq(ip, lenl, lenh, w, wlen, a, nval, val)
subroutine smumps_mtransd(i, n, q, d, l, iway)
subroutine smumps_mtransx(m, n, iperm, rw, cw)
subroutine smumps_mtranss(m, n, ne, ip, irn, a, iperm, numx, w, len, lenl, lenh, fc, iw, iw4, rlx, rinf)
subroutine smumps_mtransb(m, n, ne, ip, irn, a, iperm, num, jperm, pr, q, l, d, rinf)
subroutine smumps_mtransw(m, n, ne, ip, irn, a, iperm, num, jperm, l32, out, pr, q, l, u, d, rinf)
subroutine smumps_mtransi(icntl, cntl)
subroutine smumps_mtransr(n, ne, ip, irn, a)
subroutine smumps_mtransf(pos0, qlen, n, q, d, l, iway)
subroutine smumps_mtranse(qlen, n, q, d, l, iway)
subroutine smumps_mtransu(id, mod, m, n, irn, lirn, ip, lenc, fc, iperm, num, numx, pr, arp, cv, out)
subroutine smumps_mtransz(m, n, irn, lirn, ip, lenc, iperm, num, pr, arp, cv, out)