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
105 INTEGER(8),
DIMENSION(:),
POINTER,
SAVE,
PRIVATE::
keep8_load
106 INTEGER,
DIMENSION(:),
POINTER,
SAVE ::
110 INTEGER,
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
119 INTEGER,
DIMENSION(:),
POINTER,
SAVE :: ,
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) :: inode, 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) :: mem_distrib(0:slavef-1),inode
324 INTEGER,
intent(in) :: ncbson_max
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+
407INTEGER,
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 , 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
704 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
712 IF ( allocok .gt. 0 )
THEN
713 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
722 IF ( allocok .gt. 0 )
THEN
723 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
734 IF ( allocok .gt. 0 )
THEN
735 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
742 IF ( allocok .gt. 0 )
THEN
743 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
752 CALL mumps_size_c(size_dble(1),size_dble(2),i8size)
754 buf_load_size = k34_loc * 2 * (
nprocs - 1 ) +
757 buf_load_size = buf_load_size +
nprocs *
k35
760 buf_load_size = buf_load_size +
nprocs *
k35
766 IF ( allocok > 0 )
THEN
767 WRITE(*,*)
'PB allocation in DMUMPS_LOAD_INIT'
772 buf_load_size = buf_load_size * 20
774 IF ( ierr .LT. 0 )
THEN
776 id%INFO(2) = buf_load_size
792 max_sbtr=
max(
id%MEM_SUBTREE(i),max_sbtr)
800 & dble(memory_md),dble(0) ,
myid,
id%KEEP, ierr )
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 IF (
id%KEEP(375).EQ.1)
THEN
818 & dble(0),
myid,
id%KEEP, ierr )
823 & INC_LOAD, KEEP,KEEP8 )
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 )
838 IF (inc_load == 0.0d0)
THEN
844 IF((check_flops.NE.0).AND.
845 & (check_flops.NE.1).AND.(check_flops.NE.2))
THEN
846 WRITE(*,*)
myid,
': Bad value for CHECK_FLOPS'
849 IF(check_flops.EQ.1)
THEN
852 IF(check_flops.EQ.2)
THEN
856 IF ( process_bande )
THEN
896 IF ( ierr == -1 )
THEN
904 ELSE IF ( ierr .NE.0 )
THEN
905 WRITE(*,*)
"Internal Error in DMUMPS_LOAD_UPDATE",ierr
918 & PROCESS_BANDE_ARG, MEM_VALUE, NEW_LU, INC_MEM_ARG,
923 INTEGER(8),
INTENT(IN) :: mem_value, inc_mem_arg, new_lu,
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
934 process_bande=process_bande_arg
935 inc_mem = inc_mem_arg
936 IF ( process_bande .AND. new_lu .NE. 0_8)
THEN
937 WRITE(*,*)
" Internal Error in DMUMPS_LOAD_MEM_UPDATE."
938 WRITE(*,*)
" NEW_LU must be zero if called from PROCESS_BANDE"
949 &
':Problem with increments in DMUMPS_LOAD_MEM_UPDATE',
953 IF (process_bande)
THEN
959 & dble(inc_mem-new_lu)
978 IF ( new_lu > 0_8 )
THEN
979 inc_mem = inc_mem - new_lu
999 IF ((keep(48).NE.5).OR.
1001 & .GE.0.2d0*dble(lrlus))))
THEN
1010 & send_mem,sbtr_tmp,
1013 &
myid, keep, ierr )
1014 IF ( ierr == -1 )
THEN
1022 ELSE IF ( ierr .NE. 0 )
THEN
1023 WRITE(*,*)
"Internal Error in DMUMPS_LOAD_MEM_UPDATE",ierr
1037 INTEGER i, nless,
k69
1038 INTEGER,
DIMENSION(0:NPROCS-1) :: mem_distrib
1039 DOUBLE PRECISION lref
1040 DOUBLE PRECISION msg_size
1056 IF (
wload(i).LT.lref) nless=nless+1
1065 INTEGER dest(nslaves)
1066 INTEGER,
DIMENSION(0:NPROCS - 1) :: mem_distrib
1068 DOUBLE PRECISION msg_size
1069 IF ( nslaves.eq.
nprocs-1 )
THEN
1089 IF (nbdest.NE.nslaves)
THEN
1090 dest(nslaves) =
idwload(nslaves+1)
1108 INTEGER,
INTENT(IN) :: info1
1109 INTEGER,
INTENT(IN) :: nslaves
1110 INTEGER,
INTENT(OUT) :: ierr
1111 INTEGER :: dummy_communicator
1113 dummy_communicator = -999
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 )
1192 msgtag = status( mpi_tag )
1193 msgsou = status( mpi_source )
1194 IF ( msgtag .NE. update_load)
THEN
1195 write(*,*)
"Internal error 1 in DMUMPS_LOAD_RECV_MSGS",
1201 write(*,*)
"Internal error 2 in DMUMPS_LOAD_RECV_MSGS",
1206 & mpi_packed, msgsou, msgtag,
comm_ld, status, ierr_mpi)
1214 & ( msgsou, bufr, lbufr, lbufr_bytes )
1217 INTEGER , 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
1230 CALL mpi_unpack( bufr, lbufr_bytes, position,
1231 & what, 1, mpi_integer,
1233 IF ( what == 0 )
THEN
1234 CALL mpi_unpack( bufr, lbufr_bytes, position,
1236 & mpi_double_precision,
1240 CALL mpi_unpack( bufr, lbufr_bytes, position,
1241 & load_received, 1, mpi_double_precision,
1247 CALL mpi_unpack( bufr, lbufr_bytes, position,
1248 & load_received, 1, mpi_double_precision,
1253 CALL mpi_unpack( bufr, lbufr_bytes, position,
1254 & load_received, 1, mpi_double_precision,
1260 ELSEIF (( what == 1).OR.(what.EQ.19))
THEN
1261 CALL mpi_unpack( bufr, lbufr_bytes, position,
1262 & nslaves, 1, mpi_integer,
1264 CALL mpi_unpack( bufr, lbufr_bytes, position,
1265 & inode_received, 1, mpi_integer,
1269 CALL mpi_unpack( bufr, lbufr_bytes, position,
1270 & list_slaves(1), nslaves, mpi_integer,
1272 CALL mpi_unpack( bufr, lbufr_bytes, position,
1273 & load_incr(1), nslaves, mpi_double_precision,
1281 CALL mpi_unpack( bufr, lbufr_bytes, position,
1282 & load_incr(1), nslaves, mpi_double_precision,
1291 CALL mpi_unpack( bufr, lbufr_bytes, position,
1292 & load_incr(1), nslaves, mpi_double_precision,
1300 WRITE(*,*)
myid,
':',list_slaves(i),
'->',load_incr(i)
1307 NULLIFY( list_slaves )
1308 NULLIFY( load_incr )
1309 ELSE IF (what == 2 )
THEN
1311 WRITE(*,*)
"Internal error 2 in DMUMPS_LOAD_PROCESS_MESSAGE"
1314 CALL mpi_unpack( bufr, lbufr_bytes, position,
1316 & mpi_double_precision,
1319 ELSE IF ( what == 3 )
THEN
1321 WRITE(*,*)
"Internal error 3 in DMUMPS_LOAD_PROCESS_MESSAGE"
1326 & mpi_double_precision,
1329 ELSE IF (what == 4)
THEN
1332 CALL mpi_unpack( bufr, lbufr_bytes, position,
1333 & surf, 1, mpi_double_precision,
1335 md_mem(msgsou)=999999999_8
1340 ELSE IF (what == 5)
THEN
1342 WRITE(*,*)
"Internal error 7 in DMUMPS_LOAD_PROCESS_MESSAGE"
1345 CALL mpi_unpack( bufr, lbufr_bytes, position,
1346 & inode_received, 1,
1355 CALL mpi_unpack( bufr, lbufr_bytes, position,
1356 & inode_received, 1,
1359 CALL mpi_unpack( bufr, lbufr_bytes, position,
1374 & int(ncb_received,8)
1378 ELSE IF ( what == 6 )
THEN
1380 WRITE(*,*)
"Internal error 8 in DMUMPS_LOAD_PROCESS_MESSAGE"
1383 CALL mpi_unpack( bufr, lbufr_bytes, position,
1385 & mpi_double_precision,
1388 niv2(msgsou+1) = load_received
1390 niv2(msgsou+1) =
niv2(msgsou+1) + load_received
1391 IF(
niv2(msgsou+1).LT.0.0d0)
THEN
1392 IF(abs(
niv2(msgsou+1)) .LE. 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 error of mem_increment
'
1691 ALLOCATE(FLOPS_INCREMENT(NSLAVES), stat=allocok)
1692.ne.
if(allocok0) then
1693 WRITE(6,*) ' allocation error of flops_increment
'
1697 ALLOCATE(CB_BAND(NSLAVES), stat=allocok)
1698.ne.
if(allocok0) then
1699 WRITE(6,*) ' allocation error of cb_band
'
1703.NE..AND..NE.
IF((KEEP(81)2)(KEEP(81)3))THEN
1708 FUTURE_NIV2(MYID+1) = FUTURE_NIV2(MYID+1) - 1
1709 IF ( FUTURE_NIV2(MYID+1) < 0 ) THEN
1710 WRITE(*,*) "Internal error in DMUMPS_LOAD_MASTER_2_ALL"
1713 IF ( FUTURE_NIV2(MYID + 1) == 0 ) THEN
1715 CALL DMUMPS_BUF_SEND_NOT_MSTR(COMM,MYID,SLAVEF,
1716 & dble(MAX_SURF_MASTER),KEEP,IERR)
1717 IF (IERR == -1 ) THEN
1718 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
1719 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
1725.NE.
ELSE IF ( IERR 0 ) THEN
1726 WRITE(*,*) "Internal Error in DMUMPS_LOAD_MASTER_2_ALL",
1730 TAB_MAXS(MYID) = TAB_MAXS(MYID) + int(MAX_SURF_MASTER,8)
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.NE..AND..NE.
IF((KEEP(81)2)(KEEP(81)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.EQ..OR..EQ.
IF((KEEP(81)2)(KEEP(81)3))THEN
1772 CB_COST_ID(POS_ID)=INODE
1773 CB_COST_ID(POS_ID+1)=NSLAVES
1774 CB_COST_ID(POS_ID+2)=POS_MEM
1777 CB_COST_MEM(POS_MEM)=int(LIST_SLAVES(i),8)
1779 CB_COST_MEM(POS_MEM)=int(CB_BAND(i),8)
1784 CALL DMUMPS_BUF_BCAST_ARRAY(BDC_MEM, COMM, MYID, SLAVEF,
1786 & NSLAVES, LIST_SLAVES,INODE,
1788 & FLOPS_INCREMENT,CB_BAND, WHAT, KEEP, IERR)
1789 IF ( IERR == -1 ) THEN
1790 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
1791 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
1797.NE.
ELSE IF ( IERR 0 ) THEN
1798 WRITE(*,*) "Internal Error in DMUMPS_LOAD_MASTER_2_ALL",
1802.NE.
IF (FUTURE_NIV2(MYID+1) 0) THEN
1804 LOAD_FLOPS(LIST_SLAVES(i)) = LOAD_FLOPS(LIST_SLAVES(i))
1805 & + FLOPS_INCREMENT(i)
1807 DM_MEM(LIST_SLAVES(i)) = DM_MEM(LIST_SLAVES(i))
1808 & + MEM_INCREMENT(i)
1813 DEALLOCATE(MEM_INCREMENT,FLOPS_INCREMENT,CB_BAND)
1815 END SUBROUTINE DMUMPS_LOAD_MASTER_2_ALL
1816 SUBROUTINE DMUMPS_LOAD_POOL_UPD_NEW_POOL(
1818 & PROCNODE, KEEP,KEEP8, SLAVEF, COMM, MYID, STEP, N,
1821 USE MUMPS_FUTURE_NIV2
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
1832 INTEGER MUMPS_TYPENODE
1833 EXTERNAL MUMPS_TYPENODE
1834 NBINSUBTREE = POOL(LPOOL)
1835 NBTOP = POOL(LPOOL - 1)
1836 INSUBTREE = POOL(LPOOL - 2)
1840.EQ..OR..EQ.
IF((KEEP(76)0)(KEEP(76)2))THEN
1842 DO i = LPOOL-NBTOP-2, min(LPOOL-3,LPOOL-NBTOP-2+3)
1844.LE..AND..GE.
IF (INODE N INODE 1 ) THEN
1851 DO i = NBINSUBTREE, max(1,NBINSUBTREE-3), -1
1853.LE..AND..GE.
IF (INODE N INODE 1 ) THEN
1861.EQ.
IF(KEEP(76)1)THEN
1862.EQ.
IF(INSUBTREE1)THEN
1863 DO i = NBINSUBTREE, max(1,NBINSUBTREE-3), -1
1865.LE..AND..GE.
IF (INODE N INODE 1 ) THEN
1872 DO i = LPOOL-NBTOP-2, min(LPOOL-3,LPOOL-NBTOP-2+3)
1874.LE..AND..GE.
IF (INODE N INODE 1 ) THEN
1883 & 'internal error: unknown pool management strategy
'
1896 NFR = ND( STEP(INODE) )
1897 LEVEL = MUMPS_TYPENODE( PROCNODE(STEP(INODE)), KEEP(199) )
1898.EQ.
IF (LEVEL 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 )
1908.GT.
IF ( abs(POOL_LAST_COST_SENT-COST)DM_THRES_MEM ) THEN
1911 CALL DMUMPS_BUF_BROADCAST( WHAT,
1914 & COST, dble(0), MYID, KEEP, IERR )
1915 POOL_LAST_COST_SENT = COST
1917 IF ( IERR == -1 )THEN
1918 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
1919 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
1924.NE.
ELSE IF ( IERR 0 ) THEN
1925 WRITE(*,*) "Internal Error in DMUMPS_LOAD_POOL_UPD_NEW_POOL",
1931 END SUBROUTINE DMUMPS_LOAD_POOL_UPD_NEW_POOL
1932 SUBROUTINE DMUMPS_LOAD_SBTR_UPD_NEW_POOL(
1933 & OK,INODE,POOL,LPOOL,MYID,SLAVEF,COMM,KEEP,KEEP8)
1935 USE MUMPS_FUTURE_NIV2
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
1944 EXTERNAL MUMPS_ROOTSSARBR,MUMPS_IN_OR_ROOT_SSARBR
1945 LOGICAL MUMPS_ROOTSSARBR,MUMPS_IN_OR_ROOT_SSARBR
1946.LE..OR..GT.
IF((INODE0)(INODEN_LOAD)) THEN
1949.NOT.
IF (MUMPS_IN_OR_ROOT_SSARBR(
1950 & PROCNODE_LOAD(STEP_LOAD(INODE)), KEEP(199))
1954 IF(MUMPS_ROOTSSARBR(PROCNODE_LOAD(STEP_LOAD(INODE)),
1956.EQ.
IF(NE_LOAD(STEP_LOAD(INODE))0)THEN
1961.LE.
IF(INDICE_SBTRNB_SUBTREES)THEN
1962.EQ.
IF(INODEMY_FIRST_LEAF(INDICE_SBTR))THEN
1967 SBTR_PEAK_ARRAY(INDICE_SBTR_ARRAY)=MEM_SUBTREE(INDICE_SBTR)
1968 SBTR_CUR_ARRAY(INDICE_SBTR_ARRAY)=SBTR_CUR(MYID)
1969 INDICE_SBTR_ARRAY=INDICE_SBTR_ARRAY+1
1971.GE.
IF(dble(MEM_SUBTREE(INDICE_SBTR))DM_THRES_MEM)THEN
1973 CALL DMUMPS_BUF_BROADCAST(
1974 & WHAT, COMM, SLAVEF,
1976 & dble(MEM_SUBTREE(INDICE_SBTR)), dble(0),
1977 & MYID, KEEP, IERR )
1978 IF ( IERR == -1 )THEN
1979 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
1980 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
1985.NE.
ELSE IF ( IERR 0 ) THEN
1987 & "Internal Error 1 in DMUMPS_LOAD_SBTR_UPD_NEW_POOL",
1992 SBTR_MEM(MYID)=SBTR_MEM(MYID)+
1993 & dble(MEM_SUBTREE(INDICE_SBTR))
1994 INDICE_SBTR=INDICE_SBTR+1
1995.EQ.
IF(INSIDE_SUBTREE0)THEN
1999.EQ.
IF(INODEMY_ROOT_SBTR(INDICE_SBTR-1))THEN
2001 COST=-SBTR_PEAK_ARRAY(INDICE_SBTR_ARRAY-1)
2002.GE.
IF(abs(COST)DM_THRES_MEM)THEN
2004 CALL DMUMPS_BUF_BROADCAST(
2005 & WHAT, COMM, SLAVEF,
2007 & COST, dble(0), MYID, KEEP, IERR )
2008 IF ( IERR == -1 )THEN
2009 CALL DMUMPS_LOAD_RECV_MSGS(COMM_LD)
2010 CALL MUMPS_CHECK_COMM_NODES(COMM_NODES, EXIT_FLAG)
2015.NE.
ELSE IF ( IERR 0 ) THEN
2017 & "Internal Error 3 in DMUMPS_LOAD_SBTR_UPD_NEW_POOL",
2022 INDICE_SBTR_ARRAY=INDICE_SBTR_ARRAY-1
2023 SBTR_MEM(MYID)=SBTR_MEM(MYID)-
2024 & SBTR_PEAK_ARRAY(INDICE_SBTR_ARRAY)
2025 SBTR_CUR(MYID)=SBTR_CUR_ARRAY(INDICE_SBTR_ARRAY)
2026.EQ.
IF(INDICE_SBTR_ARRAY1)THEN
2027 SBTR_CUR(MYID)=dble(0)
2033 END SUBROUTINE DMUMPS_LOAD_SBTR_UPD_NEW_POOL
2034 SUBROUTINE DMUMPS_SET_PARTI_ACTV_MEM
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)
2046 INTEGER, intent(out):: NSLAVES_NODE
2047 INTEGER NUMBER_OF_PROCS,K47, K48, K50
2049 DOUBLE PRECISION DK821
2052 INTEGER OTHERS,CHOSEN,SMALL_SET,ACC
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
2062.GT.
IF (KEEP8(21) 0_8) THEN
2064 & ": Internal Error 1 in DMUMPS_SET_PARTI_ACTV_MEM"
2072.OR.
IF ( KEEP(24) == 0 KEEP(24) == 1 ) THEN
2073 FORCE_CAND = .FALSE.
2075.eq.
FORCE_CAND = (mod(KEEP(24),2)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)
2086 WLOAD(i)=DM_MEM(PROCS(i))
2089 NUMBER_OF_PROCS=PROCS(SLAVEF+1)
2090 OTHERS=NUMBER_OF_PROCS
2092 NUMBER_OF_PROCS=SLAVEF
2093 WLOAD(1:SLAVEF) = DM_MEM(0:NUMBER_OF_PROCS-1)
2094 DO i=1,NUMBER_OF_PROCS
2097 OTHERS=NUMBER_OF_PROCS-1
2100 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, WLOAD, IDWLOAD)
2101 TOTAL_MEM=int(NCB,8)*int(NFRONT,8)
2105 DO i=1,NUMBER_OF_PROCS
2106.NE.
IF((IDWLOAD(i)MYID))THEN
2107 PEAK=max(PEAK,WLOAD(i))
2108 TEMP_ID(J)=IDWLOAD(i)
2111 TEMP(J)=TEMP(J)+SBTR_MEM(IDWLOAD(i))-
2112 & SBTR_CUR(IDWLOAD(i))
2115 TEMP(J)=TEMP(J)+POOL_MEM(TEMP_ID(J))
2118 TEMP(J)=TEMP(J)+NIV2(TEMP_ID(J)+1)
2124 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, TEMP, TEMP_ID)
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.LE.
IF(SOMMEdble(TOTAL_MEM)) THEN
2143 SOMME=SOMME+TEMP(OTHERS)-TEMP(i)
2145.GE.
IF(dble(TOTAL_MEM)SOMME) THEN
2151.GT.
IF((TEMP(OTHERS)-TEMP(i))DK821)THEN
2154 TMP_SUM=TEMP(OTHERS)-TEMP(i)
2156 X=int(TMP_SUM/dble(NFRONT))
2157.GT.
IF((ACC+X)NCB) X=NCB-ACC
2160.GT.
IF((TEMP(OTHERS)-TEMP(i))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.GT.
IF((ACC+X)NCB) X=NCB-ACC
2172 WRITE(*,*)"Internal Error 2 in
2173 & DMUMPS_SET_PARTI_ACTV_MEM"
2180.LT.
IF(NCB-ACCKMIN) GOTO 111
2181.EQ.
IF(NCBACC) GOTO 111
2184.GT.
IF((ACCNCB))THEN
2189 WRITE(*,*)'ncb=
',NCB,',somme=
',X
2191 & ": Internal Error 3 in DMUMPS_SET_PARTI_ACTV_MEM"
2194.NE.
IF((NCBACC))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.GT.
IF((ACC+X)NCB) X=NCB-ACC
2213.LT.
IF(NCB-ACCKMIN) GOTO 002
2214.EQ.
IF(NCBACC) GOTO 002
2218 NB_ROWS(CHOSEN)=NB_ROWS(CHOSEN)+(NCB-ACC)
2223 ADDITIONNAL_ROWS=NCB-ACC
2225 IF(int(dble(ADDITIONNAL_ROWS)/
2226.NE.
& dble(i))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.NE.
IF(ADDITIONNAL_ROWS0) THEN
2237 NB_ROWS(1)=NB_ROWS(1)+ADDITIONNAL_ROWS
2241.EQ.
IF(NB_ROWS(CHOSEN)0) CHOSEN=CHOSEN-1
2249 SOMME=(dble(i)*TEMP(i))-SOMME
2250.GE.
IF(dble(TOTAL_MEM)SOMME) GOTO 444
2255.EQ.
IF(TEMP(J)TEMP(i)) THEN
2272.GT.
IF((TEMP(SMALL_SET)-TEMP(i))DK821)THEN
2275 TMP_SUM=TEMP(SMALL_SET)-TEMP(i)
2277 X=int(TMP_SUM/dble(NFRONT))
2278.GT.
IF((ACC+X)NCB) X=NCB-ACC
2281.GT.
IF((TEMP(SMALL_SET)-TEMP(i))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)*
2296.GT.
IF((ACC+X)NCB) X=NCB-ACC
2301.LT.
IF(NCB-ACCKMIN) GOTO 888
2302.EQ.
IF(NCBACC) GOTO 888
2312.GT.
IF((ACCNCB))THEN
2317.LT.
IF((ACCNCB))THEN
2319.LT.
IF(SMALL_SETOTHERS)THEN
2324 NB_ROWS(CHOSEN)=NB_ROWS(CHOSEN)+NCB-ACC
2328 ADDITIONNAL_ROWS=NCB-ACC
2330.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
2331.AND..LE.
& (iNUMBER_OF_PROCS))
2333 X=int(ADDITIONNAL_ROWS/(i-1))
2334.EQ..AND..NE.
IF((X0)(ADDITIONNAL_ROWS0))THEN
2335.LT..AND..GT.
DO WHILE ((Ji)(ADDITIONNAL_ROWS0))
2336 NB_ROWS(J)=NB_ROWS(J)+1
2337 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-1
2340.NE.
IF(ADDITIONNAL_ROWS0)THEN
2347.LE.
IF((TEMP(1)+dble((NB_ROWS(1)+X)*NFRONT))
2349.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
2352.GT.
IF((AFFECTED+NB_ROWS(J))
2354 AFFECTED=KMAX-NB_ROWS(J)
2356 NB_ROWS(J)=NB_ROWS(J)+AFFECTED
2357 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-
2362.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
2364 AFFECTED=int((TEMP(i)-(TEMP(J)+
2365 & (dble(NB_ROWS(J))*dble(NFRONT))))
2367.GT.
IF((AFFECTED+NB_ROWS(J))KMAX)THEN
2368 AFFECTED=KMAX-NB_ROWS(J)
2370.GT.
IF(AFFECTEDADDITIONNAL_ROWS)THEN
2371 AFFECTED=ADDITIONNAL_ROWS
2373 NB_ROWS(J)=NB_ROWS(J)+AFFECTED
2374 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-AFFECTED
2381.EQ..AND.
IF((ADDITIONNAL_ROWS0)
2382.LT.
& (iNUMBER_OF_PROCS))THEN
2387.EQ..AND.
IF((CHOSENNUMBER_OF_PROCS-1)
2388.NE.
& (ADDITIONNAL_ROWS0))THEN
2390 NB_ROWS(i)=NB_ROWS(i)+1
2391 ADDITIONNAL_ROWS=ADDITIONNAL_ROWS-1
2392.EQ.
IF(ADDITIONNAL_ROWS0) GOTO 048
2396.EQ..AND.
IF((CHOSENNUMBER_OF_PROCS-1)
2397.NE.
& (ADDITIONNAL_ROWS0))THEN
2399.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
2400.AND..LE.
& (iNUMBER_OF_PROCS))
2402.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
2404 AFFECTED=int((TEMP(i)-(TEMP(J)+
2405 & (dble(NB_ROWS(J))*
2406 & dble(NFRONT))))/dble(NFRONT))
2407.GT.
IF(AFFECTEDADDITIONNAL_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.EQ.
IF(NB_ROWS(i)0)THEN
2454.GT.
IF(NB_ROWS(i)0)THEN
2464 TAB_POS(NSLAVES_NODE+1)= NCB+1
2465 TAB_POS(SLAVEF+2) = CHOSEN
2468 SLAVES_LIST(i)=TEMP_ID(i)
2471.LE.
IF(NB_ROWS(i)0)THEN
2477 DO i=CHOSEN+1,NUMBER_OF_PROCS
2478 SLAVES_LIST(i)=TEMP_ID(i)
2480.NE.
IF(POS(NCB+1))THEN
2485 END SUBROUTINE DMUMPS_SET_PARTI_ACTV_MEM
2486 SUBROUTINE DMUMPS_SET_PARTI_FLOP_IRR
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
2511 LOGICAL FORCE_CAND,SMP
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.GT.
IF(int(NCB_FILS,8)*int(min(NCB,NCB_FILS),8)K821)THEN
2534 HAVE_TYPE1_SON=.TRUE.
2536 HAVE_TYPE1_SON=.FALSE.
2539.OR.
IF ( KEEP(24) == 0 KEEP(24) == 1 ) THEN
2540 FORCE_CAND = .FALSE.
2542.eq.
FORCE_CAND = (mod(KEEP(24),2)0)
2545 KMAX=int(K821/int(NCB,8))
2547 DO i=1,PROCS(SLAVEF+1)
2548 WLOAD(i)=LOAD_FLOPS(PROCS(i))
2550 WLOAD(i)=max(WLOAD(i),0.0d0)
2552 NUMBER_OF_PROCS=PROCS(SLAVEF+1)
2553 OTHERS=NUMBER_OF_PROCS
2555 NUMBER_OF_PROCS=SLAVEF
2556 WLOAD(1:SLAVEF) = LOAD_FLOPS(0:NUMBER_OF_PROCS-1)
2557 DO i=1,NUMBER_OF_PROCS
2559 IF (WLOAD(i) < -0.5d0 ) THEN
2560.GT..AND..GE.
IF((MP0)(LP2))THEN
2561 WRITE(MP,*)MYID,': negative load
',
2565 WLOAD(i)=max(WLOAD(i),0.0d0)
2567 OTHERS=NUMBER_OF_PROCS-1
2569 KMAX=int(NCB/OTHERS)
2570 KMIN=MUMPS_GETKMIN(int(NCB,8)*int(KMAX,8),K50,KMAX,NCB)
2572 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, WLOAD, IDWLOAD)
2574 TOTAL_COST=dble( NELIM ) * dble ( NCB ) +
2575 & dble(NCB) * dble(NELIM)*dble(2*NFRONT-NELIM-1)
2577 TOTAL_COST=dble(NELIM) * dble ( NCB ) *
2580 CALL MUMPS_GET_FLOPS_COST(NFRONT,NELIM,NELIM,K50,
2584.AND..GT.
IF(FORCE_CAND(NUMBER_OF_PROCSK83))THEN
2585 MASTER_WORK=dble(KEEP(88))*MASTER_WORK/dble(100)
2587.AND..LE.
IF(FORCE_CAND(NUMBER_OF_PROCSK83))THEN
2588 MASTER_WORK=dble(KEEP(87))*MASTER_WORK/dble(100)
2590.LT.
IF(MASTER_WORKdble(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
2600.NE.
IF((IDWLOAD(i)MYID))THEN
2601 TEMP_ID(J)=IDWLOAD(i)
2603 IF(BDC_M2_FLOPS)THEN
2604 TEMP(J)=TEMP(J)+NIV2(TEMP_ID(J)+1)
2610 CALL MUMPS_SORT_DOUBLES(NUMBER_OF_PROCS, TEMP, TEMP_ID)
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.NOT.
IF(SMP) MAX_LOAD=TEMP(OTHERS)
2626.EQ.
IF(MEM_DISTRIB(TEMP_ID(i))1)THEN
2627.LE.
IF(TEMP(i)TMP_SUM)THEN
2629 IDWLOAD(J)=TEMP_ID(i)
2638.NE..OR.
IF((MEM_DISTRIB(TEMP_ID(i))1)
2639.EQ..AND.
& ((MEM_DISTRIB(TEMP_ID(i))1)
2640.GE.
& (TEMP(i)TMP_SUM)))THEN
2642 IDWLOAD(J)=TEMP_ID(i)
2651.EQ.
IF (KEEP(201)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)*
2669 CALL MUMPS_MAX_SURFCB_NBROWS(WHAT, KEEP,KEEP8, NCB,
2670 & NFRONT, min(NCB,OTHERS), J, X8)
2671 B=dble(X8)+(dble(J)*dble(NELIM))
2674 MEM_SIZE_WEAK(i)=NELIM_MEM_SIZE
2675.EQ..OR..NOT.
IF((SBTR_WHICH_M0)(BDC_SBTR))THEN
2678 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2679 & LU_USAGE(TEMP_ID(i))-NIV2(TEMP_ID(i)+1)
2682 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2683 & LU_USAGE(TEMP_ID(i))
2689 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2690 & LU_USAGE(TEMP_ID(i))-NIV2(TEMP_ID(i)+1)-
2691 & (SBTR_MEM(TEMP_ID(i))-SBTR_CUR(TEMP_ID(i)))
2694 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2695 & LU_USAGE(TEMP_ID(i))-
2696 & (SBTR_MEM(TEMP_ID(i))-SBTR_CUR(TEMP_ID(i)))
2700.LT.
IF(min(MEM_SIZE_STRONG(i),MEM_SIZE_WEAK(i))dble(0))THEN
2701.LT.
IF(MEM_SIZE_STRONG(i)0.0d0)THEN
2702 MEM_SIZE_STRONG(i)=dble(0)
2704 MEM_SIZE_WEAK(i)=dble(0)
2710 DO i=1,NUMBER_OF_PROCS
2711.EQ..OR..NOT.
IF((SBTR_WHICH_M0)(BDC_SBTR))THEN
2714 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2715 & LU_USAGE(TEMP_ID(i))-NIV2(TEMP_ID(i)+1)
2718 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2719 & LU_USAGE(TEMP_ID(i))
2725 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2726 & LU_USAGE(TEMP_ID(i))-NIV2(TEMP_ID(i)+1)-
2727 & (SBTR_MEM(TEMP_ID(i))-SBTR_CUR(TEMP_ID(i)))
2730 & dble(TAB_MAXS(TEMP_ID(i)))-DM_MEM(TEMP_ID(i))-
2731 & LU_USAGE(TEMP_ID(i))-
2732 & (SBTR_MEM(TEMP_ID(i))-SBTR_CUR(TEMP_ID(i)))
2736 MEM_SIZE_STRONG(i)=max(dble(0),MEM_SIZE_STRONG(i))
2737 MEM_SIZE_WEAK(i)=huge(MEM_SIZE_WEAK(i))
2740.LE..AND..AND.
IF((((NUMBER_OF_PROCSK83)FORCE_CAND)
2741.GE..OR.
& (TOTAL_COSTSOMME))
2742.NOT..OR.
& (FORCE_CAND)
2743.GT..AND.
& (((NUMBER_OF_PROCS+1)K83)FORCE_CAND))THEN
2745 SMALL_SET=NSLAVES_REF
2747 DO i=NSLAVES_REF,1,-1
2752 SOMME=(dble(i)*TEMP(i))-SOMME
2753.GE.
IF(TOTAL_COSTSOMME) GOTO 444
2758 MAX_LOAD=TEMP(SMALL_SET)
2760 X=min(SIZE_MY_SMP,NSLAVES_REF)
2764 SOMME=SOMME+(TEMP(X)-TEMP(J))
2766.GT.
IF(SOMMETOTAL_COST)THEN
2770.LT.
IF(XSIZE_MY_SMP) THEN
2773 MAX_LOAD=TEMP(SMALL_SET)
2775 X=min(SIZE_MY_SMP,NSLAVES_REF)
2780.GT.
IF(TEMP(i)MAX_LOAD)THEN
2781 SOMME=SOMME+(dble(i-1)*(TEMP(i)-MAX_LOAD))
2785 SOMME=SOMME+(MAX_LOAD-TEMP(i))
2787.EQ.
IF(iNSLAVES_REF)THEN
2788 SMALL_SET=NSLAVES_REF
2792.GT.
IF(SOMMETOTAL_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.GT.
IF(XNCB-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.GT.
IF(XNCB-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.GE.
IF(KMAXKMIN)THEN
2864.GT.
IF((ACC+X)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+1))
2874 C=-(MAX_LOAD-TEMP(i))
2875 DELTA=(B*B-(dble(4)*A*C))
2876 X=int((-B+sqrt(DELTA))/(dble(2)*A))
2883.GE.
IF(KMAXKMIN)THEN
2894.GT.
IF((ACC+X)NCB) X=NCB-ACC
2900.GT.
IF(MIN_LOADTEMP(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.LT.
IF(TMP_SUMMAX_LOAD)THEN
2920.LT.
IF(NCB-ACCKMIN) GOTO 888
2921.EQ.
IF(NCBACC) GOTO 888
2931.GT.
IF((ACCNCB))THEN
2936.LT.
IF((ACCNCB))THEN
2938.LE.
IF(SMALL_SETOTHERS)THEN
2939.EQ..AND..LT.
IF((NB_SATSMALL_SET)(SMALL_SET
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.GT.
IF(XNCB-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.GT.
IF(XNCB-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))
3005.GE.
IF(KMAXKMIN)THEN
3013.LT.
IF(Xmin(KMIN,KMAX))THEN
3018.GT.
IF((ACC+X)NCB) X=NCB-ACC
3021.GT.
IF(MIN_LOADTEMP(J))THEN
3029 TEMP_MAX_LOAD=max(TEMP_MAX_LOAD,
3030 & TEMP(J)+(dble(NELIM) *
3031 & dble(NB_ROWS(J)))*
3035.LE.
IF(REFNUMBER_OF_PROCS-1)THEN
3036.GT.
IF(TEMP_MAX_LOADTEMP(REF+1))THEN
3037.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3045.EQ.
IF(NCBACC) GOTO 666
3047.EQ.
IF(NB_SATSMALL_SET)THEN
3048.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3057.EQ.
IF(NB_ZEROSMALL_SET)THEN
3058.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3067.EQ.
IF((NB_SAT+NB_ZERO)SMALL_SET)THEN
3068.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3079 ADDITIONNAL_ROWS=NCB-ACC
3080.NE.
IF(ADDITIONNAL_ROWS0)THEN
3081.LT.
IF(ADDITIONNAL_ROWSKMIN)THEN
3085.NE.
IF(NB_ROWS(i)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.GT.
IF(XNCB-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.GT.
IF(XNCB-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.NE.
IF(NB_ROWS(i)KMAX)THEN
3117.LE.
IF(NCB-JKMAX)THEN
3122 TEMP_MAX_LOAD=max(TEMP_MAX_LOAD,
3124 & (dble(NELIM) * dble(NB_ROWS(i)))*
3128.LE.
IF(REFNUMBER_OF_PROCS-1)THEN
3129.GT.
IF(TEMP_MAX_LOADTEMP(REF+1))THEN
3130.LT.
IF(SMALL_SETNSLAVES_REF)THEN
3142.NE.
IF(ADDITIONNAL_ROWS0)THEN
3144.NE.
IF(iSMALL_SET)THEN
3146.NE.
IF(NB_ROWS(i)0)THEN
3152 NB_ROWS(i)=NB_ROWS(i)+ADDITIONNAL_ROWS
3159.NE.
DO WHILE ((ADDITIONNAL_ROWS0)
3160.AND..LE.
& (iNUMBER_OF_PROCS))
3161.LE.
IF((TEMP(i)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.GT.
IF(XNCB-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.GT.
IF(XNCB-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)),
3183 MAX_MEM_ALLOW=max(dble(0),
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.GE.
IF(KMAXKMIN)THEN
3207.GT.
IF((ACC+X)NCB) X=NCB-ACC
3210 ADDITIONNAL_ROWS=NCB-ACC
3211.GT.
ELSE IF((TEMP(i)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.GT.
IF(XNCB-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.GT.
IF(XNCB-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
'
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
subroutine dmumps_clean_pending(info1, keep, bufr, lbufr, lbufr_bytes, comm_nodes, comm_load, slavef, clean_comm_nodes, clean_comm_load)
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_iprobe(source, tag, comm, flag, status, ierr)
subroutine mpi_get_count(status, datatype, cnt, ierr)
subroutine mpi_unpack(inbuf, insize, position, outbuf, outcnt, datatype, comm, ierr)
subroutine mpi_comm_rank(comm, rank, ierr)
for(i8=*sizetab-1;i8 >=0;i8--)
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_deall_load_buffer(ierr)
subroutine, public dmumps_buf_send_update_load(bdc_sbtr, bdc_mem, bdc_md, comm, nprocs, load, mem, sbtr_cur, lu_usage, future_niv2, myid, keep, ierr)
subroutine, public dmumps_buf_alloc_load_buffer(size, 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
subroutine dmumps_archgenwload(mem_distrib, msg_size, array_adm, len)
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
subroutine dmumps_init_alpha_beta(k69)
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, 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