15 & N,PIV,FRERE,FILS,NFSIZ,IKEEP,
16 & NCST,KEEP,KEEP8, ROWSCA
20 INTEGER,
INTENT(IN) :: N
21 INTEGER,
INTENT(OUT) :: NCST
22 INTEGER :: PIV(N),FRERE(N),FILS(N),NFSIZ(N),IKEEP(N)
24 INTEGER(8) :: KEEP8(150)
26 INTEGER I,P11,P1,P2,K1,K2,NLOCKED
36 v1 = (k1+2*exponent(rowsca(p1)) .GE. -3)
42 v2 = (k2+exponent(rowsca(p2)**2) .GE. -3)
71 keep(94) = keep(94) + keep(93) - nlocked
75 piv(nlocked) = frere(i)
80 DO i=(keep(93)/2)+1,(keep(93)/2)+ncst,2
84 DO i=(keep(93)/2)+ncst+1,(keep(93)/2)+keep(94)
123 & N,NZ, IRN, ICN, PIV,
124 & NCMP, IW, LW, IPE, LEN, IQ,
126 & IERROR, KEEP,KEEP8, ICNTL,INPLACE64_GRAPH_COPY)
128 INTEGER,
intent(in) :: N
129 INTEGER(8),
intent(in) :: NZ, LW
130 INTEGER,
intent(in) :: IRN(NZ), ICN(NZ), PIV(N)
131 INTEGER,
intent(in) :: ICNTL(60)
132 INTEGER,
intent(in) :: KEEP(500)
133 INTEGER(8),
intent(in) :: KEEP8(150)
134 INTEGER,
intent(out) :: NCMP, IERROR
135 INTEGER(8),
intent(out) :: IWFR, IPE(N+1)
136 INTEGER,
intent(out) :: IW(LW)
137 INTEGER,
intent(out) :: LEN(N)
138 INTEGER(8),
intent(out) :: IQ(N)
139 INTEGER,
intent(out) :: FLAG(N), ICMP(N)
140 LOGICAL,
intent(inout) :: INPLACE64_GRAPH_COPY
141 INTEGER :: MP, N11, N22
142 INTEGER :: I, J, N1, K
143 INTEGER(8) :: NDUP, L, K8, K1, K2, LAST
174 IF ((i.GT.n).OR.(j.GT.n).OR.(i.LT.1)
180 IF ((i.NE.0).AND.(j.NE.0).AND.(i.NE.j))
THEN
181 ipe(i) = ipe(i) + 1_8
182 ipe(j) = ipe(j) + 1_8
190 iq(i+1) = ipe(i) + iq(i)
193 last =
max(ipe(ncmp)+iq(ncmp)-1_8,iq(ncmp))
203 IF ((i.GT.n).OR.(j.GT.n).OR.(i.LT.1)
204 & .OR.(j.LT.1)) cycle
209 IF ((i.GE.1).AND.(j.LE.n))
THEN
214 IF ((j.GE.1).AND.(i.LE.n))
THEN
230 IF (j.LE.0)
GO TO 250
233 IF (flag(j).EQ.i)
THEN
243 250 len(i) = int(iq(i) - ipe(i))
246 IF (ndup.NE.0_8)
THEN
250 IF (len(i).EQ.0)
THEN
258 IF (iw(k8).NE.0)
THEN
263 len(i) = int(iwfr - l)
266 ipe(ncmp+1) = ipe(ncmp) + int(len(ncmp),8)
268 inplace64_graph_copy = (lw.GE.2*(iwfr-1_8))
272 & N, NE, IP, IRN, SCALING,LSC,CPERM, DIAG,
273 & ICNTL, WEIGHT,MARKED,FLAG,
276 INTEGER,
INTENT(IN) :: N
277 INTEGER(8),
INTENT(IN) :: NE
278 INTEGER :: ICNTL(10), INFO(10),LSC
279 INTEGER :: CPERM(N),PIV_OUT(N), IRN(NE), DIAG(N)
280 INTEGER(8),
INTENT(IN) :: IP(N+1)
281 REAL :: SCALING(LSC),WEIGHT(N+2)
282 INTEGER :: MARKED(N),FLAG(N)
283 INTEGER :: NUM1,NUM2,NUMTOT,PATH_LENGTH,NLAST
284 INTEGER :: I,BEST_BEG, CUR_EL,CUR_EL_PATH,CUR_EL_PATH_NEXT
285 INTEGER :: L1,L2,TUP,T22
286 INTEGER(8) :: PTR_SET1,PTR_SET2
287 REAL :: BEST_SCORE,CUR_VAL,TMP,VAL
288 REAL INITSCORE, CMUMPS_UPDATESCORE,
290 LOGICAL VRAI,FAUX,MAX_CARD_DIAG,USE_SCALING
293 parameter(sum = 1, vrai = .true., faux = .false.)
294 parameter(zero = 0.0e0, one = 1.0e0)
295 max_card_diag = .true.
310 IF(tup .EQ. sum)
THEN
315 IF(icntl(2) .GT. 2 .OR. icntl(2) .LE. 0)
THEN
317 &
'ERROR: WRONG VALUE FOR ICNTL(2) = ',icntl(2)
322 IF(icntl(1) .LT. 0 .OR. icntl(1) .GT. 2)
THEN
324 &
'ERROR: WRONG VALUE FOR ICNTL(1) = ',icntl(1)
329 IF(marked(cur_el) .LE. 0)
THEN
332 IF(cperm(cur_el) .LT. 0)
THEN
337 cur_el_path = cperm(cur_el)
338 IF(cur_el_path .EQ. cur_el)
THEN
343 weight(1) = initscore
344 weight(2) = initscore
345 l1 = int(ip(cur_el+1)-ip(cur_el))
346 l2 = int(ip(cur_el_path+1)-ip(cur_el_path))
347 ptr_set1 = ip(cur_el)
348 ptr_set2 = ip(cur_el_path)
350 val = -scaling(cur_el_path) - scaling(cur_el+n)
353 & cur_el,cur_el_path,
354 & irn(ptr_set1),irn(ptr_set2),
356 & val,diag,n,flag,faux,t22)
357 weight(path_length+1) =
358 & cmumps_updatescore(weight(1),cur_val,tup)
360 IF(cur_el_path .EQ. cur_el)
EXIT
361 path_length = path_length+1
362 marked(cur_el_path) = 0
363 cur_el_path_next = cperm(cur_el_path)
364 l1 = int(ip(cur_el_path+1)-ip(cur_el_path))
365 l2 = int(ip(cur_el_path_next+1)-ip(cur_el_path_next))
366 ptr_set1 = ip(cur_el_path)
367 ptr_set2 = ip(cur_el_path_next)
369 val = -scaling(cur_el_path_next)
370 & - scaling(cur_el_path+n)
373 & cur_el_path,cur_el_path_next,
374 & irn(ptr_set1),irn(ptr_set2),
376 & val,diag,n,flag,vrai,t22)
377 weight(path_length+1) =
378 & cmumps_updatescore(weight(path_length-1),cur_val,tup)
379 cur_el_path = cur_el_path_next
381 IF(mod(path_length,2) .EQ. 1)
THEN
382 IF(weight(path_length+1) .GE. weight(path_length))
THEN
383 cur_el_path = cperm(cur_el)
387 DO i=1,(path_length-1)/2
389 piv_out(num2) = cur_el_path
390 cur_el_path = cperm(cur_el_path)
392 piv_out(num2) = cur_el_path
393 cur_el_path = cperm(cur_el_path)
395 numtot = numtot + path_length - 1
397 IF(max_card_diag)
THEN
398 cur_el_path = cperm(cur_el)
399 IF(diag(cur_el) .NE. 0)
THEN
400 best_beg = cur_el_path
403 DO i=1,(path_length/2)
404 cur_el_path_next = cperm(cur_el_path)
405 IF(diag(cur_el_path) .NE. 0)
THEN
406 best_beg = cur_el_path_next
412 best_score = weight(path_length-1)
413 cur_el_path = cperm(cur_el)
414 DO i=1,(path_length/2)-1
415 tmp = cmumps_updatescore(weight(path_length),
418 IF(tmp .GT. best_score)
THEN
420 best_beg = cur_el_path
422 cur_el_path = cperm(cur_el_path)
423 tmp = cmumps_updatescore(weight(path_length+1),
426 IF(tmp .GT. best_score)
THEN
428 best_beg = cur_el_path
430 cur_el_path = cperm(cur_el_path)
432 1000 cur_el_path = best_beg
433 DO i=1,(path_length/2)-1
435 piv_out(num2) = cur_el_path
436 cur_el_path = cperm(cur_el_path)
438 piv_out(num2) = cur_el_path
439 cur_el_path = cperm(cur_el_path)
441 numtot = numtot + path_length - 2
442 marked(cur_el_path) = -1
446 IF(marked(i) .LT. 0)
THEN
447 IF(diag(i) .EQ. 0)
THEN
452 piv_out(num2+num1) = i
556 & (na, n, nz, irn, icn, iw, lw, ipe, len,
558 & nrorm, niorm, iflag,ierror, icntl,
559 & symmetry, sym, nbqd, avgdens,
561 & listvar_schur, size_schur, atoao, aotoa,
562 & inplace64_graph_copy
565 INTEGER,
intent(in) :: NA
566 INTEGER,
intent(in) :: , SYM
567 INTEGER(8),
intent(in) :: NZ, LW
568 INTEGER,
intent(in) :: ICNTL(60)
569 INTEGER,
intent(in) :: IRN(NZ), ICN(NZ)
570 INTEGER,
INTENT(IN) :: SIZE_SCHUR, LISTVAR_SCHUR(SIZE_SCHUR)
571 INTEGER,
intent(out) :: IERROR, symmetry
572 INTEGER,
intent(out) :: NBQD, AvgDens
573 INTEGER,
intent(out) :: LEN(N), IW(LW)
574 INTEGER(8),
intent(out):: IWFR
575 INTEGER(8),
intent(out):: NRORM, NIORM
576 INTEGER(8),
intent(out):: IPE(N+1)
577 INTEGER,
INTENT(OUT) :: AOTOA(N)
578 INTEGER,
INTENT(OUT) :: ATOAO(NA)
579 INTEGER,
intent(inout) :: IFLAG, KEEP264
580INTEGER,
intent(in) :: KEEP265
581 INTEGER(8),
intent(out):: IQ(N)
582 INTEGER,
intent(out) :: FLAG()
583 LOGICAL,
intent(inout) :: INPLACE64_GRAPH_COPY
584 INTEGER :: MP, MPG, I, J, N1
585 INTEGER :: NBERR, THRESH, IAO
586 INTEGER(8) :: K8, K1, K2, LAST, NDUP
587 INTEGER(8) :: NZOFFA, NDIAGA, L, N8
594 atoao(listvar_schur(i)) = -1
598 IF (atoao(i).LT.0) cycle
610 IF (keep264.EQ.0)
THEN
611 IF ((sym.EQ.0).AND.(keep265.EQ.-1))
THEN
615 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
621 IF ((i.LT.0).OR.(j.LT.0)) cycle
623 ipe(i) = ipe(i) + 1_8
624 nzoffa = nzoffa + 1_8
626 ndiaga = ndiaga + 1_8
634 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
640 IF ((i.LT.0).OR.(j.LT.0)) cycle
642 ipe(i) = ipe(i) + 1_8
643 ipe(j) = ipe(j) + 1_8
644 nzoffa = nzoffa + 1_8
646 ndiaga = ndiaga + 1_8
651 IF (ierror.GE.1)
THEN
657 IF ((sym.EQ.0).AND.(keep265.EQ.-1))
THEN
663 IF ((i.LT.0).OR.(j.LT.0)) cycle
665 ndiaga = ndiaga + 1_8
667 ipe(i) = ipe(i) + 1_8
668 nzoffa = nzoffa + 1_8
677 IF ((i.LT.0).OR.(j.LT.0)) cycle
679 ipe(i) = ipe(i) + 1_8
680 ipe(j) = ipe(j) + 1_8
681 nzoffa = nzoffa + 1_8
683 ndiaga = ndiaga + 1_8
688 niorm = nzoffa + 3_8*n8
689 IF (ierror.GE.1)
THEN
691 IF (mod(iflag,2) .EQ. 0) iflag = iflag+1
692 IF ((mp.GT.0).AND.(icntl(4).GE.2))
THEN
697 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
700 IF (nberr.LE.10)
THEN
701 IF (mod(k8,10_8).GT.3_8 .OR. mod(k8,10_8).EQ.0_8 .OR.
702 & (10_8.LE.k8 .AND. k8.LE.20_8))
THEN
703 WRITE (mp,
'(I16,A,I10,A,I10,A)')
704 & k8,
'th entry (in row',i,
' and column'') ignored'
706 IF (mod(k8,10_8).EQ.1_8)
707 &
WRITE(mp,
'(I16,A,I10,A,I10,A)')
708 & k8,
'st entry (in row',i,
' and column',j,
') ignored'
709 IF (mod(k8,10_8).EQ.2_8)
710 &
WRITE(mp,
'(I16,A,I10,A,I10,A)')
711 & k8,
'nd entry (in row',i,
' and column',j,
') ignored'
712 IF (mod(k8,10_8).EQ.3_8)
713 &
WRITE(mp,
'(I16,A,I10,A,I10,A)')
714 & k8,
'rd entry (in row',i,
' and column',j,
') ignored'
723 100 nrorm = niorm - 2_8*n8
728 iq(i+1) = ipe(i) + iq(i)
731 last =
max(ipe(n)+iq(n)-1,iq(n))
736 IF (keep264 .EQ. 0)
THEN
737 IF ((sym.EQ.0).AND.(keep265.EQ.-1))
THEN
741 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
742 & .OR.(j.LT.1)) cycle
745 IF ((i.LT.0).OR.(j.LT.0)) cycle
747 IF ((j.GE.1).AND.(i.LE.n))
THEN
753 ELSE IF (keep265.EQ.1)
THEN
757 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
758 & .OR.(j.LT.1)) cycle
761 IF ((i.LT.0).OR.(j.LT.0)) cycle
763 IF ((j.GE.1).AND.(i.LE.n))
THEN
775 IF ((i.GT.na).OR.(j.GT.na).OR.(i.LT.1)
776 & .OR.(j.LT.1)) cycle
779 IF ((i.LT.0).OR.(j.LT.0)) cycle
782 IF ((i.GE.1).AND.(j.LE.n))
THEN
787 IF ((j.GE.1).AND.(i.LE.n))
THEN
796 IF ((sym.EQ.0).AND.(keep265.EQ.-1))
THEN
802 IF ((i.LT.0).OR.(j.LT.0)) cycle
808 ELSE IF (keep265.EQ.1)
THEN
814 IF ((i.LT.0).OR.(j.LT.0)) cycle
828 IF ((i.LT.0).OR.(j.LT.0)) cycle
841 IF (keep265.EQ.0)
THEN
852 IF (flag(j).EQ.i)
THEN
863 len(i) = int(iq(i) - ipe(i))
866 IF (ndup.NE.0_8)
THEN
869 IF (len(i).EQ.0)
THEN
878 IF (iw(k8).NE.0)
THEN
883 len(i) = int(iwfr - l)
886 ipe(n+1) = ipe(n) + int(len(n),8)
891 len(i) = int(iq(i) - ipe(i))
894 ipe(i+1) = ipe(i) + int(len(i),8)
900 rsym = real(ndiaga+2_8*nzoffa - (iwfr-1_8))/
901 & real(nzoffa+ndiaga)
902 IF ((keep265.EQ.0) .AND. (nzoffa - (iwfr-1_8)).EQ.0_8)
THEN
904 symmetry = nint(100.0e0*rsym)
905 IF ((mpg .GT. 0).AND.(icntl(4).GE.2) )
906 &
write(mpg,
'(A,A,I5)')
908 &
' structural symmetry (in percent) of interior block=',
910 IF (mp.GT.0 .AND. mpg.NE.mp.AND. (icntl(4).GE.2) )
911 &
write(mp,
'(A,A,I5)')
913 &
' structural symmetry (in percent) of interior block=',
918 inplace64_graph_copy = (lw.GE.2*(iwfr-1))
919 avgdens = nint(real(iwfr-1_8)/real(n))
920 thresh = avgdens*50 - avgdens/10 + 1
925 IF (j.GT.thresh) nbqd = nbqd+1
928 IF (mpg .GT. 0.AND.(icntl(4).GE.2))
929 &
write(mpg,
'(A,1I5)')
930 &
' Average density of rows/columns =', avgdens
931 IF (mp.GT.0 .AND. mpg.NE.mp.AND.(icntl(4).GE.2))
932 &
write(mpg,
'(A,1I5)')
933 &
' Average density of rows/columns =', avgdens
93599999
FORMAT (/
'*** Warning message from analysis routine ***')
subroutine cmumps_gnew_schur(na, n, nz, irn, icn, iw, lw, ipe, len, iq, flag, iwfr, nrorm, niorm, iflag, ierror, icntl, symmetry, sym, nbqd, avgdens, keep264, keep265, listvar_schur, size_schur, atoao, aotoa, inplace64_graph_copy)