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,, 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
32 REAL,
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_IN_OR_ROOT_SSARBR,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 CMUMPS_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 & CMUMPS_REORDER_TREE'
90 ALLOCATE(m(nsteps),stat=allocok )
93 &
WRITE(lp,*)
'Memory allocation error
94 &in CMUMPS_REORDER_TREE'
100 ALLOCATE( ipool(nbleaf), fact(nsteps),tnstk(nsteps),
102 IF (allocok > 0)
THEN
104 &
WRITE(lp,*)
'Memory allocation error in CMUMPS_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
119 &
WRITE(lp,*)
'Memory allocation error in CMUMPS_REORDER_TREE'
124 ALLOCATE(t1(size_tab),t2(size_tab),
125 & result(size_tab),stat=allocok)
126 IF (allocok > 0)
THEN
128 &
WRITE(lp,*)
'Memory allocation error in CMUMPS_REORDER_TREE'
136 IF((perm.EQ.5).OR.(perm.EQ.6))
THEN
137 ALLOCATE(cost_trav(nsteps), stat=allocok )
138 IF (allocok > 0)
THEN
140 &
WRITE(lp,*)
'Memory allocation error
141 & in CMUMPS_REORDER_TREE'
149 IF(nbroot.EQ.nbleaf)
THEN
150 IF((perm.NE.1).OR.(perm.EQ.4).OR.(perm.EQ.6))
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)
164 IF((perm.EQ.3).OR.(perm.EQ.4))
THEN
165 ALLOCATE(depth(nsteps),stat=allocok)
168 &
WRITE(lp,*)
'Memory allocation error in
169 & CMUMPS_REORDER_TREE'
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 IF(ne(step(inode)).EQ.0)
THEN
208 IF(fin.EQ.0)
GOTO 489
214 IF (sbtr_m.OR.(perm.EQ.2))
THEN
215 IF((sbtr_which_m.EQ.1).AND.(perm.NE.1))
THEN
223 ipool(1:nbleaf)=na(3:2+nbleaf)
231 nfr = int(nd(step(inode)),8)
235 101 nelim4 = nelim4 + 1
237 IF (in .GT. 0 )
GOTO 101
239 IF(ne(step(inode)).EQ.0)
THEN
240 m(step(inode))=nfr*nfr
241 IF (sbtr_m.OR.(perm.EQ.2))
THEN
242 m_total(step(inode))=nfr*nfr
245 IF((perm.EQ.4).OR.(perm.EQ.3))
THEN
246 IF(mumps_in_or_root_ssarbr(procnode(step(inode)),
251 IF ( sym .eq. 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 IF (in.GT.0)
GO TO 113
267 IF (nbroot.EQ.0)
GOTO 116
270 fact(step(ifath))=fact(step(ifath))+fact(step(inode))
271 IF((perm.EQ.3).OR.(perm.EQ.4))
THEN
272 depth(step(ifath))=
max(depth(step(inode)),
273 & depth(step(ifath)))
276 tnstk(step(ifath)) = tnstk(step(ifath)) - 1
277 IF ( tnstk(step(ifath)) .EQ. 0 )
THEN
288 ncb=int(nd(step(inode))-i,8)
291 DO i=1,ne(step(inode))
294 IF(in.GT.0) in=frere(step(in))
297 DO i=ne(step(inode)),1,-1
300 IF(in.GT.0) in=frere(step(in))
303 nfr = int(nd(step(inode)),8)
304 DO ii=1,ne(step(inode))
315 IF((sym.EQ.0).OR.(k215.NE.0))
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 IF((perm.EQ.0).OR.(perm.EQ.5))
THEN
324 IF (k234 .NE. 0 .AND. k55.EQ.0 )
THEN
327 tab1(ii)=
max(tmp8, m(step(son(ii)))) - sizecb
330 tab1(ii)=m(step(son(ii)))- sizecb
334 IF((perm.EQ.1).OR.(perm.EQ.6))
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)))
376 DO ii=1,ne(step(inode))
385 IF((sym.EQ.0).OR.(k215.NE.0))
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
398 DO ii=1,ne(step(inode))
407 IF((sym.EQ.0).OR.(k215.NE.0))
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)))
431 IF(ii.EQ.2) tab=>temp
432 DO i=1,ne(step(inode))
441 nfr=int(nd(step(tab(i))),8)
442 IF((sym.EQ.0).OR.(k215.NE.0))
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 IF (sbtr_m.OR.(perm.EQ.2))
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 IF((perm.EQ.1).OR.(perm.EQ.4))
THEN
460 fact_size=fact_size+fact(step(tab(i)))
463 IF((sym.EQ.0).OR.(k215.NE.0))
THEN
466 sizecb=(ncb*(ncb+1_8))/2_8
468 IF (k234.NE.0 .AND. k55.EQ.0)
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 ELSE IF (k234.NE.0 .AND. k55.NE.0)
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 IF (k234.NE.0 .AND. k55.EQ.0)
THEN
492 m(step(ifath))=
max(mem_size,((int(nd(step(ifath)),8)
493 & *int(nd(step(ifath)),8))+sum-sizecb_lastson+
495 ELSE IF (k234.NE.0 .AND. k55.NE.0)
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 IF (sbtr_m.OR.(perm.EQ.2))
THEN
503 m_total(step(ifath))=
max(mem_size_t,
505 & *int(nd(step(ifath)),8))+
max(sum,sizecb)+
509 IF((ii.EQ.2).AND.(perm.EQ.1).OR.(perm.EQ.0).OR.
510 & (perm.EQ.5).OR.(perm.EQ.6).OR.
511 & (.NOT.sbtr_m.OR.(sbtr_which_m.NE.1)))
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 IF((perm.EQ.2).OR.(perm.EQ.3).OR.(perm.EQ.4))
THEN
516 mem_sec_perm=huge(mem_sec_perm)
519 IF(mem_sec_perm.EQ.m(step(ifath)))
THEN
521 ELSE IF (mem_sec_perm.LT.m(step(ifath)))
THEN
522 WRITE(*,*)
'Internal error 1 in CMUMPS_REORDER_TREE',
523 & mem_sec_perm, m(step(ifath))
526 total_mem_size=tmp_total_mem_size
529 DO i=ne(step(inode)),1,-1
530 IF(i.EQ.ne(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)))
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))=real(cost_node)+
612 & cost_trav(step(ifath))+
616 cost_trav(step(inode))=real(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(real(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,real(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 ,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,),
750 & my_root_sbtr(size_mem_sbtr,slavef),
751 & my_nb_leaf(size_mem_sbtr,slavef)
753 LOGICAL MUMPS_ROOTSSARBR
754 INTEGER MUMPS_PROCNODE
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 REAL 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 ID,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 &CMUMPS_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 CMUMPS_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 & CMUMPS_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 CMUMPS_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 CMUMPS_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 CMUMPS_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 & CMUMPS_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+1)=first_leaf
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
989 depth_first_trav(step(inode))=depth_first_trav(step(
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))=real(cost_node)+
1028 & cost_trav(step(ifath))+
1032 cost_trav(step(inode))=real(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,real(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