33 DOUBLE PRECISION,
DIMENSION(:),
46 DOUBLE PRECISION,
DIMENSION(:),
47 &
ALLOCATABLE,
TARGET,
SAVE,
PRIVATE ::
wload
52 INTEGER,
DIMENSION(:),
ALLOCATABLE,
SAVE,
TARGET,
PRIVATE ::
55 DOUBLE PRECISION,
SAVE,
PRIVATE ::
alpha
56 DOUBLE PRECISION,
SAVE,
PRIVATE ::
beta
59 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
SAVE,
61 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
PRIVATE,
63 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
65 INTEGER,
DIMENSION(:),
ALLOCATABLE,
73 DOUBLE PRECISION,
SAVE,
75 DOUBLE PRECISION,
SAVE,
79 INTEGER(8),
DIMENSION(:),
ALLOCATABLE, save
82 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE ::
lu_usage
83 INTEGER(8),
DIMENSION(:),
ALLOCATABLE,
SAVE,
85 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
SAVE ::
mem_subtree
93 DOUBLE PRECISION,
DIMENSION(:),
94 &
ALLOCATABLE,
SAVE ,
PRIVATE::
dm_mem
97 INTEGER,
DIMENSION(:),
ALLOCATABLE,
SAVE,
PRIVATE::
pool_niv2
98 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
SAVE,
100 DOUBLE PRECISION,
SAVE,
PRIVATE ::
chk_ld
101 INTEGER,
DIMENSION(:),
POINTER,
SAVE,
PRIVATE ::
103 INTEGER,
DIMENSION(:),
POINTER,
SAVE,
PRIVATE ::
keep_load
104 INTEGER,
SAVE,
PRIVATE ::
105 INTEGER(8),
DIMENSION(:),
POINTER,
SAVE,
PRIVATE::
keep8_load
106 INTEGER,
DIMENSION(:),
POINTER,
SAVE ::
110INTEGER,
DIMENSION(:,:),
POINTER,
SAVE,
PRIVATE ::
cand_load
111 INTEGER,
DIMENSION(:),
POINTER,
SAVE,
113 INTEGER,
DIMENSION(:),
ALLOCATABLE,
SAVE,
115 DOUBLE PRECISION,
DIMENSION(:),
ALLOCATABLE,
SAVE,
118 DOUBLE PRECISION,
DIMENSION(:),
POINTER,
SAVE ::
cost_trav
142 DOUBLE PRECISION cost_subtree_arg
143 INTEGER,
INTENT(IN) :: k64, k375
144 DOUBLE PRECISION,
INTENT(IN) :: dk15
146 DOUBLE PRECISION :: t64, t66
147 LOGICAL :: avoid_load_messages
148 t64 =
max( dble(k64), dble(1) )
149 t64 =
min( t64, dble(1000) )
150 t66 =
max(dble(dk15), dble(100))
152 & t66 * dble(1000000)
155 avoid_load_messages = .false.
157 avoid_load_messages = .true.
159 IF (avoid_load_messages)
THEN
166 & INODE, STEP, N, SLAVEF,
167 & PROCNODE_STEPS, KEEP, DAD, FILS,
168 & CAND, ICNTL, COPY_CAND,
169 & NBSPLIT, NUMORG_SPLIT, SLAVES_LIST,
173 INTEGER,
intent(in) :: inode, n, size_slaves_list, slavef,
175 INTEGER,
intent(in) :: step(n), dad (keep(28)), icntl(60),
176 & procnode_steps(keep(28)), cand(slavef+1),
178 INTEGER,
intent(out) :: nbsplit, numorg_split
179 INTEGER,
intent(inout) :: slaves_list(size_slaves_list),
180 & copy_cand(slavef+1)
181 INTEGER :: in, lp, ii
191 & (procnode_steps(step(dad(step(in)))),keep(199
196 & (procnode_steps(step(dad(step(in)))),keep(199))
200 nbsplit = nbsplit + 1
204 numorg_split = numorg_split + 1
208 slaves_list(1:nbsplit) = cand(1:nbsplit)
209 copy_cand(1:size_slaves_list-nbsplit) =
210 & cand(1+nbsplit:size_slaves_list)
211 copy_cand(size_slaves_list-nbsplit+1:slavef) = -1
212 copy_cand(slavef+1) = size_slaves_list-nbsplit
216 & INODE, STEP, N, SLAVEF, NBSPLIT, NCB,
217 & PROCNODE_STEPS, KEEP, DAD, FILS, ICNTL,
218 & TAB_POS, NSLAVES_NODE
221 INTEGER,
intent(in) :: , n, slavef, ncb,
223 INTEGER,
intent(in) :: step(n), dad (keep(28)), icntl(60),
224 & procnode_steps(keep(28)),
226 INTEGER,
intent(inout) :: tab_pos ( slavef+2 ), nslaves_node
227 INTEGER :: in, lp, ii, numorg, nbsplit_loc, i
230 do i= nslaves_node+1, 1, -1
231 tab_pos(i+nbsplit) = tab_pos(i)
241 & (procnode_steps(step(dad(step(in)))),keep(199))
246 & (procnode_steps(step(dad(step(in)))),keep(199))
250 nbsplit_loc = nbsplit_loc + 1
257 tab_pos(nbsplit_loc+1) = numorg + 1
259 DO i = nbsplit+2, nbsplit+nslaves_node+1
260 tab_pos(i) = tab_pos(i) + numorg
262 nslaves_node = nslaves_node + nbsplit
263 tab_pos(nslaves_node+2:slavef+1) = -9999
264 tab_pos( slavef+2 ) = nslaves_node
268 & INODE, TYPESPLIT, IFSON,
270 & SON_SLAVE_LIST, NSLSON,
272 & PROCNODE_STEPS, KEEP, DAD, FILS, ICNTL,
273 & ISTEP_TO_INIV2, INIV2,
274 & TAB_POS_IN_PERE, NSLAVES_NODE,
275 & SLAVES_LIST, SIZE_SLAVES_LIST
278 INTEGER,
intent(in) :: inode, typesplit, ifson, n, slavef,
280 & nslson, size_slaves_list, size_cand
281 INTEGER,
intent(in) :: step(n), dad (keep(28)), icntl(60),
282 & procnode_steps(keep(28)),
284 & son_slave_list(nslson),
285 & istep_to_iniv2(keep(71)),
287 INTEGER,
intent(out) :: nslaves_node
288 INTEGER,
intent(inout) ::
289 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
290 INTEGER,
intent(out) :: slaves_list (size_slaves_list)
291 INTEGER :: in, lp, i, nslaves_sons,
295 iniv2_fils = istep_to_iniv2( step( ifson ))
296 nslaves_sons = tab_pos_in_pere(slavef+2, iniv2_fils)
297 tab_pos_in_pere(1,iniv2) = 1
298 ishift = tab_pos_in_pere(2, iniv2_fils) -1
299 DO i = 2, nslaves_sons
300 tab_pos_in_pere(i,iniv2) =
301 & tab_pos_in_pere(i+1,iniv2_fils) - ishift
302 slaves_list(i-1) = son_slave_list(i)
304 tab_pos_in_pere(nslaves_sons+1:slavef+1,iniv2) = -9999
305 nslaves_node = nslaves_sons - 1
306 tab_pos_in_pere(slavef+2, iniv2) = nslaves_node
310 & NCBSON_MAX, SLAVEF,
313 & MEM_DISTRIB, NCB, NFRONT, NSLAVES_NODE,
314 & TAB_POS, SLAVES_LIST, SIZE_SLAVES_LIST,INODE
317 INTEGER,
intent(in) :: (500),size_slaves_list
318 INTEGER(8) keep8(150)
319 INTEGER,
intent(in) :: icntl(60)
320 INTEGER,
intent(in) :: slavef, nfront
321 INTEGER,
intent (inout) ::ncb
322 INTEGER,
intent(in) :: cand_of_node(slavef+1)
323 INTEGER,
intent(in) :: (0:slavef-1),inode
324 INTEGER,
intent(in) ::
325 INTEGER,
intent(out):: slaves_list(size_slaves_list)
326 INTEGER,
intent(out):: tab_pos(slavef+2)
327 INTEGER,
intent(out):: nslaves_node
335 IF ( keep(48) == 0 .OR. keep(48) .EQ. 3 )
THEN
340 & mem_distrib, ncb, nfront, nslaves_node,
341 & tab_pos, slaves_list, size_slaves_list)
342 ELSE IF ( keep(48) == 4 )
THEN
347 & mem_distrib, ncb, nfront, nslaves_node,
348 & tab_pos, slaves_list, size_slaves_list,
myid)
350 IF(tab_pos(i+1)-tab_pos(i).LE.0)
THEN
351 WRITE(*,*)
'probleme de partition dans
352 &DMUMPS_LOAD_SET_PARTI_ACTV_MEM'
356 ELSE IF ( keep(48) == 5 )
THEN
357 IF (keep(375).EQ.1)
THEN
365 & mem_distrib, ncb, nfront, nslaves_node,
366 & tab_pos, slaves_list, size_slaves_list,
myid,inode,
369 IF(tab_pos(i+1)-tab_pos(i).LE.0)
THEN
370 WRITE(*,*)
'problem with partition in
371 &DMUMPS_SET_PARTI_FLOP_IRR'
377 IF ( keep(375).EQ.1 )
THEN
385 & mem_distrib, ncb, nfront, nslaves_node,
386 & tab_pos, slaves_list, size_slaves_list,
myid,inode,
390 WRITE(*,*)
"Strategy 6 not implemented"
400 & MEM_DISTRIB, NCB, NFRONT, NSLAVES_NODE,
401 & TAB_POS, SLAVES_LIST, SIZE_SLAVES_LIST)
403 INTEGER,
intent(in) :: KEEP(500),SIZE_SLAVES_LIST
404 INTEGER(8) KEEP8(150)
405 INTEGER,
intent(in) :: SLAVEF, NFRONT, NCB
406 INTEGER,
intent(in) :: CAND_OF_NODE(SLAVEF+1)
407 INTEGER,
intent(in) :: MEM_DISTRIB(0:SLAVEF-1)
408 INTEGER,
intent(out):: SLAVES_LIST(SIZE_SLAVES_LIST)
409 INTEGER,
intent(out):: TAB_POS(SLAVEF+2)
410 INTEGER,
intent(out):: NSLAVES_NODE
411 INTEGER ITEMP, NMB_OF_CAND, NSLAVES_LESS
412 DOUBLE PRECISION MSG_SIZE
414 INTEGER MUMPS_REG_GET_NSLAVES
415 EXTERNAL MUMPS_REG_GET_NSLAVES
416 IF ( KEEP(48) == 0 .AND. keep(50) .NE. 0)
THEN
417 write(*,*)
"Internal error 2 in DMUMPS_LOAD_PARTI_REGULAR."
420 IF ( keep(48) == 3 .AND. keep(50) .EQ. 0)
THEN
421 write(*,*)
"Internal error 3 in DMUMPS_LOAD_PARTI_REGULAR."
424 msg_size = dble( nfront - ncb ) * dble(ncb)
425 IF ( keep(24) == 0 .OR. keep(24) == 1 )
THEN
428 force_cand = (mod(keep(24),2).eq.0)
435 & keep(69), slavef, msg_size,
439 nmb_of_cand = slavef - 1
441 nslaves_less =
max(itemp,1)
442 nslaves_node = mumps_reg_get_nslaves(keep8(21), keep(48),
444 & ncb, nfront, nslaves_less, nmb_of_cand,
445 & keep(375), keep(119))
447 & keep,keep8, slavef,
449 & nslaves_node, nfront, ncb
453 & cand_of_node, slavef, nslaves_node,
457 & msg_size, slaves_list, nslaves_node)
466 TYPE(dmumps_struc),
TARGET ::
id
467 INTEGER(8),
intent(in) :: memory_md_arg
468 INTEGER(8),
intent(in) :: maxs
471 INTEGER allocok, ierr, ierr_mpi, i, buf_load_size
472 DOUBLE PRECISION :: max_sbtr
473 DOUBLE PRECISION zero
474 DOUBLE PRECISION memory_sent
475 PARAMETER( zero=0.0d0 )
476 DOUBLE PRECISION size_dble(2)
478 INTEGER(8) memory_md, la
493 memory_md=memory_md_arg
496 & (int(
id%KEEP(12),8)*int(
id%MAX_SURF_MASTER,8)/int(100,8))
501 IF (
id%KEEP(47) .le. 0 .OR.
id%KEEP(47) .gt. 4 )
THEN
502 write(*,*)
"Internal error 1 in DMUMPS_LOAD_INIT"
510 & .AND.
id%KEEP(47) == 4 )
512 & .AND.
id%KEEP(47) .GE. 1 )
519 IF (
id%KEEP(80) .LT. 0 .OR.
id%KEEP(80)>3)
THEN
520 WRITE(*,*)
"Unimplemented KEEP(80) Strategy"
523 IF ((
id%KEEP(80) == 2 .OR.
id%KEEP(80)==3).AND.
id%KEEP(47).NE.4)
525 WRITE(*,*)
"Internal error 3 in DMUMPS_LOAD_INIT"
528 IF (
id%KEEP(81) == 1 .AND.
id%KEEP(47) < 2)
THEN
529 WRITE(*,*)
"Internal error 2 in DMUMPS_LOAD_INIT"
533 IF(
id%KEEP(76).EQ.4)
THEN
536 IF(
id%KEEP(76).EQ.5)
THEN
539 IF(
id%KEEP(76).EQ.6)
THEN
550 DO i = 1,
id%KEEP(28)
554 IF (allocok > 0)
THEN
555 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
557 id%INFO(2) =
id%NSLAVES +
id%KEEP(28) + 200
569 IF ( allocok .gt. 0 )
THEN
570 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
577 IF ( allocok .gt. 0 )
THEN
578 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
586 IF ( allocok .gt. 0 )
THEN
587 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
595 IF((
id%KEEP(81).EQ.2).OR.(
id%KEEP(81).EQ.3))
THEN
598 IF (allocok > 0)
THEN
599 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
601 id%INFO(2) =
id%NSLAVES
607 IF (allocok > 0)
THEN
608 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
610 id%INFO(2) =
id%NSLAVES
618 IF (allocok > 0 )
THEN
619 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
639 IF (allocok > 0 )
THEN
640 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
642 id%INFO(2) =
id%NBSA_LOCAL
654 IF (allocok > 0 )
THEN
655 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
657 id%INFO(2) =
id%NBSA_LOCAL
665 IF (allocok > 0 )
THEN
666 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
668 id%INFO(2) =
id%NBSA_LOCAL
674 IF (allocok > 0 )
THEN
675 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
677 id%INFO(2) =
id%NBSA_LOCAL
687 IF ( allocok .gt. 0 )
THEN
688 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
695 IF ( allocok .gt. 0 )
THEN
696 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
703 IF ( allocok .gt. 0 )
THEN
710 IF ( allocated(DM_MEM) ) DEALLOCATE( DM_MEM )
711 ALLOCATE( DM_MEM( 0:NPROCS-1 ), stat=allocok )
712.gt.
IF ( allocok 0 ) THEN
720 IF ( allocated(POOL_MEM) ) DEALLOCATE(POOL_MEM)
721 ALLOCATE( POOL_MEM(0: NPROCS -1), stat=allocok)
722.gt.
IF ( allocok 0 ) THEN
729 POOL_LAST_COST_SENT = dble(0)
732 IF ( allocated(SBTR_MEM) ) DEALLOCATE(SBTR_MEM)
733 ALLOCATE( SBTR_MEM(0: NPROCS -1), stat=allocok)
734.gt.
IF ( allocok 0 ) THEN
740 IF ( allocated(SBTR_CUR) ) DEALLOCATE(SBTR_CUR)
741 ALLOCATE( SBTR_CUR(0: NPROCS -1), stat=allocok)
742.gt.
IF ( allocok 0 ) THEN
752 CALL MUMPS_SIZE_C(SIZE_DBLE(1),SIZE_DBLE(2),I8SIZE)
754 BUF_LOAD_SIZE = K34_LOC * 2 * ( NPROCS - 1 ) +
755 & NPROCS * ( K35 + K34_LOC )
757 BUF_LOAD_SIZE = BUF_LOAD_SIZE + NPROCS * K35
760 BUF_LOAD_SIZE = BUF_LOAD_SIZE + NPROCS * K35
762 LBUF_LOAD_RECV = (BUF_LOAD_SIZE+K34_LOC)/K34_LOC
763 LBUF_LOAD_RECV_BYTES = LBUF_LOAD_RECV * K34_LOC
764 IF ( allocated(BUF_LOAD_RECV) ) DEALLOCATE(BUF_LOAD_RECV)
765 ALLOCATE( BUF_LOAD_RECV( LBUF_LOAD_RECV), stat=allocok)
766 IF ( allocok > 0 ) THEN
769 id%INFO(2) = LBUF_LOAD_RECV
772 BUF_LOAD_SIZE = BUF_LOAD_SIZE * 20
773 CALL DMUMPS_BUF_ALLOC_LOAD_BUFFER( BUF_LOAD_SIZE, IERR )
774.LT.
IF ( IERR 0 ) THEN
776 id%INFO(2) = BUF_LOAD_SIZE
780 LOAD_FLOPS( i ) = ZERO
787 CALL DMUMPS_INIT_ALPHA_BETA(id%KEEP(69))
792 MAX_SBTR=max(id%MEM_SUBTREE(i),MAX_SBTR)
795 MD_MEM(MYID)=MEMORY_MD
797 CALL DMUMPS_BUF_BROADCAST( WHAT,
800 & dble(MEMORY_MD),dble(0) ,MYID, id%KEEP, IERR )
802 MEMORY_SENT = dble(LA-MAX_SURF_MASTER)-MAX_SBTR
803 & - max( dble(LA) * dble(3) / dble(100),
805 & dble(max(id%KEEP(5),id%KEEP(6))) * dble(id%KEEP(127)))
806 IF (id%KEEP(12) > 25) THEN
807 MEMORY_SENT = MEMORY_SENT -
808 & dble(id%KEEP(12))*0.2d0*dble(LA)/100.0d0
810.EQ.
IF (id%KEEP(375)1) THEN
813 TAB_MAXS(MYID)=int(MEMORY_SENT,8)
814 CALL DMUMPS_BUF_BROADCAST( WHAT,
818 & dble(0),MYID, id%KEEP, IERR )
821 END SUBROUTINE DMUMPS_LOAD_INIT
822 SUBROUTINE DMUMPS_LOAD_UPDATE( CHECK_FLOPS,PROCESS_BANDE,
823 & INC_LOAD, KEEP,KEEP8 )
825 USE MUMPS_FUTURE_NIV2
827 DOUBLE PRECISION INC_LOAD
829 INTEGER(8) KEEP8(150)
830 LOGICAL PROCESS_BANDE
834 DOUBLE PRECISION ZERO, SEND_MEM, SEND_LOAD,SBTR_TMP
835 PARAMETER( ZERO=0.0d0 )
837.NOT.
IF ( IS_MUMPS_LOAD_ENABLED) RETURN
838 IF (INC_LOAD == 0.0D0) THEN
839 IF(REMOVE_NODE_FLAG)THEN
840 REMOVE_NODE_FLAG=.FALSE.
844.NE..AND.
IF((CHECK_FLOPS0)
845.NE..AND..NE.
& (CHECK_FLOPS1)(CHECK_FLOPS2))THEN
846 WRITE(*,*)MYID,': bad
value for check_flops
'
849.EQ.
IF(CHECK_FLOPS1)THEN
850 CHK_LD=CHK_LD+INC_LOAD
852.EQ.
IF(CHECK_FLOPS2)THEN
856 IF ( PROCESS_BANDE ) THEN
859 LOAD_FLOPS( MYID ) = max( LOAD_FLOPS( MYID ) + INC_LOAD, ZERO)
860.AND.
IF(BDC_M2_FLOPSREMOVE_NODE_FLAG)THEN
861.NE.
IF(INC_LOADREMOVE_NODE_COST)THEN
862.GT.
IF(INC_LOADREMOVE_NODE_COST)THEN
863 DELTA_LOAD = DELTA_LOAD +
864 & (INC_LOAD-REMOVE_NODE_COST)
867 DELTA_LOAD = DELTA_LOAD -
868 & (REMOVE_NODE_COST-INC_LOAD)
874 DELTA_LOAD = DELTA_LOAD + INC_LOAD
876.OR.
IF ( DELTA_LOAD > MIN_DIFF DELTA_LOAD < -MIN_DIFF) THEN
877 SEND_LOAD = DELTA_LOAD
884 SBTR_TMP=SBTR_CUR(MYID)
889 CALL DMUMPS_BUF_SEND_UPDATE_LOAD( BDC_SBTR,BDC_MEM,
890 & BDC_MD,COMM_LD, NPROCS,
896 IF ( IERR == -1 )THEN
897 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
898 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
904.NE.
ELSE IF ( IERR 0 ) THEN
905 WRITE(*,*) "Internal Error in DMUMPS_LOAD_UPDATE",IERR
909 IF (BDC_MEM) DELTA_MEM = ZERO
912 IF(REMOVE_NODE_FLAG)THEN
913 REMOVE_NODE_FLAG=.FALSE.
916 END SUBROUTINE DMUMPS_LOAD_UPDATE
917 SUBROUTINE DMUMPS_LOAD_MEM_UPDATE( SSARBR,
918 & PROCESS_BANDE_ARG, MEM_VALUE, NEW_LU, INC_MEM_ARG,
921 USE MUMPS_FUTURE_NIV2
923 INTEGER(8), INTENT(IN) :: MEM_VALUE, INC_MEM_ARG, NEW_LU,LRLUS
924 LOGICAL, INTENT(IN) :: PROCESS_BANDE_ARG, SSARBR
925 INTEGER IERR, KEEP(500)
926 INTEGER(8) KEEP8(150)
927 DOUBLE PRECISION ZERO, SEND_MEM, SBTR_TMP
928 PARAMETER( ZERO=0.0d0 )
930 INTEGER(8) :: INC_MEM
931 LOGICAL PROCESS_BANDE
933.NOT.
IF ( IS_MUMPS_LOAD_ENABLED) RETURN
934 PROCESS_BANDE=PROCESS_BANDE_ARG
935 INC_MEM = INC_MEM_ARG
936.AND..NE.
IF ( PROCESS_BANDE NEW_LU 0_8) THEN
937 WRITE(*,*) " Internal Error in DMUMPS_LOAD_MEM_UPDATE."
938 WRITE(*,*) " NEW_LU must be zero if called from PROCESS_BANDE"
941 DM_SUMLU = DM_SUMLU + dble(NEW_LU)
942.EQ.
IF(KEEP_LOAD(201)0)THEN
943 CHECK_MEM = CHECK_MEM + INC_MEM
945 CHECK_MEM = CHECK_MEM + INC_MEM - NEW_LU
947.NE.
IF ( MEM_VALUE CHECK_MEM ) THEN
950 & CHECK_MEM, MEM_VALUE, INC_MEM,NEW_LU
953 IF (PROCESS_BANDE) THEN
956 IF(BDC_POOL_MNG) THEN
957.EQ.
IF(SBTR_WHICH_M0)THEN
958 IF (SSARBR) SBTR_CUR_LOCAL = SBTR_CUR_LOCAL+
959 & dble(INC_MEM-NEW_LU)
961 IF (SSARBR) SBTR_CUR_LOCAL = SBTR_CUR_LOCAL+
965.NOT.
IF ( BDC_MEM ) THEN
968.AND.
IF (BDC_SBTR SSARBR) THEN
969.EQ..AND..NE.
IF((SBTR_WHICH_M0)(KEEP(201)0))THEN
970 SBTR_CUR(MYID) = SBTR_CUR(MYID)+dble(INC_MEM-NEW_LU)
972 SBTR_CUR(MYID) = SBTR_CUR(MYID)+dble(INC_MEM)
974 SBTR_TMP = SBTR_CUR(MYID)
978 IF ( NEW_LU > 0_8 ) THEN
979 INC_MEM = INC_MEM - NEW_LU
981 DM_MEM( MYID ) = DM_MEM(MYID) + dble(INC_MEM)
982 MAX_PEAK_STK=max(MAX_PEAK_STK,DM_MEM(MYID))
983.AND.
IF(BDC_M2_MEMREMOVE_NODE_FLAG_MEM)THEN
984.NE.
IF(dble(INC_MEM)REMOVE_NODE_COST_MEM)THEN
985.GT.
IF(dble(INC_MEM)REMOVE_NODE_COST_MEM)THEN
986 DELTA_MEM = DELTA_MEM +
987 & (dble(INC_MEM)-REMOVE_NODE_COST_MEM)
990 DELTA_MEM = DELTA_MEM -
991 & (REMOVE_NODE_COST_MEM-dble(INC_MEM))
997 DELTA_MEM = DELTA_MEM + dble(INC_MEM)
999.NE..OR.
IF ((KEEP(48)5)
1000.EQ..AND.
& ((KEEP(48)5)(abs(DELTA_MEM)
1001.GE.
& 0.2d0*dble(LRLUS))))THEN
1002 IF ( abs(DELTA_MEM) > DM_THRES_MEM ) THEN
1003 SEND_MEM = DELTA_MEM
1005 CALL DMUMPS_BUF_SEND_UPDATE_LOAD(
1007 & BDC_MEM,BDC_MD, COMM_LD,
1010 & SEND_MEM,SBTR_TMP,
1013 & MYID, KEEP, IERR )
1014 IF ( IERR == -1 )THEN
1015 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
1016 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
1022.NE.
ELSE IF ( IERR 0 ) THEN
1023 WRITE(*,*) "Internal Error in DMUMPS_LOAD_MEM_UPDATE",IERR
1031 IF(REMOVE_NODE_FLAG_MEM)THEN
1032 REMOVE_NODE_FLAG_MEM=.FALSE.
1034 END SUBROUTINE DMUMPS_LOAD_MEM_UPDATE
1035 INTEGER FUNCTION DMUMPS_LOAD_LESS( K69, MEM_DISTRIB,MSG_SIZE )
1037 INTEGER i, NLESS, K69
1038 INTEGER, DIMENSION(0:NPROCS-1) :: MEM_DISTRIB
1039 DOUBLE PRECISION LREF
1040 DOUBLE PRECISION MSG_SIZE
1045 WLOAD(1:NPROCS) = LOAD_FLOPS(0:NPROCS-1)
1046 IF(BDC_M2_FLOPS)THEN
1048 WLOAD(i)=WLOAD(i)+NIV2(i)
1052 CALL DMUMPS_ARCHGENWLOAD(MEM_DISTRIB,MSG_SIZE,IDWLOAD,NPROCS)
1054 LREF = LOAD_FLOPS(MYID)
1056.LT.
IF (WLOAD(i)LREF) NLESS=NLESS+1
1058 DMUMPS_LOAD_LESS = NLESS
1060 END FUNCTION DMUMPS_LOAD_LESS
1061 SUBROUTINE DMUMPS_LOAD_SET_SLAVES(MEM_DISTRIB,MSG_SIZE,DEST,
1065 INTEGER DEST(NSLAVES)
1066 INTEGER, DIMENSION(0:NPROCS - 1) :: MEM_DISTRIB
1068 DOUBLE PRECISION MSG_SIZE
1069.eq.
IF ( NSLAVESNPROCS-1 ) THEN
1073.GT.
IF (JNPROCS) J=1
1080 CALL MUMPS_SORT_DOUBLES(NPROCS, WLOAD, IDWLOAD)
1089.NE.
IF (NBDESTNSLAVES) THEN
1090 DEST(NSLAVES) = IDWLOAD(NSLAVES+1)
1094 do i=NSLAVES+1,NPROCS
1095.NE.
IF(IDWLOAD(i)MYID)THEN
1103 END SUBROUTINE DMUMPS_LOAD_SET_SLAVES
1104 SUBROUTINE DMUMPS_LOAD_END( INFO1, NSLAVES, IERR )
1106 USE MUMPS_FUTURE_NIV2
1108 INTEGER, INTENT(IN) :: INFO1
1109 INTEGER, INTENT(IN) :: NSLAVES
1110 INTEGER, INTENT(OUT) :: IERR
1111 INTEGER :: DUMMY_COMMUNICATOR
1113 DUMMY_COMMUNICATOR = -999
1114 CALL DMUMPS_CLEAN_PENDING( INFO1, KEEP_LOAD(1), BUF_LOAD_RECV(1),
1116 & LBUF_LOAD_RECV_BYTES, DUMMY_COMMUNICATOR, COMM_LD,
1121 DEALLOCATE( LOAD_FLOPS )
1123 DEALLOCATE( IDWLOAD )
1124 DEALLOCATE(FUTURE_NIV2)
1127 DEALLOCATE(LU_USAGE)
1128 DEALLOCATE(TAB_MAXS)
1130 IF ( BDC_MEM ) DEALLOCATE( DM_MEM )
1131 IF ( BDC_POOL) DEALLOCATE( POOL_MEM )
1133 DEALLOCATE( SBTR_MEM )
1134 DEALLOCATE( SBTR_CUR )
1135 DEALLOCATE(SBTR_FIRST_POS_IN_POOL)
1136 NULLIFY(MY_FIRST_LEAF)
1138 NULLIFY(MY_ROOT_SBTR)
1140.EQ.
IF(KEEP_LOAD(76)4)THEN
1141 NULLIFY(DEPTH_FIRST_LOAD)
1143.EQ.
IF(KEEP_LOAD(76)5)THEN
1146.EQ..OR..EQ.
IF((KEEP_LOAD(76)4)(KEEP_LOAD(76)6))THEN
1147 NULLIFY(DEPTH_FIRST_LOAD)
1148 NULLIFY(DEPTH_FIRST_SEQ_LOAD)
1149 NULLIFY(SBTR_ID_LOAD)
1151.OR.
IF (BDC_M2_MEMBDC_M2_FLOPS) THEN
1152 DEALLOCATE(NB_SON,POOL_NIV2,POOL_NIV2_COST, NIV2)
1154.EQ..OR..EQ.
IF((KEEP_LOAD(81)2)(KEEP_LOAD(81)3))THEN
1155 DEALLOCATE(CB_COST_MEM)
1156 DEALLOCATE(CB_COST_ID)
1163 NULLIFY(PROCNODE_LOAD)
1167 NULLIFY(STEP_TO_NIV2_LOAD)
1169.OR.
IF (BDC_SBTRBDC_POOL_MNG) THEN
1170 DEALLOCATE(MEM_SUBTREE)
1171 DEALLOCATE(SBTR_PEAK_ARRAY)
1172 DEALLOCATE(SBTR_CUR_ARRAY)
1174 CALL DMUMPS_BUF_DEALL_LOAD_BUFFER( IERR )
1175 DEALLOCATE(BUF_LOAD_RECV)
1177 END SUBROUTINE DMUMPS_LOAD_END
1178 RECURSIVE SUBROUTINE DMUMPS_LOAD_RECV_MSGS(COMM)
1181 INCLUDE 'mumps_tags.h
'
1182 INTEGER MSGTAG, MSGLEN, MSGSOU,COMM
1184 INTEGER :: STATUS(MPI_STATUS_SIZE)
1187 CALL MPI_IPROBE( MPI_ANY_SOURCE, MPI_ANY_TAG, COMM,
1188 & FLAG, STATUS, IERR_MPI )
1190 KEEP_LOAD(65)=KEEP_LOAD(65)+1
1191 KEEP_LOAD(267)=KEEP_LOAD(267)-1
1192 MSGTAG = STATUS( MPI_TAG )
1193 MSGSOU = STATUS( MPI_SOURCE )
1194.NE.
IF ( MSGTAG UPDATE_LOAD) THEN
1195 write(*,*) "Internal error 1 in DMUMPS_LOAD_RECV_MSGS",
1199 CALL MPI_GET_COUNT(STATUS, MPI_PACKED, MSGLEN, IERR_MPI)
1200 IF ( MSGLEN > LBUF_LOAD_RECV_BYTES ) THEN
1201 write(*,*) "Internal error 2 in DMUMPS_LOAD_RECV_MSGS",
1202 & MSGLEN, LBUF_LOAD_RECV_BYTES
1205 CALL MPI_RECV( BUF_LOAD_RECV, LBUF_LOAD_RECV_BYTES,
1206 & MPI_PACKED, MSGSOU, MSGTAG, COMM_LD, STATUS, IERR_MPI)
1207 CALL DMUMPS_LOAD_PROCESS_MESSAGE( MSGSOU, BUF_LOAD_RECV,
1208 & LBUF_LOAD_RECV, LBUF_LOAD_RECV_BYTES )
1212 END SUBROUTINE DMUMPS_LOAD_RECV_MSGS
1213 RECURSIVE SUBROUTINE DMUMPS_LOAD_PROCESS_MESSAGE
1214 & ( MSGSOU, BUFR, LBUFR, LBUFR_BYTES )
1215 USE MUMPS_FUTURE_NIV2
1217 INTEGER MSGSOU, LBUFR, LBUFR_BYTES
1218 INTEGER BUFR( LBUFR )
1220 INTEGER POSITION, WHAT, NSLAVES, i
1222 DOUBLE PRECISION LOAD_RECEIVED
1223 INTEGER INODE_RECEIVED,NCB_RECEIVED
1224 DOUBLE PRECISION SURF
1225 INTEGER, POINTER, DIMENSION (:) :: LIST_SLAVES
1226 DOUBLE PRECISION, POINTER, DIMENSION (:) :: LOAD_INCR
1227 EXTERNAL MUMPS_TYPENODE
1228 INTEGER MUMPS_TYPENODE
1230 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1231 & WHAT, 1, MPI_INTEGER,
1232 & COMM_LD, IERR_MPI )
1233 IF ( WHAT == 0 ) THEN
1234 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1236 & MPI_DOUBLE_PRECISION,
1237 & COMM_LD, IERR_MPI )
1238 LOAD_FLOPS( MSGSOU ) = LOAD_FLOPS(MSGSOU) + LOAD_RECEIVED
1240 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1241 & LOAD_RECEIVED, 1, MPI_DOUBLE_PRECISION,
1242 & COMM_LD, IERR_MPI )
1243 DM_MEM(MSGSOU) = DM_MEM(MSGSOU) + LOAD_RECEIVED
1244 MAX_PEAK_STK=max(MAX_PEAK_STK,DM_MEM(MSGSOU))
1247 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1248 & LOAD_RECEIVED, 1, MPI_DOUBLE_PRECISION,
1249 & COMM_LD, IERR_MPI )
1250 SBTR_CUR(MSGSOU)=LOAD_RECEIVED
1253 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1254 & LOAD_RECEIVED, 1, MPI_DOUBLE_PRECISION,
1255 & COMM_LD, IERR_MPI )
1256.EQ.
IF(KEEP_LOAD(201)0)THEN
1257 LU_USAGE(MSGSOU)=LOAD_RECEIVED
1260.OR..EQ.
ELSEIF (( WHAT == 1)(WHAT19)) THEN
1261 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1262 & NSLAVES, 1, MPI_INTEGER,
1263 & COMM_LD, IERR_MPI )
1264 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1265 & INODE_RECEIVED, 1, MPI_INTEGER,
1266 & COMM_LD, IERR_MPI )
1267 LIST_SLAVES => IDWLOAD
1269 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1270 & LIST_SLAVES(1), NSLAVES, MPI_INTEGER,
1271 & COMM_LD, IERR_MPI)
1272 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1273 & LOAD_INCR(1), NSLAVES, MPI_DOUBLE_PRECISION,
1274 & COMM_LD, IERR_MPI)
1276 LOAD_FLOPS(LIST_SLAVES(i)) =
1277 & LOAD_FLOPS(LIST_SLAVES(i)) +
1281 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1282 & LOAD_INCR(1), NSLAVES, MPI_DOUBLE_PRECISION,
1283 & COMM_LD, IERR_MPI)
1285 DM_MEM(LIST_SLAVES(i)) = DM_MEM(LIST_SLAVES(i)) +
1287 MAX_PEAK_STK=max(MAX_PEAK_STK,DM_MEM(LIST_SLAVES(i)))
1291 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1292 & LOAD_INCR(1), NSLAVES, MPI_DOUBLE_PRECISION,
1293 & COMM_LD, IERR_MPI)
1294 CALL DMUMPS_LOAD_CLEAN_MEMINFO_POOL(INODE_RECEIVED)
1295 CB_COST_ID(POS_ID)=INODE_RECEIVED
1296 CB_COST_ID(POS_ID+1)=NSLAVES
1297 CB_COST_ID(POS_ID+2)=POS_MEM
1300 WRITE(*,*)MYID,':
',LIST_SLAVES(i),'->
',LOAD_INCR(i)
1301 CB_COST_MEM(POS_MEM)=int(LIST_SLAVES(i),8)
1303 CB_COST_MEM(POS_MEM)=int(LOAD_INCR(i),8)
1307 NULLIFY( LIST_SLAVES )
1308 NULLIFY( LOAD_INCR )
1309 ELSE IF (WHAT == 2 ) THEN
1310.not.
IF ( BDC_POOL ) THEN
1311 WRITE(*,*) "Internal error 2 in DMUMPS_LOAD_PROCESS_MESSAGE"
1314 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1316 & MPI_DOUBLE_PRECISION,
1317 & COMM_LD, IERR_MPI )
1318 POOL_MEM(MSGSOU)=LOAD_RECEIVED
1319 ELSE IF ( WHAT == 3 ) THEN
1320.NOT.
IF ( BDC_SBTR) THEN
1321 WRITE(*,*) "Internal error 3 in DMUMPS_LOAD_PROCESS_MESSAGE"
1324 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1326 & MPI_DOUBLE_PRECISION,
1327 & COMM_LD, IERR_MPI )
1328 SBTR_MEM(MSGSOU)=SBTR_MEM(MSGSOU)+LOAD_RECEIVED
1329 ELSE IF (WHAT == 4) THEN
1330 FUTURE_NIV2(MSGSOU+1)=0
1332 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1333 & SURF, 1, MPI_DOUBLE_PRECISION,
1334 & COMM_LD, IERR_MPI )
1335 MD_MEM(MSGSOU)=999999999_8
1336 TAB_MAXS(MSGSOU)=TAB_MAXS(MSGSOU)+int(SURF,8)
1338.OR.
IF(BDC_M2_MEMBDC_M2_FLOPS)THEN
1340 ELSE IF (WHAT == 5) THEN
1341.NOT..AND..NOT.
IF((BDC_M2_MEM)(BDC_M2_FLOPS))THEN
1342 WRITE(*,*) "Internal error 7 in DMUMPS_LOAD_PROCESS_MESSAGE"
1345 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1346 & INODE_RECEIVED, 1,
1348 & COMM_LD, IERR_MPI )
1350 CALL DMUMPS_PROCESS_NIV2_MEM_MSG(INODE_RECEIVED)
1351 ELSEIF(BDC_M2_FLOPS) THEN
1352 CALL DMUMPS_PROCESS_NIV2_FLOPS_MSG(INODE_RECEIVED)
1354.EQ..OR..EQ.
IF((KEEP_LOAD(81)2)(KEEP_LOAD(81)3))THEN
1355 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1356 & INODE_RECEIVED, 1,
1358 & COMM_LD, IERR_MPI )
1359 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1362 & COMM_LD, IERR_MPI )
1364 & MUMPS_TYPENODE(PROCNODE_LOAD(STEP_LOAD(INODE_RECEIVED)),
1365.EQ.
& KEEP_LOAD(199))1
1367 CB_COST_ID(POS_ID)=INODE_RECEIVED
1368 CB_COST_ID(POS_ID+1)=1
1369 CB_COST_ID(POS_ID+2)=POS_MEM
1371 CB_COST_MEM(POS_MEM)=int(MSGSOU,8)
1373 CB_COST_MEM(POS_MEM)=int(NCB_RECEIVED,8)*
1374 & int(NCB_RECEIVED,8)
1378 ELSE IF ( WHAT == 6 ) THEN
1379.NOT..AND..NOT.
IF((BDC_M2_MEM)(BDC_M2_FLOPS))THEN
1380 WRITE(*,*) "Internal error 8 in DMUMPS_LOAD_PROCESS_MESSAGE"
1383 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1385 & MPI_DOUBLE_PRECISION,
1386 & COMM_LD, IERR_MPI )
1388 NIV2(MSGSOU+1) = LOAD_RECEIVED
1389 ELSEIF(BDC_M2_FLOPS) THEN
1390 NIV2(MSGSOU+1) = NIV2(MSGSOU+1) + LOAD_RECEIVED
1391.LT.
IF(NIV2(MSGSOU+1)0.0D0)THEN
1392.LE.
IF(abs(NIV2(MSGSOU+1)) 1.0D-3) THEN
1393 NIV2(MSGSOU+1)=0.0D0
1395 WRITE(*,*)'problem with niv2_flops message
',
1396 & NIV2(MSGSOU+1),MSGSOU,LOAD_RECEIVED
1401 ELSEIF(WHAT == 17)THEN
1402 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1404 & MPI_DOUBLE_PRECISION,
1405 & COMM_LD, IERR_MPI )
1407 NIV2(MSGSOU+1) = LOAD_RECEIVED
1408 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1410 & MPI_DOUBLE_PRECISION,
1411 & COMM_LD, IERR_MPI )
1413 DM_MEM(MYID)=DM_MEM(MYID)+LOAD_RECEIVED
1414 ELSEIF(BDC_POOL)THEN
1415 POOL_MEM(MSGSOU)=LOAD_RECEIVED
1417 ELSEIF(BDC_M2_FLOPS) THEN
1418 NIV2(MSGSOU+1) = NIV2(MSGSOU+1) + LOAD_RECEIVED
1419.LT.
IF(NIV2(MSGSOU+1)0.0D0)THEN
1420.LE.
IF(abs(NIV2(MSGSOU+1)) 1.0D-3) THEN
1421 NIV2(MSGSOU+1)=0.0D0
1423 WRITE(*,*)'problem with niv2_flops message
',
1424 & NIV2(MSGSOU+1),MSGSOU,LOAD_RECEIVED
1428 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1430 & MPI_DOUBLE_PRECISION,
1431 & COMM_LD, IERR_MPI )
1432 LOAD_FLOPS( MSGSOU ) = LOAD_FLOPS(MSGSOU) + LOAD_RECEIVED
1434 ELSEIF ( WHAT == 7 ) THEN
1436 WRITE(*,*)MYID,': internal error 4
1440 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1441 & NSLAVES, 1, MPI_INTEGER,
1442 & COMM_LD, IERR_MPI )
1443 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1444 & INODE_RECEIVED, 1, MPI_INTEGER,
1445 & COMM_LD, IERR_MPI )
1446 LIST_SLAVES => IDWLOAD
1448 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1449 & LIST_SLAVES(1), NSLAVES, MPI_INTEGER,
1450 & COMM_LD, IERR_MPI )
1451 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1452 & LOAD_INCR(1), NSLAVES, MPI_DOUBLE_PRECISION,
1453 & COMM_LD, IERR_MPI )
1455 MD_MEM(LIST_SLAVES(i)) =
1456 & MD_MEM(LIST_SLAVES(i)) +
1457 & int(LOAD_INCR(i),8)
1458.EQ.
IF(FUTURE_NIV2(LIST_SLAVES(i)+1)0)THEN
1459 MD_MEM(LIST_SLAVES(i))=999999999_8
1462 ELSEIF ( WHAT == 8 ) THEN
1464 WRITE(*,*)MYID,': internal error 5
1468 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1470 & MPI_DOUBLE_PRECISION,
1471 & COMM_LD, IERR_MPI )
1472 MD_MEM(MSGSOU)=MD_MEM(MSGSOU)+int(LOAD_RECEIVED,8)
1473.EQ.
IF(FUTURE_NIV2(MSGSOU+1)0)THEN
1474 MD_MEM(MSGSOU)=999999999_8
1476 ELSEIF ( WHAT == 9 ) THEN
1478 WRITE(*,*)MYID,': internal error 6
1482 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
1484 & MPI_DOUBLE_PRECISION,
1485 & COMM_LD, IERR_MPI )
1486 TAB_MAXS(MSGSOU)=int(LOAD_RECEIVED,8)
1488 WRITE(*,*) "Internal error 1 in DMUMPS_LOAD_PROCESS_MESSAGE"
1492 END SUBROUTINE DMUMPS_LOAD_PROCESS_MESSAGE
1493 integer function DMUMPS_LOAD_LESS_CAND
1494 & (MEM_DISTRIB,CAND,
1499 integer, intent(in) :: K69, SLAVEF
1500 INTEGER, intent(in) :: CAND(SLAVEF+1)
1501 INTEGER, DIMENSION(0:NPROCS - 1), intent(in) :: MEM_DISTRIB
1502 INTEGER, intent(out) :: NMB_OF_CAND
1504 DOUBLE PRECISION lref
1505 DOUBLE PRECISION MSG_SIZE
1507 NMB_OF_CAND=CAND(SLAVEF+1)
1509 WLOAD(i)=LOAD_FLOPS(CAND(i))
1510 IF(BDC_M2_FLOPS)THEN
1511 WLOAD(i)=WLOAD(i)+NIV2(CAND(i)+1)
1515 CALL DMUMPS_ARCHGENWLOAD(MEM_DISTRIB,MSG_SIZE,
1518 lref = LOAD_FLOPS(MYID)
1520.lt.
if (WLOAD(i)lref) nless=nless+1
1522 DMUMPS_LOAD_LESS_CAND = nless
1524 end function DMUMPS_LOAD_LESS_CAND
1525 subroutine DMUMPS_LOAD_SET_SLAVES_CAND
1526 & (MEM_DISTRIB,CAND,
1529 & nslaves_inode, DEST)
1531 integer, intent(in) :: nslaves_inode, SLAVEF
1532 integer, intent(in) :: CAND(SLAVEF+1)
1533 integer, dimension(0:NPROCS - 1), intent(in) :: MEM_DISTRIB
1534 integer, intent(out) :: DEST(CAND(SLAVEF+1))
1535 integer i,j,NMB_OF_CAND
1536 external MUMPS_SORT_DOUBLES
1537 NMB_OF_CAND = CAND(SLAVEF+1)
1538.ge..or.
if(nslaves_inodeNPROCS
1539.gt.
& nslaves_inodeNMB_OF_CAND) then
1541 & nslaves_inode, NPROCS, NMB_OF_CAND
1544.eq.
if (nslaves_inodeNPROCS-1) then
1546 do i=1,nslaves_inode
1555 call MUMPS_SORT_DOUBLES(NMB_OF_CAND,
1556 & WLOAD(1),IDWLOAD(1) )
1557 do i=1,nslaves_inode
1558 DEST(i)= CAND(IDWLOAD(i))
1561 do i=nslaves_inode+1,NMB_OF_CAND
1562 DEST(i)= CAND(IDWLOAD(i))
1567 end subroutine DMUMPS_LOAD_SET_SLAVES_CAND
1568 SUBROUTINE DMUMPS_INIT_ALPHA_BETA(K69)
1601.EQ.
IF (K69 10) THEN
1606.EQ.
IF (K69 11) THEN
1611.EQ.
IF (K69 12) THEN
1619 END SUBROUTINE DMUMPS_INIT_ALPHA_BETA
1620 SUBROUTINE DMUMPS_ARCHGENWLOAD(MEM_DISTRIB,MSG_SIZE,ARRAY_ADM,LEN)
1623 INTEGER, DIMENSION(0:NPROCS-1) :: MEM_DISTRIB
1624 DOUBLE PRECISION MSG_SIZE,FORBIGMSG
1625 INTEGER ARRAY_ADM(LEN)
1626 DOUBLE PRECISION MY_LOAD
1631 IF(BDC_M2_FLOPS)THEN
1632 MY_LOAD=LOAD_FLOPS(MYID)+NIV2(MYID+1)
1634 MY_LOAD=LOAD_FLOPS(MYID)
1636.gt.
IF((MSG_SIZE * dble(K35) ) 3200000.0d0) THEN
1641.EQ..AND.
IF ((MEM_DISTRIB(ARRAY_ADM(i)) 1)
1642.LT.
& WLOAD(i) MY_LOAD ) THEN
1643 WLOAD(i) = WLOAD(i)/MY_LOAD
1645.NE.
IF ( MEM_DISTRIB(ARRAY_ADM(i)) 1 ) THEN
1646 WLOAD(i) = WLOAD(i) *
1647 & dble(MEM_DISTRIB(ARRAY_ADM(i)))
1656.EQ..AND.
IF ((MEM_DISTRIB(ARRAY_ADM(i)) 1)
1657.LT.
& WLOAD(i) MY_LOAD ) THEN
1658 WLOAD(i) = WLOAD(i) / MY_LOAD
1660.NE.
IF(MEM_DISTRIB(ARRAY_ADM(i)) 1) THEN
1661 WLOAD(i) = (WLOAD(i) +
1662 & ALPHA * MSG_SIZE * dble(K35) +
1668 END SUBROUTINE DMUMPS_ARCHGENWLOAD
1669 SUBROUTINE DMUMPS_LOAD_MASTER_2_ALL(MYID, SLAVEF, COMM,
1670 & TAB_POS, NASS, KEEP,KEEP8, LIST_SLAVES, NSLAVES,INODE)
1672 USE MUMPS_FUTURE_NIV2
1674 INTEGER, INTENT (IN) :: MYID, SLAVEF, COMM, NASS, NSLAVES
1675 INTEGER, INTENT (IN) :: TAB_POS(SLAVEF+2)
1676 INTEGER, INTENT (IN) :: LIST_SLAVES( NSLAVES )
1678 INTEGER(8) KEEP8(150)
1679 INTEGER NCB, NFRONT, NBROWS_SLAVE
1680 INTEGER i, IERR,WHAT,INODE, allocok
1681 LOGICAL :: EXIT_FLAG
1682 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MEM_INCREMENT
1683 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: FLOPS_INCREMENT
1684 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CB_BAND
1685 ALLOCATE(MEM_INCREMENT(NSLAVES), stat=allocok)
1686.ne.
if(allocok0) then
1687 WRITE(6,*) ' allocation
'
1691 ALLOCATE(flops_increment(nslaves), stat=allocok)
1692 if(allocok.ne.0)
then
1693 WRITE(6,*)
' Allocation error of FLOPS_INCREMENT '
1694 & //
'in routine DMUMPS_LOAD_MASTER_2_ALL'
1697 ALLOCATE(cb_band(nslaves), stat=allocok)
1698 if(allocok.ne.0)
then
1699 WRITE(6,*)
' Allocation error of CB_BAND '
1700 & //
'in routine DMUMPS_LOAD_MASTER_2_ALL'
1703 IF((keep(81).NE.2).AND.(keep(81).NE.3))
THEN
1710 WRITE(*,*)
"Internal error in DMUMPS_LOAD_MASTER_2_ALL"
1717 IF (ierr == -1 )
THEN
1725 ELSE IF ( ierr .NE. 0 )
THEN
1726 WRITE(*,*)
"Internal Error in DMUMPS_LOAD_MASTER_2_ALL",
1732 IF ( nslaves /= tab_pos(slavef + 2) )
THEN
1733 write(*,*)
"Error 1 in DMUMPS_LOAD_MASTER_2_ALL",
1734 & nslaves, tab_pos(slavef+2)
1737 ncb = tab_pos(nslaves+1) - 1
1740 nbrows_slave = tab_pos(i+1) - tab_pos(i)
1741 IF ( keep(50) == 0 )
THEN
1742 flops_increment( i ) = (dble(nbrows_slave)*dble( nass ))+
1743 & dble(nbrows_slave) * dble(nass) *
1744 & dble(2*nfront-nass-1)
1746 flops_increment( i ) = dble(nbrows_slave) * dble(nass ) *
1747 & dble( 2 * ( nass + tab_pos(i+1) - 1 )
1748 & - nbrows_slave - nass + 1 )
1751 IF ( keep(50) == 0 )
THEN
1752 mem_increment( i ) = dble(nbrows_slave) *
1755 mem_increment( i ) = dble(nbrows_slave) *
1756 & dble( nass + tab_pos(i+1) - 1 )
1759 IF((keep(81).NE.2).AND.(keep(81).NE.3))
THEN
1760 cb_band(i)=dble(-999999)
1762 IF ( keep(50) == 0 )
THEN
1763 cb_band( i ) = dble(nbrows_slave) *
1766 cb_band( i ) = dble(nbrows_slave) *
1767 & dble(tab_pos(i+1)-1)
1771 IF((keep(81).EQ.2).OR.(keep(81).EQ.3))
THEN
1786 & nslaves, list_slaves,inode,
1788 & flops_increment,cb_band, what, keep, ierr)
1789 IF ( ierr == -1 )
THEN
1797 ELSE IF ( ierr .NE. 0 )
THEN
1798 WRITE(*,*)
"Internal Error in DMUMPS_LOAD_MASTER_2_ALL",
1805 & + flops_increment(i)
1808 & + mem_increment(i)
1813 DEALLOCATE(mem_increment,flops_increment,cb_band)
1818 & PROCNODE, KEEP,KEEP8, SLAVEF, COMM, MYID, STEP, N,
1823 INTEGER lpool, slavef, comm,
myid
1824 INTEGER n, keep(500)
1825 INTEGER(8) keep8(150)
1826 INTEGER pool( lpool ), procnode( keep(28) ), step( n )
1827 INTEGER nd( keep(28) ), fils( n )
1828 INTEGER i, inode, nelim, nfr, level, ierr, what
1829 DOUBLE PRECISION cost
1830 LOGICAL :: exit_flag
1831 INTEGER nbinsubtree,nbtop,insubtree
1834 nbinsubtree = pool(lpool)
1835 nbtop = pool(lpool - 1)
1836 insubtree = pool(lpool - 2)
1840 IF((keep(76).EQ.0).OR.(keep(76).EQ.2))
THEN
1842 DO i = lpool-nbtop-2,
min(lpool-3,lpool-nbtop-2+3)
1844 IF (inode .LE. n .AND. inode .GE. 1 )
THEN
1851 DO i = nbinsubtree,
max(1,nbinsubtree-3), -1
1853 IF (inode .LE. n .AND. inode .GE. 1 )
THEN
1861 IF(keep(76).EQ.1)
THEN
1862 IF(insubtree.EQ.1)
THEN
1863 DO i = nbinsubtree,
max(1,nbinsubtree-3), -1
1865 IF (inode .LE. n .AND. inode .GE. 1 )
THEN
1872 DO i = lpool-nbtop-2,
min(lpool-3,lpool-nbtop-2+3)
1874 IF (inode .LE. n .AND. inode .GE. 1 )
THEN
1883 &
'Internal error: Unknown pool management strategy'
1896 nfr = nd( step(inode) )
1898 IF (level .EQ. 1)
THEN
1899 cost = dble( nfr ) * dble( nfr )
1901 IF ( keep(50) == 0 )
THEN
1902 cost = dble( nfr ) * dble( nelim )
1904 cost = dble( nelim ) * dble( nelim )
1914 & cost, dble(0),
myid, keep, ierr )
1917 IF ( ierr == -1 )
THEN
1924 ELSE IF ( ierr .NE. 0 )
THEN
1925 WRITE(*,*)
"Internal Error in DMUMPS_LOAD_POOL_UPD_NEW_POOL",
1933 & OK,INODE,POOL,LPOOL,MYID,SLAVEF,COMM,KEEP,KEEP8)
1937 INTEGER lpool,
myid,slavef,comm,inode
1938 INTEGER pool(lpool),keep(500)
1939 INTEGER(8) keep8(150)
1942 DOUBLE PRECISION cost
1943 LOGICAL flag, exit_flag
1946 IF((inode.LE.0).OR.(inode.GT.
n_load))
THEN
1974 & what, comm, slavef,
1977 &
myid, keep, ierr )
1978 IF ( ierr == -1 )
THEN
1985 ELSE IF ( ierr .NE. 0 )
THEN
1987 &
"Internal Error 1 in DMUMPS_LOAD_SBTR_UPD_NEW_POOL",
2005 & what, comm, slavef,
2007 & cost, dble(0),
myid, keep, ierr )
2008 IF ( ierr == -1 )
THEN
2015 ELSE IF ( ierr .NE. 0 )
THEN
2017 &
"Internal Error 3 in DMUMPS_LOAD_SBTR_UPD_NEW_POOL",
2035 & (slavef,keep,keep8,procs,mem_distrib,ncb,nfront,
2036 & nslaves_node,tab_pos,
2037 & slaves_list,size_slaves_list,
myid)
2039 INTEGER,
intent(in) :: KEEP(500),SIZE_SLAVES_LIST
2040 INTEGER(8) KEEP8(150)
2041 INTEGER,
intent(in) :: SLAVEF, NFRONT, NCB,MYID
2042 INTEGER,
intent(in) :: PROCS(SLAVEF+1)
2043 INTEGER,
intent(in) :: MEM_DISTRIB(0:SLAVEF-1)
2044 INTEGER,
intent(out):: SLAVES_LIST(SIZE_SLAVES_LIST)
2045 INTEGER,
intent(out):: TAB_POS(SLAVEF+2)
2047INTEGER NUMBER_OF_PROCS,K47, K48, K50
2049 DOUBLE PRECISION DK821
2052 INTEGER OTHERS,CHOSEN,SMALL_SET,
2053 DOUBLE PRECISION SOMME,TMP_SUM
2055 INTEGER ADDITIONNAL_ROWS,i,X,REF,POS
2056 INTEGER(8)::TOTAL_MEM
2058 DOUBLE PRECISION TEMP(SLAVEF),PEAK
2059 INTEGER TEMP_ID(SLAVEF),NB_ROWS(SLAVEF)
2061 DOUBLE PRECISION MPI_WTIME
2064 &
": Internal Error 1 in DMUMPS_SET_PARTI_ACTV_MEM"
2072 IF ( keep(24) == 0 .OR. keep(24) == 1 )
THEN
2073 force_cand = .false.
2075 force_cand = (mod(keep(24),2).eq.0)
2078 WRITE(*,*)
'DMUMPS_COMPUTE_PARTI_ACTV_MEM_K821
2079 & should be called with KEEP(48) different from 4'
2083 kmax=int(k821/int(nfront,8))
2085 DO i=1,procs(slavef+1)
2089 number_of_procs=procs(slavef+1)
2090 others=number_of_procs
2092 number_of_procs=slavef
2094 DO i=1,number_of_procs
2097 others=number_of_procs-1
2101 total_mem=int(ncb,8)*int(nfront,8)
2105 DO i=1,number_of_procs
2115 temp(j)=temp(j)+
pool_mem(temp_id(j))
2118 temp(j)=temp(j)+
niv2(temp_id(j)+1)
2127 &
dm_mem(myid)+dble(nfront)*dble(nfront-ncb))
2130 &
dm_mem(myid)+dble(nfront-ncb)*dble(nfront-ncb))
2132 peak=
max(peak,temp(others))
2134 DO i=1,number_of_procs
2135 somme=somme+temp(others)-temp(i)
2137 IF(somme.LE.dble(total_mem))
THEN
2143 somme=somme+temp(others)-temp(i)
2145 IF(dble(total_mem).GE.somme)
THEN
2151 IF((temp(others)-temp(i)).GT.dk821)
THEN
2154 tmp_sum=temp(others)-temp(i)
2156 x=int(tmp_sum/dble(nfront))
2157 IF((acc+x).GT.ncb) x=ncb-acc
2160 IF((temp(others)-temp(i)).GT.dk821)
THEN
2163 tmp_sum=temp(others)-temp(i)
2165 x=int((-dble(nfront-ncb+acc)
2166 & +sqrt(((dble(nfront-ncb+acc)*
2167 & dble(nfront-ncb+acc))+dble(4)*
2170 IF((acc+x).GT.ncb) x=ncb-acc
2172 WRITE(*,*)
"Internal Error 2 in
2173 & DMUMPS_SET_PARTI_ACTV_MEM"
2180 IF(ncb-acc.LT.kmin)
GOTO 111
2181 IF(ncb.EQ.acc)
GOTO 111
2184 IF((acc.GT.ncb))
THEN
2189 WRITE(*,*)
'NCB=',ncb,
',SOMME=',x
2191 &
": Internal Error 3 in DMUMPS_SET_PARTI_ACTV_MEM"
2194 IF((ncb.NE.acc))
THEN
2197 additionnal_rows=ncb-acc
2198 nb_rows(chosen)=nb_rows(chosen)+additionnal_rows
2200 tmp_sum=dble(total_mem)/dble(number_of_procs)
2204 x=int((-dble(nfront-ncb+acc)
2205 & +sqrt(((dble(nfront-ncb+acc)*
2206 & dble(nfront-ncb+acc))+dble(4)*
2209 IF((acc+x).GT.ncb) x=ncb-acc
2213 IF(ncb-acc.LT.kmin)
GOTO 002
2214 IF(ncb.EQ.acc)
GOTO 002
2218 nb_rows(chosen)=nb_rows(chosen)+(ncb-acc)
2223 additionnal_rows=ncb-acc
2225 IF(int(dble(additionnal_rows)/
2226 & dble(i)).NE.0)
THEN
2231 x=int(dble(additionnal_rows)/dble(i))
2233 nb_rows(j)=nb_rows(j)+x
2234 additionnal_rows=additionnal_rows-x
2236 IF(additionnal_rows.NE.0)
THEN
2237 nb_rows(1)=nb_rows(1)+additionnal_rows
2241 IF(nb_rows(chosen).EQ.0) chosen=chosen-1
2249 somme=(dble(i)*temp(i))-somme
2250 IF(dble(total_mem).GE.somme)
GOTO 444
2255 IF(temp(j).EQ.temp(i))
THEN
2272 IF((temp(small_set)-temp(i)).GT.dk821)
THEN
2275 tmp_sum=temp(small_set)-temp(i)
2277 x=int(tmp_sum/dble(nfront))
2278 IF((acc+x).GT.ncb) x=ncb-acc
2281 IF((temp(small_set)-temp(i)).GT.dk821)
THEN
2284 tmp_sum=temp(small_set)-temp(i)
2286 x=int((-dble(nfront-ncb+acc)
2287 & +sqrt(((dble(nfront-ncb+acc)*
2288 & dble(nfront-ncb+acc))+dble(4)*
2293 &
': Internal error 4 in DMUMPS_SET_PARTI_ACTV_MEM'
2296 IF((acc+x).GT.ncb) x=ncb-acc
2301 IF(ncb-acc.LT.kmin)
GOTO 888
2302 IF(ncb.EQ.acc)
GOTO 888
2305 &
': Internal error 5 in DMUMPS_SET_PARTI_ACTV_MEM'
2312 IF((acc.GT.ncb))
THEN
2314 &
':Internal error 6 in DMUMPS_SET_PARTI_ACTV_MEM'
2317 IF((acc.LT.ncb))
THEN
2319 IF(small_set.LT.others)
THEN
2324 nb_rows(chosen)=nb_rows(chosen)+ncb-acc
2328 additionnal_rows=ncb-acc
2330 DO WHILE ((additionnal_rows.NE.0)
2331 & .AND.(i.LE.number_of_procs))
2333 x=int(additionnal_rows/(i-1))
2334 IF((x.EQ.0).AND.(additionnal_rows.NE.0))
THEN
2335 DO WHILE ((j.LT.i).AND.(additionnal_rows.GT.0))
2336 nb_rows(j)=nb_rows(j)+1
2337 additionnal_rows=additionnal_rows-1
2340 IF(additionnal_rows.NE.0)
THEN
2342 &
':Internal error 7 in DMUMPS_SET_PARTI_ACTV_MEM'
2347 IF((temp(1)+dble((nb_rows(1)+x)*nfront)).LE.
2349 DO WHILE ((additionnal_rows.NE.0)
2352 IF((affected+nb_rows(j)).GT.
2354 affected=kmax-nb_rows(j)
2356 nb_rows(j)=nb_rows(j)+affected
2357 additionnal_rows=additionnal_rows-
2362 DO WHILE ((additionnal_rows.NE.0)
2364 affected=int((temp(i)-(temp(j)+
2365 & (dble(nb_rows(j))*dble(nfront))))
2367 IF((affected+nb_rows(j)).GT.kmax)
THEN
2368 affected=kmax-nb_rows(j)
2370 IF(affected.GT.additionnal_rows)
THEN
2371 affected=additionnal_rows
2373 nb_rows(j)=nb_rows(j)+affected
2374 additionnal_rows=additionnal_rows-affected
2381 IF((additionnal_rows.EQ.0).AND.
2382 & (i.LT.number_of_procs))
THEN
2387 IF((chosen.EQ.number_of_procs-1).AND.
2388 & (additionnal_rows.NE.0))
THEN
2390 nb_rows(i)=nb_rows(i)+1
2391 additionnal_rows=additionnal_rows-1
2392 IF(additionnal_rows.EQ.0)
GOTO 048
2396 IF((chosen.EQ.number_of_procs-1).AND.
2397 & (additionnal_rows.NE.0))
THEN
2399 DO WHILE ((additionnal_rows.NE.0)
2400 & .AND.(i.LE.number_of_procs))
2402 DO WHILE ((additionnal_rows.NE.0)
2404 affected=int((temp(i)-(temp(j)+
2405 & (dble(nb_rows(j))*
2406 & dble(nfront))))/dble(nfront))
2407 IF(affected.GT.additionnal_rows)
THEN
2408 affected=additionnal_rows
2410 nb_rows(j)=nb_rows(j)+affected
2411 additionnal_rows=additionnal_rows-affected
2426 IF((temp(i)+dble(nb_rows(i))
2427 & *dble(x+nb_rows(i)+nfront-ncb))
2429 small_set=small_set+1
2433 IF((temp(i)+dble(nb_rows(i))*dble(nfront))
2435 small_set=small_set+1
2439 somme=somme+ dble(nb_rows(i))
2446 IF(nb_rows(i).EQ.0)
THEN
2449 &
':Internal error 12 in DMUMPS_SET_PARTI_ACTV_MEM'
2454 IF(nb_rows(i).GT.0)
THEN
2458 &
'Internal error 13 in DMUMPS_SET_PARTI_ACTV_MEM'
2464 tab_pos(nslaves_node+1)= ncb+1
2465 tab_pos(slavef+2) = chosen
2468 slaves_list(i)=temp_id(i)
2471 IF(nb_rows(i).LE.0)
THEN
2473 &
'Internal error 14 in DMUMPS_SET_PARTI_ACTV_MEM'
2477 DO i=chosen+1,number_of_procs
2478 slaves_list(i)=temp_id(i)
2480 IF(pos.NE.(ncb+1))
THEN
2482 &
'Internal error 15 in DMUMPS_SET_PARTI_ACTV_MEM'
2487 & (ncbson_max,slavef,keep,keep8,
2488 & procs,mem_distrib,ncb,nfront,
2489 & nslaves_node,tab_pos,
2490 & slaves_list,size_slaves_list,
myid,inode,mp,lp)
2492 INTEGER,
intent(in) :: KEEP(500),SIZE_SLAVES_LIST
2493 INTEGER(8) KEEP8(150)
2494 INTEGER,
intent(in) :: SLAVEF, NFRONT, NCB,MYID
2495 INTEGER,
intent(in) :: NCBSON_MAX
2496 INTEGER,
intent(in) :: PROCS(SLAVEF+1)
2497 INTEGER,
intent(in) :: MEM_DISTRIB(0:SLAVEF-1),INODE
2498 INTEGER,
intent(in) :: MP,LP
2499 INTEGER,
intent(out):: SLAVES_LIST(SIZE_SLAVES_LIST)
2500 INTEGER,
intent(out):: TAB_POS(SLAVEF+2)
2501 INTEGER,
intent(out):: NSLAVES_NODE
2502 INTEGER NUMBER_OF_PROCS,K47,K48, K50,K83,K69
2506 INTEGER OTHERS,CHOSEN,SMALL_SET,ACC
2507 DOUBLE PRECISION SOMME,TMP_SUM,DELTA,A,B,C,MASTER_WORK
2509 INTEGER ADDITIONNAL_ROWS,i,X,REF,POS,NELIM
2512 DOUBLE PRECISION BANDE_K821
2513 INTEGER NB_SAT,NB_ZERO
2514 DOUBLE PRECISION TEMP(SLAVEF),TOTAL_COST, MAX_MEM_ALLOW
2515 INTEGER TEMP_ID(SLAVEF),NB_ROWS(SLAVEF)
2516 INTEGER NSLAVES_REF,NCB_FILS
2517 EXTERNAL MPI_WTIME,MUMPS_GETKMIN
2518 INTEGER MUMPS_GETKMIN
2519 INTEGER POS_MIN_LOAD,SIZE_MY_SMP,WHAT
2520 LOGICAL HAVE_TYPE1_SON
2521 DOUBLE PRECISION MIN_LOAD,MAX_LOAD,TEMP_MAX_LOAD
2522 DOUBLE PRECISION MPI_WTIME
2523 DOUBLE PRECISION BUF_SIZE,NELIM_MEM_SIZE
2524 DOUBLE PRECISION MEM_SIZE_STRONG(SLAVEF),MEM_SIZE_WEAK(SLAVEF)
2526 temp_max_load=dble(0)
2533 IF(int(ncb_fils,8)*int(
min(ncb,ncb_fils),8).GT.k821)
THEN
2534 have_type1_son=.true.
2536 have_type1_son=.false.
2539 IF ( keep(24) == 0 .OR. keep(24) == 1 )
THEN
2540 force_cand = .false.
2542 force_cand = (mod(keep(24),2).eq.0)
2545 kmax=int(k821/int(ncb,8))
2547 DO i=1,procs(slavef+1)
2552 number_of_procs=procs(slavef+1)
2553 others=number_of_procs
2555 number_of_procs=slavef
2557 DO i=1,number_of_procs
2559 IF (
wload(i) < -0.5d0 )
THEN
2560 IF((mp.GT.0).AND.(lp.GE.2))
THEN
2561 WRITE(mp,*)myid,
': Negative load ',
2567 others=number_of_procs-1
2569 kmax=int(ncb/others)
2570 kmin=mumps_getkmin(int(ncb,8)*int(kmax,8),k50,kmax,ncb)
2574 total_cost=dble( nelim ) * dble( ncb ) +
2575 & dble(ncb) * dble(nelim)*dble(2*nfront-nelim-1)
2577 total_cost=dble(nelim) * dble( ncb ) *
2584 IF(force_cand.AND.(number_of_procs.GT.k83))
THEN
2585 master_work=dble(keep(88))*master_work/dble(100)
2587 IF(force_cand.AND.(number_of_procs.LE.k83))
THEN
2588 master_work=dble(keep(87))*master_work/dble(100)
2590 IF(master_work.LT.dble(1))
THEN
2593 nslaves_ref=int(total_cost/master_work)+1
2595 nslaves_ref=
min(nslaves_ref,number_of_procs)
2597 nslaves_ref=
min(nslaves_ref,number_of_procs-1)
2599 DO i=1,number_of_procs
2604 temp(j)=temp(j)+
niv2(temp_id(j)+1)
2614 somme=somme+temp(others)-temp(i)
2615 tmp_sum=tmp_sum+temp(i)
2617 tmp_sum=(tmp_sum/dble(others))+
2618 & (total_cost/dble(others))
2622 IF(.NOT.smp) max_load=temp(others)
2626 IF(mem_distrib(temp_id(i)).EQ.1)
THEN
2627 IF(temp(i).LE.tmp_sum)
THEN
2638 IF((mem_distrib(temp_id(i)).NE.1).OR.
2639 & ((mem_distrib(temp_id(i)).EQ.1).AND.
2640 & (temp(i).GE.tmp_sum)))
THEN
2651 IF (keep(201).EQ.2)
THEN
2652 a=dble(int((dble(keep(100))/dble(2))/dble(nelim)))
2654 buf_size=
min(buf_size,a*dble(ncb))
2656 buf_size=
min(buf_size,a*a)
2660 DO i=1,number_of_procs
2661 a=dble(
md_mem(temp_id(i)))/
2665 b=dble(int(dble(ncb)/dble(number_of_procs))+1)*
2670 & nfront,
min(ncb,others), j, x8)
2671 b=dble(x8)+(dble(j)*dble(nelim))
2674 mem_size_weak(i)=nelim_mem_size
2700 IF(
min(mem_size_strong(i),mem_size_weak(i)).LT.dble(0))
THEN
2701 IF(mem_size_strong(i).LT.0.0d0)
THEN
2702 mem_size_strong(i)=dble(0)
2704 mem_size_weak(i)=dble(0)
2710 DO i=1,number_of_procs
2736 mem_size_strong(i)=
max(dble(0),mem_size_strong(i))
2740 IF((((number_of_procs.LE.k83).AND.force_cand).AND.
2741 & (total_cost.GE.somme)).OR.
2742 & (.NOT.force_cand).OR.
2743 & (((number_of_procs+1).GT.k83).AND.force_cand))
THEN
2745 small_set=nslaves_ref
2747 DO i=nslaves_ref,1,-1
2752 somme=(dble(i)*temp(i))-somme
2753 IF(total_cost.GE.somme)
GOTO 444
2758 max_load=temp(small_set)
2760 x=
min(size_my_smp,nslaves_ref)
2764 somme=somme+(temp(x)-temp(j))
2766 IF(somme.GT.total_cost)
THEN
2770 IF(x.LT.size_my_smp)
THEN
2773 max_load=temp(small_set)
2775 x=
min(size_my_smp,nslaves_ref)
2780 IF(temp(i).GT.max_load)
THEN
2781 somme=somme+(dble(i-1)*(temp(i)-max_load))
2785 somme=somme+(max_load-temp(i))
2787 IF(i.EQ.nslaves_ref)
THEN
2788 small_set=nslaves_ref
2792 IF(somme.GT.total_cost)
THEN
2805 max_load=
max(max_load,temp(i))
2807 temp_max_load=max_load
2816 x=int(buf_size/dble(ncb+1))-1
2817 bande_k821=dble(x)*dble(nfront)
2821 c=-buf_size+dble(acc+nelim)
2822 delta=(b*b)-(dble(4)*a*c)
2823 x=int((-b+sqrt(delta))/(dble(2)*a))
2824 IF(x.GT.ncb-acc) x=ncb-acc
2825 bande_k821=dble(x)*dble(nelim+acc+x)
2827 IF(have_type1_son)
THEN
2829 x=int((buf_size-dble(nfront))/dble(nfront+1))
2830 bande_k821=dble(x)*dble(nfront)
2834 c=-buf_size+dble(acc+nelim)
2835 delta=(b*b)-(dble(4)*a*c)
2836 x=int((-b+sqrt(delta))/(dble(2)*a))
2837 IF(x.GT.ncb-acc) x=ncb-acc
2838 bande_k821=dble(x)*dble(nelim+acc+x)
2841 max_mem_allow=bande_k821
2844 &
min(mem_size_weak(i),mem_size_strong(i)),
2846 max_mem_allow=
max(dble(0),max_mem_allow)
2849 kmax=int(max_mem_allow/dble(nfront))
2850 x=int((max_load-temp(i))/
2851 & (dble(nelim)*dble(2*nfront-nelim)))
2853 IF(kmax.GE.kmin)
THEN
2864 IF((acc+x).GT.ncb) x=ncb-acc
2869 c=dble(-max_mem_allow)
2870 delta=((b*b)-(dble(4)*a*c))
2871 kmax=int((-b+sqrt(delta))/(dble(2)*a))
2873 b=dble(nelim)*(dble(nelim)+dble(2*acc
2874 c=-(max_load-temp(i))
2875 delta=(b*b-(dble(4)*a*c))
2876 x=int((-b+sqrt(delta))/(dble(2)*a))
2879 &
': Internal error 1 in DMUMPS_SET_PARTI_FLOP_IRR'
2883 IF(kmax.GE.kmin)
THEN
2894 IF((acc+x).GT.ncb) x=ncb-acc
2900 IF(min_load.GT.temp(i))
THEN
2907 max_load=
max(max_load,
2908 & (temp(i)+(dble(nelim) *
2909 & dble(nb_rows(i)))+
2910 & (dble(nb_rows(i))*dble(nelim)*
2911 & dble(2*nfront-nelim-1))))
2913 max_load=
max(max_load,
2914 & temp(i)+(dble(nelim) * dble(nb_rows(i)))*
2915 & dble(2*(nelim+acc)-nb_rows(i)
2918 IF(tmp_sum.LT.max_load)
THEN
2920 IF(ncb-acc.LT.kmin)
GOTO 888
2921 IF(ncb.EQ.acc)
GOTO 888
2924 &
': Internal error 2 in DMUMPS_SET_PARTI_FLOP_IRR'
2931 IF((acc.GT.ncb))
THEN
2933 &
': Internal error 3 in DMUMPS_SET_PARTI_FLOP_IRR'
2936 IF((acc.LT.ncb))
THEN
2938 IF(small_set.LE.others)
THEN
2939 IF((nb_sat.EQ.small_set).AND.(small_set.LT.
2947 max_load=temp_max_load
2948 additionnal_rows=ncb-acc
2950 & dble(additionnal_rows)*
2951 & dble(2*nfront-additionnal_rows-nelim
2953 somme=somme/dble(small_set-nb_sat)
2966 c=-buf_size+dble(acc+nelim)
2967 delta=(b*b)-(dble(4)*a*c)
2968 x=int((-b+sqrt(delta))/(dble(2)*a))
2969 IF(x.GT.ncb-acc) x=ncb-acc
2970 bande_k821=dble(x)*dble(nelim+acc+x)
2971 IF(have_type1_son)
THEN
2974 c=-buf_size+dble(acc+nelim)
2975 delta=(b*b)-(dble(4)*a*c)
2976 x=int((-b+sqrt(delta))/(dble(2)*a))
2977 IF(x.GT.ncb-acc) x=ncb-acc
2978 bande_k821=dble(x)*dble(nelim+acc+x)
2980 max_mem_allow=bande_k821
2983 &
min(mem_size_weak(j),mem_size_strong(j)),
2985 max_mem_allow=
max(dble(0),
2990 c=dble(-max_mem_allow)
2991 delta=((b*b)-(dble(4)*a*c))
2992 kmax=int((-b+sqrt(delta))/(dble(2)*a))
2994 b=(dble(nelim)*dble(nelim+2*acc+1))
2995 c=-(max_load-temp(j)+somme)
2996 delta=(b*b-(dble(4)*a*c))
2997 x=int((-b+sqrt(delta))/(dble(2)*a))
3001 &
': Internal error 4 in DMUMPS_SET_PARTI_FLOP_IRR'
3005 IF(kmax.GE.kmin)
THEN
3013 IF(x.LT.
min(kmin,kmax))
THEN
3018 IF((acc+x).GT.ncb) x=ncb-acc
3021 IF(min_load.GT.temp(j))
THEN
3029 temp_max_load=
max(temp_max_load,
3030 & temp(j)+(dble(nelim) *
3031 & dble(nb_rows(j)))*
3035 IF(ref.LE.number_of_procs-1)
THEN
3036 IF(temp_max_load.GT.temp(ref+1))
THEN
3037 IF(small_set.LT.nslaves_ref)
THEN
3045 IF(ncb.EQ.acc)
GOTO 666
3047 IF(nb_sat.EQ.small_set)
THEN
3048 IF(small_set.LT.nslaves_ref)
THEN
3057 IF(nb_zero.EQ.small_set)
THEN
3058 IF(small_set.LT.nslaves_ref)
THEN
3067 IF((nb_sat+nb_zero).EQ.small_set)
THEN
3068 IF(small_set.LT.nslaves_ref)
THEN
3079 additionnal_rows=ncb-acc
3080 IF(additionnal_rows.NE.0)
THEN
3081 IF(additionnal_rows.LT.kmin)
THEN
3085 IF(nb_rows(i).NE.0)
THEN
3089 c=-buf_size+dble(j+nelim)
3090 delta=(b*b)-(dble(4)*a*c)
3091 x=int((-b+sqrt(delta))/(dble(2)*a))
3092 IF(x.GT.ncb-j) x=ncb-j
3093 bande_k821=dble(x)*dble(nelim+j+x)
3094 IF(have_type1_son)
THEN
3097 c=-buf_size+dble(j+nelim)
3098 delta=(b*b)-(dble(4)*a*c)
3099 x=int((-b+sqrt(delta))/(dble(2)*a))
3100 IF(x.GT.ncb-j) x=ncb-j
3101 bande_k821=dble(x)*dble(nelim+j+x)
3103 max_mem_allow=bande_k821
3106 &
min(mem_size_weak(i),mem_size_strong(i)),
3108 max_mem_allow=
max(dble(0),
3113 c=dble(-max_mem_allow)
3114 delta=((b*b)-(dble(4)*a*c))
3115 kmax=int((-b+sqrt(delta))/(dble(2)*a))
3116 IF(nb_rows(i).NE.kmax)
THEN
3117 IF(ncb-j.LE.kmax)
THEN
3122 temp_max_load=
max(temp_max_load,
3124 & (dble(nelim) * dble(nb_rows(i)))*
3128 IF(ref.LE.number_of_procs-1)
THEN
3129 IF(temp_max_load.GT.temp(ref+1))
THEN
3130 IF(small_set.LT.nslaves_ref)
THEN
3142 IF(additionnal_rows.NE.0)
THEN
3144 IF(i.NE.small_set)
THEN
3146 IF(nb_rows(i).NE.0)
THEN
3148 &
': Internal error 5 in DMUMPS_SET_PARTI_FLOP_IRR'
3152 nb_rows(i)=nb_rows(i)+additionnal_rows
3159 DO WHILE ((additionnal_rows.NE.0)
3160 & .AND.(i.LE.number_of_procs))
3161 IF((temp(i).LE.max_load))
THEN
3164 c=-buf_size+dble(acc+nelim)
3165 delta=(b*b)-(dble(4)*a*c)
3166 x=int((-b+sqrt(delta))/(dble(2)*a))
3167 IF(x.GT.ncb-acc) x=ncb-acc
3168 bande_k821=dble(x)*dble(nelim+acc+x)
3169 IF(have_type1_son)
THEN
3172 c=-buf_size+dble(acc+nelim)
3173 delta=(b*b)-(dble(4)*a*c)
3174 x=int((-b+sqrt(delta))/(dble(2)*a))
3175 IF(x.GT.ncb-acc) x=ncb-acc
3176 bande_k821=dble(x)*dble(nelim+acc+x)
3178 max_mem_allow=bande_k821
3181 &
min(mem_size_weak(i),mem_size_strong(i)),
3188 c=dble(-max_mem_allow)
3189 delta=((b*b)-(dble(4)*a*c))
3190 kmax=int((-b+sqrt(delta))/(dble(2)*a))
3192 b=dble(nelim)*dble(nelim+2*acc+1)
3193 c=-(max_load-temp(i))
3194 delta=(b*b-(dble(4)*a*c))
3195 x=int((-b+sqrt(delta))/(dble(2)*a))
3197 IF(kmax.GE.kmin)
THEN
3207 IF((acc+x).GT.ncb) x=ncb-acc
3210 additionnal_rows=ncb-acc
3211 ELSE IF((temp(i).GT.max_load))
THEN
3219 c=-buf_size+dble(acc+nelim)
3220 delta=(b*b)-(dble(4)*a*c)
3221 x=int((-b+sqrt(delta))/(dble(2)*a))
3222 IF(x.GT.ncb-acc) x=ncb-acc
3223 bande_k821=dble(x)*dble(nelim+acc+x)
3224 IF(have_type1_son)
THEN
3227 c=-buf_size+dble(acc+nelim)
3228 delta=(b*b)-(dble(4)*a*c)
3229 x=int((-b+sqrt(delta))/(dble(2)*a))
3230 IF(x.GT.ncb-acc) x=ncb-acc
3231 bande_k821=dble(x)*dble(nelim+acc+x)
3233 max_mem_allow=bande_k821
3236 &
min(mem_size_weak(j),mem_size_strong(j)),
3238 max_mem_allow=
max(dble(0),
3243 c=dble(-max_mem_allow)
3244 delta=((b*b)-(dble(4)*a*c))
3245 kmax=int((-b+sqrt(delta))/(dble(2)*a))
3247 b=dble(nelim)*dble(nelim+2*acc+1)
3248 c=-(max_load-temp(j))
3249 delta=(b*b-(dble(4)*a*c))
3250 x=int((-b+sqrt(delta))/(dble(2)*a))
3257.GE.
IF(KMAXKMIN)THEN
3264.LT.
IF(Xmin(KMIN,KMAX))THEN
3268.GT.
IF((ACC+X)NCB) X=NCB-ACC
3271.GT.
IF(MIN_LOADTEMP(J))THEN
3277 MAX_LOAD=max(MAX_LOAD,
3279 & (dble(NELIM)*dble(NB_ROWS(J)))*
3283.EQ.
IF(NCBACC) GOTO 741
3284.LT.
IF(NCB-ACCKMIN) GOTO 210
3290 ADDITIONNAL_ROWS=NCB-ACC
3293.NE.
IF(ADDITIONNAL_ROWS0)THEN
3294 ADDITIONNAL_ROWS=NCB-ACC
3295 SOMME=dble(NELIM)*dble(ADDITIONNAL_ROWS)*
3296 & dble(2*NFRONT-ADDITIONNAL_ROWS-
3298 SOMME=SOMME/dble(NUMBER_OF_PROCS)
3309 C=-BUF_SIZE+dble(ACC+NELIM)
3310 DELTA=(B*B)-(dble(4)*A*C)
3311 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3312.GT.
IF(XNCB-ACC) X=NCB-ACC
3313 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3314 IF(HAVE_TYPE1_SON)THEN
3317 C=-BUF_SIZE+dble(ACC+NELIM)
3318 DELTA=(B*B)-(dble(4)*A*C)
3319 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3320.GT.
IF(XNCB-ACC) X=NCB-ACC
3321 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3323 MAX_MEM_ALLOW=BANDE_K821
3326 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
3328 MAX_MEM_ALLOW=max(dble(0),
3333 C=dble(-MAX_MEM_ALLOW)
3334 DELTA=((B*B)-(dble(4)*A*C))
3335 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
3337 B=dble(NELIM)*dble(NELIM+2*ACC+1)
3338 C=-(MAX_LOAD-TEMP(i)+SOMME)
3339 DELTA=(B*B-(dble(4)*A*C))
3340 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3347.GE.
IF(KMAXKMIN)THEN
3353.LT.
IF(Xmin(KMIN,KMAX))THEN
3357.GT.
IF((ACC+X)NCB) X=NCB-ACC
3360.GT.
IF(MIN_LOADTEMP(i))THEN
3367.EQ.
IF(NCBACC) GOTO 666
3368.LT.
IF(NCB-ACCKMIN) GOTO 488
3371 ADDITIONNAL_ROWS=NCB-ACC
3373 & dble(ADDITIONNAL_ROWS)*
3374 & dble(2*NFRONT-ADDITIONNAL_ROWS-
3376 SOMME=SOMME/dble(NUMBER_OF_PROCS)
3387 C=-BUF_SIZE+dble(ACC+NELIM)
3388 DELTA=(B*B)-(dble(4)*A*C)
3389 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3390.GT.
IF(XNCB-ACC) X=NCB-ACC
3391 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3392 IF(HAVE_TYPE1_SON)THEN
3395 C=-BUF_SIZE+dble(ACC+NELIM)
3396 DELTA=(B*B)-(dble(4)*A*C)
3397 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3398.GT.
IF(XNCB-ACC) X=NCB-ACC
3399 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3401 MAX_MEM_ALLOW=BANDE_K821
3403 MAX_MEM_ALLOW=min(BANDE_K821,
3404 & MEM_SIZE_STRONG(i))
3405 MAX_MEM_ALLOW=max(dble(0),
3410 C=dble(-MAX_MEM_ALLOW)
3411 DELTA=((B*B)-(dble(4)*A*C))
3412 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
3414 B=dble(NELIM)*dble(NELIM+2*ACC+1)
3415 C=-(MAX_LOAD-TEMP(i)+SOMME)
3416 DELTA=(B*B-(dble(4)*A*C))
3417 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3430.GT.
IF((ACC+X)NCB) X=NCB-ACC
3433.GT.
IF(MIN_LOADTEMP(i))THEN
3440.EQ.
IF(NCBACC) GOTO 666
3441.LT.
IF(NCB-ACCKMIN) GOTO 477
3455 C=-BUF_SIZE+dble(ACC+NELIM)
3456 DELTA=(B*B)-(dble(4)*A*C)
3457 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3458.GT.
IF(XNCB-ACC) X=NCB-ACC
3459 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3460 IF(HAVE_TYPE1_SON)THEN
3463 C=-BUF_SIZE+dble(ACC+NELIM)
3464 DELTA=(B*B)-(dble(4)*A*C)
3465 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3466.GT.
IF(XNCB-ACC) X=NCB-ACC
3467 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3469 MAX_MEM_ALLOW=BANDE_K821
3471 MAX_MEM_ALLOW=min(BANDE_K821,
3472 & MEM_SIZE_STRONG(i))
3473 MAX_MEM_ALLOW=max(dble(0),
3478 C=dble(-MAX_MEM_ALLOW)
3479 DELTA=((B*B)-(dble(4)*A*C))
3480 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
3482.GT.
IF((ACC+NB_ROWS(i)+X)NCB)
3483 & X=NCB-(ACC+NB_ROWS(i))
3484 NB_ROWS(i)=NB_ROWS(i)+X
3485 IF((dble(NB_ROWS(i))*
3486.EQ.
& dble(NB_ROWS(i)+ACC))
3492.GT.
IF(MIN_LOADTEMP(i))THEN
3498.EQ.
IF(NCBACC) GOTO 666
3499.LT.
IF(NCB-ACCKMIN) GOTO 834
3504 ADDITIONNAL_ROWS=NCB-ACC
3506 & dble(ADDITIONNAL_ROWS)*
3507 & dble(2*NFRONT-ADDITIONNAL_ROWS-
3509 SOMME=SOMME/dble(NUMBER_OF_PROCS-NB_SAT)
3514 C=-BUF_SIZE+dble(ACC+NELIM)
3515 DELTA=(B*B)-(dble(4)*A*C)
3516 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3517.GT.
IF(XNCB-ACC) X=NCB-ACC
3518 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3519 IF(HAVE_TYPE1_SON)THEN
3522 C=-BUF_SIZE+dble(ACC+NELIM)
3523 DELTA=(B*B)-(dble(4)*A*C)
3524 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3525.GT.
IF(XNCB-ACC) X=NCB-ACC
3526 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
3528 IF((dble(NB_ROWS(i))*
3529.EQ.
& dble(NB_ROWS(i)+ACC))
3535 & dble(NELIM+2*(ACC+NB_ROWS(i))+1)
3537 DELTA=(B*B-(dble(4)*A*C))
3538 X=int((-B+sqrt(DELTA))/(dble(2)*A))
3542 DELTA=((B*B)-(dble(4)*A*C))
3543 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
3549.GT.
IF((ACC+X+NB_ROWS(i))NCB)THEN
3550.GT.
IF((NCB-ACC)KMAX)THEN
3556.GT.
IF((NB_ROWS(i)+X)KMAX)THEN
3559 NB_ROWS(i)=NB_ROWS(i)+X
3568.LT.
IF(NCB-ACCKMIN) THEN
3575 NB_ROWS(i)=NB_ROWS(i)+1
3577.EQ.
IF(ACCNCB)GOTO 666
3581 NB_ROWS(1)=NB_ROWS(1)+NCB-ACC
3583 NB_ROWS(POS_MIN_LOAD)=
3584 & NB_ROWS(POS_MIN_LOAD)+NCB-ACC
3593 ADDITIONNAL_ROWS=NCB-ACC
3595.EQ.
IF(NB_SATSMALL_SET) GOTO 777
3598 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3599 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3600 IF(HAVE_TYPE1_SON)THEN
3601 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3603 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3605 MAX_MEM_ALLOW=BANDE_K821
3608 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
3610 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
3612 WLOAD(i)=MAX_MEM_ALLOW
3614 CALL MUMPS_SORT_DOUBLES(SMALL_SET, WLOAD, IDWLOAD)
3616.EQ..AND.
IF((NB_SATSMALL_SET)
3617.LT.
& (SMALL_SETNSLAVES_REF))THEN
3623.EQ..AND.
IF((NB_SATSMALL_SET)
3624.LE.
& (SMALL_SETNUMBER_OF_PROCS))GOTO 777
3625 AFFECTED=int(ADDITIONNAL_ROWS/(SMALL_SET-NB_SAT))
3626 AFFECTED=max(AFFECTED,1)
3628 KMAX=int(WLOAD(i)/dble(NFRONT))
3629.EQ.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
3632 IF((NB_ROWS(IDWLOAD(i))+min(AFFECTED,
3633.GT.
& ADDITIONNAL_ROWS))KMAX)THEN
3634.GT.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
3636 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
3637 & (KMAX-NB_ROWS(IDWLOAD(i)))
3638 NB_ROWS(IDWLOAD(i))=KMAX
3640.EQ.
IF(NB_SATSMALL_SET)THEN
3641.NE.
IF(SMALL_SETNSLAVES_REF)THEN
3647 MAX_LOAD=max(MAX_LOAD,
3648 & (TEMP(IDWLOAD(i))+(dble(NELIM) *
3649 & dble(NB_ROWS(IDWLOAD(i))))+
3650 & (dble(NB_ROWS(IDWLOAD(i)))*
3652 & dble(2*NFRONT-NELIM-1)))
3656 AFFECTED=int(ADDITIONNAL_ROWS/(SMALL_SET-NB_SAT))
3657 AFFECTED=max(AFFECTED,1)
3659 IF((NB_ROWS(IDWLOAD(i))+min(AFFECTED,
3660.GE.
& ADDITIONNAL_ROWS))KMIN)THEN
3661 X=min(AFFECTED,ADDITIONNAL_ROWS)
3662 NB_ROWS(IDWLOAD(i))=NB_ROWS(IDWLOAD(i))+
3664 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
3666 X=int((MAX_LOAD-TEMP(IDWLOAD(i)))/
3667 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
3668.GT.
IF(X+AFFECTEDADDITIONNAL_ROWS)THEN
3674 NB_ROWS(IDWLOAD(i))=NB_ROWS(IDWLOAD(i))+
3676 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
3684 MAX_LOAD=max(MAX_LOAD,
3685 & (TEMP(IDWLOAD(i))+(dble(NELIM)*
3686 & dble(NB_ROWS(IDWLOAD(i))))+
3687 & (dble(NB_ROWS(IDWLOAD(i)))*dble(NELIM))*
3688 & dble(2*NFRONT-NELIM-1)))
3689.LT.
IF(SMALL_SETNUMBER_OF_PROCS)THEN
3690.GT.
IF(MAX_LOADTEMP(SMALL_SET+1))THEN
3691.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3699.EQ.
IF(SMALL_SETNB_SAT)GOTO 777
3700.EQ.
IF(ADDITIONNAL_ROWS0)THEN
3706.NE..AND..GE.
IF((NB_ZERO0)(ADDITIONNAL_ROWSKMIN))THEN
3709 X=int(ADDITIONNAL_ROWS/(J))
3714.LT.
IF(X*JADDITIONNAL_ROWS)THEN
3718 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3719 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3720 IF(HAVE_TYPE1_SON)THEN
3721 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3723 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3725 MAX_MEM_ALLOW=BANDE_K821
3728 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
3730 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
3732 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
3733.EQ.
IF(NB_ROWS(i)0)THEN
3734.GT.
IF(XADDITIONNAL_ROWS)THEN
3742 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
3743 MAX_LOAD=max(MAX_LOAD,
3744 & (TEMP(i)+(dble(NELIM) *
3745 & dble(NB_ROWS(i)))+
3746 & (dble(NB_ROWS(i))*dble(NELIM))*
3747 & dble(2*NFRONT-NELIM-1)))
3753.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3754.AND..LE.
& (iNUMBER_OF_PROCS))
3755.LE.
IF((TEMP(i)MAX_LOAD))THEN
3756 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3757 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3758 IF(HAVE_TYPE1_SON)THEN
3759 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3761 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3763 MAX_MEM_ALLOW=BANDE_K821
3766 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
3768 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
3770 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
3771 AFFECTED=int((MAX_LOAD-TEMP(i))/
3772 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
3773.GT.
IF(AFFECTEDADDITIONNAL_ROWS)THEN
3774 AFFECTED=ADDITIONNAL_ROWS
3776.LT.
IF(NB_ROWS(i)KMAX)THEN
3777.GT.
IF((AFFECTED+NB_ROWS(i))KMAX)THEN
3778 AFFECTED=KMAX-NB_ROWS(i)
3781.LT.
IF((AFFECTED+NB_ROWS(i))
3786 NB_ROWS(i)=NB_ROWS(i)+AFFECTED
3787 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-AFFECTED
3789.GT.
ELSE IF((TEMP(i)MAX_LOAD))THEN
3790.EQ.
IF(NB_SATi-1) GOTO 218
3791 X=(ADDITIONNAL_ROWS/(i-1-NB_SAT))
3794 TMP_SUM=((dble(NELIM) * dble(NB_ROWS(J)+X))
3795 & +(dble(NB_ROWS(J)+X)*dble(NELIM))*
3796 & dble(2*NFRONT-NELIM-1))
3797.GT.
IF((TEMP(J)+TMP_SUM)MAX_LOAD)THEN
3804.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3806 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3807 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3808 IF(HAVE_TYPE1_SON)THEN
3809 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3811 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3814 MAX_MEM_ALLOW=BANDE_K821
3817 & min(MEM_SIZE_WEAK(J),MEM_SIZE_STRONG(J)),
3819 MAX_MEM_ALLOW=max(dble(0),
3822 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
3823.GT.
IF(AFFECTEDADDITIONNAL_ROWS)THEN
3824 AFFECTED=ADDITIONNAL_ROWS
3826.LT.
IF(NB_ROWS(J)KMAX)THEN
3827.GT.
IF((AFFECTED+NB_ROWS(J))KMAX)THEN
3828 AFFECTED=KMAX-NB_ROWS(J)
3831.LT.
IF((AFFECTED+NB_ROWS(J))
3836 NB_ROWS(J)=NB_ROWS(J)+AFFECTED
3837 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
3845.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3847 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3848 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3849 IF(HAVE_TYPE1_SON)THEN
3850 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3852 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3854 TMP_SUM=((dble(NELIM)* dble(NB_ROWS(J)))
3855 & +(dble(NB_ROWS(J))*dble(NELIM))*
3856 & dble(2*NFRONT-NELIM-1))
3857 X=int((MAX_LOAD-(TEMP(J)+TMP_SUM))/
3858 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
3865 MAX_MEM_ALLOW=BANDE_K821
3868 & min(MEM_SIZE_WEAK(J),MEM_SIZE_STRONG(J)),
3870 MAX_MEM_ALLOW=max(dble(0),
3873 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
3874.GT.
IF(AFFECTEDADDITIONNAL_ROWS)THEN
3875 AFFECTED=ADDITIONNAL_ROWS
3877.LT.
IF(NB_ROWS(J)KMAX)THEN
3878.GT.
IF((AFFECTED+NB_ROWS(J))KMAX)THEN
3879 AFFECTED=KMAX-NB_ROWS(J)
3882.LT.
IF((AFFECTED+NB_ROWS(J))
3887 NB_ROWS(J)=NB_ROWS(J)+AFFECTED
3888 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
3899.EQ..AND.
IF((CHOSENNUMBER_OF_PROCS-1)
3900.NE.
& (ADDITIONNAL_ROWS0))THEN
3902.GE.
IF(NB_ROWS(i)+1KMIN)THEN
3903 NB_ROWS(i)=NB_ROWS(i)+1
3904 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-1
3906 MAX_LOAD=max(MAX_LOAD,
3907 & (TEMP(i)+(dble(NELIM) *
3908 & dble(NB_ROWS(i)))+
3909 & (dble(NB_ROWS(i))*dble(NELIM))*
3910 & dble(2*NFRONT-NELIM-1)))
3911.EQ.
IF(ADDITIONNAL_ROWS0) GOTO 048
3915.NE.
IF((ADDITIONNAL_ROWS0))THEN
3916.LT.
IF(CHOSENNUMBER_OF_PROCS)THEN
3919.NE.
IF(CHOSENNUMBER_OF_PROCS)THEN
3926.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3927.AND..LE.
& (iNUMBER_OF_PROCS))
3928.LE.
IF(TEMP(i)MAX_LOAD)THEN
3929 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
3930 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3931 IF(HAVE_TYPE1_SON)THEN
3932 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
3934 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
3936 MAX_MEM_ALLOW=BANDE_K821
3939 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
3941 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
3943 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
3944 TMP_SUM=((dble(NELIM) * dble(NB_ROWS(i)))
3945 & +(dble(NB_ROWS(i))*dble(NELIM))*
3946 & dble(2*NFRONT-NELIM-1))
3947 X=int((MAX_LOAD-(TEMP(i)+TMP_SUM))/
3948 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
3955.GT.
IF(AFFECTEDADDITIONNAL_ROWS)THEN
3956 AFFECTED=ADDITIONNAL_ROWS
3958.LT.
IF(NB_ROWS(i)KMAX)THEN
3959.GT.
IF((AFFECTED+NB_ROWS(i))KMAX)THEN
3960 AFFECTED=KMAX-NB_ROWS(i)
3962.LT.
IF((AFFECTED+NB_ROWS(i))
3967 NB_ROWS(i)=NB_ROWS(i)+AFFECTED
3968 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-AFFECTED
3970.NE.
IF(iNUMBER_OF_PROCS) GOTO 624
3971.GT.
ELSE IF((TEMP(i)MAX_LOAD))THEN
3972 X=int(ADDITIONNAL_ROWS/i-1)
3974 IF((MAX_LOAD+((dble(NELIM)*
3976 & X)*dble(NELIM))*dble(
3977.LE.
& (2*NFRONT-NELIM-1))))TEMP(i))THEN
3985.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3987 X=int(BUF_SIZE/dble(NCB+1))-1
3988 BANDE_K821=dble(X)*dble(NFRONT)
3989 MAX_MEM_ALLOW=BANDE_K821
3990 IF(HAVE_TYPE1_SON)THEN
3991 X=int((BUF_SIZE-dble(NFRONT))/
3993 BANDE_K821=dble(X)*dble(NFRONT)
3997 & min(MEM_SIZE_WEAK(J),MEM_SIZE_STRONG(J)),
3999 MAX_MEM_ALLOW=max(dble(0),
4002 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4004 TMP_SUM=((dble(NELIM) *
4006 & +(dble(NB_ROWS(J))*dble(NELIM))*
4007 & dble(2*NFRONT-NELIM-1))
4008 X=int((TEMP(i)-(TEMP(J)+TMP_SUM))/
4009 & (dble(NELIM)*dble(2*NFRONT-
4014.GT.
IF(XADDITIONNAL_ROWS)THEN
4017.LT.
IF(NB_ROWS(J)KMAX)THEN
4018.GT.
IF((X+NB_ROWS(J))KMAX)THEN
4021.LT.
IF((NB_ROWS(J)+X)
4026 NB_ROWS(J)=NB_ROWS(J)+X
4027 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4036.NE.
IF(ADDITIONNAL_ROWS0)THEN
4039 X=int(BUF_SIZE/dble(NCB+1))-1
4040 BANDE_K821=dble(X)*dble(NFRONT)
4041 IF(HAVE_TYPE1_SON)THEN
4042 X=int((BUF_SIZE-dble(NFRONT))/
4044 BANDE_K821=dble(X)*dble(NFRONT)
4046 MAX_MEM_ALLOW=BANDE_K821
4049 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
4051 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4053 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4054 TMP_SUM=((dble(NELIM) * dble(NB_ROWS(i)))
4055 & +(dble(NB_ROWS(i))*dble(NELIM))*
4056 & dble(2*NFRONT-NELIM-1))
4058 & (TEMP(i)+TMP_SUM))/
4059 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
4065.GT.
IF(XADDITIONNAL_ROWS)THEN
4068.LT.
IF(NB_ROWS(i)KMAX)THEN
4069.GE.
IF((X+NB_ROWS(i))KMAX)THEN
4070 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4074.GE.
IF((X+NB_ROWS(i))
4076 NB_ROWS(i)=NB_ROWS(i)+X
4077 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4084.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 049
4086.LT.
IF(CHOSENNUMBER_OF_PROCS)THEN
4092 X=int(ADDITIONNAL_ROWS/ACC)
4096 J=int(BUF_SIZE/dble(NCB+1))-1
4097 BANDE_K821=dble(J)*dble(NFRONT)
4098 IF(HAVE_TYPE1_SON)THEN
4099 J=int((BUF_SIZE-dble(NFRONT))/
4101 BANDE_K821=dble(J)*dble(NFRONT)
4103 MAX_MEM_ALLOW=BANDE_K821
4106 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
4108 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4110 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4111 TMP_SUM=((dble(NELIM) * dble(NB_ROWS(i)))
4112 & +(dble(NB_ROWS(i))*dble(NELIM))*
4113 & dble(2*NFRONT-NELIM-1))
4115 & (TEMP(i)+TMP_SUM))/
4116 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
4117.LT.
IF(NB_ROWS(i)KMAX)THEN
4118.GE.
IF((min(X,J)+NB_ROWS(i))KMAX)THEN
4119.GT.
IF((KMAX-NB_ROWS(i))
4120 & ADDITIONNAL_ROWS)THEN
4121 NB_ROWS(i)=NB_ROWS(i)+
4125 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4130.GE.
IF((min(X,J)+NB_ROWS(i))
4132 NB_ROWS(i)=NB_ROWS(i)+min(X,J)
4133 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4139.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 049
4143 X=int(BUF_SIZE/dble(NCB+1))-1
4144 BANDE_K821=dble(X)*dble(NFRONT)
4145 IF(HAVE_TYPE1_SON)THEN
4146 X=int((BUF_SIZE-dble(NFRONT))/
4148 BANDE_K821=dble(X)*dble(NFRONT)
4150 MAX_MEM_ALLOW=BANDE_K821
4153 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)),
4155 MAX_MEM_ALLOW=max(dble(0),
4158 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4159.LT.
IF(KMAX-NB_ROWS(i)
4160 & ADDITIONNAL_ROWS)THEN
4161 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4165.EQ.
IF(NB_ROWS(i)0)THEN
4166.LT.
IF(min(KMIN,KMAX)
4167 & ADDITIONNAL_ROWS)THEN
4168 NB_ROWS(i)=min(KMIN,KMAX)
4174 NB_ROWS(i)=NB_ROWS(i)+
4179.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 049
4184 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4185 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4186 IF(HAVE_TYPE1_SON)THEN
4187 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4189 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4191 WLOAD(i)=(BANDE_K821-dble(NB_ROWS(i)*NFRONT))
4193 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, WLOAD,
4197 X=int(ADDITIONNAL_ROWS/(CHOSEN-NB_SAT))
4199 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4200 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4201 IF(HAVE_TYPE1_SON)THEN
4202 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4204 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4207 MAX_MEM_ALLOW=min(BANDE_K821,
4208 & MEM_SIZE_STRONG(i))
4209 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4211 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4212.LT.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
4213.LT.
IF((NB_ROWS(IDWLOAD(i))+X)KMAX)THEN
4214 NB_ROWS(IDWLOAD(i))=
4215 & NB_ROWS(IDWLOAD(i))+X
4216 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4218 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4219 & (KMAX-NB_ROWS(IDWLOAD(i)))
4220 NB_ROWS(IDWLOAD(i))=KMAX
4223.EQ.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
4226.EQ.
IF(ADDITIONNAL_ROWS0) GOTO 049
4229 X=int(BUF_SIZE/dble(NCB+1))-1
4230 BANDE_K821=dble(X)*dble(NFRONT)
4231 IF(HAVE_TYPE1_SON)THEN
4232 X=int((BUF_SIZE-dble(NFRONT))/
4234 BANDE_K821=dble(X)*dble(NFRONT)
4236 MAX_MEM_ALLOW=BANDE_K821
4238 MAX_MEM_ALLOW=min(BANDE_K821,
4239 & MEM_SIZE_STRONG(i))
4240 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4242 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4243.LT.
IF(KMAX-NB_ROWS(i)ADDITIONNAL_ROWS)THEN
4244 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4248 NB_ROWS(i)=NB_ROWS(i)+ADDITIONNAL_ROWS
4251.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 049
4253 X=int(ADDITIONNAL_ROWS/CHOSEN)
4256 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4257 NB_ROWS(i)=NB_ROWS(i)+X
4258.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 049
4260 NB_ROWS(1)=NB_ROWS(1)+ADDITIONNAL_ROWS
4271 SOMME=SOMME+ dble(NB_ROWS(i))
4274.GE..AND.
ELSE IF((KEEP(83)NUMBER_OF_PROCS)FORCE_CAND)THEN
4277 MAX_LOAD=max(MAX_LOAD,TEMP(i))
4285.EQ.
IF(TEMP(i)TEMP(1))THEN
4292 TMP_SUM=TOTAL_COST/dble(X)
4293 TEMP_MAX_LOAD=dble(0)
4296 X=int(BUF_SIZE/dble(NCB+1))-1
4297 BANDE_K821=dble(X)*dble(NFRONT)
4301 C=-BUF_SIZE+dble(ACC+NELIM)
4302 DELTA=(B*B)-(dble(4)*A*C)
4303 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4304.GT.
IF(XNCB-ACC) X=NCB-ACC
4305 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4307 IF(HAVE_TYPE1_SON)THEN
4309 X=int((BUF_SIZE-dble(NFRONT))/dble(NFRONT+1))
4310 BANDE_K821=dble(X)*dble(NFRONT)
4314 C=-BUF_SIZE+dble(ACC+NELIM)
4315 DELTA=(B*B)-(dble(4)*A*C)
4316 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4317.GT.
IF(XNCB-ACC) X=NCB-ACC
4318 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4321 MAX_MEM_ALLOW=BANDE_K821
4323 MAX_MEM_ALLOW=min(BANDE_K821,
4324 & min(MEM_SIZE_WEAK(i),MEM_SIZE_STRONG(i)))
4325 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4328 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4329.GT.
IF(TMP_SUM+TEMP(i)MAX_LOAD)THEN
4330 SOMME=MAX_LOAD-TEMP(i)
4335 & (dble(NELIM)*dble(2*NFRONT-NELIM)))
4343.GT.
IF((ACC+X)NCB) X=NCB-ACC
4348 C=dble(-MAX_MEM_ALLOW)
4349 DELTA=((B*B)-(dble(4)*A*C))
4350 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
4352 B=dble(NELIM)*dble(NELIM+2*ACC+1)
4353.GT.
IF(TMP_SUM+TEMP(i)MAX_LOAD)THEN
4354 C=-(MAX_LOAD-TEMP(i))
4358 DELTA=(B*B-(dble(4)*A*C))
4359 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4366.GT.
IF(KMAXKMIN)THEN
4372.LE.
IF(Xmin(KMIN,KMAX))THEN
4373.LT.
IF(KMAXKMIN)THEN
4380.GT.
IF((ACC+X)NCB) X=NCB-ACC
4382 TEMP_MAX_LOAD=max(TEMP_MAX_LOAD,TEMP(i))
4386.EQ.
IF(ACCNCB) GOTO 541
4391 ADDITIONNAL_ROWS=NCB-ACC
4393 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4394 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4395 IF(HAVE_TYPE1_SON)THEN
4396 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4398 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4400 MAX_MEM_ALLOW=BANDE_K821
4403 & min(MEM_SIZE_WEAK(J),MEM_SIZE_STRONG(J)),
4405 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4407 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4408.LT.
IF((NB_ROWS(J))KMAX)THEN
4409.GT.
IF(ADDITIONNAL_ROWS(KMAX-NB_ROWS(J)))THEN
4410 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4414 NB_ROWS(J)=NB_ROWS(J)+ADDITIONNAL_ROWS
4418.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 889
4420 X=int(ADDITIONNAL_ROWS/CHOSEN)
4423 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4424 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4425 IF(HAVE_TYPE1_SON)THEN
4426 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4428 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4430 MAX_MEM_ALLOW=BANDE_K821
4432 MAX_MEM_ALLOW=min(BANDE_K821,
4433 & MEM_SIZE_STRONG(J))
4434 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4436 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4437.GT.
IF((NB_ROWS(J)+X)KMAX)THEN
4438 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4442 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4443 NB_ROWS(J)=NB_ROWS(J)+X
4445.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 889
4448 X=int(BUF_SIZE/dble(NCB+1))-1
4449 BANDE_K821=dble(X)*dble(NFRONT)
4450 IF(HAVE_TYPE1_SON)THEN
4451 X=int((BUF_SIZE-dble(NFRONT))/
4453 BANDE_K821=dble(X)*dble(NFRONT)
4455 MAX_MEM_ALLOW=BANDE_K821
4457 MAX_MEM_ALLOW=min(BANDE_K821,
4458 & MEM_SIZE_STRONG(i))
4459 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4461 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4462.LT.
IF(KMAX-NB_ROWS(i)ADDITIONNAL_ROWS)THEN
4463 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4467 NB_ROWS(i)=NB_ROWS(i)+ADDITIONNAL_ROWS
4470.EQ.
IF(ADDITIONNAL_ROWS0)GOTO 889
4472 DO i=1,NUMBER_OF_PROCS
4474 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4475 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4476 IF(HAVE_TYPE1_SON)THEN
4477 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4479 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4481 WLOAD(i)=(BANDE_K821-(dble(NB_ROWS(i))*
4484 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, WLOAD,
4488 X=int(ADDITIONNAL_ROWS/(CHOSEN-NB_SAT))
4490 AFFECTED=int(BUF_SIZE/dble(NCB+1))-1
4491 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4492 IF(HAVE_TYPE1_SON)THEN
4493 AFFECTED=int((BUF_SIZE-dble(NFRONT))/
4495 BANDE_K821=dble(AFFECTED)*dble(NFRONT)
4497 MAX_MEM_ALLOW=BANDE_K821
4498 KMAX=int(MAX_MEM_ALLOW/dble(NFRONT))
4499.LT.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
4500.LT.
IF((NB_ROWS(IDWLOAD(i))+X)KMAX)THEN
4501 NB_ROWS(IDWLOAD(i))=
4502 & NB_ROWS(IDWLOAD(i))+X
4503 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4505 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
4506 & (KMAX-NB_ROWS(IDWLOAD(i)))
4507 NB_ROWS(IDWLOAD(i))=KMAX
4510.EQ.
IF(NB_ROWS(IDWLOAD(i))KMAX)THEN
4513.EQ.
IF(ADDITIONNAL_ROWS0) GOTO 889
4522 C=-BUF_SIZE+dble(ACC+NELIM)
4523 DELTA=(B*B)-(dble(4)*A*C)
4524 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4525.GT.
IF(XNCB-ACC) X=NCB-ACC
4526 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4527 IF(HAVE_TYPE1_SON)THEN
4530 C=-BUF_SIZE+dble(ACC+NELIM)
4531 DELTA=(B*B)-(dble(4)*A*C)
4532 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4533.GT.
IF(XNCB-ACC) X=NCB-ACC
4534 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4536 MAX_MEM_ALLOW=BANDE_K821
4538 MAX_MEM_ALLOW=min(BANDE_K821,
4539 & MEM_SIZE_STRONG(i))
4540 MAX_MEM_ALLOW=max(dble(0),MAX_MEM_ALLOW)
4544 C=dble(-MAX_MEM_ALLOW)
4545 DELTA=((B*B)-(dble(4)*A*C))
4546 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
4548.GT.
IF((ACC+NB_ROWS(i)+X)NCB)
4549 & X=NCB-(ACC+NB_ROWS(i))
4550 NB_ROWS(i)=NB_ROWS(i)+X
4553.EQ.
IF(NCBACC) GOTO 889
4555 ADDITIONNAL_ROWS=NCB-ACC
4562 C=-BUF_SIZE+dble(ACC+NELIM)
4563 DELTA=(B*B)-(dble(4)*A*C)
4564 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4565.GT.
IF(XNCB-ACC) X=NCB-ACC
4566 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4567 IF(HAVE_TYPE1_SON)THEN
4570 C=-BUF_SIZE+dble(ACC+NELIM)
4571 DELTA=(B*B)-(dble(4)*A*C)
4572 X=int((-B+sqrt(DELTA))/(dble(2)*A))
4573.GT.
IF(XNCB-ACC) X=NCB-ACC
4574 BANDE_K821=dble(X)*dble(NELIM+ACC+X)
4576 MAX_MEM_ALLOW=BANDE_K821
4579 C=dble(-MAX_MEM_ALLOW)
4580 DELTA=((B*B)-(dble(4)*A*C))
4581 KMAX=int((-B+sqrt(DELTA))/(dble(2)*A))
4583.GT.
IF((ACC+NB_ROWS(i)+X)NCB)
4584 & X=NCB-(ACC+NB_ROWS(i))
4585 NB_ROWS(i)=NB_ROWS(i)+X
4588.EQ.
IF(NCBACC) GOTO 889
4590 ADDITIONNAL_ROWS=NCB-ACC
4592 X=int(dble(ADDITIONNAL_ROWS)/dble(OTHERS))
4593.LT.
IF((X*OTHERS)ADDITIONNAL_ROWS)THEN
4597 NB_ROWS(i)=NB_ROWS(i)+X
4598 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-X
4599.LT.
IF(ADDITIONNAL_ROWSX)X=ADDITIONNAL_ROWS
4605 MAX_LOAD=TEMP_MAX_LOAD
4610.EQ.
IF(NB_ROWS(i)0)THEN
4613.GT.
IF(NB_ROWS(i)0)THEN
4623 TAB_POS(NSLAVES_NODE+1)= NCB+1
4624 TAB_POS(SLAVEF+2) = CHOSEN
4628.NE.
IF(NB_ROWS(i)0)THEN
4629 SLAVES_LIST(X)=TEMP_ID(i)
4632.LE.
IF(NB_ROWS(i)0)THEN
4640.NE.
IF(POS(NCB+1))THEN
4646 END SUBROUTINE DMUMPS_SET_PARTI_FLOP_IRR
4647 SUBROUTINE DMUMPS_LOAD_POOL_CHECK_MEM
4648 & (INODE,UPPER,SLAVEF,KEEP,KEEP8,
4649 & STEP,POOL,LPOOL,PROCNODE,N)
4651 INTEGER INODE, LPOOL, SLAVEF, N
4653 INTEGER(8) KEEP8(150)
4654 INTEGER STEP(KEEP(28)), POOL(LPOOL), PROCNODE(KEEP(28))
4657 DOUBLE PRECISION MEM_COST
4658 INTEGER NBINSUBTREE,i,NBTOP
4659 EXTERNAL DMUMPS_POOL_EMPTY,
4660 & MUMPS_IN_OR_ROOT_SSARBR
4661 LOGICAL DMUMPS_POOL_EMPTY,
4662 & MUMPS_IN_OR_ROOT_SSARBR
4663 NBINSUBTREE = POOL(LPOOL)
4664 NBTOP = POOL(LPOOL - 1)
4665.LT.
IF(KEEP(47)2)THEN
4667 & be called with k47>=2
'
4670.GT..AND..LE.
IF((INODE0)(INODEN))THEN
4671 MEM_COST=DMUMPS_LOAD_GET_MEM(INODE)
4672 IF((DM_MEM(MYID)+dble(MEM_COST)+ PEAK_SBTR_CUR_LOCAL-
4674.GT.
& MAX_PEAK_STK)THEN
4676 INODE = POOL( LPOOL - 2 - i)
4677 MEM_COST=DMUMPS_LOAD_GET_MEM(INODE)
4678.LT..OR..GT.
IF((INODE0)(INODEN)) THEN
4685 IF((DM_MEM(MYID)+dble(MEM_COST)+PEAK_SBTR_CUR_LOCAL-
4686.LE.
& SBTR_CUR_LOCAL)
4687 & MAX_PEAK_STK) THEN
4695.NE.
IF(NBINSUBTREE0)THEN
4696 INODE = POOL( NBINSUBTREE )
4697.NOT.
IF(MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
4706 INODE=POOL(LPOOL-2-NBTOP)
4712 END SUBROUTINE DMUMPS_LOAD_POOL_CHECK_MEM
4713 SUBROUTINE DMUMPS_LOAD_SET_SBTR_MEM(WHAT)
4716.NOT.
IF(BDC_POOL_MNG)THEN
4718 & should be called when k81>0 and k47>2
'
4721 PEAK_SBTR_CUR_LOCAL=PEAK_SBTR_CUR_LOCAL+
4722 & dble(MEM_SUBTREE(INDICE_SBTR))
4723.NOT.
IF(BDC_SBTR) INDICE_SBTR=INDICE_SBTR+1
4725 PEAK_SBTR_CUR_LOCAL=dble(0)
4726 SBTR_CUR_LOCAL=dble(0)
4728 END SUBROUTINE DMUMPS_LOAD_SET_SBTR_MEM
4729 DOUBLE PRECISION FUNCTION DMUMPS_LOAD_GET_MEM( INODE )
4731 INTEGER INODE,LEVEL,i,NELIM,NFR
4732 DOUBLE PRECISION COST
4733 EXTERNAL MUMPS_TYPENODE
4734 INTEGER MUMPS_TYPENODE
4743 NFR = ND_LOAD( STEP_LOAD(INODE) ) + KEEP_LOAD(253)
4744 LEVEL = MUMPS_TYPENODE( PROCNODE_LOAD(STEP_LOAD(INODE)),
4746.EQ.
IF (LEVEL 1) THEN
4747 COST = dble(NFR) * dble(NFR)
4749 IF ( K50 == 0 ) THEN
4750 COST = dble(NFR) * dble(NELIM)
4752 COST = dble(NELIM) * dble(NELIM)
4755 DMUMPS_LOAD_GET_MEM=COST
4757 END FUNCTION DMUMPS_LOAD_GET_MEM
4758 RECURSIVE SUBROUTINE DMUMPS_NEXT_NODE(FLAG,COST,COMM)
4760 USE MUMPS_FUTURE_NIV2
4762 INTEGER COMM,WHAT,IERR
4763 LOGICAL FLAG, EXIT_FLAG
4764 DOUBLE PRECISION COST
4765 DOUBLE PRECISION TO_BE_SENT
4766 EXTERNAL MUMPS_TYPENODE
4767 INTEGER MUMPS_TYPENODE
4770 IF(BDC_M2_FLOPS)THEN
4771 TO_BE_SENT=DELTA_LOAD-COST
4773 ELSE IF(BDC_M2_MEM)THEN
4774.AND..NOT.
IF(BDC_POOL(BDC_MD))THEN
4775 TO_BE_SENT=max(TMP_M2,POOL_LAST_COST_SENT)
4776 POOL_LAST_COST_SENT=TO_BE_SENT
4778 DELTA_MEM=DELTA_MEM+TMP_M2
4779 TO_BE_SENT=DELTA_MEM
4789 CALL DMUMPS_BUF_BROADCAST( WHAT,
4794 & MYID, KEEP_LOAD, IERR )
4795 IF ( IERR == -1 )THEN
4796 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
4797 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
4803.NE.
ELSE IF ( IERR 0 ) THEN
4804 WRITE(*,*) "Internal Error in DMUMPS_LOAD_POOL_UPD_NEW_POOL",
4810 END SUBROUTINE DMUMPS_NEXT_NODE
4811 SUBROUTINE DMUMPS_UPPER_PREDICT(INODE,STEP,NSTEPS,PROCNODE,FRERE,
4812 & NE,COMM,SLAVEF,MYID,KEEP,KEEP8,N)
4815 INTEGER INODE,NSTEPS,MYID,SLAVEF,COMM,N
4817 INTEGER(8) KEEP8(150)
4818 INTEGER FRERE(NSTEPS),NE(NSTEPS),STEP(N),PROCNODE(NSTEPS)
4819 EXTERNAL MUMPS_IN_OR_ROOT_SSARBR,MUMPS_PROCNODE
4820 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
4822 INTEGER MUMPS_PROCNODE
4823 INTEGER FATHER_NODE,FATHER,WHAT,IERR
4824 EXTERNAL MUMPS_TYPENODE
4825 INTEGER MUMPS_TYPENODE
4826 LOGICAL :: EXIT_FLAG
4827.NOT..AND..NOT.
IF((BDC_M2_MEM)(BDC_M2_FLOPS))THEN
4831.LT..OR..GT.
IF((INODE0)(INODEN)) THEN
4842 NCB=ND_LOAD(STEP_LOAD(INODE))-NELIM + KEEP_LOAD(253)
4844 FATHER_NODE=DAD_LOAD(STEP_LOAD(INODE))
4845.EQ.
IF (FATHER_NODE0) THEN
4848.EQ..AND.
IF((FRERE(STEP(FATHER_NODE))0)
4849.EQ..OR.
& ((FATHER_NODEKEEP(38))
4850.EQ.
& (FATHER_NODEKEEP(20))))THEN
4853 IF(MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(FATHER_NODE)),
4857 FATHER=MUMPS_PROCNODE(PROCNODE(STEP(FATHER_NODE)),KEEP(199))
4858.EQ.
IF(FATHERMYID)THEN
4860 CALL DMUMPS_PROCESS_NIV2_MEM_MSG(FATHER_NODE)
4861 ELSEIF(BDC_M2_FLOPS)THEN
4862 CALL DMUMPS_PROCESS_NIV2_FLOPS_MSG(FATHER_NODE)
4864.EQ..OR..EQ.
IF((KEEP(81)2)(KEEP(81)3))THEN
4865 IF(MUMPS_TYPENODE(PROCNODE_LOAD(STEP_LOAD(INODE)),
4866.EQ.
& KEEP(199))1)THEN
4867 CB_COST_ID(POS_ID)=INODE
4868 CB_COST_ID(POS_ID+1)=1
4869 CB_COST_ID(POS_ID+2)=POS_MEM
4871 CB_COST_MEM(POS_MEM)=int(MYID,8)
4873 CB_COST_MEM(POS_MEM)=int(NCB,8)*int(NCB,8)
4880 CALL DMUMPS_BUF_SEND_FILS(WHAT, COMM, NPROCS,
4881 & FATHER_NODE,INODE,NCB, KEEP,MYID,
4883 IF (IERR == -1 ) THEN
4884 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
4885 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
4891.NE.
ELSE IF ( IERR 0 ) THEN
4892 WRITE(*,*) "Internal Error in DMUMPS_UPPER_PREDICT",
4898 END SUBROUTINE DMUMPS_UPPER_PREDICT
4899 SUBROUTINE DMUMPS_REMOVE_NODE(INODE,NUM_CALL)
4901 DOUBLE PRECISION MAXI
4902 INTEGER i,J,IND_MAXI
4903 INTEGER INODE,NUM_CALL
4905.EQ..AND..OR.
IF(((NUM_CALL1)(BDC_MD))
4906.EQ..AND..NOT.
& ((NUM_CALL2)(BDC_MD)))THEN
4910.EQ..AND.
IF((FRERE_LOAD(STEP_LOAD(INODE))0)
4911.EQ..OR.
& ((INODEKEEP_LOAD(38))
4912.EQ.
& (INODEKEEP_LOAD(20)))) THEN
4916.EQ.
IF(POOL_NIV2(i)INODE) GOTO 666
4918 NB_SON(STEP_LOAD(INODE))=-1
4922.EQ.
IF(POOL_NIV2_COST(i)MAX_M2)THEN
4928.GT.
IF(POOL_NIV2_COST(J)MAXI)THEN
4929 MAXI=POOL_NIV2_COST(J)
4936 REMOVE_NODE_FLAG_MEM=.TRUE.
4937 REMOVE_NODE_COST_MEM=TMP_M2
4938 CALL DMUMPS_NEXT_NODE(REMOVE_NODE_FLAG,MAX_M2,COMM_LD)
4941 ELSEIF(BDC_M2_FLOPS)THEN
4942 REMOVE_NODE_COST=POOL_NIV2_COST(i)
4943 REMOVE_NODE_FLAG=.TRUE.
4944 CALL DMUMPS_NEXT_NODE(REMOVE_NODE_FLAG,
4945 & -POOL_NIV2_COST(i),COMM_LD)
4946 NIV2(MYID+1)=NIV2(MYID+1)-POOL_NIV2_COST(i)
4949 POOL_NIV2(J-1)=POOL_NIV2(J)
4950 POOL_NIV2_COST(J-1)=POOL_NIV2_COST(J)
4952 POOL_SIZE=POOL_SIZE-1
4953 END SUBROUTINE DMUMPS_REMOVE_NODE
4954 RECURSIVE SUBROUTINE DMUMPS_PROCESS_NIV2_MEM_MSG(INODE)
4957 EXTERNAL MUMPS_TYPENODE
4958 INTEGER MUMPS_TYPENODE
4959.EQ..OR.
IF((INODEKEEP_LOAD(20))
4960.EQ.
& (INODEKEEP_LOAD(38)))THEN
4963.EQ.
IF(NB_SON(STEP_LOAD(INODE))-1)THEN
4966.LT.
IF(NB_SON(STEP_LOAD(INODE))0)THEN
4972 NB_SON(STEP_LOAD(INODE))=
4973 & NB_SON(STEP_LOAD(INODE))-1
4974.EQ.
IF(NB_SON(STEP_LOAD(INODE))0)THEN
4975.EQ.
IF(POOL_SIZEPOOL_NIV2_SIZE)THEN
4976 WRITE(*,*)MYID,': internal error 2 in
4980 POOL_NIV2(POOL_SIZE+1)=INODE
4981 POOL_NIV2_COST(POOL_SIZE+1)=
4982 & DMUMPS_LOAD_GET_MEM(INODE)
4983 POOL_SIZE=POOL_SIZE+1
4984.GT.
IF(POOL_NIV2_COST(POOL_SIZE)MAX_M2)THEN
4985 MAX_M2=POOL_NIV2_COST(POOL_SIZE)
4986 ID_MAX_M2=POOL_NIV2(POOL_SIZE)
4987 CALL DMUMPS_NEXT_NODE(REMOVE_NODE_FLAG_MEM,MAX_M2,COMM_LD)
4992 END SUBROUTINE DMUMPS_PROCESS_NIV2_MEM_MSG
4993 RECURSIVE SUBROUTINE DMUMPS_PROCESS_NIV2_FLOPS_MSG(INODE)
4996 EXTERNAL MUMPS_TYPENODE
4997 INTEGER MUMPS_TYPENODE
4998.EQ..OR.
IF((INODEKEEP_LOAD(20))
4999.EQ.
& (INODEKEEP_LOAD(38)))THEN
5002.EQ.
IF(NB_SON(STEP_LOAD(INODE))-1)THEN
5005.LT.
IF(NB_SON(STEP_LOAD(INODE))0)THEN
5011 NB_SON(STEP_LOAD(INODE))=
5012 & NB_SON(STEP_LOAD(INODE))-1
5013.EQ.
IF(NB_SON(STEP_LOAD(INODE))0)THEN
5014.EQ.
IF(POOL_SIZEPOOL_NIV2_SIZE)THEN
5015 WRITE(*,*)MYID,': internal error 2 in
5020 POOL_NIV2(POOL_SIZE+1)=INODE
5021 POOL_NIV2_COST(POOL_SIZE+1)=
5022 & DMUMPS_LOAD_GET_FLOPS_COST(INODE)
5023 POOL_SIZE=POOL_SIZE+1
5024 MAX_M2=POOL_NIV2_COST(POOL_SIZE)
5025 ID_MAX_M2=POOL_NIV2(POOL_SIZE)
5026 CALL DMUMPS_NEXT_NODE(REMOVE_NODE_FLAG,
5027 & POOL_NIV2_COST(POOL_SIZE),
5029 NIV2(MYID+1)=POOL_NIV2_COST(POOL_SIZE)+NIV2(MYID+1)
5032 END SUBROUTINE DMUMPS_PROCESS_NIV2_FLOPS_MSG
5033 DOUBLE PRECISION FUNCTION DMUMPS_LOAD_GET_FLOPS_COST(INODE)
5034 USE MUMPS_FUTURE_NIV2
5036 INTEGER NFRONT,NELIM,i,LEVEL
5037 EXTERNAL MUMPS_TYPENODE
5038 INTEGER MUMPS_TYPENODE
5039 DOUBLE PRECISION COST
5048 NFRONT = ND_LOAD( STEP_LOAD(INODE) ) + KEEP_LOAD(253)
5049 LEVEL = MUMPS_TYPENODE( PROCNODE_LOAD(STEP_LOAD(INODE)),
5052 CALL MUMPS_GET_FLOPS_COST(NFRONT,NELIM,NELIM,
5053 & KEEP_LOAD(50),LEVEL,COST)
5054 DMUMPS_LOAD_GET_FLOPS_COST=COST
5056 END FUNCTION DMUMPS_LOAD_GET_FLOPS_COST
5057 INTEGER FUNCTION DMUMPS_LOAD_GET_CB_FREED( INODE )
5059 INTEGER INODE,NELIM,NFR,SON,IN,i
5069 DO i=1, NE_LOAD(STEP_LOAD(INODE))
5070 NFR = ND_LOAD( STEP_LOAD(SON) ) + KEEP_LOAD(253)
5079 COST_CB=COST_CB+((NFR-NELIM)*(NFR-NELIM))
5080 SON=FRERE_LOAD(STEP_LOAD(SON))
5082 DMUMPS_LOAD_GET_CB_FREED=COST_CB
5084 END FUNCTION DMUMPS_LOAD_GET_CB_FREED
5085 SUBROUTINE DMUMPS_LOAD_SEND_MD_INFO(SLAVEF,NMB_OF_CAND,
5087 & TAB_POS, NASS, KEEP,KEEP8, LIST_SLAVES,
5090 USE MUMPS_FUTURE_NIV2
5092 INTEGER, INTENT (IN) :: SLAVEF, NASS, NSLAVES
5093 INTEGER, INTENT (IN) :: NMB_OF_CAND
5094 INTEGER, INTENT (IN) :: LIST_OF_CAND(NMB_OF_CAND)
5095 INTEGER, INTENT (IN) :: TAB_POS(SLAVEF+2)
5096 INTEGER, INTENT (IN) :: LIST_SLAVES(NSLAVES)
5097 INTEGER KEEP(500),INODE
5098 INTEGER(8) KEEP8(150)
5100 DOUBLE PRECISION MEM_COST,FCT_COST
5101 DOUBLE PRECISION, DIMENSION(:),ALLOCATABLE :: DELTA_MD
5102 INTEGER, DIMENSION(:), ALLOCATABLE :: IPROC2POSINDELTAMD
5103 INTEGER, DIMENSION(:), ALLOCATABLE :: P_TO_UPDATE
5104 INTEGER NBROWS_SLAVE,i,WHAT,IERR
5105 INTEGER :: NP_TO_UPDATE, K
5107 LOGICAL :: EXIT_FLAG
5110.OR.
IF ( KEEP(24) == 0 KEEP(24) == 1 ) THEN
5111 FORCE_CAND = .FALSE.
5113.eq.
FORCE_CAND = (mod(KEEP(24),2)0)
5115 CALL DMUMPS_LOAD_GET_ESTIM_MEM_COST(INODE,FCT_COST,
5116 & MEM_COST,NMB_OF_CAND,NASS)
5117 ALLOCATE(IPROC2POSINDELTAMD(0:SLAVEF-1),
5118 & DELTA_MD(min(SLAVEF, NMB_OF_CAND+NSLAVES)),
5119 & P_TO_UPDATE(min(SLAVEF, NMB_OF_CAND+NSLAVES)),
5121 IF (allocok > 0 ) THEN
5122 WRITE(*,*) "PB ALLOC IN DMUMPS_LOAD_SEND_MD_INFO",
5123 & SLAVEF, NMB_OF_CAND, NSLAVES
5126 IPROC2POSINDELTAMD = -99
5129 NP_TO_UPDATE = NP_TO_UPDATE + 1
5130 IPROC2POSINDELTAMD (LIST_SLAVES(i)) = NP_TO_UPDATE
5131 NBROWS_SLAVE = TAB_POS(i+1) - TAB_POS(i)
5132 DELTA_MD(NP_TO_UPDATE)=-dble(NBROWS_SLAVE)*
5134 P_TO_UPDATE(NP_TO_UPDATE) = LIST_SLAVES(i)
5136 DO i = 1, NMB_OF_CAND
5137 K = IPROC2POSINDELTAMD(LIST_OF_CAND(i))
5139 DELTA_MD(K)=DELTA_MD(K)+FCT_COST
5141 NP_TO_UPDATE = NP_TO_UPDATE + 1
5142 IPROC2POSINDELTAMD (LIST_OF_CAND(i)) = NP_TO_UPDATE
5143 DELTA_MD (NP_TO_UPDATE) = FCT_COST
5144 P_TO_UPDATE(NP_TO_UPDATE) = LIST_OF_CAND(i)
5149 CALL DMUMPS_BUF_BCAST_ARRAY(.FALSE., COMM_LD, MYID, SLAVEF,
5151 & NP_TO_UPDATE, P_TO_UPDATE,0,
5156 IF ( IERR == -1 ) THEN
5157 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
5158 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
5164.NE.
ELSE IF ( IERR 0 ) THEN
5165 WRITE(*,*) "Internal Error 2 in DMUMPS_LOAD_SEND_MD_INFO",
5169.NE.
IF (FUTURE_NIV2(MYID+1) 0) THEN
5170 DO i = 1, NP_TO_UPDATE
5171 MD_MEM(P_TO_UPDATE(i))=MD_MEM(P_TO_UPDATE(i))+
5172 & int(DELTA_MD( i ),8)
5173.EQ.
IF(FUTURE_NIV2(P_TO_UPDATE(i)+1)0)THEN
5174 MD_MEM(P_TO_UPDATE(i))=999999999_8
5179 DEALLOCATE(DELTA_MD,P_TO_UPDATE,IPROC2POSINDELTAMD)
5181 END SUBROUTINE DMUMPS_LOAD_SEND_MD_INFO
5182 SUBROUTINE DMUMPS_LOAD_GET_ESTIM_MEM_COST(INODE,FCT_COST,
5183 & MEM_COST,NSLAVES,NELIM)
5185 INTEGER INODE,NSLAVES,NFR,NELIM,IN
5186 DOUBLE PRECISION MEM_COST,FCT_COST
5187 NFR=ND_LOAD(STEP_LOAD(INODE)) + KEEP_LOAD(253)
5189 FCT_COST=dble(int(dble(NFR-NELIM)/dble(NSLAVES))+1)*
5191 MEM_COST=dble(int(dble(NFR-NELIM)/dble(NSLAVES))+1)*
5193 END SUBROUTINE DMUMPS_LOAD_GET_ESTIM_MEM_COST
5194 SUBROUTINE DMUMPS_LOAD_CLEAN_MEMINFO_POOL(INODE)
5195 USE MUMPS_FUTURE_NIV2
5198 INTEGER i,J,SON,NSLAVES_TEMP,POS_TEMP,K
5199 INTEGER MUMPS_PROCNODE
5200 EXTERNAL MUMPS_PROCNODE
5201.LT..OR..GT.
IF((INODE0)(INODEN_LOAD))THEN
5212.LT.
IF(POS_IDNE_LOAD(STEP_LOAD(INODE))*3)THEN
5215 DO i=1, NE_LOAD(STEP_LOAD(INODE))
5217.LT.
DO WHILE (JPOS_ID)
5218.EQ.
IF(CB_COST_ID(J)SON)GOTO 295
5223 IF ( MUMPS_PROCNODE(
5224 & PROCNODE_LOAD(STEP_LOAD(INODE)),
5225.EQ.
& KEEP_LOAD(199) ) MYID ) THEN
5226.EQ.
IF(INODEKEEP_LOAD(38))THEN
5229.NE.
IF(FUTURE_NIV2(MYID+1)0)THEN
5230 WRITE(*,*)MYID,': i did not find
',SON
5239 NSLAVES_TEMP=CB_COST_ID(J+1)
5240 POS_TEMP=CB_COST_ID(J+2)
5242 CB_COST_ID(K)=CB_COST_ID(K+3)
5245.LE.
DO WHILE (KPOS_MEM-1)
5246 CB_COST_MEM(K)=CB_COST_MEM(K+2*NSLAVES_TEMP)
5249 POS_MEM=POS_MEM-2*NSLAVES_TEMP
5251.LT..OR..LT.
IF((POS_MEM1)(POS_ID1))THEN
5256 SON=FRERE_LOAD(STEP_LOAD(SON))
5259 END SUBROUTINE DMUMPS_LOAD_CLEAN_MEMINFO_POOL
5260 SUBROUTINE DMUMPS_LOAD_CHK_MEMCST_POOL(FLAG)
5264 DOUBLE PRECISION MEM
5267 MEM=DM_MEM(i)+LU_USAGE(i)
5269 MEM=MEM+SBTR_MEM(i)-SBTR_CUR(i)
5271.GT.
IF((MEM/dble(TAB_MAXS(i)))0.8d0)THEN
5277 END SUBROUTINE DMUMPS_LOAD_CHK_MEMCST_POOL
5278 SUBROUTINE DMUMPS_CHECK_SBTR_COST(NBINSUBTREE,INSUBTREE,NBTOP,
5281 INTEGER NBINSUBTREE,INSUBTREE,NBTOP
5282 DOUBLE PRECISION MIN_COST
5285 DOUBLE PRECISION TMP_COST,TMP_MIN
5286 TMP_MIN=huge(TMP_MIN)
5290 TMP_MIN=min(TMP_MIN,dble(TAB_MAXS(i))-(DM_MEM(i)+
5291 & LU_USAGE(i))-(SBTR_MEM(i)-SBTR_CUR(i)))
5293 TMP_MIN=min(TMP_MIN,dble(TAB_MAXS(i))-
5294 & (DM_MEM(i)+LU_USAGE(i)))
5298.GT.
IF(NBINSUBTREE0)THEN
5299.EQ.
IF(INSUBTREE1)THEN
5300 TMP_COST=dble(TAB_MAXS(MYID))-(DM_MEM(MYID)+
5302 & -(SBTR_MEM(MYID)-SBTR_CUR(MYID))
5308 TMP_MIN=min(TMP_COST,TMP_MIN)
5309.GT.
IF(TMP_MINMIN_COST) SBTR=.TRUE.
5311 END SUBROUTINE DMUMPS_CHECK_SBTR_COST
5312 SUBROUTINE DMUMPS_LOAD_COMP_MAXMEM_POOL(INODE,MAX_MEM,PROC)
5313 USE MUMPS_FUTURE_NIV2
5316 INTEGER i,POS,NSLAVES,SLAVE,NCAND,J,NELIM,NCB,NFRONT,SON,K
5318 EXTERNAL MUMPS_TYPENODE
5319 INTEGER MUMPS_TYPENODE
5320 DOUBLE PRECISION MAX_MEM
5321 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MEM_ON_PROCS,
5323 LOGICAL, DIMENSION(:), ALLOCATABLE :: CONCERNED
5324 DOUBLE PRECISION MAX_SENT_MSG
5325.EQ.
IF((FRERE_LOAD(STEP_LOAD(INODE))0)
5326.AND..EQ.
& (INODEKEEP_LOAD(38)))THEN
5329 ALLOCATE( MEM_ON_PROCS(0:NPROCS-1), stat=allocok)
5330 IF ( allocok > 0 ) THEN
5334 ALLOCATE( CONCERNED(0:NPROCS-1), stat=allocok)
5335 IF ( allocok > 0 ) THEN
5339 ALLOCATE( RECV_BUF(0:NPROCS-1), stat=allocok)
5340 IF ( allocok > 0 ) THEN
5345 MAX_SENT_MSG=dble(0)
5355 NFRONT=ND_LOAD(STEP_LOAD(INODE)) + KEEP_LOAD(253)
5357 IF(MUMPS_TYPENODE(PROCNODE_LOAD(STEP_LOAD(INODE)),
5358.EQ.
& KEEP_LOAD(199))2)THEN
5359 NCAND=CAND_LOAD(NPROCS+1, STEP_TO_NIV2_LOAD(STEP_LOAD(INODE)))
5363 MEM_ON_PROCS(i)=dble(TAB_MAXS(i))-(DM_MEM(i)+
5365 & DMUMPS_LOAD_GET_MEM(INODE))
5367 MEM_ON_PROCS(i)=MEM_ON_PROCS(i)-(SBTR_MEM(i)-SBTR_CUR(i))
5371 MEM_ON_PROCS(i)=dble(TAB_MAXS(i))-(DM_MEM(i)+LU_USAGE(i))
5373 MEM_ON_PROCS(i)=MEM_ON_PROCS(i)-(SBTR_MEM(i)-SBTR_CUR(i))
5376 MEM_ON_PROCS(i)=MEM_ON_PROCS(i)-NIV2(i+1)
5379 IF(MUMPS_TYPENODE(PROCNODE_LOAD(STEP_LOAD(INODE)),
5380.EQ.
& KEEP_LOAD(199))2)THEN
5381.AND..EQ.
IF(BDC_MD(KEEP_LOAD(48)5))THEN
5383 IF(CAND_LOAD(J, STEP_TO_NIV2_LOAD(STEP_LOAD(INODE)))
5385 MEM_ON_PROCS(i)=MEM_ON_PROCS(i)-
5386 & ((dble(NFRONT)*dble(NCB))/dble(NCAND))
5395 DO K=1, NE_LOAD(STEP_LOAD(INODE))
5397.LE.
DO WHILE (iPOS_ID)
5398.EQ.
IF(CB_COST_ID(i)SON)GOTO 295
5403.NE.
IF(FUTURE_NIV2(MYID+1)0)THEN
5404 WRITE(*,*)MYID,':
',SON,'has not been found
5410 NSLAVES=CB_COST_ID(i+1)
5413 SLAVE=int(CB_COST_MEM(POS))
5414.NOT.
IF(CONCERNED(SLAVE))THEN
5415 MEM_ON_PROCS(SLAVE)=MEM_ON_PROCS(SLAVE)+
5416 & dble(CB_COST_MEM(POS+1))
5419 IF(CONCERNED(J))THEN
5421 RECV_BUF(J)=max(RECV_BUF(J),
5422 & dble(CB_COST_MEM(POS+1)))
5429 SON=FRERE_LOAD(STEP_LOAD(SON))
5431 MAX_MEM=huge(MAX_MEM)
5432 WRITE(*,*)'nprocs=
',NPROCS,MAX_MEM
5434.GT.
IF(MAX_MEMMEM_ON_PROCS(i))THEN
5437 MAX_MEM=min(MEM_ON_PROCS(i),MAX_MEM)
5439 DEALLOCATE(MEM_ON_PROCS)
5440 DEALLOCATE(CONCERNED)
5441 DEALLOCATE(RECV_BUF)
5442 END SUBROUTINE DMUMPS_LOAD_COMP_MAXMEM_POOL
5443 SUBROUTINE DMUMPS_FIND_BEST_NODE_FOR_MEM(MIN_PROC,POOL,
5446 INTEGER INODE,LPOOL,MIN_PROC
5448 EXTERNAL MUMPS_PROCNODE
5449 INTEGER MUMPS_PROCNODE
5450 INTEGER i,NBTOP,INSUBTREE,NBINSUBTREE,NODE,FATHER,SON,J
5451 INTEGER SBTR_NB_LEAF,POS,K,allocok,L
5452 INTEGER, ALLOCATABLE, DIMENSION (:) :: TMP_SBTR
5453 NBINSUBTREE = POOL(LPOOL)
5454 NBTOP = POOL(LPOOL - 1)
5455 INSUBTREE = POOL(LPOOL - 2)
5456.EQ..AND.
IF((KEEP_LOAD(47)4)
5457.NE.
& ((NBINSUBTREE0)))THEN
5458 DO J=INDICE_SBTR,NB_SUBTREES
5459 NODE=MY_ROOT_SBTR(J)
5460 FATHER=DAD_LOAD(STEP_LOAD(NODE))
5471 IF( MUMPS_PROCNODE(PROCNODE_LOAD(STEP_LOAD(i)),
5472.EQ.
& KEEP_LOAD(199)) MIN_PROC ) THEN
5473 SBTR_NB_LEAF=MY_NB_LEAF(J)
5474 POS=SBTR_FIRST_POS_IN_POOL(J)
5475.NE.
IF(POOL(POS+SBTR_NB_LEAF)MY_FIRST_LEAF(J))THEN
5476 WRITE(*,*)MYID,':
the first leaf is not ok
'
5479 ALLOCATE (TMP_SBTR(SBTR_NB_LEAF), stat=allocok)
5480 IF (allocok > 0 ) THEN
5481 WRITE(*,*)MYID,': not enough space
5485 POS=SBTR_FIRST_POS_IN_POOL(J)
5487 TMP_SBTR(K)=POOL(POS+K-1)
5489 DO K=POS+1,NBINSUBTREE-SBTR_NB_LEAF
5490 POOL(K)=POOL(K+SBTR_NB_LEAF)
5493 DO K=NBINSUBTREE-SBTR_NB_LEAF+1,NBINSUBTREE
5494 POOL(K)=TMP_SBTR(POS)
5498 SBTR_FIRST_POS_IN_POOL(K)=SBTR_FIRST_POS_IN_POOL(K)
5499 & -SBTR_FIRST_POS_IN_POOL(J)
5501 SBTR_FIRST_POS_IN_POOL(J)=NBINSUBTREE-SBTR_NB_LEAF
5502 POS=MY_FIRST_LEAF(J)
5505 MY_FIRST_LEAF(J)=MY_FIRST_LEAF(J+1)
5506 MY_NB_LEAF(J)=MY_NB_LEAF(J+1)
5508 MY_FIRST_LEAF(INDICE_SBTR)=POS
5509 MY_NB_LEAF(INDICE_SBTR)=L
5510 INODE=POOL(NBINSUBTREE)
5511 DEALLOCATE(TMP_SBTR)
5514 i = FRERE_LOAD(STEP_LOAD(i))
5520 NODE=POOL(LPOOL-2-J)
5521 FATHER=DAD_LOAD(STEP_LOAD(NODE))
5532 IF( MUMPS_PROCNODE(PROCNODE_LOAD(STEP_LOAD(i)),
5533.EQ.
& KEEP_LOAD(199)) MIN_PROC ) THEN
5537 i = FRERE_LOAD(STEP_LOAD(i))
5541 END SUBROUTINE DMUMPS_FIND_BEST_NODE_FOR_MEM
5542 SUBROUTINE DMUMPS_LOAD_INIT_SBTR_STRUCT(POOL, LPOOL,KEEP,KEEP8)
5544 INTEGER LPOOL,POOL(LPOOL),KEEP(500)
5545 INTEGER(8) KEEP8(150)
5547 EXTERNAL MUMPS_ROOTSSARBR
5548 LOGICAL MUMPS_ROOTSSARBR
5549.NOT.
IF(BDC_SBTR) RETURN
5551 DO i=NB_SUBTREES,1,-1
5552 DO WHILE(MUMPS_ROOTSSARBR(
5553 & PROCNODE_LOAD(STEP_LOAD(POOL(POS+1))),
5557 SBTR_FIRST_POS_IN_POOL(i)=POS+1
5558 POS=POS+MY_NB_LEAF(i)
5560 END SUBROUTINE DMUMPS_LOAD_INIT_SBTR_STRUCT
5561 END MODULE DMUMPS_LOAD
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine mumps_get_flops_cost(nfront, npiv, nass, keep50, level, cost)
double precision function mpi_wtime()
subroutine mpi_comm_rank(comm, rank, ierr)
for(i8=*sizetab-1;i8 >=0;i8--)
subroutine mumps_max_surfcb_nbrows(what, keep, keep8, ncb, nfr, slavef, nbrowmax, maxsurfcb8)
subroutine mumps_bloc2_setpartition(keep, keep8, slavef, tab_pos_in_pere, nslaves, nfront, ncb)
subroutine, public dmumps_buf_broadcast(what, comm, nprocs, future_niv2, load, upd_load, myid, keep, ierr)
subroutine, public dmumps_buf_send_not_mstr(comm, myid, nprocs, max_surf_master, keep, ierr)
subroutine, public dmumps_buf_bcast_array(bdc_mem, comm, myid, nprocs, future_niv2, nslaves, list_slaves, inode, mem_increment, flops_increment, cb_band, what, keep, ierr)
double precision, dimension(:), allocatable, save, private pool_niv2_cost
logical, save, private bdc_m2_mem
double precision, save, private max_m2
subroutine, public dmumps_load_comp_maxmem_pool(inode, max_mem, proc)
integer, dimension(:), pointer, save, private my_nb_leaf
double precision, save, private dm_sumlu
subroutine, public dmumps_load_pool_upd_new_pool(pool, lpool, procnode, keep, keep8, slavef, comm, myid, step, n, nd, fils)
integer, dimension(:,:), pointer, save, private cand_load
subroutine, public dmumps_load_clean_meminfo_pool(inode)
logical, save, private bdc_mem
integer, save, public current_best
integer, dimension(:), pointer, save, public sbtr_id_load
integer, dimension(:), pointer, save, public dad_load
logical, save, private bdc_sbtr
subroutine, public dmumps_load_set_partition(ncbson_max, slavef, keep, keep8, icntl, cand_of_node, mem_distrib, ncb, nfront, nslaves_node, tab_pos, slaves_list, size_slaves_list, inode)
double precision, save, private beta
double precision, save, private remove_node_cost
integer, save, public pos_mem
integer, save, private pool_size
integer, dimension(:), pointer, save, public nd_load
subroutine, public dmumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
integer function, public dmumps_load_less_cand(mem_distrib, cand, k69, slavef, msg_size, nmb_of_cand)
double precision, save, private delta_load
logical, save, private bdc_md
subroutine, public dmumps_load_set_slaves(mem_distrib, msg_size, dest, nslaves)
recursive subroutine dmumps_process_niv2_mem_msg(inode)
integer, save, public second_current_best
integer(8), dimension(:), pointer, save, private keep8_load
integer, save, private sbtr_which_m
double precision, save, private cost_subtree
subroutine, public mumps_load_enable()
double precision, dimension(:), allocatable, save, private pool_mem
integer, dimension(:), pointer, save, public depth_first_seq_load
double precision, dimension(:), allocatable, save, private load_flops
double precision, save, private chk_ld
double precision, save, private tmp_m2
subroutine dmumps_load_parti_regular(slavef, keep, keep8, cand_of_node, mem_distrib, ncb, nfront, nslaves_node, tab_pos, slaves_list, size_slaves_list)
integer, save, public inside_subtree
subroutine, public dmumps_load_end(info1, nslaves, ierr)
integer, save, private lbuf_load_recv_bytes
subroutine, public dmumps_load_set_inicost(cost_subtree_arg, k64, dk15, k375, maxs)
integer, save, private k69
subroutine, public dmumps_load_set_sbtr_mem(what)
subroutine, public dmumps_load_init(id, memory_md_arg, maxs)
subroutine, public dmumps_load_set_slaves_cand(mem_distrib, cand, slavef, nslaves_inode, dest)
subroutine, public dmumps_upper_predict(inode, step, nsteps, procnode, frere, ne, comm, slavef, myid, keep, keep8, n)
recursive subroutine, public dmumps_load_process_message(msgsou, bufr, lbufr, lbufr_bytes)
integer, dimension(:), pointer, save, private my_first_leaf
double precision, save, private max_peak_stk
integer, dimension(:), pointer, save, public fils_load
subroutine, public dmumps_find_best_node_for_mem(min_proc, pool, lpool, inode)
subroutine dmumps_set_parti_flop_irr(ncbson_max, slavef, keep, keep8, procs, mem_distrib, ncb, nfront, nslaves_node, tab_pos, slaves_list, size_slaves_list, myid, inode, mp, lp)
integer, dimension(:), pointer, save, public step_load
double precision, save, private delta_mem
logical, save, private is_mumps_load_enabled
double precision, save, private peak_sbtr_cur_local
integer, dimension(:), pointer, save, private step_to_niv2_load
subroutine, public dmumps_load_chk_memcst_pool(flag)
integer(8), dimension(:), allocatable, save, public cb_cost_mem
recursive subroutine, public dmumps_load_recv_msgs(comm)
subroutine, public mumps_load_disable()
integer, save, public root_current_subtree
subroutine, public dmumps_load_pool_check_mem(inode, upper, slavef, keep, keep8, step, pool, lpool, procnode, n)
subroutine, public dmumps_split_prep_partition(inode, step, n, slavef, procnode_steps, keep, dad, fils, cand, icntl, copy_cand, nbsplit, numorg_split, slaves_list, size_slaves_list)
subroutine, public dmumps_load_init_sbtr_struct(pool, lpool, keep, keep8)
double precision, save, private alpha
double precision, save, private pool_last_cost_sent
double precision, dimension(:), pointer, save, public cost_trav
subroutine, public dmumps_load_send_md_info(slavef, nmb_of_cand, list_of_cand, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
integer, dimension(:), allocatable, save, private sbtr_first_pos_in_pool
integer, dimension(:), allocatable, save, private buf_load_recv
integer, dimension(:), allocatable, save, public cb_cost_id
integer(8), dimension(:), allocatable, save, private md_mem
integer, save, private myid
subroutine dmumps_set_parti_actv_mem(slavef, keep, keep8, procs, mem_distrib, ncb, nfront, nslaves_node, tab_pos, slaves_list, size_slaves_list, myid)
integer, save, private comm_ld
integer, dimension(:), pointer, save, public ne_load
integer, save, public pos_id
integer, private indice_sbtr_array
double precision, dimension(:), allocatable lu_usage
subroutine, public dmumps_split_post_partition(inode, step, n, slavef, nbsplit, ncb, procnode_steps, keep, dad, fils, icntl, tab_pos, nslaves_node)
double precision, dimension(:), allocatable, save, private sbtr_peak_array
integer, dimension(:), pointer, save, public frere_load
integer, save, private id_max_m2
integer, dimension(:), pointer, save, private my_root_sbtr
integer, save, private nprocs
integer(8), dimension(:), allocatable, save, private tab_maxs
double precision, dimension(:), allocatable, save, private niv2
integer function, public dmumps_load_less(k69, mem_distrib, msg_size)
integer, dimension(:), pointer, save, private procnode_load
double precision, save, private remove_node_cost_mem
integer, save, private comm_nodes
logical, save, private bdc_m2_flops
integer(8), save, private check_mem
double precision, dimension(:), allocatable, save, private dm_mem
logical, save, private bdc_pool
recursive subroutine dmumps_process_niv2_flops_msg(inode)
integer, save, private k50
subroutine, public dmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
integer, public niv1_flag
double precision, dimension(:), allocatable, save, private sbtr_cur
subroutine, public dmumps_load_sbtr_upd_new_pool(ok, inode, pool, lpool, myid, slavef, comm, keep, keep8)
double precision, dimension(:), allocatable, save, private sbtr_mem
logical, save, private remove_node_flag
double precision, dimension(:), allocatable, save, public mem_subtree
integer, dimension(:), allocatable, save, private nb_son
double precision, dimension(:), allocatable, save, private sbtr_cur_array
integer, dimension(:), allocatable, save, private pool_niv2
integer, dimension(:), allocatable, target, save, private idwload
subroutine, public dmumps_load_master_2_all(myid, slavef, comm, tab_pos, nass, keep, keep8, list_slaves, nslaves, inode)
integer, dimension(:), pointer, save, private keep_load
double precision, save, private dm_thres_mem
double precision, save, private sbtr_cur_local
integer, save, private k35
integer, public nb_subtrees
integer, dimension(:), pointer, save, public depth_first_load
subroutine, public dmumps_check_sbtr_cost(nbinsubtree, insubtree, nbtop, min_cost, sbtr)
integer, save, private lbuf_load_recv
subroutine, public dmumps_remove_node(inode, num_call)
integer(8), save, private max_surf_master
integer, private indice_sbtr
logical, save, private remove_node_flag_mem
double precision, dimension(:), allocatable, target, save, private wload
double precision, save, private min_diff
integer, save, private n_load
logical, save, private bdc_pool_mng
subroutine, public dmumps_split_propagate_parti(inode, typesplit, ifson, cand, size_cand, son_slave_list, nslson, step, n, slavef, procnode_steps, keep, dad, fils, icntl, istep_to_iniv2, iniv2, tab_pos_in_pere, nslaves_node, slaves_list, size_slaves_list)
integer, dimension(:), allocatable, public future_niv2