15 & LIPOOL, NE, DAD, ND, PROCNODE, SLAVEF, ABOVE_L0, SIZECB_UNDER_L0,
16 & SIZECB_UNDER_L0_IF_LRCB, MAXFR_UNDER_L0,
17 & MAX_FRONT_SURFACE_LOCAL_L0, MAX_SIZE_FACTOR_L0,
18 & ENTRIES_IN_FACTORS_UNDER_L0, ENTRIES_IN_FACTORS_MASTERS_LO,
19 & COST_SUBTREES_UNDER_LO, OPSA_UNDER_L0, PEAK_FR, PEAK_FR_OOC,
20 & NRLADU, NIRADU, NIRNEC, NRLNEC, NRLNEC_ACTIVE,
21 & NRLADU_if_LR_LU, NRLNEC_if_LR_LU, NRLNEC_if_LR_LUCB,
22 & NRLNECOOC_if_LR_LUCB, NRLNEC_if_LR_CB, NRLADULR_UD, NRLADULR_WC,
23 & NRLNECLR_CB_UD, NRLNECLR_LUCB_UD, NRLNECLR_LUCB_WC,
24 & PEAK_LRLU_UD,PEAK_OOC_LRLU_UD,PEAK_OOC_LRLU_WC, PEAK_LRLUCB_UD,
25 & PEAK_LRLUCB_WC,PEAK_OOC_LRLUCB_UD, PEAK_OOC_LRLUCB_WC,
26 & PEAK_LRCB_UD, PEAK_OOC_LRCB_UD, NIRADU_OOC, NIRNEC_OOC, MAXFR,
27 & OPSA, UU, KEEP,KEEP8, LOCAL_M, LOCAL_N, SBUF_RECOLD,
28 & SBUF_SEND_FR, SBUF_REC_FR, SBUF_SEND_LR, SBUF_REC_LR,
29 & OPS_SUBTREE, NSTEPS, I_AM_CAND,NMB_PAR2, ISTEP_TO_INIV2,
30 & CANDIDATES, IFLAG, IERROR, MAX_FRONT_SURFACE_LOCAL,
31 & MAX_SIZE_FACTOR, ENTRIES_IN_FACTORS_LOC,
32 & ENTRIES_IN_FACTORS_LOC_MASTERS, ROOT_yes, ROOT_NPROW, ROOT_NPCOL
36 LOGICAL,
intent(in) :: ROOT_yes
37 INTEGER,
intent(in) :: ROOT_NPROW, ROOT_NPCOL
38 INTEGER,
intent(in) :: , N, LIPOOL
39 LOGICAL,
intent(in) :: ABOVE_L0
40 INTEGER,
intent(in) :: MAXFR_UNDER_L0
41 INTEGER(8),
intent(in) :: MAX_FRONT_SURFACE_LOCAL_L0,
43 & ENTRIES_IN_FACTORS_UNDER_L0,
44 & ENTRIES_IN_FACTORS_MASTERS_LO
45 DOUBLE PRECISION,
intent(in) :: COST_SUBTREES_UNDER_LO,
47 INTEGER(8),
intent(inout) :: SIZECB_UNDER_L0,
48 & SIZECB_UNDER_L0_IF_LRCB
49 INTEGER,
intent(inout) :: IFLAG, IERROR
50 INTEGER NIRADU, NIRNEC
51 INTEGER(8) NRLADU, NRLNEC, NRLNEC_ACTIVE
52 INTEGER(8),
intent(out) :: NRLADU_if_LR_LU,
53 & nrladulr_ud, nrladulr_wc,
54 & nrlnec_if_lr_lu, nrlnec_if_lr_lucb, nrlnec_if_lr_cb,
55 & nrlnecooc_if_lr_lucb, nrlneclr_cb_ud,
56 & nrlneclr_lucb_ud, nrlneclr_lucb_wc
57 INTEGER(8),
intent(out)::
58 & peak_fr, peak_fr_ooc,
60 & peak_ooc_lrlu_ud, peak_ooc_lrlu_wc,
61 & peak_lrlucb_ud, peak_lrlucb_wc,
62 & peak_ooc_lrlucb_ud, peak_ooc_lrlucb_wc,
63 & peak_lrcb_ud, peak_ooc_lrcb_ud
64 INTEGER(8) NRLADU_CURRENT, NRLADU_ROOT_3
65 INTEGER NIRADU_OOC, NIRNEC_OOC
67 INTEGER(8) MAX_FRONT_SURFACE_LOCAL
69 INTEGER FRERE(NSTEPS), FILS(N), IPOOL(max(LIPOOL,1)), NE(NSTEPS),
70 & nd(nsteps), procnode(nsteps), dad(nsteps)
72 INTEGER SLAVEF, (500), LOCAL_M, LOCAL_N
74 INTEGER(8) ENTRIES_IN_FACTORS_LOC,
75 & ENTRIES_IN_FACTORS_LOC_MASTERS
76 INTEGER SBUF_SEND_FR, SBUF_REC_FR
77 INTEGER SBUF_SEND_LR, SBUF_REC_LR
78 INTEGER(8) SBUF_RECOLD
80 INTEGER ISTEP_TO_INIV2( KEEP(71) )
81 LOGICAL I_AM_CAND(NMB_PAR2)
82 INTEGER CANDIDATES( SLAVEF+1, NMB_PAR2 )
84 DOUBLE PRECISION OPSA_LOC
85 INTEGER(8) MAX_SIZE_FACTOR
87 DOUBLE PRECISION OPS_SBTR_LOC
88 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: , LSTKI
89 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: LSTKR
90 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: LSTKR_if_LRCB,
93 LOGICAL OUTER_SENDS_FR
94 INTEGER(8) :: SAVE_SIZECB_UNDER_L0,
95 & save_sizecb_under_l0_if_lrcb
96 INTEGER SBUFR_FR, SBUFS_FR
97 INTEGER SBUFR_LR, SBUFS_LR
98 INTEGER(8) SBUFS_CB, SBUFR_CB
99 INTEGER ITOP,NELIM,NFR
100 INTEGER(8) ISTKR, LSTK
101 INTEGER(8) :: NRLADU_CURRENT_MISSING
102 INTEGER(8) :: NRLADU_CURRENT_K60_1
104 INTEGER(8) :: ISTKR_if_LRCB, ISTKRLR_CB_UD, ISTKRLR_CB_WC,
106 INTEGER :: LRSTATUS, IDUMMY
107 INTEGER :: NBNODES_BLR
108 LOGICAL :: , COMPRESS_CB
109 INTEGER ISTKI, STKI, ISTKI_OOC
110 INTEGER K,NSTK, IFATH
112 INTEGER LEVEL, MAXITEMPCB
113 INTEGER(8) CURRENT_ACTIVE_MEM, MAXTEMPCB
114 LOGICAL UPDATE, UPDATEF, MASTER, MASTERF, INSSARBR
115 INTEGER LEVELF, , SIZECBI
117 INTEGER(8) NFR8, NELIM8
118 INTEGER(8) :: SIZEFRNOCBLU
119 INTEGER :: IDUMMY_ARRAY(1)
120 INTEGER(8) SIZECB, SIZECBINFR, SIZECB_SLAVE
121 INTEGER(8) , SIZECB_SLAVE_if_LRCB
122 INTEGER(8) SIZECBLR_SLAVE_UD, SIZECBLR_SLAVE_WC
123 INTEGER(8) SIZECBLR_UD, SIZECBLR_WC
124 INTEGER(8) SIZECBSLR, NFRS8, NELIMS8, NCBS8,
125 & sizecbs, sizecbinfrs
126 INTEGER NFRS, NELIMS, NCBS, , LRSTATUSS
128 INTEGER(8) :: PEAK_DYN_LRLU_UD, PEAK_DYN_LRCB_UD,
129 & peak_dyn_lrlucb_ud, peak_dyn_lrlu_wc,
131 INTEGER SIZEHEADER, SIZEHEADER_OOC, XSIZE_OOC
132 INTEGER EXTRA_PERM_INFO_OOC
133 INTEGER NBROWMAX, NSLAVES_LOC, NSLAVES_PASSED,
134 & nelimf, nfrf, ncbf,
135 & nbrowmaxf, lkjib_fr, lkjib_lr,
137 INTEGER(8) LEV3MAXREC, CBMAXR, CBMAXS
141 DOUBLE PRECISION OPS_NODE, OPS_NODE_MASTER, OPS_NODE_SLAVE
142 INTEGER(8) ENTRIES_NODE_UPPER_PART, ENTRIES_NODE_LOWER_PART
144 INTEGER :: FLAG_L0OMP
145 parameter(flag_l0omp=-2014)
146 include
'mumps_headers.h'
150 INTRINSIC min, int, real
151 INTEGER SMUMPS_OOC_GET_PANEL_SIZE
152 EXTERNAL smumps_ooc_get_panel_size
153 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE
154 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
155 EXTERNAL MUMPS_MAX_SURFCB_NBROWS
156 EXTERNAL mumps_procnode, mumps_typenode,
157 & mumps_in_or_root_ssarbr
158 logical :: FORCE_CAND, CONCERNED, UPDATES, STACKCB, MASTERSON
159 integer :: IFSON, LEVELSON
161 IF (keep(50).eq.2)
THEN
162 extra_perm_info_ooc = 1
163 ELSE IF (keep(50).eq.0)
THEN
164 extra_perm_info_ooc = 2
166 extra_perm_info_ooc = 0
168 packed_cb=( keep(215).EQ.0 .AND. keep(50).NE.0 )
169 max_front_surface_local=0_8
171 ALLOCATE( lstkr(nsteps), tnstk(nsteps),
173 & lstkr_if_lrcb(nsteps), lstkrlr_cb_ud(nsteps),
174 & lstkrlr_cb_wc(nsteps),
176 if (allocok .GT. 0)
THEN
181 lkjib_fr = max(keep(5),keep(6))
182 outer_sends_fr = (keep(263).NE.0 .OR.
183 & keep(50).EQ.0. and. (keep(468).LT.3 .OR. uu.EQ.0.0e0))
184 IF ( outer_sends_fr )
THEN
185 lkjib_fr = max(lkjib_fr, keep(420))
187 lkjib_lr = max(lkjib_fr,keep(142))
188 IF (keep(198).NE.0.AND.slavef.GT.1)
THEN
189 IF ( keep(50).EQ.0 )
THEN
190 nbouter_min = ceiling
192 & (dble(keep(59))*dble(keep(108))*dble(keep(35)))
194 & (dble(huge(i4)-10000000))
197 nbouter_min = ceiling
199 & ( max(dble(keep(108))*dble(keep(108)),
200 & dble(keep(59))*dble(keep(108)/2)
204 & (dble(huge(i4)-10000000))
207 nbouter_min = max(nbouter_min, 4)
208 lkjib_fr =
min(keep(108)/nbouter_min, 4321)
212#if defined(OLD_OOC_NOPANEL)
213 xsize_ooc=xsize_ooc_nopanel
215 IF (keep(50).EQ.0)
THEN
216 xsize_ooc=xsize_ooc_unsym
218 xsize_ooc=xsize_ooc_sym
221 sizeheader_ooc = xsize_ooc+6
222 sizeheader = xsize_ic + 6
231 entries_in_factors_loc = 0_8
232 entries_in_factors_loc_masters = 0_8
237 nrladu_current_k60_1 = 0_8
238 i_process_schur_k60_1 = .false.
245 save_sizecb_under_l0 = sizecb_under_l0
246 save_sizecb_under_l0_if_lrcb = sizecb_under_l0_if_lrcb
248 save_sizecb_under_l0 = 0_8
249 save_sizecb_under_l0_if_lrcb = 0_8
251 peak_dyn_lrlu_ud = save_sizecb_under_l0
252 peak_dyn_lrcb_ud = save_sizecb_under_l0_if_lrcb
253 peak_dyn_lrlucb_ud = save_sizecb_under_l0_if_lrcb
254 peak_dyn_lrlu_wc = save_sizecb_under_l0
255 peak_dyn_lrlucb_wc = save_sizecb_under_l0
257 nrladu_if_lr_lu = 0_8
258 nrlnec_if_lr_lu = 0_8
259 nrlnec_if_lr_cb = 0_8
260 nrlnec_if_lr_lucb = 0_8
261 nrlnecooc_if_lr_lucb = 0_8
263 nrlneclr_lucb_ud = 0_8
264 nrlneclr_lucb_wc = 0_8
271 peak_ooc_lrlu_ud = 0_8
272 peak_ooc_lrlu_wc = 0_8
275 peak_ooc_lrlucb_ud= 0_8
276 peak_ooc_lrlucb_wc= 0_8
278 peak_ooc_lrcb_ud = 0_8
288 IF (keep(38) .NE. 0 .AND. keep(60).EQ.0)
THEN
290 nrladu_root_3 = int(local_m,8)*int(local_n,8)
291 nrladu = nrladu_root_3
292 nrlnec_active = nrladu_current
293 max_size_factor=max(max_size_factor,nrladu_root_3)
295 nrladu_if_lr_lu = nrladu_root_3
296 nrlnecooc_if_lr_lucb = nrlnec_active
297 nrlnec_if_lr_lu = nrladu
298 nrlnec_if_lr_cb = nrladu
299 nrlnec_if_lr_lucb = nrladu
300 peak_lrlu_ud = max(peak_lrlu_ud,
301 & nrlnec_if_lr_lu + nrladulr_ud + sizecb_under_l0)
303 & max(peak_ooc_lrlu_ud,
304 & nrlnec_active + nrladulr_ud)
306 & max(peak_ooc_lrlu_wc,
307 & nrlnec_active + nrladulr_wc)
309 & max(peak_lrlucb_ud,
310 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
312 & max(peak_lrlucb_wc,
313 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
315 & max(peak_ooc_lrlucb_ud,
316 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
318 & max(peak_ooc_lrlucb_wc,
319 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
322 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
324 & max(peak_ooc_lrcb_ud,
325 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
327 peak_dyn_lrlu_ud = max( peak_dyn_lrlu_ud,
328 & sizecb_under_l0 + nrladulr_ud )
329 peak_dyn_lrcb_ud = max( peak_dyn_lrcb_ud,
330 & sizecb_under_l0_if_lrcb + istkr_if_lrcb)
331 peak_dyn_lrlucb_ud = max( peak_dyn_lrlucb_ud,
332 & sizecb_under_l0_if_lrcb + istkr_if_lrcb + nrladulr_ud)
333 peak_dyn_lrlu_wc = max( peak_dyn_lrlu_wc,
334 & sizecb_under_l0 + nrladulr_wc)
335 peak_dyn_lrlucb_wc = max( peak_dyn_lrlucb_wc,
336 & sizecb_under_l0 + istkrlr_cb_wc + nrladulr_wc)
338 IF (mumps_procnode(procnode(step(inode)),keep(199))
340 niradu = sizeheader+2*(nd(step(inode))+keep(253))
341 niradu_ooc = sizeheader_ooc+2*(nd(step(inode))+keep(253))
344 niradu_ooc = sizeheader_ooc
347 nirnec_ooc = niradu_ooc
349 IF((keep(24).eq.0).OR.(keep(24).eq.1))
THEN
352 force_cand=(mod(keep(24),2).eq.0)
359 IF (lipool.NE.0)
THEN
360 WRITE(myid+6,*)
' ERROR 1 in SMUMPS_ANA_DISTM '
367 nfr = nd(step(inode))+keep(253)
369 nstk = ne(step(inode))
372 100 nelim = nelim + 1
375 IF (in .GT. 0 )
GOTO 100
377 ifath = dad(step(inode))
378 master = mumps_procnode(procnode(step(inode)),keep(199))
380 level = mumps_typenode(procnode(step(inode)),keep(199))
381 inssarbr = mumps_in_or_root_ssarbr(procnode(step(inode)),
384 if(.NOT.force_cand)
then
385 update = ( (master.AND.(level.NE.3) ).OR. level.EQ.2 )
387 if(master.and.(level.ne.3))
then
389 else if(level.eq.2)
then
390 if ( i_am_cand(istep_to_iniv2(step(inode))))
THEN
397 sizecbinfr = ncb8*ncb8
398 IF (keep(50).EQ.0)
THEN
401 ifath = dad(step(inode))
402 IF ( ifath.NE.keep(38) .AND. packed_cb )
THEN
403 sizecb = (ncb8*(ncb8+1_8))/2_8
410 & keep(494), 1, keep(490),
411 & keep(491), keep(492),
412 & keep(20), keep(60), dad(step(inode)), keep(38),
414 compress_panel = (lrstatus.GE.2)
415 compress_cb = ((lrstatus.EQ.1).OR.(lrstatus.EQ.3))
416 IF (compress_panel.OR.compress_cb) nbnodes_blr = nbnodes_blr+1
417 IF (compress_panel)
THEN
418 k464_8 = int(keep(464),8)
422 IF (compress_cb)
THEN
423 k465_8 = int(keep(465),8)
425 sizecblr_ud = sizecb*k465_8/1000_8
431 sizecb_if_lrcb = sizecb
433 sizecbi = 2* ncb + sizeheader
435 nslaves_loc = -99999999
436 sizecb_slave = -99999997_8
437 sizecb_slave_if_lrcb = sizecb_slave
440 IF (keep(48) .EQ. 5)
THEN
443 nslaves_loc=candidates(slavef+1,
444 & istep_to_iniv2(step(inode)))
448 nslaves_passed=nslaves_loc
451 nslaves_passed=slavef
452 nslaves_loc =slavef-1
454 CALL mumps_max_surfcb_nbrows(what, keep,keep8,
455 & ncb, nfr, nslaves_passed, nbrowmax, sizecb_slave
457 IF (compress_cb)
THEN
458 sizecb_slave_if_lrcb = 0_8
459 sizecblr_slave_ud = sizecb_slave*k465_8/1000_8
460 sizecblr_slave_wc = sizecb_slave
462 sizecb_slave_if_lrcb = sizecb_slave
463 sizecblr_slave_ud = 0_8
464 sizecblr_slave_wc = 0_8
467 IF (keep(60).GT.1)
THEN
468 IF (master .AND. inode.EQ.keep(38))
THEN
469 niradu = niradu+sizeheader+2*(nd(step(inode))+keep(253))
470 niradu_ooc = niradu_ooc+sizeheader_ooc+
471 & 2*(nd(step(inode))+keep(253))
478 nrladu_current = int(local_m,8)*int(local_n,8)
479 nrlnec = max(nrlnec,nrladu+istkr+
481 nrlnec_active = max(nrlnec_active,nrladu_root_3 +
482 & nrladu_current+istkr)
483 nrlnec_if_lr_lu = max(nrlnec_if_lr_lu,
484 & nrladu_if_lr_lu+istkr+
486 nrlnec_if_lr_cb = max(nrlnec_if_lr_cb ,
487 & nrladu+istkr_if_lrcb+
489 nrlnec_if_lr_lucb = max(nrlnec_if_lr_lucb,
490 & nrladu_if_lr_lu+istkr_if_lrcb+
492 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
494 & nrladu_current+istkr_if_lrcb)
495 peak_lrlu_ud = max(peak_lrlu_ud,
496 & nrlnec_if_lr_lu + nrladulr_ud)
498 & max(peak_ooc_lrlu_ud,
499 & nrlnec_active + nrladulr_ud)
501 & max(peak_ooc_lrlu_wc,
502 & nrlnec_active + nrladulr_wc)
504 & max(peak_lrlucb_ud,
505 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
507 & max(peak_lrlucb_wc,
508 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
510 & max(peak_ooc_lrlucb_ud,
511 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
513 & max(peak_ooc_lrlucb_wc,
514 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
517 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
519 & max(peak_ooc_lrcb_ud,
520 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
522 peak_dyn_lrlu_ud = max( peak_dyn_lrlu_ud,
523 & sizecb_under_l0 + nrladulr_ud )
524 peak_dyn_lrcb_ud = max( peak_dyn_lrcb_ud,
525 & sizecb_under_l0_if_lrcb + istkr_if_lrcb)
526 peak_dyn_lrlucb_ud = max( peak_dyn_lrlucb_ud,
527 & sizecb_under_l0_if_lrcb + istkr_if_lrcb + nrladulr_ud)
528 peak_dyn_lrlu_wc = max( peak_dyn_lrlu_wc,
529 & sizecb_under_l0 + nrladulr_wc)
530 peak_dyn_lrlucb_wc = max( peak_dyn_lrlucb_wc,
531 & sizecb_under_l0 + istkrlr_cb_wc + nrladulr_wc)
535 IF (nfr.GT.maxfr) maxfr = nfr
538 IF(keep(86).EQ.1)
THEN
539 IF(master.AND.(.NOT.mumps_in_or_root_ssarbr(
540 & procnode(step(inode)), keep(199)))
543 max_front_surface_local=max(max_front_surface_local,
545 IF (keep(268).NE.0)
THEN
546 max_front_surface_local=max(max_front_surface_local,
549 ELSEIF(level.EQ.2)
THEN
550 IF(keep(50).EQ.0)
THEN
551 max_front_surface_local=max(max_front_surface_local,
554 max_front_surface_local=max(max_front_surface_local,
556 IF (keep(219).NE.0.AND.keep(50).EQ.2)
THEN
557 max_front_surface_local
558 & nelim8*(nelim8+1_8))
566 IF (keep(50).EQ.0)
THEN
567 sbufs_fr = max(sbufs_fr, nfr*lkjib_fr+lkjib_fr+4)
568 sbufs_lr = max(sbufs_lr, nfr*lkjib_lr+lkjib_lr+4)
570 sbufs_fr = max(sbufs_fr, nelim*lkjib_fr+nelim+6)
571 sbufs_lr = max(sbufs_lr, nelim*lkjib_lr+nelim+6)
574 if (keep(50).EQ.0)
THEN
575 sbufr_fr = max(sbufr_fr, nfr*lkjib_fr+lkjib_fr+4)
576 sbufr_lr = max(sbufr_lr, nfr*lkjib_lr+lkjib_lr+4)
578 sbufr_fr = max( sbufr_fr, nelim*lkjib_fr+nelim+6 )
579 sbufr_lr = max( sbufr_lr, nelim*lkjib_lr+nelim+6 )
580 sbufs_fr = max( sbufs_fr, nbrowmax*lkjib_fr+6 )
581 sbufs_lr = max( sbufs_lr, nbrowmax*lkjib_lr+6 )
582 sbufr_fr = max( sbufr_fr, nbrowmax*lkjib_fr+6 )
583 sbufr_lr = max( sbufr_lr, nbrowmax*lkjib_lr+6 )
588 IF ( (master) .AND. (level.EQ.1) )
THEN
589 niradu = niradu + 2*nfr + sizeheader
590 niradu_ooc = niradu_ooc + 2*nfr + sizeheader_ooc
591 panel_size = smumps_ooc_get_panel_size(
592 & 2_8*int(keep(226),8), nfr, keep(227), keep(50))
593 niradu_ooc = niradu_ooc +
594 & extra_perm_info_ooc*(2+nelim + nelim/panel_size+1)
595 IF (keep(50).EQ.0)
THEN
596 nrladu_current = int(nelim,8)*int(2*nfr-nelim,8)
597 nrladu = nrladu + nrladu_current
598 max_size_factor=max(max_size_factor,nrladu_current)
600 IF ( keep(459) .GT. 1 .AND. keep(50).NE.0 )
THEN
602 & idummy_array(1), nrladu_current )
603 sizefrnocblu = int(nelim,8)*int(nelim,8) -
605 nrladu_current = nrladu_current +
606 & int(nelim,8) * int(nfr-nelim,8)
608 nrladu_current = int(nelim,8)*int(nfr,8)
610 nrladu = nrladu + nrladu_current
611 max_size_factor=max(max_size_factor,nrladu_current)
613 IF (inode.EQ.keep(20).AND.(keep(60).EQ.1))
THEN
614 i_process_schur_k60_1 = .true.
615 nrladu_current_k60_1 = nrladu_current
617 IF (compress_panel)
THEN
618 nrladu_if_lr_lu = nrladu_if_lr_lu + 0_8
619 nrladu_current_missing = nrladu_current
620 nrladulr_ud = nrladulr_ud +
621 & nrladu_current*k464_8/1000_8
622 nrladulr_wc = nrladulr_wc +
625 nrladu_if_lr_lu = nrladu_if_lr_lu + nrladu_current
626 nrladu_current_missing = 0_8
628 sizecbi = 2* ncb + sizeheader
629 ELSEIF (level.EQ.2)
THEN
631 niradu = niradu+sizeheader +slavef-1+2*nfr
632 niradu_ooc = niradu_ooc+sizeheader_ooc +slavef-1+2*nfr
633 IF (keep(50).EQ.0)
THEN
634 nrladu_current = int(nfr,8)*int(nelim,8)
638 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 )
THEN
640 & idummy_array(1), nrladu_current )
641 sizefrnocblu = int(nelim,8)*int(nelim,8) -
644 nrladu_current = int(nelim,8)*int(nelim,8)
647 panel_size = smumps_ooc_get_panel_size(
648 & 2_8*int(keep(226),8), nbcolfac, keep(227), keep(50))
649 niradu_ooc = niradu_ooc +
650 & extra_perm_info_ooc*(2+nelim + nelim/panel_size+1)
651 nrladu = nrladu + nrladu_current
652 IF (compress_panel)
THEN
653 nrladu_if_lr_lu = nrladu_if_lr_lu + 0_8
654 nrladu_current_missing = nrladu_current
655 nrladulr_ud = nrladulr_ud +
656 & nrladu_current*k464_8/1000_8
657 nrladulr_wc = nrladulr_wc +
660 nrladu_if_lr_lu = nrladu_if_lr_lu + nrladu_current
661 nrladu_current_missing = nrladu_current
663 max_size_factor=max(max_size_factor,nrladu_current)
669 sizecbi = ncb + sizeheader + slavef - 1
674 niradu = niradu+4+nelim+nbrowmax
675 niradu_ooc = niradu_ooc+4+nelim+nbrowmax
676 IF (keep(50).EQ.0)
THEN
677 nrladu_current = int(nelim,8)*int(nbrowmax,8)
679 nrladu_current = int(nelim,8)*int(ncb/nslaves_loc,8)
681 nrladu = nrladu + nrladu_current
682 IF (compress_panel)
THEN
683 nrladu_if_lr_lu = nrladu_if_lr_lu + 0_8
684 nrladu_current_missing = nrladu_current
685 nrladulr_ud = nrladulr_ud +
686 & nrladu_current*k464_8/1000_8
687 nrladulr_wc = nrladulr_wc +
690 nrladu_if_lr_lu = nrladu_if_lr_lu + nrladu_current
691 nrladu_current_missing = 0
693 max_size_factor=max(max_size_factor,nrladu_current)
694 IF (keep(50).EQ.0)
THEN
695 sizecbi = 7 + nbrowmax + ncb
697 sizecbi = 8 + nbrowmax + ncb
699 IF (keep(50).NE.0)
THEN
700 sizecbi=sizecbi+nslaves_loc+
703 sizecbi=sizecbi+nslaves_loc
708 nirnec = max0(nirnec,
709 & niradu+istki+sizecbi+maxitempcb)
710 nirnec_ooc = max0(nirnec_ooc,
711 & niradu_ooc+istki_ooc+sizecbi+maxitempcb +
712 & (xsize_ooc-xsize_ic) )
713 current_active_mem = istkr+sizecbinfr
714 IF ( keep(50).NE.0 .AND. level.EQ.1 )
THEN
715 current_active_mem = current_active_mem +
716 & int(nelim,8)*int(ncb,8)
718 IF ( keep(50).NE.0 .AND. keep(459) .GT. 1 )
THEN
719 current_active_mem = current_active_mem + sizefrnocblu
721 IF (master .AND. keep(219).NE.0.AND.
722 & keep(50).EQ.2.AND.level.EQ.2)
THEN
723 current_active_mem = current_active_mem + int(nelim,8)
725 IF (slavef.EQ.1)
THEN
727 & max(nrlnec_if_lr_cb ,nrladu+
728 & current_active_mem-istkr+istkr_if_lrcb)
730 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
731 & current_active_mem-istkr+istkr_if_lrcb+
732 & nrladu_current_missing)
735 & max(nrlnec_if_lr_cb ,nrladu+
736 & current_active_mem-istkr
739 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
740 & current_active_mem-istkr+istkr_if_lrcb+
742 & nrladu_current_missing)
744 IF (nstk .NE. 0 .AND. inssarbr .AND.
745 & keep(234).NE.0 .AND. keep(55).EQ.0)
THEN
746 current_active_mem = current_active_mem - lstkr(itop)
748 IF (slavef.EQ.1)
THEN
749 nrlnec = max(nrlnec,nrladu+current_active_mem)
750 nrlnec_active = max(nrlnec_active,nrladu_current+
751 & nrladu_root_3+current_active_mem)
753 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
754 & current_active_mem+nrladu_current_missing)
755 nrlnecooc_if_lr_lucb =
756 & max(nrlnecooc_if_lr_lucb,
757 & nrladu_current+nrladu_root_3+
758 & current_active_mem-istkr+istkr_if_lrcb)
760 nrlnec = max(nrlnec,nrladu+current_active_mem+maxtempcb)
761 nrlnec_active = max(nrlnec_active,nrladu_current+
762 & nrladu_root_3+current_active_mem+maxtempcb)
764 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
765 & current_active_mem+maxtempcb+
766 & nrladu_current_missing)
767 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
768 & nrladu_root_3+current_active_mem-istkr+
769 & istkr_if_lrcb+maxtempcb)
771 nrlneclr_lucb_ud = max(nrlneclr_lucb_ud,
772 & nrladulr_ud+istkrlr_cb_ud)
773 nrlneclr_lucb_wc = max(nrlneclr_lucb_wc,
774 & nrladulr_wc+istkrlr_cb_wc)
777 & nrlnec_if_lr_lu + nrladulr_ud)
779 & max(peak_ooc_lrlu_ud,
780 & nrlnec_active + nrladulr_ud)
782 & max(peak_ooc_lrlu_wc,
783 & nrlnec_active + nrladulr_wc)
785 & max(peak_lrlucb_ud,
786 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
788 & max(peak_lrlucb_wc,
789 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
791 & max(peak_ooc_lrlucb_ud,
792 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
794 & max(peak_ooc_lrlucb_wc,
795 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
798 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
800 & max(peak_ooc_lrcb_ud,
801 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
803 peak_dyn_lrlu_ud = max( peak_dyn_lrlu_ud,
804 & sizecb_under_l0 + nrladulr_ud )
805 peak_dyn_lrcb_ud = max( peak_dyn_lrcb_ud,
806 & sizecb_under_l0_if_lrcb + istkr_if_lrcb)
807 peak_dyn_lrlucb_ud = max( peak_dyn_lrlucb_ud,
808 & sizecb_under_l0_if_lrcb + istkr_if_lrcb + nrladulr_ud)
809 peak_dyn_lrlu_wc = max( peak_dyn_lrlu_wc,
810 & sizecb_under_l0 + nrladulr_wc)
811 peak_dyn_lrlucb_wc = max( peak_dyn_lrlucb_wc,
812 & sizecb_under_l0 + istkrlr_cb_wc + nrladulr_wc)
814 IF (nfr.GT.maxfr) maxfr = nfr
815 IF (above_l0.AND.master.AND.(level.EQ.1))
THEN
816 DO WHILE (ifson.GT.0)
817 IF (tnstk(step(ifson)).EQ.flag_l0omp)
THEN
818 nfrs = nd(step(ifson))+keep(253)
826 nelims8=int(nelims,8)
829 sizecbinfrs = ncbs8*ncbs8
830 IF (keep(50).EQ.0)
THEN
831 sizecbs = sizecbinfrs
833 IF ( packed_cb )
THEN
834 sizecbs = (ncbs8*(ncbs8+1_8))/2_8
836 sizecbs = sizecbinfrs
841 & (ifson, levels, nfrs, nelims,
842 & keep(494), 1, keep(490),
843 & keep(491), keep(492),
844 & keep(20), keep(60), dad(step(ifson)), keep(38),
846 compress_cbs = ((lrstatuss.EQ.1).OR.(lrstatuss.EQ.3))
847 IF (compress_cbs)
THEN
848 k465_8 = int(keep(465),8)
849 sizecbslr = sizecbs*k465_8/1000_8
853 sizecb_under_l0 = sizecb_under_l0 - sizecbs
854 sizecb_under_l0_if_lrcb = sizecb_under_l0_if_lrcb
857 ifson = frere(step(ifson))
864 IF (k==1 .AND. inssarbr.AND.keep(234).NE.0
865 & .AND.keep(55).EQ.0)
THEN
867 current_active_mem = current_active_mem - lstk
869 lstk = lstkr_if_lrcb(itop)
870 istkr_if_lrcb = istkr_if_lrcb - lstk
871 lstk = lstkrlr_cb_ud(itop)
872 istkrlr_cb_ud = istkrlr_cb_ud - lstk
873 lstk = lstkrlr_cb_wc(itop)
874 istkrlr_cb_wc = istkrlr_cb_wc - lstk
877 istki_ooc = istki_ooc - stki - (xsize_ooc-xsize_ic)
881 &
': ERROR 2 in SMUMPS_ANA_DISTM. ITOP = ',itop
886 ELSE IF (level.NE.3)
THEN
887 DO WHILE (ifson.GT.0)
889 masterson = mumps_procnode(procnode(step(ifson)),keep(199))
891 levelson = mumps_typenode(procnode(step(ifson)),keep(199))
892 if(.NOT.force_cand)
then
893 updates =((masterson.AND.(levelson.NE.3)).OR.
896 if(masterson.and.(levelson.ne.3))
then
898 else if(levelson.eq.2)
then
899 if ( i_am_cand(istep_to_iniv2(step(ifson))))
then
907 lstk = lstkr_if_lrcb(itop)
908 istkr_if_lrcb = istkr_if_lrcb - lstk
909 lstk = lstkrlr_cb_ud(itop)
910 istkrlr_cb_ud = istkrlr_cb_ud - lstk
911 lstk = lstkrlr_cb_wc(itop)
912 istkrlr_cb_wc = istkrlr_cb_wc - lstk
915 istki_ooc = istki_ooc - stki - (xsize_ooc-xsize_ic)
919 &
': ERROR 2 in SMUMPS_ANA_DISTM. ITOP = ',itop
923 ifson = frere(step(ifson))
927 & ( (inode.NE.keep(20)).OR.(keep(60).EQ.0) )
929 & ( (inode.NE.keep(38)).OR.(keep
932 entries_node_lower_part = int(nfr-nelim,8) * int(nelim,8)
933 IF ( keep(50).EQ.0 )
THEN
934 entries_node_upper_part = int(nfr,8) * int(nelim,8)
936 entries_node_upper_part =
937 & (int(nelim,8)*int(nelim+1,8))/2_8
939 IF (keep(50).EQ.2 .AND. level.EQ.3)
THEN
945 & nelim, nelim,keep(50),
950 & nelim, nelim,keep(50),
952 ops_node_slave=ops_node-ops_node_master
956 entries_node_upper_part = 0_8
957 entries_node_lower_part = 0_8
960 entries_in_factors_loc_masters =
961 & entries_in_factors_loc_masters +
962 & entries_node_upper_part +
963 & entries_node_lower_part
965 IF (update.OR.level.EQ.3)
THEN
966 IF ( level .EQ. 3 )
THEN
968 opsa_loc = opsa_loc +
971 & int(root_nprow*root_npcol,8)
973 entries_in_factors_loc = entries_in_factors_loc +
974 & entries_node_upper_part /
975 & int(root_nprow*root_npcol,8)
977 entries_in_factors_loc = entries_in_factors_loc +
978 & mod(entries_node_upper_part,
982 ELSE IF (master .AND. level.EQ.2)
THEN
983 opsa_loc = opsa_loc + ops_node_master
984 entries_in_factors_loc = entries_in_factors_loc +
985 & entries_node_upper_part +
986 & mod(entries_node_lower_part,
987 & int(nslaves_loc,8))
988 ELSE IF (master .AND. level.EQ.1)
THEN
989 opsa_loc = opsa_loc + ops_node
990 entries_in_factors_loc = entries_in_factors_loc +
991 & entries_node_upper_part +
992 & entries_node_lower_part
993 ELSE IF (update)
THEN
994 opsa_loc = opsa_loc +
995 & dble(ops_node_slave)/dble(nslaves_loc)
996 entries_in_factors_loc = entries_in_factors_loc
997 & + entries_node_lower_part /
1000 IF (mumps_in_or_root_ssarbr(procnode(step(inode)),
1001 & keep(199)) .OR. ne(step(inode))==0)
THEN
1002 IF (level == 1)
THEN
1003 ops_sbtr_loc = ops_sbtr_loc + ops_node
1006 & nelim, nelim,keep(50),
1008 ops_sbtr_loc = ops_sbtr_loc + ops_node
1012 IF (ifath .EQ. 0)
THEN
1019 nfrf = nd(step(ifath))+keep(253)
1020 IF (dad(step(ifath)).EQ.0)
THEN
1021 nelimf = nfrf-keep(253)
1031 ncbf = nfrf - nelimf
1032 levelf = mumps_typenode(procnode(step(ifath)),keep(199))
1033 masterf= mumps_procnode(procnode(step(ifath)),
1034 & keep(199)).EQ.myid
1036 if(.NOT.force_cand)
then
1037 updatef= ((masterf.AND.(levelf.NE.3)).OR.levelf.EQ.2)
1039 if(masterf.and.(levelf.ne.3))
then
1041 else if (levelf.eq.2)
then
1042 if ( i_am_cand(istep_to_iniv2(step(ifath))))
THEN
1047 concerned = updatef .OR. update
1048 IF (levelf .NE. 2)
THEN
1051 IF (keep(48) .EQ. 5)
THEN
1053 IF (force_cand)
THEN
1054 nslaves_loc=candidates(slavef+1,
1055 & istep_to_iniv2(step(ifath)))
1057 nslaves_loc=slavef-1
1063 CALL mumps_max_surfcb_nbrows( what, keep, keep8,
1064 & ncbf, nfrf, nslaves_loc, nbrowmaxf, idummy8
1067 IF(level.EQ.1.AND.update.AND.
1068 & (updatef.OR.levelf.EQ.2)
1069 & .AND.levelf.NE.3)
THEN
1070 IF ( inssarbr .AND. keep(234).NE.0)
THEN
1071 nrlnec_active = max(nrlnec_active,nrladu_current+
1072 & nrladu_root_3+current_active_mem)
1073 nrlnec = max(nrlnec,nrladu+current_active_mem)
1075 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
1076 & current_active_mem+
1077 & nrladu_current_missing)
1079 & max(nrlnec_if_lr_cb ,nrladu+
1080 & current_active_mem-istkr+istkr_if_lrcb)
1082 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
1083 & current_active_mem-istkr+istkr_if_lrcb+
1084 & nrladu_current_missing)
1085 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
1086 & nrladu_current+nrladu_root_3+
1087 & current_active_mem-istkr+istkr_if_lrcb)
1089 nrlnec = max(nrlnec,nrladu+current_active_mem+sizecb)
1090 nrlnec_active = max(nrlnec_active,nrladu_current+
1091 & nrladu_root_3+current_active_mem+sizecb)
1093 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
1094 & current_active_mem+sizecb+
1095 & nrladu_current_missing)
1097 & max(nrlnec_if_lr_cb ,nrladu+
1098 & current_active_mem-istkr+
1099 & istkr_if_lrcb+ sizecb)
1101 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
1102 & current_active_mem-istkr+
1103 & istkr_if_lrcb+ sizecb+
1104 & nrladu_current_missing)
1105 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
1106 & nrladu_current+nrladu_root_3+
1107 & current_active_mem-istkr+
1108 & istkr_if_lrcb+ sizecb)
1112 & nrlnec_if_lr_lu + nrladulr_ud)
1114 & max(peak_ooc_lrlu_ud,
1115 & nrlnec_active + nrladulr_ud)
1117 & max(peak_ooc_lrlu_wc,
1118 & nrlnec_active + nrladulr_wc)
1120 & max(peak_lrlucb_ud,
1121 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
1123 & max(peak_lrlucb_wc,
1124 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
1125 peak_ooc_lrlucb_ud =
1126 & max(peak_ooc_lrlucb_ud,
1127 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
1128 peak_ooc_lrlucb_wc =
1129 & max(peak_ooc_lrlucb_wc,
1130 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
1133 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
1135 & max(peak_ooc_lrcb_ud,
1136 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
1138 peak_dyn_lrlu_ud = max( peak_dyn_lrlu_ud,
1139 & sizecb_under_l0 + nrladulr_ud )
1140 peak_dyn_lrcb_ud = max( peak_dyn_lrcb_ud,
1141 & sizecb_under_l0_if_lrcb + istkr_if_lrcb)
1142 peak_dyn_lrlucb_ud = max( peak_dyn_lrlucb_ud,
1143 & sizecb_under_l0_if_lrcb + istkr_if_lrcb + nrladulr_ud)
1144 peak_dyn_lrlu_wc = max( peak_dyn_lrlu_wc,
1145 & sizecb_under_l0 + nrladulr_wc)
1146 peak_dyn_lrlucb_wc = max( peak_dyn_lrlucb_wc,
1147 & sizecb_under_l0 + istkrlr_cb_wc + nrladulr_wc)
1150 IF (update .AND. level.EQ.2 .AND. .NOT. master)
THEN
1152 & max(nrlnec,nrladu+current_active_mem+nrladu_current)
1153 nrlnec_active = max(nrlnec_active,2_8*nrladu_current+
1154 & nrladu_root_3+current_active_mem)
1155 IF (.NOT.compress_panel)
THEN
1156 nrlnec_if_lr_lu = max(
1157 & nrlnec_if_lr_lu,nrladu_if_lr_lu+
1158 & current_active_mem+nrladu_current)
1159 nrlnec_if_lr_cb = max(
1160 & nrlnec_if_lr_cb ,nrladu +
1161 & current_active_mem-istkr +
1162 & istkr_if_lrcb+nrladu_current)
1163 nrlnec_if_lr_lucb = max(
1164 & nrlnec_if_lr_lucb,nrladu_if_lr_lu+
1165 & current_active_mem-istkr +
1166 & istkr_if_lrcb+nrladu_current)
1167 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
1168 & 2_8*nrladu_current+
1169 & nrladu_root_3+current_active_mem-istkr+
1173 & nrlnec_if_lr_lu + nrladulr_ud)
1175 & max(peak_ooc_lrlu_ud,
1176 & nrlnec_active + nrladulr_ud)
1178 & max(peak_ooc_lrlu_wc,
1179 & nrlnec_active + nrladulr_wc)
1181 & max(peak_lrlucb_ud,
1182 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
1184 & max(peak_lrlucb_wc,
1185 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
1186 peak_ooc_lrlucb_ud =
1187 & max(peak_ooc_lrlucb_ud,
1188 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
1189 peak_ooc_lrlucb_wc =
1190 & max(peak_ooc_lrlucb_wc,
1191 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
1194 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
1196 & max(peak_ooc_lrcb_ud,
1197 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
1199 peak_dyn_lrlu_ud = max( peak_dyn_lrlu_ud,
1200 & sizecb_under_l0 + nrladulr_ud )
1201 peak_dyn_lrcb_ud = max( peak_dyn_lrcb_ud,
1202 & sizecb_under_l0_if_lrcb + istkr_if_lrcb)
1203 peak_dyn_lrlucb_ud = max( peak_dyn_lrlucb_ud,
1204 & sizecb_under_l0_if_lrcb + istkr_if_lrcb + nrladulr_ud)
1205 peak_dyn_lrlu_wc = max( peak_dyn_lrlu_wc,
1206 & sizecb_under_l0 + nrladulr_wc)
1207 peak_dyn_lrlucb_wc = max( peak_dyn_lrlucb_wc,
1208 & sizecb_under_l0 + istkrlr_cb_wc + nrladulr_wc)
1212 IF (levelf.EQ.3)
THEN
1213 IF (level.EQ.1)
THEN
1214 lev3maxrec = int(
min(ncb,local_m),8) *
1215 & int(
min(ncb,local_n),8)
1217 lev3maxrec =
min(sizecb,
1218 & int(
min(nbrowmax,local_m),8)
1219 & *int(
min(ncb,local_n),8))
1221 maxtempcb = max(maxtempcb, lev3maxrec)
1222 maxitempcb = max(maxitempcb,sizecbi+sizeheader)
1223 sbufr_cb = max(sbufr_cb, lev3maxrec+int(sizecbi,8))
1224 nirnec = max(nirnec,niradu+istki+
1225 &
min(ncb,local_m)+
min(ncb,local_n)+sizeheader)
1226 nirnec_ooc = max(nirnec_ooc,niradu_ooc+istki_ooc+
1227 &
min(ncb,local_m)+
min(ncb,local_n)+sizeheader)
1230 IF (levelf.EQ.2)
THEN
1231 IF (update.AND.(level.NE.2.OR..NOT.master))
THEN
1233 nbr =
min(nbrowmaxf,nbrowmax)
1235 nbr =
min(max(nelimf,nbrowmaxf),nbrowmax)
1237 IF (keep(50).EQ.0)
THEN
1238 cbmaxs = int(nbr,8)*int(ncb,8)
1240 cbmaxs = int(nbr,8)*int(ncb,8) -
1241 & (int(nbr,8)*int(nbr-1,8))/2_8
1247 IF (level.EQ.1)
THEN
1248 IF (.NOT.update)
THEN
1249 nbr =
min(nelimf, ncb)
1254 nbr =
min(nelimf, nbrowmax)
1256 IF (keep(50).EQ.0)
THEN
1257 cbmaxr = int(nbr,8)*ncb8
1259 cbmaxr = int(nbr,8)*int(
min(ncb,nelimf),8)-
1261 cbmaxr =
min(cbmaxr, int(nelimf,8)*int(nelimf+1,8)/2_8)
1262 cbmaxr =
min(cbmaxr, sizecb)
1263 IF ((level.EQ.1).AND.(.NOT. packed_cb))
THEN
1264 cbmaxr =
min(cbmaxr,(ncb8*(ncb8+1_8))/2_8)
1267 ELSE IF (updatef)
THEN
1268 nbr =
min(nbrowmaxf,nbrowmax)
1269 cbmaxr = int(nbr,8) * ncb8
1270 IF (keep(50).NE.0)
THEN
1271 cbmaxr = cbmaxr - (int(nbr,8)*(int(nbr-1,8)))/2_8
1276 ELSEIF (levelf.EQ.3)
THEN
1278 IF (update.AND. .NOT. (master.AND.level.EQ.2))
THEN
1286 nbr =
min(nfrf,nbrowmax)
1287 IF ((level.EQ.1).AND.update)
THEN
1290 cbmaxr = int(nbr,8)*int(
min(nfrf,ncb),8)
1292 & cbmaxr =
min(cbmaxr, sizecb_slave)
1293 IF ( keep(50).NE.0 )
THEN
1294 cbmaxr =
min(cbmaxr,(int(nfrf,8)*int(nfrf+1,8))/2_8)
1296 cbmaxr =
min(cbmaxr,int(nfrf,8)*int(nfrf,8))
1304 cbmaxs =
min(cbmaxs, sizecb)
1305 IF ( .not. ( levelf .eq. 1 .AND. updatef ) )
THEN
1306 sbufs_cb = max(sbufs_cb, cbmaxs+int(sizecbi,8))
1312 sizecbi = 2 * ncb + sizeheader
1313 IF (level.EQ.1)
THEN
1314 IF (keep(50).NE.0.AND.levelf.NE.3
1315 & .AND.packed_cb)
THEN
1316 sizecb = (ncb8*(ncb8+1_8))/2_8
1322 sizecbi = 2+ xsize_ic
1324 ELSE IF (levelf.EQ.1)
THEN
1325 sizecb =
min(cbmaxr,sizecb)
1326 IF (compress_cb)
THEN
1327 sizecblr_ud =
min(sizecblr_ud,sizecb)
1328 sizecblr_wc =
min(sizecblr_wc,sizecb)
1329 sizecb_if_lrcb =
min(sizecb_if_lrcb,sizecb)
1331 sizecbi = 2 * ncb + 9
1332 sbufr_cb = max(sbufr_cb, int(sizecbi,8)+sizecb)
1333 sizecbi = 2 * ncb + sizeheader
1335 sizecbi = 2 * ncb + 9
1336 sbufr_cb = max(sbufr_cb,
1337 &
min(sizecb,cbmaxr) + int(sizecbi,8))
1338 maxtempcb = max(maxtempcb,
min(sizecb,cbmaxr))
1339 sizecbi = 2 * ncb + sizeheader
1340 maxitempcb = max(maxitempcb, sizecbi)
1341 IF ( .NOT. masterf )
THEN
1344 sizecbi = ncb + sizeheader + slavef - 1
1349 sizecb_if_lrcb = 0_8
1352 sizecb = sizecb_slave
1353 sizecblr_ud = sizecblr_slave_ud
1354 sizecblr_wc = sizecblr_slave_wc
1355 sizecb_if_lrcb = sizecb_slave_if_lrcb
1356 maxtempcb = max(maxtempcb,
min(cbmaxr,sizecb) )
1357 maxitempcb = max(maxitempcb,nbrowmax+ncb+sizeheader)
1359 & (update.AND.(.NOT.master).AND.(nslaves_loc.EQ.1))
1361 & sbufr_cb = max(sbufr_cb,
1362 &
min(cbmaxr,sizecb) + int(nbrowmax + ncb + 6,8))
1365 sizecb_slave_if_lrcb = 0_8
1369 sizecbi = 2 + xsize_ic
1373 ELSE IF (update)
THEN
1375 sizecbi = ncb + sizeheader + slavef - 1
1379 IF (keep(50).EQ.0)
THEN
1380 sizecbi = sizecbi + nbrowmax + nfr +
1383 sizecbi = sizecbi + nbrowmax + nfr +
1384 & sizeheader+ nslaves_loc
1389 sizecbi = ncb + sizeheader + slavef - 1
1393 sizecb_slave_if_lrcb = 0_8
1399 IF (levelf.NE.3)
THEN
1402 sizecb_slave_if_lrcb = 0_8
1406 IF ( (level.EQ.1) .AND. (levelf.NE.1) )
THEN
1408 sizecb = (ncb8*(ncb8+1_8))/2_8
1412 sizecbi = 2 * ncb + sizeheader
1413 ELSE IF (level.EQ.2)
THEN
1417 sizecb = sizecb_slave
1418 sizecblr_ud = sizecblr_slave_ud
1419 sizecblr_wc = sizecblr_slave_wc
1420 sizecb_if_lrcb = sizecb_slave_if_lrcb
1421 sizecbi = nbrowmax + nfr + sizeheader
1427 IF (frere(step(inode)).EQ.0)
THEN
1428 write(*,*)
' ERROR 3 in SMUMPS_ANA_DISTM'
1432 IF ( itop .GT. nsteps )
THEN
1433 WRITE(*,*)
'ERROR 4 in SMUMPS_ANA_DISTM '
1435 lstki(itop) = sizecbi
1436 istki=istki + sizecbi
1437 istki_ooc = istki_ooc + sizecbi + (xsize_ooc-xsize_ic)
1438 lstkr(itop) = sizecb
1439 istkr = istkr + lstkr(itop)
1440 nrlnec = max(nrlnec,nrladu+istkr+maxtempcb)
1441 nirnec = max0(nirnec,niradu+istki+maxitempcb)
1442 nirnec_ooc = max0(nirnec_ooc,niradu_ooc+istki_ooc+
1444 & (xsize_ooc-xsize_ic) )
1445 nrlnec_if_lr_lu = max(nrlnec_if_lr_lu,
1446 & nrladu_if_lr_lu+istkr+maxtempcb)
1447 lstkr_if_lrcb(itop) = sizecb_if_lrcb
1448 istkr_if_lrcb = istkr_if_lrcb + lstkr_if_lrcb(itop)
1449 nrlnec_if_lr_cb = max(nrlnec_if_lr_cb,
1450 & nrladu_if_lr_lu+istkr_if_lrcb +
1452 nrlnec_if_lr_lucb = max(nrlnec_if_lr_lucb,
1453 & nrladu_if_lr_lu+istkr_if_lrcb +
1455 lstkrlr_cb_ud(itop) = sizecblr_ud
1456 istkrlr_cb_ud = istkrlr_cb_ud + lstkrlr_cb_ud(itop)
1457 lstkrlr_cb_wc(itop) = sizecblr_wc
1458 istkrlr_cb_wc = istkrlr_cb_wc + lstkrlr_cb_wc(itop)
1459 nrlneclr_cb_ud = max(nrlneclr_cb_ud, istkrlr_cb_ud)
1460 nrlneclr_lucb_ud = max(nrlneclr_lucb_ud,
1461 & nrladulr_ud+istkrlr_cb_ud)
1462 nrlneclr_lucb_wc = max(nrlneclr_lucb_wc,
1463 & nrladulr_wc+istkrlr_cb_wc)
1466 tnstk(step(ifath)) = tnstk(step(ifath)) - 1
1467 IF ( tnstk(step(ifath)) .EQ. 0 )
THEN
1475 nrlnec = max(nrlnec, nrladu+int(keep(30),8))
1476 nrlnec_active = max(nrlnec_active, max_size_factor+
1478 nrlnec_if_lr_lu = max(nrlnec_if_lr_lu,
1479 & nrladu_if_lr_lu + int(keep(30),8))
1480 nrlnec_if_lr_lucb = max(nrlnec_if_lr_lucb,
1481 & nrladu_if_lr_lu + int(keep(30),8))
1482 nrlnec_if_lr_cb = max(nrlnec_if_lr_cb,
1483 & nrladu + int(keep(30),8))
1484 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
1485 & max_size_factor+ int(keep(30),8))
1486 peak_fr = save_sizecb_under_l0 + nrlnec
1487 peak_fr_ooc = save_sizecb_under_l0 + nrlnec_active
1490 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
1493 & nrlnec_if_lr_lu + nrladulr_ud)
1495 & max(peak_ooc_lrlu_ud,
1496 & nrlnec_active + nrladulr_ud)
1498 & max(peak_ooc_lrlu_wc,
1499 & nrlnec_active + nrladulr_wc)
1501 & max(peak_lrlucb_ud,
1502 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
1504 & max(peak_lrlucb_wc,
1505 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
1506 peak_ooc_lrlucb_ud =
1507 & max(peak_ooc_lrlucb_ud,
1508 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
1509 peak_ooc_lrlucb_wc =
1510 & max(peak_ooc_lrlucb_wc,
1511 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
1512 IF (keep(60).EQ.1)
THEN
1513 IF (i_process_schur_k60_1)
THEN
1514 nrladu = nrladu - nrladu_current_k60_1
1515 nrladu_if_lr_lu = nrladu_if_lr_lu - nrladu_current_k60_1
1521 & nrlnec_if_lr_cb + save_sizecb_under_l0_if_lrcb)
1524 & nrlnec_if_lr_cb + peak_dyn_lrcb_ud)
1525 peak_lrlu_ud = max(peak_lrlu_ud,
1526 & nrlnec_if_lr_lu + save_sizecb_under_l0)
1527 peak_lrlu_ud = max(peak_lrlu_ud,
1528 & nrlnec_if_lr_lu + peak_dyn_lrlu_ud)
1530 & max(peak_ooc_lrlu_ud,
1531 & nrlnec_active + save_sizecb_under_l0)
1533 & max(peak_ooc_lrlu_ud,
1534 & nrlnec_active + peak_dyn_lrlu_ud)
1536 & max(peak_ooc_lrlu_wc,
1537 & nrlnec_active + save_sizecb_under_l0)
1539 & max(peak_ooc_lrlu_wc,
1540 & nrlnec_active + peak_dyn_lrlu_wc)
1542 & max(peak_lrlucb_ud,
1543 & nrlnec_if_lr_lucb + save_sizecb_under_l0_if_lrcb)
1545 & max(peak_lrlucb_ud,
1546 & nrlnec_if_lr_lucb + peak_dyn_lrlucb_ud)
1548 & max(peak_lrlucb_wc,
1549 & nrlnec_if_lr_lucb + save_sizecb_under_l0)
1551 & max(peak_lrlucb_wc,
1552 & nrlnec_if_lr_lucb + peak_dyn_lrlucb_wc)
1553 peak_ooc_lrlucb_ud =
1554 & max(peak_ooc_lrlucb_ud,
1555 & nrlnecooc_if_lr_lucb + save_sizecb_under_l0_if_lrcb)
1556 peak_ooc_lrlucb_ud =
1557 & max(peak_ooc_lrlucb_ud,
1558 & nrlnecooc_if_lr_lucb + peak_dyn_lrlucb_ud
1560 & max(peak_ooc_lrlucb_wc,
1561 & nrlnecooc_if_lr_lucb + save_sizecb_under_l0)
1562 peak_ooc_lrlucb_wc =
1563 & max(peak_ooc_lrlucb_wc,
1564 & nrlnecooc_if_lr_lucb + peak_dyn_lrlucb_wc)
1566 sbuf_recold = max(int(sbufr_fr,8),sbufr_cb)
1567 sbuf_recold = max(sbuf_recold,
1568 & maxtempcb+int(maxitempcb,8)) + 10_8
1569 sbuf_rec_fr = max(sbufr_fr, int(
min(100000_8,sbufr_cb))) + 17
1570 sbuf_rec_lr = max(sbufr_lr, int(
min(100000_8,sbufr_cb))) + 17
1571 sbuf_rec_fr = sbuf_rec_fr + 2 * keep(127) + slavef - 1 + 7
1572 sbuf_rec_lr = sbuf_rec_lr + 2 * keep(127) + slavef - 1 + 7
1573 sbuf_send_fr = max(sbufs_fr, int(
min(100000_8,sbufr_cb)))+17
1574 sbuf_send_lr = max(sbufs_lr, int(
min(100000_8,sbufr_cb)))+17
1575 IF(keep(219).NE.0.AND.keep(50) .EQ. 2)
THEN
1576 sbuf_recold = sbuf_recold+int(keep(108)+1,8)
1577 sbuf_rec_fr = sbuf_rec_fr+keep(108)+1
1578 sbuf_rec_lr = sbuf_rec_lr+keep(108)+1
1579 sbuf_send_fr = sbuf_send_fr+keep(108)+1
1580 sbuf_send_lr = sbuf_send_lr+keep(108)+1
1582 IF (slavef.EQ.1)
THEN
1589 DEALLOCATE( lstkr, tnstk, lstki,
1590 & lstkr_if_lrcb, lstkrlr_cb_ud, lstkrlr_cb_wc
1593 keep(470) = keep(470)+ nbnodes_blr
1595 keep(470) = nbnodes_blr
1597 IF (.NOT.above_l0)
THEN
1599 peak_fr_ooc = nrlnec_active
1601 maxfr = max(maxfr, maxfr_under_l0)
1602 max_front_surface_local = max(max_front_surface_local,
1603 & max_front_surface_local_l0)
1604 max_size_factor = max(max_size_factor,
1605 & max_size_factor_l0)
1606 entries_in_factors_loc_masters = entries_in_factors_loc_masters +
1607 & entries_in_factors_masters_lo
1608 entries_in_factors_loc = entries_in_factors_loc +
1609 & entries_in_factors_under_l0
1610 ops_sbtr_loc = ops_sbtr_loc + cost_subtrees_under_lo
1611 opsa_loc = opsa_loc + opsa_under_l0
1612 ops_subtree = real(ops_sbtr_loc)
1613 opsa = real(opsa_loc)