15 & NA,LNA,NE,ND, DAD, LDAD, USE_DAD,
16 & NSTEPS,PERM,SYM,INFO,LP,K215,K234,K55,K199,
17 & PROCNODE,SLAVEF, PEAK,SBTR_WHICH_M
20 INTEGER N,PERM,SYM, NSTEPS, LNA, LP,LDAD
21 INTEGER FRERE(NSTEPS), FILS(N), STEP(N)
22 INTEGER NA(LNA), NE(NSTEPS), ND(NSTEPS)
23 INTEGER K215,K234,K55,K199
27 INTEGER SLAVEF,PROCNODE(NSTEPS)
28 INTEGER :: SBTR_WHICH_M
30 INTEGER MUMPS_PROCNODE
32 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE :: COST_TRAV
33 INTEGER,
DIMENSION (:),
ALLOCATABLE :: DEPTH
34 INTEGER IFATH,IN,NSTK,INODE,I,allocok,LOCAL_PERM
38 INTEGER LEAF,NBLEAF,NBROOT, SIZE_TAB
39 INTEGER,
DIMENSION (:),
ALLOCATABLE :: IPOOL,TNSTK
40 INTEGER,
DIMENSION (:),
ALLOCATABLE,
TARGET :: SON,TEMP
41 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: M,M_TOTAL, fact
42 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: TAB1,TAB2
43 INTEGER,
DIMENSION (:),
POINTER :: TAB
46 INTEGER CB_current,CB_MAX,ROOT_OF_CUR_SBTR
47 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: T1,T2
48 INTEGER,
DIMENSION (:),
ALLOCATABLE :: RESULT
49 INTEGER(8) MEM_SIZE,FACT_SIZE,SUM,MEM_SEC_PERM,FACT_SIZE_T,
50 & mem_size_t,total_mem_size,tmp_total_mem_size,tmp_sum,
51 & sizecb, sizecb_lastson
54 INTEGER FIRST_LEAF,SIZE_SBTR
55 EXTERNAL MUMPS_IN_OR_ROOT_SSARBR,MUMPS_INSSARBR
56 LOGICAL ,MUMPS_INSSARBR
57 DOUBLE PRECISION COST_NODE
58 include
'mumps_headers.h'
61 IF((perm.EQ.0).OR.(perm.EQ.1).OR.
62 & (perm.EQ.2).OR.(perm.EQ.3).OR.(perm.EQ.4).OR.
63 & (perm.EQ.5).OR.(perm.EQ.6))
THEN
69 IF ((perm.LT.0 .OR. perm.GT.7))
THEN
70 WRITE(*,*)
"Internal Error in ZMUMPS_REORDER_TREE",perm
75 IF((perm.EQ.0).AND.(nbroot.EQ.nbleaf))
RETURN
76 IF ((perm.NE.7).AND.(sbtr_m.OR.(perm.EQ.2)))
THEN
77 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
78 ALLOCATE(m_total(nsteps), stat=allocok )
81 &
WRITE(lp,*)
'Memory allocation error in
82 & ZMUMPS_REORDER_TREE'
90 ALLOCATE(m(nsteps),stat=allocok )
93 &
WRITE(lp,*)
'Memory allocation error
94 &in ZMUMPS_REORDER_TREE'
100 ALLOCATE( ipool(nbleaf), fact(nsteps),tnstk(nsteps),
102 IF (allocok > 0)
THEN
104 &
WRITE(lp,*)
'Memory allocation error in ZMUMPS_REORDER_TREE'
112 IF(ne(i).GE.ii) ii=ne(i)
114 size_tab=
max(ii,nbroot)
115 ALLOCATE(son(ii), temp(ii),
116 & tab1(size_tab), tab2(size_tab), stat=allocok )
117 IF (allocok > 0)
THEN
124 ALLOCATE(T1(SIZE_TAB),T2(SIZE_TAB),
125 & RESULT(SIZE_TAB),stat=allocok)
126 IF (allocok > 0) THEN
136.EQ..OR..EQ.
IF((PERM5)(PERM6))THEN
137 ALLOCATE(COST_TRAV(NSTEPS), stat=allocok )
138 IF (allocok > 0) THEN
140 & WRITE(LP,*)'memory allocation error
149.EQ.
IF(NBROOTNBLEAF)THEN
150.NE..OR..EQ..OR..EQ.
IF((PERM1)(PERM4)(PERM6))THEN
151 WRITE(*,*)'internal error in reordertree:
'
152 WRITE(*,*)' problem with perm
parameter in reordertree
'
156 TAB1(I)=int(ND(STEP(NA(I+2+NBLEAF))),8)
157 IPOOL(I)=NA(I+2+NBLEAF)
158 M(STEP(IPOOL(I)))=TAB1(I)*TAB1(I)
160 CALL ZMUMPS_FUSION_SORT(NA(2+NBLEAF+1),NBROOT,TAB1,TAB2,4,
164.EQ..OR..EQ.
IF((PERM3)(PERM4))THEN
165 ALLOCATE(DEPTH(NSTEPS),stat=allocok)
166 IF (allocok > 0) THEN
168 & WRITE(LP,*)'memory allocation error in
176 IPOOL(1:NBROOT) = NA(3+NBLEAF:2+NBLEAF+NBROOT)
182 WRITE(*,*)'internal error in reordertree inode < 0 !
'
191 DO I=1,NE(STEP(INODE))
195 DO I=1,NE(STEP(INODE))
197 DEPTH(STEP(SON(I)))=DEPTH(STEP(INODE))+1
201.EQ.
IF(NE(STEP(INODE))0)THEN
208.EQ.
IF(fin0) GOTO 489
214.OR..EQ.
IF (SBTR_M(PERM2)) THEN
215.EQ..AND..NE.
IF((SBTR_WHICH_M1)(PERM1))THEN
223 IPOOL(1:NBLEAF)=NA(3:2+NBLEAF)
231 NFR = int(ND(STEP(INODE)),8)
232 NSTK = NE(STEP(INODE))
235 101 NELIM4 = NELIM4 + 1
237.GT.
IF (IN 0 ) GOTO 101
239.EQ.
IF(NE(STEP(INODE))0) THEN
240 M(STEP(INODE))=NFR*NFR
241.OR..EQ.
IF (SBTR_M(PERM2)) THEN
242 M_TOTAL(STEP(INODE))=NFR*NFR
245.EQ..OR..EQ.
IF((PERM4)(PERM3))THEN
246 IF(MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
251.eq.
IF ( SYM 0 ) THEN
252 fact(STEP(INODE))=fact(STEP(INODE))+
253 & (2_8*NFR*NELIM)-(NELIM*NELIM)
255 fact(STEP(INODE))=fact(STEP(INODE))+NFR*NELIM
258 IFATH = DAD( STEP(INODE) )
262.GT.
IF (IN0) GO TO 113
267.EQ.
IF (NBROOT0) GOTO 116
270 fact(STEP(IFATH))=fact(STEP(IFATH))+fact(STEP(INODE))
271.EQ..OR..EQ.
IF((PERM3)(PERM4))THEN
272 DEPTH(STEP(IFATH))=max(DEPTH(STEP(INODE)),
273 & DEPTH(STEP(IFATH)))
276 TNSTK(STEP(IFATH)) = TNSTK(STEP(IFATH)) - 1
277.EQ.
IF ( TNSTK(STEP(IFATH)) 0 ) THEN
288 NCB=int(ND(STEP(INODE))-I,8)
291 DO I=1,NE(STEP(INODE))
294.GT.
IF(IN0) IN=FRERE(STEP(IN))
297 DO I=NE(STEP(INODE)),1,-1
300.GT.
IF(IN0) IN=FRERE(STEP(IN))
303 NFR = int(ND(STEP(INODE)),8)
304 DO II=1,NE(STEP(INODE))
315.EQ..OR..NE.
IF((SYM0)(K2150)) THEN
316 SIZECB=(int(ND(STEP(SON(II))),8)-NELIM)
317 & *(int(ND(STEP(SON(II))),8)-NELIM)
319 SIZECB=(int(ND(STEP(SON(II))),8)-NELIM)
320 & *(int(ND(STEP(SON(II))),8)-
323.EQ..OR..EQ.
IF((PERM0)(PERM5))THEN
324.NE..AND..EQ.
IF (K234 0 K550 ) THEN
327 TAB1(II)=max(TMP8, M(STEP(SON(II)))) - SIZECB
330 TAB1(II)=M(STEP(SON(II)))- SIZECB
334.EQ..OR..EQ.
IF((PERM1)(PERM6)) THEN
335 TAB1(II)=M(STEP(SON(II)))-SIZECB
336 TAB1(II)=TAB1(II)-fact(STEP(SON(II)))
337 TAB2(II)=SIZECB+fact(STEP(SON(II)))
340 IF (MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
342 TAB1(II)=M_TOTAL(STEP(SON(II)))-SIZECB
343 & -fact(STEP(SON(II)))
346 TAB1(II)=M(STEP(SON(II)))-SIZECB
351 IF (MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
353 TAB1(II)=M(STEP(SON(II)))-SIZECB
356 TAB1(II)=int(DEPTH(STEP(SON(II))),8)
357 TAB2(II)=M(STEP(SON(II)))
361 IF (MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
363 TAB1(II)=M(STEP(SON(II)))-
364 & SIZECB-fact(STEP(SON(II)))
367 TAB1(II)=int(DEPTH(STEP(SON(II))),8)
368 TAB2(II)=M(STEP(SON(II)))
372 CALL ZMUMPS_FUSION_SORT(SON,NE(STEP(INODE)),TAB1,TAB2,
376 DO II=1,NE(STEP(INODE))
385.EQ..OR..NE.
IF((SYM0)(K2150))THEN
386 SIZECB=(int(ND(STEP(TEMP(II))),8)-NELIM)*
387 & (int(ND(STEP(TEMP(II))),8)-NELIM)
389 SIZECB=(int(ND(STEP(TEMP(II))),8)-NELIM)*
390 & (int(ND(STEP(TEMP(II))),8)-NELIM+1_8)/2_8
394 CALL ZMUMPS_FUSION_SORT(TEMP,NE(STEP(INODE)),TAB1,TAB2,3,
398 DO II=1,NE(STEP(INODE))
407.EQ..OR..NE.
IF((SYM0)(K2150))THEN
408 SIZECB=(int(ND(STEP(TEMP(II))),8)-NELIM)*
409 & (int(ND(STEP(TEMP(II))),8)-NELIM)
411 SIZECB=(int(ND(STEP(TEMP(II))),8)-NELIM)*
412 & (int(ND(STEP(TEMP(II))),8)-NELIM+1_8)/2_8
414 TAB1(II)=SIZECB+fact(STEP(TEMP(II)))
416 CALL ZMUMPS_FUSION_SORT(TEMP,NE(STEP(INODE)),TAB1,TAB2,3,
431.EQ.
IF(II2) TAB=>TEMP
432 DO I=1,NE(STEP(INODE))
441 NFR=int(ND(STEP(TAB(I))),8)
442.EQ..OR..NE.
IF((SYM0)(K2150))THEN
443 SIZECB=(NFR-NELIM)*(NFR-NELIM)
445 SIZECB=(NFR-NELIM)*(NFR-NELIM+1_8)/2_8
447 MEM_SIZE=max(MEM_SIZE,(M(STEP(TAB(I)))+SUM+FACT_SIZE))
448.OR..EQ.
IF (SBTR_M(PERM2)) THEN
449 MEM_SIZE_T=max(MEM_SIZE_T,(M_TOTAL(STEP(TAB(I)))+
452 FACT_SIZE_T=FACT_SIZE_T+fact(STEP(TAB(I)))
454 TOTAL_MEM_SIZE=max(TOTAL_MEM_SIZE,
455 & (M(STEP(TAB(I)))+SUM+FACT_SIZE))
456 TMP_SUM=TMP_SUM+fact(STEP(TAB(I)))
458 SIZECB_LASTSON = SIZECB
459.EQ..OR..EQ.
IF((PERM1)(PERM4))THEN
460 FACT_SIZE=FACT_SIZE+fact(STEP(TAB(I)))
463.EQ..OR..NE.
IF((SYM0)(K2150))THEN
466 SIZECB=(NCB*(NCB+1_8))/2_8
468.NE..AND..EQ.
IF (K2340 K550) THEN
469 TOTAL_MEM_SIZE=max(TOTAL_MEM_SIZE,
470 & ( ( int(ND(STEP(IFATH)),8)
471 & * int(ND(STEP(IFATH)),8) )
472 & + SUM-SIZECB_LASTSON+TMP_SUM )
474.NE..AND..NE.
ELSE IF (K2340 K550) THEN
475 TOTAL_MEM_SIZE=max(TOTAL_MEM_SIZE,
476 & ( ( int(ND(STEP(IFATH)),8)
477 & * int(ND(STEP(IFATH)),8) )
481 TOTAL_MEM_SIZE=max(TOTAL_MEM_SIZE,
482 & ( ( int(ND(STEP(IFATH)),8)
483 & * int(ND(STEP(IFATH)),8))
484 & + max(SUM,SIZECB) + TMP_SUM )
488 TMP_TOTAL_MEM_SIZE=TOTAL_MEM_SIZE
491.NE..AND..EQ.
IF (K2340 K550) THEN
492 M(STEP(IFATH))=max(MEM_SIZE,((int(ND(STEP(IFATH)),8)
493 & *int(ND(STEP(IFATH)),8))+SUM-SIZECB_LASTSON+
495.NE..AND..NE.
ELSE IF (K2340 K550) THEN
496 M(STEP(IFATH))=max(MEM_SIZE,((int(ND(STEP(IFATH)),8)
497 & *int(ND(STEP(IFATH)),8))+SUM+FACT_SIZE))
499 M(STEP(IFATH))=max(MEM_SIZE,((int(ND(STEP(IFATH)),8)
500 & *int(ND(STEP(IFATH)),8))+max(SUM,SIZECB)+FACT_SIZE))
502.OR..EQ.
IF (SBTR_M(PERM2)) THEN
503 M_TOTAL(STEP(IFATH))=max(MEM_SIZE_T,
504 & ((int(ND(STEP(IFATH)),8)
505 & *int(ND(STEP(IFATH)),8))+max(SUM,SIZECB)+
509.EQ..AND..EQ..OR..EQ..OR.
IF((II2)(PERM1)(PERM0)
510.EQ..OR..EQ..OR.
& (PERM5)(PERM6)
511.NOT..OR..NE.
& (SBTR_M(SBTR_WHICH_M1)))THEN
512 MEM_SEC_PERM=max(MEM_SIZE,((int(ND(STEP(IFATH)),8)
513 & *int(ND(STEP(IFATH)),8))+max(SUM,SIZECB)+FACT_SIZE))
515.EQ..OR..EQ..OR..EQ.
IF((PERM2)(PERM3)(PERM4))THEN
516 MEM_SEC_PERM=huge(MEM_SEC_PERM)
519.EQ.
IF(MEM_SEC_PERMM(STEP(IFATH))) THEN
521.LT.
ELSE IF (MEM_SEC_PERMM(STEP(IFATH))) THEN
523 & MEM_SEC_PERM, M(STEP(IFATH))
526 TOTAL_MEM_SIZE=TMP_TOTAL_MEM_SIZE
529 DO I=NE(STEP(INODE)),1,-1
530.EQ.
IF(INE(STEP(INODE))) THEN
531 FILS(dernier)=-TAB(I)
536 FRERE(STEP(dernier))=TAB(I)
537 FRERE(STEP(TAB(I)))=-INODE
541 FRERE(STEP(dernier))=TAB(I)
553 IPOOL(1:NBROOT) = NA(3+NBLEAF:2+NBLEAF+NBROOT)
556 TAB1(I)=M(STEP(NA(I+2+NBLEAF)))-fact(STEP(NA(I+2+NBLEAF)))
559 CALL ZMUMPS_FUSION_SORT(NA(2+NBLEAF+1),NBROOT,TAB1,TAB2,4,
561 IPOOL(1:NBROOT) = NA(3+NBLEAF:2+NBLEAF+NBROOT)
571 WRITE(*,*)'internal error in reordertree inode < 0
581 IF((perm.EQ.5).OR.(perm.EQ.6))
THEN
588 IF (in.GT.0)
GO TO 395
591 nfr4 = nd(step(inode))
595 396 nelim4 = nelim4 + 1
597 IF (in .GT. 0 )
GOTO 396
599 IF((sym.EQ.0).OR.(k215.NE.0))
THEN
600 sizecb=(nfr-nelim)*(nfr-nelim)
602 sizecb=(nfr-nelim)*(nfr-nelim+1_8)/2_8
607 IF(mumps_inssarbr(procnode(step(inode)),k199))
THEN
608 cost_trav(step(inode))=cost_trav(step(
611 cost_trav(step(inode))=dble(cost_node)+
612 & cost_trav(step(ifath))+
616 cost_trav(step(inode))=dble(cost_node)
620 DO i=1,ne(step(inode))
622 IF((perm.EQ.5).OR.(perm.EQ.6))
THEN
623 IF((slavef.NE.1).AND.(.NOT.mumps_in_or_root_ssarbr(
624 & procnode(step(inode)),k199)))
THEN
625 nfr4 = nd(step(inode))
629 845 nelim4 = nelim4 + 1
631 IF (ii .GT. 0 )
GOTO 845
635 tab1(i)=int(dble(cost_node)+
636 & cost_trav(step(inode)),8)
646 IF((perm.EQ.5).OR.(perm.EQ.6))
THEN
647 IF((slavef.NE.1).AND.(.NOT.mumps_in_or_root_ssarbr(
648 & procnode(step(inode)),k199)))
THEN
653 DO i=ne(step(inode)),1,-1
654 IF(i.EQ.ne(step(inode)))
THEN
655 fils(dernier)=-tab(i)
660 frere(step(dernier))=tab(i)
661 frere(step(tab(i)))=-inode
665 frere(step(dernier))=tab(i)
670 son(ne(step(inode))-i+1)=tab(i)
674 DO i=1,ne(step(inode))
679 IF(ne(step(inode)).EQ.0)
THEN
694 IF(perm.EQ.7)
GOTO 5483
700 peak=
max(peak,dble(m(step(na(2+nbleaf+i)))))
701 fact_size=fact_size+fact(step(na(2+nbleaf+i)))
717 IF((perm.EQ.3).OR.(perm.EQ.4))
THEN
720 IF((perm.EQ.5).OR.(perm.EQ.6))
THEN
721 DEALLOCATE(cost_trav)
723 IF ((perm.NE.7).AND.(sbtr_m.OR.(perm.EQ.2)))
THEN
724 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1).OR.(perm.EQ.2))
THEN
731 & NA,LNA,NE,ND, DAD, LDAD, USE_DAD,
732 & NSTEPS,PERM,SYM,INFO,LP,K47,K81,K76,K215,K234,K55,KEEP199,
733 & PROCNODE,MEM_SUBTREE,SLAVEF, SIZE_MEM_SBTR, PEAK
734 & ,SBTR_WHICH_M,SIZE_DEPTH_FIRST,SIZE_COST_TRAV,
735 & DEPTH_FIRST_TRAV,DEPTH_FIRST_SEQ,COST_TRAV,MY_FIRST_LEAF,
736 & MY_NB_LEAF,MY_ROOT_SBTR,SBTR_ID
739 INTEGER N,PERM,SYM, NSTEPS, LNA, LP, SIZE_MEM_SBTR,LDAD
740 INTEGER FRERE(NSTEPS), FILS(N), STEP(N)
741 INTEGER NA(LNA), NE(NSTEPS), ND(NSTEPS)
742 INTEGER K47,K81,K76,K215,K234,K55,KEEP199
746 INTEGER SLAVEF,PROCNODE(NSTEPS)
747 DOUBLE PRECISION,
intent(out) :: MEM_SUBTREE(SIZE_MEM_SBTR,SLAVEF)
748 INTEGER :: SBTR_WHICH_M
749 INTEGER MY_FIRST_LEAF(SIZE_MEM_SBTR,SLAVEF),
750 & my_root_sbtr(size_mem_sbtr,slavef),
751 & my_nb_leaf(size_mem_sbtr,slavef)
753 LOGICAL MUMPS_ROOTSSARBR
754 INTEGER MUMPS_PROCNODE
755 DOUBLE PRECISION PEAK
756 INTEGER SIZE_DEPTH_FIRST,DEPTH_FIRST_TRAV(SIZE_DEPTH_FIRST),
757 & depth_first_seq(size_depth_first)
758 INTEGER SIZE_COST_TRAV
759 INTEGER SBTR_ID(SIZE_DEPTH_FIRST),OOC_CUR_SBTR
760 DOUBLE PRECISION COST_TRAV(SIZE_COST_TRAV)
761 INTEGER,
DIMENSION (:),
ALLOCATABLE :: DEPTH
762 INTEGER IFATH,IN,INODE,I,allocok,LOCAL_PERM
765 INTEGER LEAF,NBLEAF,NBROOT, SIZE_TAB
766 INTEGER,
DIMENSION (:),
ALLOCATABLE :: IPOOL,TNSTK
767 INTEGER,
DIMENSION (:),
ALLOCATABLE,
TARGET :: SON,TEMP
768 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: M,M_TOTAL, fact
769 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: TAB1,TAB2
770 INTEGER x,dernier,fin,RANK_TRAV
772 INTEGER ROOT_OF_CUR_SBTR
773 INTEGER(8),
DIMENSION (:),
ALLOCATABLE :: T1,T2
774 INTEGER,
DIMENSION (:),
ALLOCATABLE :: RESULT
775 INTEGER(8) MEM_SIZE,FACT_SIZE,
779 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDICE
780 INTEGER ,FIRST_LEAF,SIZE_SBTR
782 LOGICAL MUMPS_IN_OR_ROOT_SSARBR,MUMPS_INSSARBR
783 DOUBLE PRECISION COST_NODE
784 INTEGER CUR_DEPTH_FIRST_RANK
785 include
'mumps_headers.h'
788 ALLOCATE(indice( slavef ), stat=allocok)
789 IF (allocok > 0)
THEN
791 &
WRITE(lp,*)
'Memory allocation error in
792 &ZMUMPS_REORDER_TREE'
797 IF((perm.EQ.0).OR.(perm.EQ.1).OR.
798 & (perm.EQ.2).OR.(perm.EQ.3).OR.(perm.EQ.4).OR.
799 & (perm.EQ.5).OR.(perm.EQ.6))
THEN
802 IF (k47 == 4 .OR. ((k47.GE.2).AND.(k81.GE. 1)))
THEN
808 mem_subtree(x,i)=-1.0d0
812 sbtr_m=((k47 == 4 .OR. ((k47.GE.2).AND.(k81 .GE. 1))))
816 & (.NOT.(k47 == 4 .OR. ((k47.GE.2).AND.(k81 .GE. 1)))))
THEN
817 WRITE(*,*)
"Internal Error in ZMUMPS_REORDER_TREE",perm
822 cur_depth_first_rank=1
823 IF((perm.EQ.0).AND.(nbroot.EQ.nbleaf))
THEN
827 IF (sbtr_m.OR.(perm.EQ.2))
THEN
828 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
829 ALLOCATE(m_total(nsteps), stat=allocok )
830 IF (allocok > 0)
THEN
832 &
WRITE(lp,*)
'Memory allocation error in
833 & ZMUMPS_REORDER_TREE'
840 ALLOCATE( ipool(nbleaf), m(nsteps), fact(nsteps),
841 & tnstk(nsteps), stat=allocok )
842 IF (allocok > 0)
THEN
844 &
WRITE(lp,*)
'Memory allocation error in ZMUMPS_REORDER_TREE'
852 IF(ne(i).GE.ii) ii=ne(i)
854 size_tab=
max(ii,nbroot)
855 ALLOCATE(son(ii), temp(ii),
856 & tab1(size_tab), tab2(size_tab), stat=allocok )
857 IF (allocok > 0)
THEN
859 &
WRITE(lp,*)
'Memory allocation error in ZMUMPS_REORDER_TREE'
864 ALLOCATE(t1(size_tab),t2(size_tab),
865 & result(size_tab),stat=allocok)
866 IF (allocok > 0)
THEN
868 &
WRITE(lp,*)
'Memory allocation error in ZMUMPS_REORDER_TREE'
873 IF(nbroot.EQ.nbleaf)
THEN
874 IF((perm.NE.1).OR.(perm.EQ.4).OR.(perm.EQ.6))
THEN
875 WRITE(*,*)
'Internal Error in reordertree:'
876 WRITE(*,*)
' problem with perm parameter in reordertree'
880 tab1(i)=int(nd(step(na(i+2+nbleaf))),8)
881 ipool(i)=na(i+2+nbleaf)
882 m(step(ipool(i)))=tab1(i)*tab1(i)
888 IF((perm.EQ.3).OR.(perm.EQ.4))
THEN
889 ALLOCATE(depth(nsteps),stat=allocok)
890 IF (allocok > 0)
THEN
892 &
WRITE(lp,*)
'Memory allocation error in
893 & ZMUMPS_REORDER_TREE'
900 ipool(1:nbroot) = na(3+nbleaf:2+nbleaf+nbroot)
906 WRITE(*,*)
'Internal Error in reordertree INODE < 0 !'
915 DO i=1,ne(step(inode))
919 DO i=1,ne(step(inode))
921 depth(step(son(i)))=depth(step(inode))+1
925 IF(ne(step(inode)).EQ.0)
THEN
932 IF(fin.EQ.0)
GOTO 489
936 IF(k76.EQ.4.OR.(k76.EQ.6))
THEN
941 IF((k76.EQ.5).OR.(perm.EQ.5).OR.(perm.EQ.6))
THEN
947 IF (sbtr_m.OR.(perm.EQ.2))
THEN
948 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
958 ipool(1:nbroot) = na(3+nbleaf:2+nbleaf+nbroot)
967 WRITE(*,*)
'Internal Error in reordertree INODE < 0 !'
970 IF(size_sbtr.NE.0)
THEN
971 IF(.NOT.mumps_inssarbr(procnode(step(inode)),keep199))
THEN
972 IF ( k47 == 4 .OR. ((k81.GE.1).AND.(k47.GE.2)))
THEN
973 IF((slavef.NE.1))
THEN
974 my_first_leaf(indice(
id+1)-1,
id
975 my_nb_leaf(indice(
id+1)-1,
id+1)=size_sbtr
982 IF(mumps_rootssarbr(procnode(step(inode)),keep199))
THEN
983 root_of_cur_sbtr=inode
987 WRITE(*,*)
'INODE=',inode,
'RANK',rank_trav
988 IF(mumps_inssarbr(procnode(step(inode)),keep199))
THEN
992 depth_first_trav(step(inode))=rank_trav
994 rank_trav=rank_trav-1
1004 IF (in.GT.0)
GO TO 395
1007 nfr4 = nd(step(inode))
1011 396 nelim4 = nelim4 + 1
1013 IF (in .GT. 0 )
GOTO 396
1015 IF((sym.EQ.0).OR.(k215.NE.0))
THEN
1016 sizecb=(nfr-nelim)*(nfr-nelim)
1018 sizecb=(nfr-nelim)*(nfr-nelim+1_8)/2_8
1023 IF(mumps_inssarbr(procnode(step(inode)),keep199))
THEN
1024 cost_trav(step(inode))=cost_trav(step(
1025 & root_of_cur_sbtr))
1027 cost_trav(step(inode))=dble(cost_node)+
1028 & cost_trav(step(ifath))+
1032 cost_trav(step(inode))=dble(cost_node)
1035 WRITE(*,*)
'INODE=',inode,
'COST=',cost_trav(step(inode))
1039 IF ( k47 == 4 .OR. ((k81.GE.1).AND.(k47.GE.2)))
THEN
1040 IF((slavef.NE.1).AND.
1041 & mumps_rootssarbr(procnode(step(inode)),keep199))
THEN
1042 IF (ne(step(inode)).NE.0)
THEN
1043 id=mumps_procnode(procnode(step(inode)),keep199)
1044 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
1045 mem_subtree(indice(
id+1),
id+1)=
1046 & dble(m_total(step(inode)))
1048 mem_subtree(indice(
id+1),
id+1)=
1049 & dble(m(step(inode)))
1051 my_root_sbtr(indice(
id+1),
id+1)=inode
1052 indice(
id+1)=indice(
id+1)+1
1055 IF((slavef.EQ.1).AND.frere(step(inode)).EQ.0)
THEN
1056 id=mumps_procnode(procnode(step(inode)),keep199)
1057 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
1058 mem_subtree(indice(
id+1),
id+1)=
1059 & dble(m_total(step(inode)))
1061 mem_subtree(indice(
id+1),
id+1)=
1062 & dble(m(step(inode)))
1064 indice(
id+1)=indice(
id+1)+1
1069 IF (in .GT. 0 )
THEN
1074 DO i=1,ne(step(inode))
1076 IF(in.GT.0) in=frere(step(in))
1079 IF(ne(step(inode)).EQ.0)
THEN
1080 IF ( k47 == 4 .OR. ((k81.GE.1).AND.(k47.GE.2)))
THEN
1082 IF(mumps_inssarbr(procnode(step(inode)),keep199))
THEN
1083 IF(first_leaf.EQ.-9999)
THEN
1086 size_sbtr=size_sbtr+1
1100 IF(size_sbtr.NE.0)
THEN
1101 IF ( k47 == 4 .OR. ((k81.GE.1).AND.(k47.GE.2)))
THEN
1102 IF((slavef.NE.1))
THEN
1103 my_first_leaf(indice(
id+1)-1,
id+1)=first_leaf
1104 my_nb_leaf(indice(
id+1)-1,
id+1)=size_sbtr
1121 ipool(1:nbleaf)=na(3:2+nbleaf)
1130 id=mumps_procnode(procnode(step(inode)),keep199)
1131 depth_first_trav(step(inode))=cur_depth_first_rank
1132 depth_first_seq(cur_depth_first_rank)=inode
1133 cur_depth_first_rank=cur_depth_first_rank+1
1134 IF(mumps_in_or_root_ssarbr(procnode(step(inode)),
1136 sbtr_id(step(inode))=ooc_cur_sbtr
1138 sbtr_id(step(inode))=-9999
1140 IF(mumps_rootssarbr(procnode(step(inode)),
1142 ooc_cur_sbtr=ooc_cur_sbtr+1
1146 ifath = dad( step(inode) )
1150 IF (in.GT.0)
GO TO 1133
1153 IF (ifath.EQ.0)
THEN
1155 IF (nbroot.EQ.0)
GOTO 1163
1158 tnstk(step(ifath))=tnstk(step(ifath))-1
1159 IF(tnstk(step(ifath)).EQ.0)
THEN
1170 peak=
max(peak,dble(m(step(na(2+nbleaf+i)))))
1171 fact_size=fact_size+fact(step(na(2+nbleaf+i)))
1186 IF((perm.EQ.3).OR.(perm.EQ.4))
THEN
1189 IF (sbtr_m.OR.(perm.EQ.2))
THEN
1190 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1).OR.(perm.EQ.2))
THEN
subroutine zmumps_build_load_mem_info(n, frere, step, fils, na, lna, ne, nd, dad, ldad, use_dad, nsteps, perm, sym, info, lp, k47, k81, k76, k215, k234, k55, keep199, procnode, mem_subtree, slavef, size_mem_sbtr, peak, sbtr_which_m, size_depth_first, size_cost_trav, depth_first_trav, depth_first_seq, cost_trav, my_first_leaf, my_nb_leaf, my_root_sbtr, sbtr_id)