35 IMPLICIT NONE
36 LOGICAL, intent(in) :: ROOT_yes
37 INTEGER, intent(in) :: ROOT_NPROW, ROOT_NPCOL
38 INTEGER, intent(in) :: MYID, 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
42
43
44
45DOUBLE PRECISION, intent(in) :: COST_SUBTREES_UNDER_LO,
46 & OPSA_UNDER_L0
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,
59 & PEAK_LRLU_UD,
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
66 INTEGER MAXFR, NSTEPS
67 INTEGER(8) MAX_FRONT_SURFACE_LOCAL
68 INTEGER STEP(N)
69 INTEGER FRERE(NSTEPS), FILS(N), IPOOL(max(LIPOOL,1)), NE(NSTEPS),
70 & ND(NSTEPS), PROCNODE(NSTEPS), DAD(NSTEPS)
71 DOUBLE PRECISION UU
72 INTEGER SLAVEF, KEEP(500), LOCAL_M, LOCAL_N
73 INTEGER(8) KEEP8(150)
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
79 INTEGER NMB_PAR2
80 INTEGER ISTEP_TO_INIV2( KEEP(71) )
81 LOGICAL I_AM_CAND(NMB_PAR2)
82 INTEGER CANDIDATES( SLAVEF+1, NMB_PAR2 )
83 DOUBLE PRECISION OPSA
84 DOUBLE PRECISION OPSA_LOC
85 INTEGER(8) MAX_SIZE_FACTOR
86 DOUBLE PRECISION OPS_SUBTREE
87 DOUBLE PRECISION OPS_SBTR_LOC
88 INTEGER, ALLOCATABLE, DIMENSION(:) :: TNSTK, LSTKI
89 INTEGER(8), ALLOCATABLE, DIMENSION(:) :: LSTKR
90 INTEGER(8), ALLOCATABLE, DIMENSION(:) :: LSTKR_if_LRCB,
91 & LSTKRLR_CB_UD,
92 & LSTKRLR_CB_WC
93 LOGICAL
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
103 LOGICAL :: I_PROCESS_SCHUR_K60_1
104 INTEGER(8) :: ISTKR_if_LRCB, ISTKRLR_CB_UD, ISTKRLR_CB_WC,
105 & K464_8, K465_8
106 INTEGER :: LRSTATUS, IDUMMY
107 INTEGER :: NBNODES_BLR
108 LOGICAL :: COMPRESS_PANEL, COMPRESS_CB
109 INTEGER ISTKI, STKI, ISTKI_OOC
110 INTEGER K,NSTK, IFATH
111 INTEGER INODE, LEAF, IN
112 INTEGER LEVEL, MAXITEMPCB
113 INTEGER(8) CURRENT_ACTIVE_MEM, MAXTEMPCB
114 LOGICAL UPDATE, UPDATEF, MASTER, MASTERF, INSSARBR
115 INTEGER LEVELF, NCB, SIZECBI
116 INTEGER(8) NCB8
117 INTEGER(8) NFR8,
118 INTEGER(8) :: SIZEFRNOCBLU
119 INTEGER :: IDUMMY_ARRAY(1)
120 INTEGER(8) SIZECB, SIZECBINFR, SIZECB_SLAVE
121 INTEGER(8) SIZECB_if_LRCB, SIZECB_SLAVE_if_LRCB
122 INTEGER(8) SIZECBLR_SLAVE_UD, SIZECBLR_SLAVE_WC
123 INTEGER(8) SIZECBLR_UD,
124 INTEGER(8) SIZECBSLR, NFRS8, NELIMS8, NCBS8,
125 & SIZECBS, SIZECBINFRS
126 INTEGER NFRS, NELIMS, NCBS, LEVELS, LRSTATUSS
127 LOGICAL COMPRESS_CBS
128 INTEGER(8) :: PEAK_DYN_LRLU_UD, PEAK_DYN_LRCB_UD,
129 & PEAK_DYN_LRLUCB_UD, PEAK_DYN_LRLU_WC,
130 & PEAK_DYN_LRLUCB_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,
136 & NBR, NBCOLFAC
137 INTEGER(8) LEV3MAXREC, CBMAXR, CBMAXS
138 INTEGER ALLOCOK
139 INTEGER PANEL_SIZE
140 LOGICAL PACKED_CB
141 DOUBLE PRECISION OPS_NODE, OPS_NODE_MASTER, OPS_NODE_SLAVE
142 INTEGER(8) ENTRIES_NODE_UPPER_PART, ENTRIES_NODE_LOWER_PART
143 INTEGER NBouter_MIN
144 INTEGER :: FLAG_L0OMP
145 parameter(flag_l0omp=-2014)
146 include 'mumps_headers.h'
147 INTEGER WHAT
148 INTEGER(4) :: I4
149 INTEGER(8) IDUMMY8
150 INTRINSIC min, int, real
151 INTEGER DMUMPS_OOC_GET_PANEL_SIZE
153 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE
154 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
158 logical :: FORCE_CAND, CONCERNED, UPDATES, STACKCB, MASTERSON
159 integer :: IFSON, LEVELSON
160 idummy_array(1) = 0
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
165 ELSE
166 extra_perm_info_ooc = 0
167 ENDIF
168 packed_cb=( keep(215).EQ.0 .AND. keep(50).NE.0 )
169 max_front_surface_local=0_8
170 max_size_factor=0_8
171 ALLOCATE( lstkr(nsteps), tnstk(nsteps),
172 & lstki(nsteps) ,
173 & lstkr_if_lrcb(nsteps), lstkrlr_cb_ud(nsteps),
174 & lstkrlr_cb_wc(nsteps),
175 & stat=allocok)
176 if (allocok .GT. 0) THEN
177 iflag =-7
178 ierror = 6*nsteps
179 RETURN
180 endif
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.0d0))
184 IF ( outer_sends_fr ) THEN
185 lkjib_fr =
max(lkjib_fr, keep(420))
186 ENDIF
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
191 & (
192 & (dble(keep(59))*dble(keep(108))*dble(keep(35)))
193 & /
194 & (dble(huge(i4)-10000000))
195 & )
196 ELSE
197 nbouter_min = ceiling
198 & (
199 & (
max(dble(keep(108))*dble(keep(108)),
200 & dble(keep(59))*dble(keep(108)/2)
201 & )
202 & *dble(keep(35)))
203 & /
204 & (dble(huge(i4)-10000000))
205 & )
206 ENDIF
207 nbouter_min =
max(nbouter_min, 4)
208 lkjib_fr =
min(keep(108)/nbouter_min, 4321)
209 ENDIF
210 tnstk = ne
211 leaf = lipool+1
212#if defined(OLD_OOC_NOPANEL)
213 xsize_ooc=xsize_ooc_nopanel
214#else
215 IF (keep(50).EQ.0) THEN
216 xsize_ooc=xsize_ooc_unsym
217 ELSE
218 xsize_ooc=xsize_ooc_sym
219 ENDIF
220#endif
221 sizeheader_ooc = xsize_ooc+6
222 sizeheader = xsize_ic + 6
223 istkr_if_lrcb = 0_8
224 istkrlr_cb_ud = 0_8
225 istkrlr_cb_wc = 0_8
226 istkr = 0_8
227 istki = 0
228 istki_ooc = 0
229 nbnodes_blr = 0
230 opsa_loc = 0.0d0
231 entries_in_factors_loc = 0_8
232 entries_in_factors_loc_masters = 0_8
233 ops_sbtr_loc = 0.0d0
234 nrladu = 0_8
235 niradu = 0
236 niradu_ooc = 0
237 nrladu_current_k60_1 = 0_8
238 i_process_schur_k60_1 = .false.
239 nrladu_current = 0_8
240 nrladulr_ud = 0_8
241 nrladulr_wc = 0_8
242 nrladu_root_3 = 0_8
243 nrlnec_active = 0_8
244 IF (above_l0) THEN
245 save_sizecb_under_l0 = sizecb_under_l0
246 save_sizecb_under_l0_if_lrcb = sizecb_under_l0_if_lrcb
247 ELSE
248 save_sizecb_under_l0 = 0_8
249 save_sizecb_under_l0_if_lrcb = 0_8
250 ENDIF
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
256 nrlnec = 0_8
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
262 nrlneclr_cb_ud = 0_8
263 nrlneclr_lucb_ud = 0_8
264 nrlneclr_lucb_wc = 0_8
265 nirnec = 0
266 nirnec_ooc = 0
267 maxfr = 0
268 peak_fr = 0_8
269 peak_fr_ooc = 0_8
270 peak_lrlu_ud = 0_8
271 peak_ooc_lrlu_ud = 0_8
272 peak_ooc_lrlu_wc = 0_8
273 peak_lrlucb_ud = 0_8
274 peak_lrlucb_wc = 0_8
275 peak_ooc_lrlucb_ud= 0_8
276 peak_ooc_lrlucb_wc= 0_8
277 peak_lrcb_ud = 0_8
278 peak_ooc_lrcb_ud = 0_8
279 itop = 0
280 maxtempcb = 0_8
281 maxitempcb = 0
282 sbufs_cb = 1_8
283 sbufs_fr = 1
284 sbufs_lr = 1
285 sbufr_cb = 1_8
286 sbufr_fr = 1
287 sbufr_lr = 1
288 IF (keep(38) .NE. 0 .AND. keep(60).EQ.0) THEN
289 inode = keep(38)
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)
294 nrlnec = nrladu
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)
302 peak_ooc_lrlu_ud =
303 &
max(peak_ooc_lrlu_ud,
304 & nrlnec_active + nrladulr_ud)
305 peak_ooc_lrlu_wc =
306 &
max(peak_ooc_lrlu_wc,
307 & nrlnec_active + nrladulr_wc)
308 peak_lrlucb_ud =
309 &
max(peak_lrlucb_ud,
310 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
311 peak_lrlucb_wc =
312 &
max(peak_lrlucb_wc,
313 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
314 peak_ooc_lrlucb_ud =
315 &
max(peak_ooc_lrlucb_ud,
316 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
317 peak_ooc_lrlucb_wc =
318 &
max(peak_ooc_lrlucb_wc,
319 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
320 peak_lrcb_ud =
322 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
323 peak_ooc_lrcb_ud =
324 &
max(peak_ooc_lrcb_ud,
325 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
326 IF (above_l0) THEN
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)
337 ENDIF
339 & .EQ. myid) THEN
340 niradu = sizeheader+2*(nd(step(inode))+keep(253))
341 niradu_ooc = sizeheader_ooc+2*(nd(step(inode))+keep(253))
342 ELSE
343 niradu = sizeheader
344 niradu_ooc = sizeheader_ooc
345 ENDIF
346 nirnec = niradu
347 nirnec_ooc = niradu_ooc
348 ENDIF
349 IF((keep(24).eq.0).OR.(keep(24).eq.1)) THEN
350 force_cand=.false.
351 ELSE
352 force_cand=(mod(keep(24),2).eq.0)
353 END IF
354 90 CONTINUE
355 IF (leaf.NE.1) THEN
356 leaf = leaf - 1
357 inode = ipool(leaf)
358 ELSE
359 IF (lipool.NE.0) THEN
361 CALL MUMPS_ABORT()
362 ELSE
363 GOTO 115
364 ENDIF
365 ENDIF
366 95 CONTINUE
367 NFR = ND(STEP(INODE))+KEEP(253)
368 NFR8 = int(NFR,8)
369 NSTK = NE(STEP(INODE))
370 NELIM = 0
371 IN = INODE
372 100 NELIM = NELIM + 1
373 NELIM8=int(NELIM,8)
374 IN = FILS(IN)
375.GT. IF (IN 0 ) GOTO 100
376 IFSON = -IN
377 IFATH = DAD(STEP(INODE))
378 MASTER = MUMPS_PROCNODE(PROCNODE(STEP(INODE)),KEEP(199))
379.EQ. & MYID
380 LEVEL = MUMPS_TYPENODE(PROCNODE(STEP(INODE)),KEEP(199))
381 INSSARBR = MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
382 & KEEP(199))
383 UPDATE=.FALSE.
384.NOT. if(FORCE_CAND) then
385.AND..NE..OR..EQ. UPDATE = ( (MASTER(LEVEL3) ) LEVEL2 )
386 else
387.and..ne. if(MASTER(LEVEL3)) then
388 UPDATE = .TRUE.
389.eq. else if(LEVEL2) then
390 if ( I_AM_CAND(ISTEP_TO_INIV2(STEP(INODE)))) THEN
391 UPDATE = .TRUE.
392 end if
393 end if
394 end if
395 NCB = NFR-NELIM
396 NCB8 = int(NCB,8)
397 SIZECBINFR = NCB8*NCB8
398.EQ. IF (KEEP(50)0) THEN
399 SIZECB = SIZECBINFR
400 ELSE
401 IFATH = DAD(STEP(INODE))
402.NE..AND. IF ( IFATHKEEP(38) PACKED_CB ) THEN
403 SIZECB = (NCB8*(NCB8+1_8))/2_8
404 ELSE
405 SIZECB = SIZECBINFR
406 ENDIF
407 ENDIF
408 IDUMMY = -99999
409 CALL IS_FRONT_BLR_CANDIDATE (INODE, LEVEL, NFR, NELIM,
410 & KEEP(494), 1, KEEP(490),
411 & KEEP(491), KEEP(492),
412 & KEEP(20), KEEP(60), DAD(STEP(INODE)), KEEP(38),
413 & LRSTATUS, IDUMMY)
414.GE. COMPRESS_PANEL = (LRSTATUS2)
415.EQ..OR..EQ. COMPRESS_CB = ((LRSTATUS1)(LRSTATUS3))
416.OR. IF (COMPRESS_PANELCOMPRESS_CB) NBNODES_BLR = NBNODES_BLR+1
417 IF (COMPRESS_PANEL) THEN
418 K464_8 = int(KEEP(464),8)
419 ELSE
420 K464_8 = 1000_8
421 ENDIF
422 IF (COMPRESS_CB) THEN
423 K465_8 = int(KEEP(465),8)
424 SIZECB_if_LRCB = 0_8
425 SIZECBLR_UD = SIZECB*K465_8/1000_8
426 SIZECBLR_WC = SIZECB
427 ELSE
428 K465_8 = 1000_8
429 SIZECBLR_UD = 0_8
430 SIZECBLR_WC = 0_8
431 SIZECB_if_LRCB = SIZECB
432 ENDIF
433 SIZECBI = 2* NCB + SIZEHEADER
434.NE. IF (LEVEL2) THEN
435 NSLAVES_LOC = -99999999
436 SIZECB_SLAVE = -99999997_8
437 SIZECB_SLAVE_if_LRCB = SIZECB_SLAVE
438 NBROWMAX = NCB
439 ELSE
440.EQ. IF (KEEP(48) 5) THEN
441 WHAT = 5
442 IF (FORCE_CAND) THEN
443 NSLAVES_LOC=CANDIDATES(SLAVEF+1,
444 & ISTEP_TO_INIV2(STEP(INODE)))
445 ELSE
446 NSLAVES_LOC=SLAVEF-1
447 ENDIF
448 NSLAVES_PASSED=NSLAVES_LOC
449 ELSE
450 WHAT = 2
451 NSLAVES_PASSED=SLAVEF
452 NSLAVES_LOC =SLAVEF-1
453 ENDIF
454 CALL MUMPS_MAX_SURFCB_NBROWS(WHAT, KEEP,KEEP8,
455 & NCB, NFR, NSLAVES_PASSED, NBROWMAX, SIZECB_SLAVE
456 & )
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
461 ELSE
462 SIZECB_SLAVE_if_LRCB = SIZECB_SLAVE
463 SIZECBLR_SLAVE_UD = 0_8
464 SIZECBLR_SLAVE_WC = 0_8
465 ENDIF
466 ENDIF
467.GT. IF (KEEP(60)1) THEN
468.AND..EQ. IF (MASTER INODEKEEP(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))
472 ENDIF
473 ENDIF
474.EQ. IF (LEVEL3) THEN
475 IF (
476.LE. & KEEP(60)1
477 & ) THEN
478 NRLADU_CURRENT = int(LOCAL_M,8)*int(LOCAL_N,8)
479 NRLNEC = max(NRLNEC,NRLADU+ISTKR+
480 & NRLADU_CURRENT)
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+
485 & NRLADU_CURRENT)
486 NRLNEC_if_LR_CB = max(NRLNEC_if_LR_CB ,
487 & NRLADU+ISTKR_if_LRCB+
488 & NRLADU_CURRENT)
489 NRLNEC_if_LR_LUCB = max(NRLNEC_if_LR_LUCB,
490 & NRLADU_if_LR_LU+ISTKR_if_LRCB+
491 & NRLADU_CURRENT)
492 NRLNECOOC_if_LR_LUCB = max(NRLNECOOC_if_LR_LUCB,
493 & NRLADU_ROOT_3 +
494 & NRLADU_CURRENT+ISTKR_if_LRCB)
495 PEAK_LRLU_UD = max(PEAK_LRLU_UD,
496 & NRLNEC_if_LR_LU + NRLADULR_UD)
497 PEAK_OOC_LRLU_UD =
498 & max(PEAK_OOC_LRLU_UD,
499 & NRLNEC_ACTIVE + NRLADULR_UD)
500 PEAK_OOC_LRLU_WC =
501 & max(PEAK_OOC_LRLU_WC,
502 & NRLNEC_ACTIVE + NRLADULR_WC)
503 PEAK_LRLUCB_UD =
504 & max(PEAK_LRLUCB_UD,
505 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_UD)
506 PEAK_LRLUCB_WC =
507 & max(PEAK_LRLUCB_WC,
508 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_WC)
509 PEAK_OOC_LRLUCB_UD =
510 & max(PEAK_OOC_LRLUCB_UD,
511 & NRLNECOOC_if_LR_LUCB + NRLNECLR_LUCB_UD)
512 PEAK_OOC_LRLUCB_WC =
513 & max(PEAK_OOC_LRLUCB_WC,
514 & NRLNECOOC_if_LR_LUCB + NRLNECLR_LUCB_WC)
515 PEAK_LRCB_UD =
516 & max(PEAK_LRCB_UD,
517 & NRLNEC_if_LR_CB + NRLNECLR_CB_UD)
518 PEAK_OOC_LRCB_UD =
519 & max(PEAK_OOC_LRCB_UD,
520 & NRLNECOOC_if_LR_LUCB + NRLNECLR_CB_UD)
521 IF (ABOVE_L0) THEN
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)
532 ENDIF
533 ENDIF
534 IF (MASTER) THEN
535.GT. IF (NFRMAXFR) MAXFR = NFR
536 ENDIF
537 ENDIF
538.EQ. IF(KEEP(86)1)THEN
539.AND..NOT. IF(MASTER(MUMPS_IN_OR_ROOT_SSARBR(
540 & PROCNODE(STEP(INODE)), KEEP(199)))
541 & )THEN
542.EQ. IF(LEVEL1)THEN
543 MAX_FRONT_SURFACE_LOCAL=max(MAX_FRONT_SURFACE_LOCAL,
544 & NFR8*NFR8)
545.NE. IF (KEEP(268)0) THEN
546 MAX_FRONT_SURFACE_LOCAL=max(MAX_FRONT_SURFACE_LOCAL,
547 & NFR8*NFR8+NELIM8)
548 ENDIF
549.EQ. ELSEIF(LEVEL2)THEN
550.EQ. IF(KEEP(50)0)THEN
551 MAX_FRONT_SURFACE_LOCAL=max(MAX_FRONT_SURFACE_LOCAL,
552 & NFR8*NELIM8)
553 ELSE
554 MAX_FRONT_SURFACE_LOCAL=max(MAX_FRONT_SURFACE_LOCAL,
555 & NELIM8*NELIM8)
556.NE..AND..EQ. IF (KEEP(219)0KEEP(50)2) THEN
557 MAX_FRONT_SURFACE_LOCAL=max(MAX_FRONT_SURFACE_LOCAL,
558 & NELIM8*(NELIM8+1_8))
559 ENDIF
560 ENDIF
561 ENDIF
562 ENDIF
563 ENDIF
564.EQ. IF (LEVEL2) THEN
565 IF (MASTER) THEN
566.EQ. IF (KEEP(50)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)
569 ELSE
570 SBUFS_FR = max(SBUFS_FR, NELIM*LKJIB_FR+NELIM+6)
571 SBUFS_LR = max(SBUFS_LR, NELIM*LKJIB_LR+NELIM+6)
572 ENDIF
573 ELSEIF (UPDATE) THEN
574.EQ. if (KEEP(50)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)
577 else
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 )
584 endif
585 ENDIF
586 ENDIF
587 IF ( UPDATE ) THEN
588.AND..EQ. IF ( (MASTER) (LEVEL1) ) THEN
589 NIRADU = NIRADU + 2*NFR + SIZEHEADER
590 NIRADU_OOC = NIRADU_OOC + 2*NFR + SIZEHEADER_OOC
591 PANEL_SIZE = DMUMPS_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.EQ. IF (KEEP(50)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)
599 ELSE
600.GT..AND..NE. IF ( KEEP(459) 1 KEEP(50)0 ) THEN
601 CALL MUMPS_LDLTPANEL_STORAGE( NELIM, KEEP,
602 & IDUMMY_ARRAY(1), NRLADU_CURRENT )
603 SIZEFRNOCBLU = int(NELIM,8)*int(NELIM,8) -
604 & NRLADU_CURRENT
605 NRLADU_CURRENT = NRLADU_CURRENT +
606 & int(NELIM,8) * int(NFR-NELIM,8)
607 ELSE
608 NRLADU_CURRENT = int(NELIM,8)*int(NFR,8)
609 ENDIF
610 NRLADU = NRLADU + NRLADU_CURRENT
611 MAX_SIZE_FACTOR=max(MAX_SIZE_FACTOR,NRLADU_CURRENT)
612 ENDIF
613.EQ..AND..EQ. IF (INODEKEEP(20)(KEEP(60)1)) THEN
614 I_PROCESS_SCHUR_K60_1 = .TRUE.
615 NRLADU_CURRENT_K60_1 = NRLADU_CURRENT
616 ENDIF
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 +
623 & NRLADU_CURRENT
624 ELSE
625 NRLADU_if_LR_LU = NRLADU_if_LR_LU + NRLADU_CURRENT
626 NRLADU_CURRENT_MISSING = 0_8
627 ENDIF
628 SIZECBI = 2* NCB + SIZEHEADER
629.EQ. ELSEIF (LEVEL2) THEN
630 IF (MASTER) THEN
631 NIRADU = NIRADU+SIZEHEADER +SLAVEF-1+2*NFR
632 NIRADU_OOC = NIRADU_OOC+SIZEHEADER_OOC +SLAVEF-1+2*NFR
633.EQ. IF (KEEP(50)0) THEN
634 NRLADU_CURRENT = int(NFR,8)*int(NELIM,8)
635 NBCOLFAC=NFR
636 ELSE
637 NBCOLFAC=NELIM
638.GT..AND..NE. IF ( KEEP(459) 1 KEEP(50) 0 ) THEN
639 CALL MUMPS_LDLTPANEL_STORAGE( NELIM, KEEP,
640 & IDUMMY_ARRAY(1), NRLADU_CURRENT )
641 SIZEFRNOCBLU = int(NELIM,8)*int(NELIM,8) -
642 & NRLADU_CURRENT
643 ELSE
644 NRLADU_CURRENT = int(NELIM,8)*int(NELIM,8)
645 ENDIF
646 ENDIF
647 PANEL_SIZE = DMUMPS_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 +
658 & NRLADU_CURRENT
659 ELSE
660 NRLADU_if_LR_LU = NRLADU_if_LR_LU + NRLADU_CURRENT
661 NRLADU_CURRENT_MISSING = NRLADU_CURRENT
662 ENDIF
663 MAX_SIZE_FACTOR=max(MAX_SIZE_FACTOR,NRLADU_CURRENT)
664 SIZECB = 0_8
665 SIZECBINFR = 0_8
666 SIZECB_if_LRCB = 0_8
667 SIZECBLR_UD = 0_8
668 SIZECBLR_WC = 0_8
669 SIZECBI = NCB + SIZEHEADER + SLAVEF - 1
670 ELSE
671 SIZEFRNOCBLU = 0_8
672 SIZECB=SIZECB_SLAVE
673 SIZECBINFR = SIZECB
674 NIRADU = NIRADU+4+NELIM+NBROWMAX
675 NIRADU_OOC = NIRADU_OOC+4+NELIM+NBROWMAX
676.EQ. IF (KEEP(50)0) THEN
677 NRLADU_CURRENT = int(NELIM,8)*int(NBROWMAX,8)
678 ELSE
679 NRLADU_CURRENT = int(NELIM,8)*int(NCB/NSLAVES_LOC,8)
680 ENDIF
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 +
688 & NRLADU_CURRENT
689 ELSE
690 NRLADU_if_LR_LU = NRLADU_if_LR_LU + NRLADU_CURRENT
691 NRLADU_CURRENT_MISSING = 0
692 ENDIF
693 MAX_SIZE_FACTOR=max(MAX_SIZE_FACTOR,NRLADU_CURRENT)
694.EQ. IF (KEEP(50)0) THEN
695 SIZECBI = 7 + NBROWMAX + NCB
696 ELSE
697 SIZECBI = 8 + NBROWMAX + NCB
698 ENDIF
699.NE. IF (KEEP(50)0) THEN
700 SIZECBI=SIZECBI+NSLAVES_LOC+
701 & XTRA_SLAVES_SYM
702 ELSE
703 SIZECBI=SIZECBI+NSLAVES_LOC+
704 & XTRA_SLAVES_UNSYM
705 ENDIF
706 ENDIF
707 ENDIF
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.NE..AND..EQ. IF ( KEEP(50)0 LEVEL1 ) THEN
715 CURRENT_ACTIVE_MEM = CURRENT_ACTIVE_MEM +
716 & int(NELIM,8)*int(NCB,8)
717 ENDIF
718.NE..AND..GT. IF ( KEEP(50)0 KEEP(459) 1 ) THEN
719 CURRENT_ACTIVE_MEM = CURRENT_ACTIVE_MEM + SIZEFRNOCBLU
720 ENDIF
721.AND..NE..AND. IF (MASTER KEEP(219)0
722.EQ..AND..EQ. & KEEP(50)2LEVEL2) THEN
723 CURRENT_ACTIVE_MEM = CURRENT_ACTIVE_MEM + int(NELIM,8)
724 ENDIF
725.EQ. IF (SLAVEF1) THEN
726 NRLNEC_if_LR_CB =
727 & max(NRLNEC_if_LR_CB ,NRLADU+
728 & CURRENT_ACTIVE_MEM-ISTKR+ISTKR_if_LRCB)
729 NRLNEC_if_LR_LUCB =
730 & max(NRLNEC_if_LR_LUCB,NRLADU_if_LR_LU+
731 & CURRENT_ACTIVE_MEM-ISTKR+ISTKR_if_LRCB+
732 & NRLADU_CURRENT_MISSING)
733 ELSE
734 NRLNEC_if_LR_CB =
735 & max(NRLNEC_if_LR_CB ,NRLADU+
736 & CURRENT_ACTIVE_MEM-ISTKR+ISTKR_if_LRCB+
737 & MAXTEMPCB)
738 NRLNEC_if_LR_LUCB =
739 & max(NRLNEC_if_LR_LUCB,NRLADU_if_LR_LU+
740 & CURRENT_ACTIVE_MEM-ISTKR+ISTKR_if_LRCB+
741 & MAXTEMPCB+
742 & NRLADU_CURRENT_MISSING)
743 ENDIF
744.NE..AND..AND. IF (NSTK 0 INSSARBR
745.NE..AND..EQ. & KEEP(234)0 KEEP(55)0) THEN
746 CURRENT_ACTIVE_MEM = CURRENT_ACTIVE_MEM - LSTKR(ITOP)
747 ENDIF
748.EQ. IF (SLAVEF1) THEN
749 NRLNEC = max(NRLNEC,NRLADU+CURRENT_ACTIVE_MEM)
750 NRLNEC_ACTIVE = max(NRLNEC_ACTIVE,NRLADU_CURRENT+
751 & NRLADU_ROOT_3+CURRENT_ACTIVE_MEM)
752 NRLNEC_if_LR_LU =
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)
759 ELSE
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)
763 NRLNEC_if_LR_LU =
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)
770 ENDIF
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)
775 PEAK_LRLU_UD =
776 & max(PEAK_LRLU_UD,
777 & NRLNEC_if_LR_LU + NRLADULR_UD)
778 PEAK_OOC_LRLU_UD =
779 & max(PEAK_OOC_LRLU_UD,
780 & NRLNEC_ACTIVE + NRLADULR_UD)
781 PEAK_OOC_LRLU_WC =
782 & max(PEAK_OOC_LRLU_WC,
783 & NRLNEC_ACTIVE + NRLADULR_WC)
784 PEAK_LRLUCB_UD =
785 & max(PEAK_LRLUCB_UD,
786 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_UD)
787 PEAK_LRLUCB_WC =
788 & max(PEAK_LRLUCB_WC,
789 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_WC)
790 PEAK_OOC_LRLUCB_UD =
791 & max(PEAK_OOC_LRLUCB_UD,
792 & NRLNECOOC_if_LR_LUCB + NRLNECLR_LUCB_UD)
793 PEAK_OOC_LRLUCB_WC =
794 & max(PEAK_OOC_LRLUCB_WC,
795 & NRLNECOOC_if_LR_LUCB + NRLNECLR_LUCB_WC)
796 PEAK_LRCB_UD =
797 & max(PEAK_LRCB_UD,
798 & NRLNEC_if_LR_CB + NRLNECLR_CB_UD)
799 PEAK_OOC_LRCB_UD =
800 & max(PEAK_OOC_LRCB_UD,
801 & NRLNECOOC_if_LR_LUCB + NRLNECLR_CB_UD)
802 IF (ABOVE_L0) THEN
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)
813 ENDIF
814.GT. IF (NFRMAXFR) MAXFR = NFR
815.AND..AND..EQ. IF (ABOVE_L0MASTER(LEVEL1)) THEN
816.GT. DO WHILE (IFSON0)
817.EQ. IF (TNSTK(STEP(IFSON))FLAG_L0OMP) THEN
818 NFRS = ND(STEP(IFSON))+KEEP(253)
819 NFRS8 = int(NFRS,8)
820 NELIMS= 0
821 IN = IFSON
822.GT. DO WHILE (IN0)
823 IN = FILS(IN)
824 NELIMS = NELIMS + 1
825 ENDDO
826 NELIMS8=int(NELIMS,8)
827 NCBS = NFRS-NELIMS
828 NCBS8 = int(NCBS,8)
829 SIZECBINFRS = NCBS8*NCBS8
830.EQ. IF (KEEP(50)0) THEN
831 SIZECBS = SIZECBINFRS
832 ELSE
833 IF ( PACKED_CB ) THEN
834 SIZECBS = (NCBS8*(NCBS8+1_8))/2_8
835 ELSE
836 SIZECBS = SIZECBINFRS
837 ENDIF
838 ENDIF
839 IDUMMY = -99999
840 CALL IS_FRONT_BLR_CANDIDATE
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),
845 & LRSTATUSS, IDUMMY)
846.EQ..OR..EQ. COMPRESS_CBS = ((LRSTATUSS1)(LRSTATUSS3))
847 IF (COMPRESS_CBS) THEN
848 K465_8 = int(KEEP(465),8)
849 SIZECBSLR = SIZECBS*K465_8/1000_8
850 ELSE
851 SIZECBSLR = SIZECBS
852 ENDIF
853 SIZECB_UNDER_L0 = SIZECB_UNDER_L0 - SIZECBS
854 SIZECB_UNDER_L0_IF_LRCB = SIZECB_UNDER_L0_IF_LRCB
855 & - SIZECBSLR
856 ENDIF
857 IFSON = FRERE(STEP(IFSON))
858 ENDDO
859 ENDIF
860.GT. IF (NSTK0) THEN
861 DO 70 K=1,NSTK
862 LSTK = LSTKR(ITOP)
863 ISTKR = ISTKR - LSTK
864.AND..AND..NE. IF (K==1 INSSARBRKEEP(234)0
865.AND..EQ. & KEEP(55)0) THEN
866 ELSE
867 CURRENT_ACTIVE_MEM = CURRENT_ACTIVE_MEM - LSTK
868 ENDIF
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
875 STKI = LSTKI( ITOP )
876 ISTKI = ISTKI - STKI
877 ISTKI_OOC = ISTKI_OOC - STKI - (XSIZE_OOC-XSIZE_IC)
878 ITOP = ITOP - 1
879.LT. IF (ITOP0) THEN
880 write(*,*) MYID,
882 CALL MUMPS_ABORT()
883 ENDIF
884 70 CONTINUE
885 ENDIF
886.NE. ELSE IF (LEVEL3) THEN
887.GT. DO WHILE (IFSON0)
888 UPDATES=.FALSE.
889 MASTERSON = MUMPS_PROCNODE(PROCNODE(STEP(IFSON)),KEEP(199))
890.EQ. & MYID
891 LEVELSON = MUMPS_TYPENODE(PROCNODE(STEP(IFSON)),KEEP(199))
892.NOT. if(FORCE_CAND) then
893.AND..NE..OR. UPDATES =((MASTERSON(LEVELSON3))
894.EQ. & LEVELSON2)
895 else
896.and..ne. if(MASTERSON(LEVELSON3)) then
897 UPDATES = .TRUE.
898.eq. else if(LEVELSON2) then
899 if ( I_AM_CAND(ISTEP_TO_INIV2(STEP(IFSON)))) then
900 UPDATES = .TRUE.
901 end if
902 end if
903 end if
904 IF (UPDATES) THEN
905 LSTK = LSTKR(ITOP)
906 ISTKR = ISTKR - LSTK
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
913 STKI = LSTKI( ITOP )
914 ISTKI = ISTKI - STKI
915 ISTKI_OOC = ISTKI_OOC - STKI - (XSIZE_OOC-XSIZE_IC)
916 ITOP = ITOP - 1
917.LT. IF (ITOP0) THEN
918 write(*,*) MYID,
920 CALL MUMPS_ABORT()
921 ENDIF
922 ENDIF
923 IFSON = FRERE(STEP(IFSON))
924 END DO
925 ENDIF
926 IF (
927.NE..OR..EQ. & ( (INODEKEEP(20))(KEEP(60)0) )
928.AND. &
929.NE..OR..LE. & ( (INODEKEEP(38))(KEEP(60)1) )
930 & )
931 & THEN
932 ENTRIES_NODE_LOWER_PART = int(NFR-NELIM,8) * int(NELIM,8)
933.EQ. IF ( KEEP(50)0 ) THEN
934 ENTRIES_NODE_UPPER_PART = int(NFR,8) * int(NELIM,8)
935 ELSE
936 ENTRIES_NODE_UPPER_PART =
937 & (int(NELIM,8)*int(NELIM+1,8))/2_8
938 ENDIF
939.EQ..AND..EQ. IF (KEEP(50)2 LEVEL3) THEN
940 CALL MUMPS_GET_FLOPS_COST(NFR,
941 & NELIM, NELIM, 0,
942 & 1,OPS_NODE)
943 ELSE
944 CALL MUMPS_GET_FLOPS_COST(NFR,
945 & NELIM, NELIM,KEEP(50),
946 & 1,OPS_NODE)
947 ENDIF
948.EQ. IF (LEVEL2) THEN
949 CALL MUMPS_GET_FLOPS_COST(NFR,
950 & NELIM, NELIM,KEEP(50),
951 & 2,OPS_NODE_MASTER)
952 OPS_NODE_SLAVE=OPS_NODE-OPS_NODE_MASTER
953 ENDIF
954 ELSE
955 OPS_NODE = 0.0D0
956 ENTRIES_NODE_UPPER_PART = 0_8
957 ENTRIES_NODE_LOWER_PART = 0_8
958 ENDIF
959 IF ( MASTER ) THEN
960 ENTRIES_IN_FACTORS_LOC_MASTERS =
961 & ENTRIES_IN_FACTORS_LOC_MASTERS +
962 & ENTRIES_NODE_UPPER_PART +
963 & ENTRIES_NODE_LOWER_PART
964 ENDIF
965.OR..EQ. IF (UPDATELEVEL3) THEN
966.EQ. IF ( LEVEL 3 ) THEN
967 IF (ROOT_yes) THEN
968 OPSA_LOC = OPSA_LOC +
969 & dble(
970 & int(OPS_NODE,8)/
971 & int(ROOT_NPROW*ROOT_NPCOL,8)
972 & )
973 ENTRIES_IN_FACTORS_LOC = ENTRIES_IN_FACTORS_LOC +
974 & ENTRIES_NODE_UPPER_PART /
975 & int(ROOT_NPROW*ROOT_NPCOL,8)
976 IF (MASTER) THEN
977 ENTRIES_IN_FACTORS_LOC = ENTRIES_IN_FACTORS_LOC +
978 & mod(ENTRIES_NODE_UPPER_PART,
979 & int(SLAVEF,8))
980 ENDIF
981 ENDIF
982.AND..EQ. ELSE IF (MASTER LEVEL2) 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.AND..EQ. ELSE IF (MASTER LEVEL1) 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 /
998 & int(NSLAVES_LOC,8)
999 ENDIF
1000 IF (MUMPS_IN_OR_ROOT_SSARBR(PROCNODE(STEP(INODE)),
1001.OR. & KEEP(199)) NE(STEP(INODE))==0) THEN
1002 IF (LEVEL == 1) THEN
1003 OPS_SBTR_LOC = OPS_SBTR_LOC + OPS_NODE
1004 ELSE
1005 CALL MUMPS_GET_FLOPS_COST(NFR,
1006 & NELIM, NELIM,KEEP(50),
1007 & 1,OPS_NODE)
1008 OPS_SBTR_LOC = OPS_SBTR_LOC + OPS_NODE
1009 ENDIF
1010 ENDIF
1011 ENDIF
1012.EQ. IF (IFATH 0) THEN
1013.GT. IF (LEAF1) THEN
1014 GOTO 90
1015 ELSE
1016 GOTO 115
1017 ENDIF
1018 ELSE
1019 NFRF = ND(STEP(IFATH))+KEEP(253)
1020.EQ. IF (DAD(STEP(IFATH))0) THEN
1021 NELIMF = NFRF-KEEP(253)
1022 IF (ABOVE_L0) IN=0
1023 ELSE
1024 NELIMF = 0
1025 IN = IFATH
1026.GT. DO WHILE (IN0)
1027 IN = FILS(IN)
1028 NELIMF = NELIMF+1
1029 ENDDO
1030 ENDIF
1031 NCBF = NFRF - NELIMF
1032 LEVELF = MUMPS_TYPENODE(PROCNODE(STEP(IFATH)),KEEP(199))
1033 MASTERF= MUMPS_PROCNODE(PROCNODE(STEP(IFATH)),
1034.EQ. & KEEP(199))MYID
1035 UPDATEF= .FALSE.
1036.NOT. if(FORCE_CAND) then
1037.AND..NE..OR..EQ. UPDATEF= ((MASTERF(LEVELF3))LEVELF2)
1038 else
1039.and..ne. if(MASTERF(LEVELF3)) then
1040 UPDATEF = .TRUE.
1041.eq. else if (LEVELF2) then
1042 if ( I_AM_CAND(ISTEP_TO_INIV2(STEP(IFATH)))) THEN
1043 UPDATEF = .TRUE.
1044 end if
1045 end if
1046 end if
1047.OR. CONCERNED = UPDATEF UPDATE
1048.NE. IF (LEVELF 2) THEN
1049 NBROWMAXF = -999999
1050 ELSE
1051.EQ. IF (KEEP(48) 5) THEN
1052 WHAT = 4
1053 IF (FORCE_CAND) THEN
1054 NSLAVES_LOC=CANDIDATES(SLAVEF+1,
1055 & ISTEP_TO_INIV2(STEP(IFATH)))
1056 ELSE
1057 NSLAVES_LOC=SLAVEF-1
1058 ENDIF
1059 ELSE
1060 WHAT = 1
1061 NSLAVES_LOC=SLAVEF
1062 ENDIF
1063 CALL MUMPS_MAX_SURFCB_NBROWS( WHAT, KEEP, KEEP8,
1064 & NCBF, NFRF, NSLAVES_LOC, NBROWMAXF, IDUMMY8
1065 & )
1066 ENDIF
1067.EQ..AND..AND. IF(LEVEL1UPDATE
1068.OR..EQ. & (UPDATEFLEVELF2)
1069.AND..NE. & LEVELF3) THEN
1070.AND..NE. IF ( INSSARBR KEEP(234)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)
1074 NRLNEC_if_LR_LU =
1075 & max(NRLNEC_if_LR_LU,NRLADU_if_LR_LU+
1076 & CURRENT_ACTIVE_MEM+
1077 & NRLADU_CURRENT_MISSING)
1078 NRLNEC_if_LR_CB =
1079 & max(NRLNEC_if_LR_CB ,NRLADU+
1080 & CURRENT_ACTIVE_MEM-ISTKR+ISTKR_if_LRCB)
1081 NRLNEC_if_LR_LUCB =
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)
1088 ELSE
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)
1092 NRLNEC_if_LR_LU =
1093 & max(NRLNEC_if_LR_LU,NRLADU_if_LR_LU+
1094 & CURRENT_ACTIVE_MEM+SIZECB+
1095 & NRLADU_CURRENT_MISSING)
1096 NRLNEC_if_LR_CB =
1097 & max(NRLNEC_if_LR_CB ,NRLADU+
1098 & CURRENT_ACTIVE_MEM-ISTKR+
1099 & ISTKR_if_LRCB+ SIZECB)
1100 NRLNEC_if_LR_LUCB =
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)
1109 ENDIF
1110 PEAK_LRLU_UD =
1111 & max(PEAK_LRLU_UD,
1112 & NRLNEC_if_LR_LU + NRLADULR_UD)
1113 PEAK_OOC_LRLU_UD =
1114 & max(PEAK_OOC_LRLU_UD,
1115 & NRLNEC_ACTIVE + NRLADULR_UD)
1116 PEAK_OOC_LRLU_WC =
1117 & max(PEAK_OOC_LRLU_WC,
1118 & NRLNEC_ACTIVE + NRLADULR_WC)
1119 PEAK_LRLUCB_UD =
1120 & max(PEAK_LRLUCB_UD,
1121 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_UD)
1122 PEAK_LRLUCB_WC =
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)
1131 PEAK_LRCB_UD =
1132 & max(PEAK_LRCB_UD,
1133 & NRLNEC_if_LR_CB + NRLNECLR_CB_UD)
1134 PEAK_OOC_LRCB_UD =
1135 & max(PEAK_OOC_LRCB_UD,
1136 & NRLNECOOC_if_LR_LUCB + NRLNECLR_CB_UD)
1137 IF (ABOVE_L0) THEN
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)
1148 ENDIF
1149 ENDIF
1150.AND..EQ..AND..NOT. IF (UPDATE LEVEL2 MASTER) THEN
1151 NRLNEC =
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.NOT. IF (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+
1170 & ISTKR_if_LRCB)
1171 PEAK_LRLU_UD =
1172 & max(PEAK_LRLU_UD,
1173 & NRLNEC_if_LR_LU + NRLADULR_UD)
1174 PEAK_OOC_LRLU_UD =
1175 & max(PEAK_OOC_LRLU_UD,
1176 & NRLNEC_ACTIVE + NRLADULR_UD)
1177 PEAK_OOC_LRLU_WC =
1178 & max(PEAK_OOC_LRLU_WC,
1179 & NRLNEC_ACTIVE + NRLADULR_WC)
1180 PEAK_LRLUCB_UD =
1181 & max(PEAK_LRLUCB_UD,
1182 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_UD)
1183 PEAK_LRLUCB_WC =
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)
1192 PEAK_LRCB_UD =
1193 & max(PEAK_LRCB_UD,
1194 & NRLNEC_if_LR_CB + NRLNECLR_CB_UD)
1195 PEAK_OOC_LRCB_UD =
1196 & max(PEAK_OOC_LRCB_UD,
1197 & NRLNECOOC_if_LR_LUCB + NRLNECLR_CB_UD)
1198 IF (ABOVE_L0) THEN
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)
1209 ENDIF
1210 ENDIF
1211 ENDIF
1212.EQ. IF (LEVELF3) THEN
1213.EQ. IF (LEVEL1) THEN
1214 LEV3MAXREC = int(min(NCB,LOCAL_M),8) *
1215 & int(min(NCB,LOCAL_N),8)
1216 ELSE
1217 LEV3MAXREC = min(SIZECB,
1218 & int(min(NBROWMAX,LOCAL_M),8)
1219 & *int(min(NCB,LOCAL_N),8))
1220 ENDIF
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)
1228 ENDIF
1229 IF (CONCERNED) THEN
1230.EQ. IF (LEVELF2) THEN
1231.AND..NE..OR..NOT. IF (UPDATE(LEVEL2MASTER)) THEN
1232 IF(MASTERF)THEN
1233 NBR = min(NBROWMAXF,NBROWMAX)
1234 ELSE
1235 NBR = min(max(NELIMF,NBROWMAXF),NBROWMAX)
1236 ENDIF
1237.EQ. IF (KEEP(50)0) THEN
1238 CBMAXS = int(NBR,8)*int(NCB,8)
1239 ELSE
1240 CBMAXS = int(NBR,8)*int(NCB,8) -
1241 & (int(NBR,8)*int(NBR-1,8))/2_8
1242 ENDIF
1243 ELSE
1244 CBMAXS = 0_8
1245 END IF
1246 IF (MASTERF) THEN
1247.EQ. IF (LEVEL1) THEN
1248.NOT. IF (UPDATE) THEN
1249 NBR = min(NELIMF, NCB)
1250 ELSE
1251 NBR = 0
1252 ENDIF
1253 ELSE
1254 NBR = min(NELIMF, NBROWMAX)
1255 ENDIF
1256.EQ. IF (KEEP(50)0) THEN
1257 CBMAXR = int(NBR,8)*NCB8
1258 ELSE
1259 CBMAXR = int(NBR,8)*int(min(NCB,NELIMF),8)-
1260 & (int(NBR,8)*int(NBR-1,8))/2_8
1261 CBMAXR = min(CBMAXR, int(NELIMF,8)*int(NELIMF+1,8)/2_8)
1262 CBMAXR = min(CBMAXR, SIZECB)
1263.EQ..AND..NOT. IF ((LEVEL1)( PACKED_CB)) THEN
1264 CBMAXR = min(CBMAXR,(NCB8*(NCB8+1_8))/2_8)
1265 ENDIF
1266 ENDIF
1267 ELSE IF (UPDATEF) THEN
1268 NBR = min(NBROWMAXF,NBROWMAX)
1269 CBMAXR = int(NBR,8) * NCB8
1270.NE. IF (KEEP(50)0) THEN
1271 CBMAXR = CBMAXR - (int(NBR,8)*(int(NBR-1,8)))/2_8
1272 ENDIF
1273 ELSE
1274 CBMAXR = 0_8
1275 ENDIF
1276.EQ. ELSEIF (LEVELF3) THEN
1277 CBMAXR = LEV3MAXREC
1278.AND..NOT..AND..EQ. IF (UPDATE (MASTERLEVEL2)) THEN
1279 CBMAXS = LEV3MAXREC
1280 ELSE
1281 CBMAXS = 0_8
1282 ENDIF
1283 ELSE
1284 IF (MASTERF) THEN
1285 CBMAXS = 0_8
1286 NBR = min(NFRF,NBROWMAX)
1287.EQ..AND. IF ((LEVEL1)UPDATE) THEN
1288 NBR = 0
1289 ENDIF
1290 CBMAXR = int(NBR,8)*int(min(NFRF,NCB),8)
1291.EQ. IF (LEVEL2)
1292 & CBMAXR = min(CBMAXR, SIZECB_SLAVE)
1293.NE. IF ( KEEP(50)0 ) THEN
1294 CBMAXR = min(CBMAXR,(int(NFRF,8)*int(NFRF+1,8))/2_8)
1295 ELSE
1296 CBMAXR = min(CBMAXR,int(NFRF,8)*int(NFRF,8))
1297 ENDIF
1298 ELSE
1299 CBMAXR = 0_8
1300 CBMAXS = SIZECB
1301 ENDIF
1302 ENDIF
1303 IF (UPDATE) THEN
1304 CBMAXS = min(CBMAXS, SIZECB)
1305.not..eq..AND. IF ( ( LEVELF 1 UPDATEF ) )THEN
1306 SBUFS_CB = max(SBUFS_CB, CBMAXS+int(SIZECBI,8))
1307 ENDIF
1308 ENDIF
1309 STACKCB = .FALSE.
1310 IF (UPDATEF) THEN
1311 STACKCB = .TRUE.
1312 SIZECBI = 2 * NCB + SIZEHEADER
1313.EQ. IF (LEVEL1) THEN
1314.NE..AND..NE. IF (KEEP(50)0LEVELF3
1315.AND. & PACKED_CB) THEN
1316 SIZECB = (NCB8*(NCB8+1_8))/2_8
1317 ELSE
1318 SIZECB = NCB8*NCB8
1319 ENDIF
1320 IF (MASTER) THEN
1321 IF (MASTERF) THEN
1322 SIZECBI = 2+ XSIZE_IC
1323 ENDIF
1324.EQ. ELSE IF (LEVELF1) 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)
1330 ENDIF
1331 SIZECBI = 2 * NCB + 9
1332 SBUFR_CB = max(SBUFR_CB, int(SIZECBI,8)+SIZECB)
1333 SIZECBI = 2 * NCB + SIZEHEADER
1334 ELSE
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.NOT. IF ( MASTERF ) THEN
1342 SIZECBI = 0
1343 ELSE
1344 SIZECBI = NCB + SIZEHEADER + SLAVEF - 1
1345 ENDIF
1346 SIZECB = 0_8
1347 SIZECBLR_UD = 0_8
1348 SIZECBLR_WC = 0_8
1349 SIZECB_if_LRCB = 0_8
1350 ENDIF
1351 ELSE
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)
1358.NOT. IF (
1359.AND..NOT..AND..EQ. & (UPDATE(MASTER)(NSLAVES_LOC1))
1360 & )
1361 & SBUFR_CB = max(SBUFR_CB,
1362 & min(CBMAXR,SIZECB) + int(NBROWMAX + NCB + 6,8))
1363 IF (MASTER) THEN
1364 SIZECB = 0_8
1365 SIZECB_SLAVE_if_LRCB = 0_8
1366 SIZECBLR_UD = 0_8
1367 SIZECBLR_WC = 0_8
1368 IF (MASTERF) THEN
1369 SIZECBI = 2 + XSIZE_IC
1370 ELSE
1371 SIZECBI = 0
1372 ENDIF
1373 ELSE IF (UPDATE) THEN
1374 IF (MASTERF) THEN
1375 SIZECBI = NCB + SIZEHEADER + SLAVEF - 1
1376 ELSE
1377 SIZECBI = 0
1378 ENDIF
1379.EQ. IF (KEEP(50)0) THEN
1380 SIZECBI = SIZECBI + NBROWMAX + NFR +
1381 & SIZEHEADER
1382 ELSE
1383 SIZECBI = SIZECBI + NBROWMAX + NFR +
1384 & SIZEHEADER+ NSLAVES_LOC
1385 ENDIF
1386 ELSE
1387 SIZECB = 0_8
1388 IF ( MASTERF ) THEN
1389 SIZECBI = NCB + SIZEHEADER + SLAVEF - 1
1390 ELSE
1391 SIZECBI = 0
1392 ENDIF
1393 SIZECB_SLAVE_if_LRCB = 0_8
1394 SIZECBLR_UD = 0_8
1395 SIZECBLR_WC = 0_8
1396 ENDIF
1397 ENDIF
1398 ELSE
1399.NE. IF (LEVELF3) THEN
1400 STACKCB = .TRUE.
1401 SIZECB = 0_8
1402 SIZECB_SLAVE_if_LRCB = 0_8
1403 SIZECBLR_UD = 0_8
1404 SIZECBLR_WC = 0_8
1405 SIZECBI = 0
1406.EQ..AND..NE. IF ( (LEVEL1) (LEVELF1) ) THEN
1407 IF (PACKED_CB) THEN
1408 SIZECB = (NCB8*(NCB8+1_8))/2_8
1409 ELSE
1410 SIZECB = NCB8*NCB8
1411 ENDIF
1412 SIZECBI = 2 * NCB + SIZEHEADER
1413.EQ. ELSE IF (LEVEL2) THEN
1414 IF (MASTER) THEN
1415 SIZECBI=0
1416 ELSE
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
1422 ENDIF
1423 ENDIF
1424 ENDIF
1425 ENDIF
1426 IF (STACKCB) THEN
1427.EQ. IF (FRERE(STEP(INODE))0) THEN
1429 CALL MUMPS_ABORT()
1430 ENDIF
1431 ITOP = ITOP + 1
1432.GT. IF ( ITOP NSTEPS ) THEN
1434 ENDIF
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+
1443 & MAXITEMPCB +
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 +
1451 & MAXTEMPCB)
1452 NRLNEC_if_LR_LUCB = max(NRLNEC_if_LR_LUCB,
1453 & NRLADU_if_LR_LU+ISTKR_if_LRCB +
1454 & MAXTEMPCB)
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)
1464 ENDIF
1465 ENDIF
1466 TNSTK(STEP(IFATH)) = TNSTK(STEP(IFATH)) - 1
1467.EQ. IF ( TNSTK(STEP(IFATH)) 0 ) THEN
1468 INODE = IFATH
1469 GOTO 95
1470 ELSE
1471 GOTO 90
1472 ENDIF
1473 ENDIF
1474 115 CONTINUE
1475 NRLNEC = max(NRLNEC, NRLADU+int(KEEP(30),8))
1476 NRLNEC_ACTIVE = max(NRLNEC_ACTIVE, MAX_SIZE_FACTOR+
1477 & int(KEEP(30),8))
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
1488 PEAK_LRCB_UD =
1489 & max(PEAK_LRCB_UD,
1490 & NRLNEC_if_LR_CB + NRLNECLR_CB_UD)
1491 PEAK_LRLU_UD =
1492 & max(PEAK_LRLU_UD,
1493 & NRLNEC_if_LR_LU + NRLADULR_UD)
1494 PEAK_OOC_LRLU_UD =
1495 & max(PEAK_OOC_LRLU_UD,
1496 & NRLNEC_ACTIVE + NRLADULR_UD)
1497 PEAK_OOC_LRLU_WC =
1498 & max(PEAK_OOC_LRLU_WC,
1499 & NRLNEC_ACTIVE + NRLADULR_WC)
1500 PEAK_LRLUCB_UD =
1501 & max(PEAK_LRLUCB_UD,
1502 & NRLNEC_if_LR_LUCB + NRLNECLR_LUCB_UD)
1503 PEAK_LRLUCB_WC =
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.EQ. IF (KEEP(60)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
1516 ENDIF
1517 ENDIF
1518 IF (ABOVE_L0) THEN
1519 PEAK_LRCB_UD =
1520 & max(PEAK_LRCB_UD,
1521 & NRLNEC_if_LR_CB + SAVE_SIZECB_UNDER_L0_IF_LRCB)
1522 PEAK_LRCB_UD =
1523 & max(PEAK_LRCB_UD,
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)
1529 PEAK_OOC_LRLU_UD =
1530 & max(PEAK_OOC_LRLU_UD,
1531 & NRLNEC_ACTIVE + SAVE_SIZECB_UNDER_L0)
1532 PEAK_OOC_LRLU_UD =
1533 & max(PEAK_OOC_LRLU_UD,
1534 & NRLNEC_ACTIVE + PEAK_DYN_LRLU_UD)
1535 PEAK_OOC_LRLU_WC =
1536 & max(PEAK_OOC_LRLU_WC,
1537 & NRLNEC_ACTIVE + SAVE_SIZECB_UNDER_L0)
1538 PEAK_OOC_LRLU_WC =
1539 & max(PEAK_OOC_LRLU_WC,
1540 & NRLNEC_ACTIVE + PEAK_DYN_LRLU_WC)
1541 PEAK_LRLUCB_UD =
1542 & max(PEAK_LRLUCB_UD,
1543 & NRLNEC_if_LR_LUCB + SAVE_SIZECB_UNDER_L0_IF_LRCB)
1544 PEAK_LRLUCB_UD =
1545 & max(PEAK_LRLUCB_UD,
1546 & NRLNEC_if_LR_LUCB + PEAK_DYN_LRLUCB_UD)
1547 PEAK_LRLUCB_WC =
1548 & max(PEAK_LRLUCB_WC,
1549 & NRLNEC_if_LR_LUCB + SAVE_SIZECB_UNDER_L0)
1550 PEAK_LRLUCB_WC =
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)
1559 PEAK_OOC_LRLUCB_WC =
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)
1565 ENDIF
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.NE..AND..EQ. IF(KEEP(219)0KEEP(50) 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
1581 ENDIF
1582.EQ. IF (SLAVEF1) THEN
1583 SBUF_RECOLD = 1_8
1584 SBUF_REC_FR = 1
1585 SBUF_REC_LR = 1
1586 SBUF_SEND_FR= 1
1587 SBUF_SEND_LR= 1
1588 ENDIF
1589 DEALLOCATE( LSTKR, TNSTK, LSTKI,
1590 & LSTKR_if_LRCB, LSTKRLR_CB_UD, LSTKRLR_CB_WC
1591 & )
1592 IF (ABOVE_L0) THEN
1593 KEEP(470) = KEEP(470)+ NBNODES_BLR
1594 ELSE
1595 KEEP(470) = NBNODES_BLR
1596 ENDIF
1597.NOT. IF (ABOVE_L0) THEN
1598 PEAK_FR = NRLNEC
1599 PEAK_FR_OOC = NRLNEC_ACTIVE
1600 ENDIF
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 = dble(OPS_SBTR_LOC)
1613 OPSA = dble(OPSA_LOC)
1614 RETURN
subroutine dmumps_ana_distm(myid, n, step, frere, fils, ipool, lipool, ne, dad, nd, procnode, slavef, above_l0, sizecb_under_l0, sizecb_under_l0_if_lrcb, maxfr_under_l0, max_front_surface_local_l0, max_size_factor_l0, entries_in_factors_under_l0, entries_in_factors_masters_lo, cost_subtrees_under_lo, opsa_under_l0, peak_fr, peak_fr_ooc, nrladu, niradu, nirnec, nrlnec, nrlnec_active, nrladu_if_lr_lu, nrlnec_if_lr_lu, nrlnec_if_lr_lucb, nrlnecooc_if_lr_lucb, nrlnec_if_lr_cb, nrladulr_ud, nrladulr_wc, nrlneclr_cb_ud, nrlneclr_lucb_ud, nrlneclr_lucb_wc, peak_lrlu_ud, peak_ooc_lrlu_ud, peak_ooc_lrlu_wc, peak_lrlucb_ud, peak_lrlucb_wc, peak_ooc_lrlucb_ud, peak_ooc_lrlucb_wc, peak_lrcb_ud, peak_ooc_lrcb_ud, niradu_ooc, nirnec_ooc, maxfr, opsa, uu, keep, keep8, local_m, local_n, sbuf_recold, sbuf_send_fr, sbuf_rec_fr, sbuf_send_lr, sbuf_rec_lr, ops_subtree, nsteps, i_am_cand, nmb_par2, istep_to_iniv2, candidates, iflag, ierror, max_front_surface_local, max_size_factor, entries_in_factors_loc, entries_in_factors_loc_masters, root_yes, root_nprow, root_npcol)
integer function dmumps_ooc_get_panel_size(hbuf_size, nnmax, k227, k50)
subroutine mumps_max_surfcb_nbrows(what, keep, keep8, ncb, nfr, slavef, nbrowmax, maxsurfcb8)
subroutine is_front_blr_candidate(inode, niv, nfront, nass, blron, k489, k490, k491, k492, k20, k60, idad, k38, lrstatus, n, lrgroups)