OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cana_dist_m.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14 SUBROUTINE cmumps_ana_distm(MYID, N, STEP, FRERE, FILS, IPOOL,
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
33 & )
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 & MAX_SIZE_FACTOR_L0,
43 & ENTRIES_IN_FACTORS_UNDER_L0,
44 & ENTRIES_IN_FACTORS_MASTERS_LO
45 DOUBLE 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 REAL 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 REAL OPSA
84 DOUBLE PRECISION OPSA_LOC
85 INTEGER(8) MAX_SIZE_FACTOR
86 REAL 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 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
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, NELIM8
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, SIZECBLR_WC
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 CMUMPS_OOC_GET_PANEL_SIZE
152 EXTERNAL cmumps_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
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.0e0))
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 =
321 & max(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
338 IF (mumps_procnode(procnode(step(inode)),keep(199))
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
360 WRITE(myid+6,*) ' ERROR 1 in CMUMPS_ANA_DISTM '
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 IF (in .GT. 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 if(.NOT.force_cand) then
385 update = ( (master.AND.(level.NE.3) ).OR. level.EQ.2 )
386 else
387 if(master.and.(level.ne.3)) then
388 update = .true.
389 else if(level.eq.2) 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 IF (keep(50).EQ.0) THEN
399 sizecb = sizecbinfr
400 ELSE
401 ifath = dad(step(inode))
402 IF ( ifath.NE.keep(38) .AND. 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 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)
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 IF (level.NE.2) THEN
435 nslaves_loc = -99999999
436 sizecb_slave = -99999997_8
437 sizecb_slave_if_lrcb = sizecb_slave
438 nbrowmax = ncb
439 ELSE
440 IF (keep(48) .EQ. 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 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))
472 ENDIF
473 ENDIF
474 IF (level.EQ.3) THEN
475 IF (
476 & keep(60).LE.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 IF (nfr.GT.maxfr) maxfr = nfr
536 ENDIF
537 ENDIF
538 IF(keep(86).EQ.1)THEN
539 IF(master.AND.(.NOT.mumps_in_or_root_ssarbr(
540 & procnode(step(inode)), keep(199)))
541 & )THEN
542 IF(level.EQ.1)THEN
543 max_front_surface_local=max(max_front_surface_local,
544 & nfr8*nfr8)
545 IF (keep(268).NE.0) THEN
546 max_front_surface_local=max(max_front_surface_local,
547 & nfr8*nfr8+nelim8)
548 ENDIF
549 ELSEIF(level.EQ.2)THEN
550 IF(keep(50).EQ.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 IF (keep(219).NE.0.AND.keep(50).EQ.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 IF (level.EQ.2) THEN
565 IF (master) THEN
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)
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 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)
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 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 = cmumps_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)
599 ELSE
600 IF ( keep(459) .GT. 1 .AND. keep(50).NE.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 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
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 ELSEIF (level.EQ.2) 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 IF (keep(50).EQ.0) THEN
634 nrladu_current = int(nfr,8)*int(nelim,8)
635 nbcolfac=nfr
636 ELSE
637 nbcolfac=nelim
638 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 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 = cmumps_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 IF (keep(50).EQ.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 IF (keep(50).EQ.0) THEN
695 sizecbi = 7 + nbrowmax + ncb
696 ELSE
697 sizecbi = 8 + nbrowmax + ncb
698 ENDIF
699 IF (keep(50).NE.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 IF ( keep(50).NE.0 .AND. level.EQ.1 ) THEN
715 current_active_mem = current_active_mem +
716 & int(nelim,8)*int(ncb,8)
717 ENDIF
718 IF ( keep(50).NE.0 .AND. keep(459) .GT. 1 ) THEN
719 current_active_mem = current_active_mem + sizefrnocblu
720 ENDIF
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)
724 ENDIF
725 IF (slavef.EQ.1) 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 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)
747 ENDIF
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)
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 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)
819 nfrs8 = int(nfrs,8)
820 nelims= 0
821 in = ifson
822 DO WHILE (in.GT.0)
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 IF (keep(50).EQ.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
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 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
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 IF (nstk.GT.0) THEN
861 DO 70 k=1,nstk
862 lstk = lstkr(itop)
863 istkr = istkr - lstk
864 IF (k==1 .AND. inssarbr.AND.keep(234).NE.0
865 & .AND.keep(55).EQ.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 IF (itop.LT.0) THEN
880 write(*,*) myid,
881 & ': ERROR 2 in CMUMPS_ANA_DISTM. ITOP = ',itop
882 CALL mumps_abort()
883 ENDIF
884 70 CONTINUE
885 ENDIF
886 ELSE IF (level.NE.3) THEN
887 DO WHILE (ifson.GT.0)
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 if(.NOT.force_cand) then
893 updates =((masterson.AND.(levelson.NE.3)).OR.
894 & levelson.EQ.2)
895 else
896 if(masterson.and.(levelson.ne.3)) then
897 updates = .true.
898 else if(levelson.eq.2) 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 IF (itop.LT.0) THEN
918 write(*,*) myid,
919 & ': ERROR 2 in CMUMPS_ANA_DISTM. ITOP = ',itop
920 CALL mumps_abort()
921 ENDIF
922 ENDIF
923 ifson = frere(step(ifson))
924 END DO
925 ENDIF
926 IF (
927 & ( (inode.NE.keep(20)).OR.(keep(60).EQ.0) )
928 & .AND.
929 & ( (inode.NE.keep(38)).OR.(keep(60).LE.1) )
930 & )
931 & THEN
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)
935 ELSE
936 entries_node_upper_part =
937 & (int(nelim,8)*int(nelim+1,8))/2_8
938 ENDIF
939 IF (keep(50).EQ.2 .AND. level.EQ.3) 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 IF (level.EQ.2) 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 IF (update.OR.level.EQ.3) THEN
966 IF ( level .EQ. 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 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 /
998 & int(nslaves_loc,8)
999 ENDIF
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
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 IF (ifath .EQ. 0) THEN
1013 IF (leaf.GT.1) THEN
1014 GOTO 90
1015 ELSE
1016 GOTO 115
1017 ENDIF
1018 ELSE
1019 nfrf = nd(step(ifath))+keep(253)
1020 IF (dad(step(ifath)).EQ.0) THEN
1021 nelimf = nfrf-keep(253)
1022 IF (above_l0) in=0
1023 ELSE
1024 nelimf = 0
1025 in = ifath
1026 DO WHILE (in.GT.0)
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 & keep(199)).EQ.myid
1035 updatef= .false.
1036 if(.NOT.force_cand) then
1037 updatef= ((masterf.AND.(levelf.NE.3)).OR.levelf.EQ.2)
1038 else
1039 if(masterf.and.(levelf.ne.3)) then
1040 updatef = .true.
1041 else if (levelf.eq.2) 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 concerned = updatef .OR. update
1048 IF (levelf .NE. 2) THEN
1049 nbrowmaxf = -999999
1050 ELSE
1051 IF (keep(48) .EQ. 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 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)
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 IF (update .AND. level.EQ.2 .AND. .NOT. 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 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+
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 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)
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 IF (levelf.EQ.2) THEN
1231 IF (update.AND.(level.NE.2.OR..NOT.master)) THEN
1232 IF(masterf)THEN
1233 nbr = min(nbrowmaxf,nbrowmax)
1234 ELSE
1235 nbr = min(max(nelimf,nbrowmaxf),nbrowmax)
1236 ENDIF
1237 IF (keep(50).EQ.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 IF (level.EQ.1) THEN
1248 IF (.NOT.update) THEN
1249 nbr = min(nelimf, ncb)
1250 ELSE
1251 nbr = 0
1252 ENDIF
1253 ELSE
1254 nbr = min(nelimf, nbrowmax)
1255 ENDIF
1256 IF (keep(50).EQ.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 IF ((level.EQ.1).AND.(.NOT. 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 IF (keep(50).NE.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 ELSEIF (levelf.EQ.3) THEN
1277 cbmaxr = lev3maxrec
1278 IF (update.AND. .NOT. (master.AND.level.EQ.2)) 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 IF ((level.EQ.1).AND.update) THEN
1288 nbr = 0
1289 ENDIF
1290 cbmaxr = int(nbr,8)*int(min(nfrf,ncb),8)
1291 IF (level.EQ.2)
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)
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 IF ( .not. ( levelf .eq. 1 .AND. 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 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
1317 ELSE
1318 sizecb = ncb8*ncb8
1319 ENDIF
1320 IF (master) THEN
1321 IF (masterf) THEN
1322 sizecbi = 2+ xsize_ic
1323 ENDIF
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)
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 IF ( .NOT. 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 IF (.NOT.
1359 & (update.AND.(.NOT.master).AND.(nslaves_loc.EQ.1))
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 IF (keep(50).EQ.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 IF (levelf.NE.3) 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 IF ( (level.EQ.1) .AND. (levelf.NE.1) ) 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 ELSE IF (level.EQ.2) 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 IF (frere(step(inode)).EQ.0) THEN
1428 write(*,*) ' ERROR 3 in CMUMPS_ANA_DISTM'
1429 CALL mumps_abort()
1430 ENDIF
1431 itop = itop + 1
1432 IF ( itop .GT. nsteps ) THEN
1433 WRITE(*,*) 'ERROR 4 in CMUMPS_ANA_DISTM '
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 IF ( tnstk(step(ifath)) .EQ. 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 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
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 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
1581 ENDIF
1582 IF (slavef.EQ.1) 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 IF (.NOT.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 = real(ops_sbtr_loc)
1613 opsa = real(opsa_loc)
1614 RETURN
1615 END SUBROUTINE cmumps_ana_distm
1617 & LPOOL_B_L0_OMP, IPOOL_B_L0_OMP,
1618 & L_VIRT_L0_OMP , VIRT_L0_OMP , VIRT_L0_OMP_MAPPING,
1619 & L_PHYS_L0_OMP , PHYS_L0_OMP , PERM_L0_OMP,
1620 & PTR_LEAFS_L0_OMP,
1621 & KEEP, N, NE, STEP, FRERE, FILS, DAD, ND,
1622 & MYID, PROCNODE,
1623 & I4_L0, NBSTATS_I4, I8_L0, NBSTATS_I8, NBTHREADS,
1624 & SIZECB_UNDER_L0, SIZECB_UNDER_L0_IF_LRCB_UD,
1625 & TNSTK, MAXFR,
1626 & MAX_FRONT_SURFACE_LOCAL, MAX_SIZE_FACTOR,
1627 & ENTRIES_IN_FACTORS_LOC,
1628 & ENTRIES_IN_FACTORS_LOC_MASTERS,
1629 & OPS_SBTR_LOC, OPSA_LOC,
1630 & IFLAG, IERROR )
1631 IMPLICIT NONE
1632 INTEGER, INTENT(IN) :: LPOOL_B_L0_OMP,
1633 & l_virt_l0_omp, l_phys_l0_omp
1634 INTEGER, INTENT(IN) :: IPOOL_B_L0_OMP ( LPOOL_B_L0_OMP )
1635 INTEGER, INTENT(IN) :: VIRT_L0_OMP ( L_VIRT_L0_OMP )
1636 INTEGER, INTENT(IN) :: VIRT_L0_OMP_MAPPING ( L_VIRT_L0_OMP )
1637 INTEGER, INTENT(IN) :: PHYS_L0_OMP ( L_PHYS_L0_OMP )
1638 INTEGER, INTENT(IN) :: PERM_L0_OMP ( L_PHYS_L0_OMP )
1639 INTEGER, INTENT(IN) :: PTR_LEAFS_L0_OMP ( L_PHYS_L0_OMP + 1 )
1640 INTEGER, INTENT(IN) :: N
1641 INTEGER, INTENT(INOUT) :: KEEP(500)
1642 INTEGER, INTENT(IN) :: NE(KEEP(28))
1643 INTEGER, INTENT(IN) :: STEP(N)
1644 INTEGER, INTENT(IN) :: FRERE(KEEP(28))
1645 INTEGER, INTENT(IN) :: FILS(N)
1646 INTEGER, INTENT(IN) :: DAD(KEEP(28)), ND(KEEP(28))
1647 INTEGER, INTENT(IN) :: MYID, PROCNODE(KEEP(28))
1648 INTEGER, INTENT(IN) :: NBSTATS_I4, NBSTATS_I8, NBTHREADS
1649 INTEGER, INTENT(INOUT) :: IFLAG, IERROR
1650 INTEGER, INTENT(OUT) :: TNSTK(KEEP(28))
1651 INTEGER, INTENT(OUT) :: I4_L0 (NBSTATS_I4, NBTHREADS)
1652 INTEGER(8), INTENT(OUT):: I8_L0 (NBSTATS_I8, NBTHREADS)
1653 INTEGER(8), INTENT(OUT):: ENTRIES_IN_FACTORS_LOC,
1654 & ENTRIES_IN_FACTORS_LOC_MASTERS,
1655 & SIZECB_UNDER_L0, SIZECB_UNDER_L0_IF_LRCB_UD
1656 INTEGER, INTENT(OUT) :: MAXFR
1657 INTEGER(8), INTENT(OUT):: MAX_FRONT_SURFACE_LOCAL,
1658 & MAX_SIZE_FACTOR
1659 DOUBLE PRECISION, INTENT(OUT) :: OPS_SBTR_LOC, OPSA_LOC
1660 INTEGER, ALLOCATABLE, DIMENSION(:) :: LSTKI
1661 INTEGER(8), ALLOCATABLE, DIMENSION(:) :: LSTKR
1662 INTEGER(8), ALLOCATABLE, DIMENSION(:) :: LSTKR_if_LRCB,
1663 & LSTKRLR_CB_UD,
1664 & lstkrlr_cb_wc
1665 DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: OPSA_LOC_L0_OMP
1666 INTEGER :: NBNODES_BLR
1667 INTEGER :: ITH
1668 INTEGER :: NSTEPS
1669 INTEGER :: allocok
1670 INTEGER(8):: ISTKR, ISTKR_if_LRCB, ISTKRLR_CB_UD,
1671 & istkrlr_cb_wc
1672 INTEGER :: ISTKI, ISTKI_OOC, ITOP
1673 nsteps = keep(28)
1674 ALLOCATE( lstkr(nsteps), lstki(nsteps) ,
1675 & lstkr_if_lrcb(nsteps), lstkrlr_cb_ud(nsteps),
1676 & lstkrlr_cb_wc(nsteps),
1677 & opsa_loc_l0_omp(nbthreads),
1678 &
1679 & stat=allocok)
1680 IF ( allocok .GT. 0 ) THEN
1681 iflag =-7
1682 ierror = 4*nsteps+nbthreads
1683 RETURN
1684 ENDIF
1685 tnstk = ne
1686 opsa_loc_l0_omp(1:nbthreads) = 0.0d0
1687 ops_sbtr_loc = 0.0d0
1688 opsa_loc = 0.0d0
1689 i4_l0(1:nbstats_i4, 1:nbthreads) = 0
1690 i8_l0(1:nbstats_i8, 1:nbthreads) = 0_8
1691 nbnodes_blr = 0
1692 sizecb_under_l0 = 0_8
1693 sizecb_under_l0_if_lrcb_ud = 0_8
1694 maxfr = 0
1695 max_front_surface_local = 0_8
1696 max_size_factor = 0_8
1697 entries_in_factors_loc = 0_8
1698 entries_in_factors_loc_masters = 0_8
1699 DO ith = 1, nbthreads
1700 istki = 0
1701 istki_ooc = 0
1702 itop = 0
1703 istkr = 0_8
1704 istkr_if_lrcb = 0_8
1705 istkrlr_cb_ud = 0_8
1706 istkrlr_cb_wc = 0_8
1707 istkr = 0_8
1709 & lpool_b_l0_omp, ipool_b_l0_omp,
1710 & l_virt_l0_omp , virt_l0_omp , virt_l0_omp_mapping,
1711 & l_phys_l0_omp , phys_l0_omp , perm_l0_omp,
1712 & ptr_leafs_l0_omp, keep, n, ne, nsteps,
1713 & step, frere, fils, dad, nd, myid, procnode,
1714 & istkr, istki, istki_ooc, istkr_if_lrcb, istkrlr_cb_ud,
1715 & istkrlr_cb_wc, itop,
1716 & lstki, lstkr, lstkr_if_lrcb, lstkrlr_cb_ud, lstkrlr_cb_wc,
1717 & i4_l0(1,ith), i4_l0(2,ith), i4_l0(3,ith), i4_l0(4,ith),
1718 & i8_l0(1,ith), i8_l0(2,ith), i8_l0(3,ith), i8_l0(4,ith),
1719 & i8_l0(5,ith), i8_l0(6,ith), i8_l0(7,ith), i8_l0(8,ith),
1720 & i8_l0(9,ith), i8_l0(10,ith), i8_l0(11,ith), i8_l0(12,ith),
1721 & i8_l0(13,ith), i8_l0(14,ith), i8_l0(15,ith), i8_l0(16,ith),
1722 & i8_l0(17,ith), i8_l0(18,ith), i8_l0(19,ith), i8_l0(20,ith),
1723 & i8_l0(21,ith), i8_l0(22,ith),
1724 & nbnodes_blr, tnstk, maxfr,
1725 & max_front_surface_local, max_size_factor,
1726 & entries_in_factors_loc, entries_in_factors_loc_masters,
1727 & ops_sbtr_loc, opsa_loc_l0_omp(ith), iflag, ierror )
1728 opsa_loc = opsa_loc + opsa_loc_l0_omp(ith)
1729 i8_l0(23,ith) = istkr
1730 sizecb_under_l0 = sizecb_under_l0 + istkr
1731 i8_l0(24,ith) = istkr_if_lrcb + istkrlr_cb_ud
1732 sizecb_under_l0_if_lrcb_ud = sizecb_under_l0_if_lrcb_ud +
1733 & istkr_if_lrcb + istkrlr_cb_ud
1734 ENDDO
1735 keep(470) = nbnodes_blr
1736 DEALLOCATE( lstkr, lstki ,
1737 & lstkr_if_lrcb, lstkrlr_cb_ud,
1738 & lstkrlr_cb_wc,
1739 & opsa_loc_l0_omp)
1740 RETURN
1741 END SUBROUTINE cmumps_ana_distm_underl0omp
1742 SUBROUTINE cmumps_ana_distm_underl0_1thr ( ITHREAD,
1743 & LPOOL_B_L0_OMP, IPOOL_B_L0_OMP,
1744 & L_VIRT_L0_OMP , VIRT_L0_OMP , VIRT_L0_OMP_MAPPING,
1745 & L_PHYS_L0_OMP , PHYS_L0_OMP , PERM_L0_OMP,
1746 & PTR_LEAFS_L0_OMP, KEEP, N, NE, NSTEPS, STEP, FRERE, FILS, DAD,
1747 & ND, MYID, PROCNODE, ISTKR, ISTKI, ISTKI_OOC, ISTKR_if_LRCB,
1748 & ISTKRLR_CB_UD, ISTKRLR_CB_WC, ITOP,
1749 & LSTKI, LSTKR, LSTKR_if_LRCB, LSTKRLR_CB_UD, LSTKRLR_CB_WC,
1750 & NIRADU, NIRNEC, NIRADU_OOC, NIRNEC_OOC, NRLADU, NRLNEC,
1751 & NRLNEC_ACTIVE, NRLADU_if_LR_LU, NRLNEC_if_LR_LU,
1752 & NRLNEC_if_LR_LUCB, NRLNECOOC_if_LR_LUCB, NRLNEC_if_LR_CB,
1753 & NRLADULR_UD, NRLADULR_WC, NRLNECLR_CB_UD,
1754 & NRLNECLR_LUCB_UD, NRLNECLR_LUCB_WC,
1755 & PEAK_LRLU_UD, PEAK_OOC_LRLU_UD, PEAK_OOC_LRLU_WC,
1756 & PEAK_LRLUCB_UD, PEAK_LRLUCB_WC, PEAK_OOC_LRLUCB_UD,
1757 & PEAK_OOC_LRLUCB_WC, PEAK_LRCB_UD, PEAK_OOC_LRCB_UD,
1758 & NBNODES_BLR, TNSTK, MAXFR,
1759 & MAX_FRONT_SURFACE_LOCAL, MAX_SIZE_FACTOR,
1760 & ENTRIES_IN_FACTORS_LOC, ENTRIES_IN_FACTORS_LOC_MASTERS,
1761 & OPS_SBTR_LOC, OPSA_LOC, IFLAG, IERROR )
1763 IMPLICIT NONE
1764 INTEGER, INTENT(IN) :: ITHREAD, LPOOL_B_L0_OMP,
1765 & L_VIRT_L0_OMP, L_PHYS_L0_OMP
1766 INTEGER, INTENT(IN) :: IPOOL_B_L0_OMP ( LPOOL_B_L0_OMP )
1767 INTEGER, INTENT(IN) :: VIRT_L0_OMP ( L_VIRT_L0_OMP )
1768 INTEGER, INTENT(IN) :: VIRT_L0_OMP_MAPPING ( L_VIRT_L0_OMP )
1769 INTEGER, INTENT(IN) :: PHYS_L0_OMP ( L_PHYS_L0_OMP )
1770 INTEGER, INTENT(IN) :: PERM_L0_OMP ( L_PHYS_L0_OMP )
1771 INTEGER, INTENT(IN) :: PTR_LEAFS_L0_OMP ( L_PHYS_L0_OMP + 1 )
1772 INTEGER, INTENT(IN) :: KEEP(500), N, NSTEPS
1773 INTEGER, INTENT(IN) :: NE(NSTEPS)
1774 INTEGER, INTENT(IN) :: STEP(N)
1775 INTEGER, INTENT(IN) :: FRERE(NSTEPS)
1776 INTEGER, INTENT(IN) :: FILS(N)
1777 INTEGER, INTENT(IN) :: DAD(NSTEPS), ND(NSTEPS)
1778 INTEGER, INTENT(IN) :: MYID, PROCNODE(NSTEPS)
1779 DOUBLE PRECISION, INTENT(INOUT) :: OPS_SBTR_LOC
1780 DOUBLE PRECISION, INTENT(OUT) :: OPSA_LOC
1781 INTEGER, INTENT(INOUT) :: NBNODES_BLR
1782 INTEGER, INTENT(INOUT) :: TNSTK(NSTEPS)
1783 INTEGER, INTENT(INOUT) :: IFLAG, IERROR
1784 INTEGER, INTENT(INOUT) :: MAXFR
1785 INTEGER(8), INTENT(INOUT):: MAX_FRONT_SURFACE_LOCAL,
1786 & max_size_factor
1787 INTEGER(8), INTENT(INOUT):: ENTRIES_IN_FACTORS_LOC,
1788 & entries_in_factors_loc_masters
1789 INTEGER(8), INTENT(INOUT) ::
1790 & ISTKR, ISTKR_if_LRCB,
1791 & ISTKRLR_CB_UD, ISTKRLR_CB_WC
1792 INTEGER, INTENT(INOUT) :: ISTKI, ISTKI_OOC, ITOP
1793 INTEGER, INTENT(INOUT) :: LSTKI(NSTEPS)
1794 INTEGER(8), INTENT(INOUT) :: LSTKR(NSTEPS),
1795 & LSTKR_if_LRCB(NSTEPS),
1796 & LSTKRLR_CB_UD(NSTEPS),
1797 & LSTKRLR_CB_WC(NSTEPS)
1798 INTEGER, INTENT(OUT) :: NIRADU, NIRNEC, NIRADU_OOC, NIRNEC_OOC
1799 INTEGER(8), INTENT(OUT):: NRLADU, NRLNEC, NRLNEC_ACTIVE,
1800 & NRLADU_if_LR_LU, NRLNEC_if_LR_LU, NRLNEC_if_LR_LUCB,
1801 & NRLNECOOC_if_LR_LUCB, NRLNEC_if_LR_CB,
1802 & NRLADULR_UD, NRLADULR_WC, NRLNECLR_CB_UD,
1803 & NRLNECLR_LUCB_UD, NRLNECLR_LUCB_WC,
1804 & PEAK_LRLU_UD, PEAK_OOC_LRLU_UD, PEAK_OOC_LRLU_WC,
1805 & PEAK_LRLUCB_UD, PEAK_LRLUCB_WC, PEAK_OOC_LRLUCB_UD,
1806 & PEAK_OOC_LRLUCB_WC, PEAK_LRCB_UD, PEAK_OOC_LRCB_UD
1807 LOGICAL :: INSSARBR
1808 INTEGER :: VIRTUAL_TASK, PHYSICAL_TASK
1809 INTEGER :: LPOOL
1810 INTEGER, ALLOCATABLE, DIMENSION(:) :: POOL
1811 INTEGER :: INODE, IFATH, LEAF, I
1812 INTEGER :: allocok
1813 INTEGER :: SIZEHEADER, SIZEHEADER_OOC, XSIZE_OOC
1814 INTEGER :: EXTRA_PERM_INFO_OOC
1815 LOGICAL :: PACKED_CB
1816 INTEGER(8) :: NRLADU_ROOT_3
1817 INTEGER :: FLAG_L0OMP
1818 parameter(flag_l0omp=-2014)
1819 include 'mumps_headers.h'
1820 IF (keep(50).eq.2) THEN
1821 extra_perm_info_ooc = 1
1822 ELSE IF (keep(50).eq.0) THEN
1823 extra_perm_info_ooc = 2
1824 ELSE
1825 extra_perm_info_ooc = 0
1826 ENDIF
1827 packed_cb=( keep(215).EQ.0 .AND. keep(50).NE.0 )
1828 nrladu_root_3 = 0_8
1829#if defined(OLD_OOC_NOPANEL)
1830 xsize_ooc=xsize_ooc_nopanel
1831#else
1832 IF (keep(50).EQ.0) THEN
1833 xsize_ooc=xsize_ooc_unsym
1834 ELSE
1835 xsize_ooc=xsize_ooc_sym
1836 ENDIF
1837#endif
1838 sizeheader_ooc = xsize_ooc+6
1839 sizeheader = xsize_ic + 6
1840 DO virtual_task = 1, l_virt_l0_omp - 1
1841 IF (virt_l0_omp_mapping(virtual_task) .EQ. ithread) THEN
1842 DO physical_task=
1843 & virt_l0_omp( virtual_task ),
1844 & virt_l0_omp( virtual_task + 1 ) - 1
1845 lpool = ptr_leafs_l0_omp( perm_l0_omp(physical_task) )
1846 & - ptr_leafs_l0_omp( perm_l0_omp(physical_task) + 1)
1847 ALLOCATE(pool(lpool), stat=allocok)
1848 IF (allocok .GT. 0) THEN
1849 WRITE(*,*) " Error alloc POOL CMUMPS_ANA_DISTM_UNDERL0OMP"
1850 iflag =-7
1851 ierror = nsteps
1852 RETURN
1853 ENDIF
1854 leaf = 0
1855 DO i = ptr_leafs_l0_omp( perm_l0_omp( physical_task )+1 )
1856 & + 1,
1857 & ptr_leafs_l0_omp( perm_l0_omp( physical_task ) )
1858 IF ( ipool_b_l0_omp( i ) .GT. 0 ) THEN
1859 leaf = leaf + 1
1860 pool( leaf ) = ipool_b_l0_omp( i )
1861 ENDIF
1862 ENDDO
1863 DO WHILE (leaf .NE. 0)
1864 inode = pool( leaf )
1865 leaf = leaf - 1
1866 10 CONTINUE
1867 ifath = dad(step(inode))
1869 IF (ifath .NE. 0) THEN
1870 tnstk( step(ifath) ) = tnstk( step(ifath) ) - 1
1871 ENDIF
1872 IF ( phys_l0_omp( perm_l0_omp ( physical_task ) )
1873 & .EQ. inode ) THEN
1874 IF (leaf .NE. 0) THEN
1875 WRITE(*,*) " Internal error ANA_DIST UNDERL0"
1876 CALL mumps_abort()
1877 ENDIF
1878 tnstk(step(inode)) = flag_l0omp
1879 ELSE IF ( tnstk( step(ifath) ) .EQ. 0 ) THEN
1880 inode = ifath
1881 GOTO 10
1882 ENDIF
1883 ENDDO
1884 DEALLOCATE(pool)
1885 ENDDO
1886 ENDIF
1887 ENDDO
1888 RETURN
1889 CONTAINS
1891 IMPLICIT NONE
1892 INTEGER :: LRSTATUS, IDUMMY
1893 LOGICAL :: COMPRESS_PANEL, COMPRESS_CB
1894 INTEGER :: STKI
1895 INTEGER(8) :: LSTK
1896 INTEGER :: K, NFR, NFRF, NELIM, NELIMF, NCB, NCBF, NSTK,
1897 & level, levelf, in, ifson,
1898 & maxitempcb, panel_size, sizecbi
1899 INTEGER(8):: NFR8, NELIM8, NCB8,
1900 & k464_8, k465_8,
1901 & current_active_mem,
1902 & entries_node_lower_part, entries_node_upper_part,
1903 & nrladu_current, nrladu_current_missing
1904 INTEGER(8) :: SIZEFRNOCBLU
1905 INTEGER :: IDUMMY_ARRAY(1)
1906 INTEGER(8):: SIZECB, SIZECBINFR
1907 INTEGER(8):: SIZECB_if_LRCB
1908 INTEGER(8):: SIZECBLR_UD, SIZECBLR_WC
1909 LOGICAL :: MASTER, MASTERF, STACKCB
1910 DOUBLE PRECISION :: OPS_NODE, OPS_NODE_MASTER, OPS_NODE_SLAVE
1911 INTRINSIC int
1912 INTEGER CMUMPS_OOC_GET_PANEL_SIZE
1913 EXTERNAL cmumps_ooc_get_panel_size
1914 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE
1915 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
1917 EXTERNAL mumps_procnode, mumps_typenode,
1918 & mumps_in_or_root_ssarbr
1919 maxitempcb = 0
1920 stackcb = .true.
1921 nfr = nd(step(inode))+keep(253)
1922 nfr8 = int(nfr,8)
1923 nstk = ne(step(inode))
1924 nelim = 0
1925 in = inode
1926 100 nelim = nelim + 1
1927 nelim8=int(nelim,8)
1928 in = fils(in)
1929 IF (in .GT. 0 ) GOTO 100
1930 ifson = -in
1931 ifath = dad(step(inode))
1932 master = mumps_procnode(procnode(step(inode)),keep(199))
1933 & .EQ. myid
1934 level = mumps_typenode(procnode(step(inode)),keep(199))
1935 inssarbr = mumps_in_or_root_ssarbr(procnode(step(inode)),
1936 & keep(199))
1937 idummy_array(1) = 0
1938 ncb = nfr-nelim
1939 ncb8 = int(ncb,8)
1940 sizecbinfr = ncb8*ncb8
1941 IF (keep(50).EQ.0) THEN
1942 sizecb = sizecbinfr
1943 ELSE
1944 IF ( packed_cb ) THEN
1945 sizecb = (ncb8*(ncb8+1_8))/2_8
1946 ELSE
1947 sizecb = sizecbinfr
1948 ENDIF
1949 ENDIF
1950 idummy = -99999
1951 CALL is_front_blr_candidate (inode, level, nfr, nelim,
1952 & keep(494), 1, keep(490),
1953 & keep(491), keep(492),
1954 & keep(20), keep(60), dad(step(inode)), keep(38),
1955 & lrstatus, idummy)
1956 compress_panel = (lrstatus.GE.2)
1957 compress_cb = ((lrstatus.EQ.1).OR.(lrstatus.EQ.3))
1958 IF (compress_panel.OR.compress_cb) nbnodes_blr = nbnodes_blr+1
1959 IF (compress_panel) THEN
1960 k464_8 = int(keep(464),8)
1961 ELSE
1962 k464_8 = 1000_8
1963 ENDIF
1964 IF (compress_cb) THEN
1965 k465_8 = int(keep(465),8)
1966 sizecb_if_lrcb = 0_8
1967 sizecblr_ud = sizecb*k465_8/1000_8
1968 sizecblr_wc = sizecb
1969 ELSE
1970 k465_8 = 1000_8
1971 sizecblr_ud = 0_8
1972 sizecblr_wc = 0_8
1973 sizecb_if_lrcb = sizecb
1974 ENDIF
1975 sizecbi = 2* ncb + sizeheader
1976 IF(keep(86).EQ.1)THEN
1977 IF(master.AND.(.NOT.mumps_in_or_root_ssarbr(
1978 & procnode(step(inode)), keep(199)))
1979 & )THEN
1980 max_front_surface_local=max(max_front_surface_local,
1981 & nfr8*nfr8)
1982 ENDIF
1983 ENDIF
1984 niradu = niradu + 2*nfr + sizeheader
1985 niradu_ooc = niradu_ooc + 2*nfr + sizeheader_ooc
1986 panel_size = cmumps_ooc_get_panel_size(
1987 & 2_8*int(keep(226),8), nfr, keep(227), keep(50))
1988 niradu_ooc = niradu_ooc +
1989 & extra_perm_info_ooc*(2+nelim + nelim/panel_size+1)
1990 IF (keep(50).EQ.0) THEN
1991 nrladu_current = int(nelim,8)*int(2*nfr-nelim,8)
1992 nrladu = nrladu + nrladu_current
1993 max_size_factor=max(max_size_factor,nrladu_current)
1994 ELSE
1995 IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 ) THEN
1996 CALL mumps_ldltpanel_storage( nelim, keep,
1997 & idummy_array(1), nrladu_current )
1998 sizefrnocblu = int(nelim,8)*int(nelim,8) -
1999 & nrladu_current
2000 nrladu_current = nrladu_current +
2001 & int(nelim,8) * int(nfr-nelim,8)
2002 ELSE
2003 nrladu_current = int(nelim,8)*int(nfr,8)
2004 ENDIF
2005 nrladu = nrladu + nrladu_current
2006 max_size_factor=max(max_size_factor,nrladu_current)
2007 ENDIF
2008 IF (compress_panel) THEN
2009 nrladu_if_lr_lu = nrladu_if_lr_lu + 0_8
2010 nrladu_current_missing = nrladu_current
2011 nrladulr_ud = nrladulr_ud +
2012 & nrladu_current*k464_8/1000_8
2013 nrladulr_wc = nrladulr_wc +
2014 & nrladu_current
2015 ELSE
2016 nrladu_if_lr_lu = nrladu_if_lr_lu + nrladu_current
2017 nrladu_current_missing = 0_8
2018 ENDIF
2019 sizecbi = 2* ncb + sizeheader
2020 nirnec = max0(nirnec,
2021 & niradu+istki+sizecbi+maxitempcb)
2022 nirnec_ooc = max0(nirnec_ooc,
2023 & niradu_ooc+istki_ooc+sizecbi+maxitempcb +
2024 & (xsize_ooc-xsize_ic) )
2025 current_active_mem = istkr+sizecbinfr
2026 IF ( keep(50).NE.0 .AND. level.EQ.1 ) THEN
2027 current_active_mem = current_active_mem +
2028 & int(nelim,8)*int(ncb,8)
2029 ENDIF
2030 IF ( keep(50).NE.0 .AND. keep(459) .GT. 1 ) THEN
2031 current_active_mem = current_active_mem + sizefrnocblu
2032 ENDIF
2033 nrlnec_if_lr_cb =
2034 & max(nrlnec_if_lr_cb ,nrladu+
2035 & current_active_mem-istkr+istkr_if_lrcb)
2036 nrlnec_if_lr_lucb =
2037 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
2038 & current_active_mem-istkr+istkr_if_lrcb+
2039 & nrladu_current_missing)
2040 IF (nstk .NE. 0 .AND. inssarbr .AND.
2041 & keep(234).NE.0 .AND. keep(55).EQ.0) THEN
2042 current_active_mem = current_active_mem - lstkr(itop)
2043 ENDIF
2044 nrlnec = max(nrlnec,nrladu+current_active_mem)
2045 nrlnec_active = max(nrlnec_active,nrladu_current+
2046 & nrladu_root_3+current_active_mem)
2047 nrlnec_if_lr_lu =
2048 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
2049 & current_active_mem+nrladu_current_missing)
2050 nrlnecooc_if_lr_lucb =
2051 & max(nrlnecooc_if_lr_lucb,
2052 & nrladu_current+nrladu_root_3+
2053 & current_active_mem-istkr+istkr_if_lrcb)
2054 nrlneclr_lucb_ud = max(nrlneclr_lucb_ud,
2055 & nrladulr_ud+istkrlr_cb_ud)
2056 nrlneclr_lucb_wc = max(nrlneclr_lucb_wc,
2057 & nrladulr_wc+istkrlr_cb_wc)
2058 peak_lrlu_ud =
2059 & max(peak_lrlu_ud,
2060 & nrlnec_if_lr_lu + nrladulr_ud)
2061 peak_ooc_lrlu_ud =
2062 & max(peak_ooc_lrlu_ud,
2063 & nrlnec_active + nrladulr_ud)
2064 peak_ooc_lrlu_wc =
2065 & max(peak_ooc_lrlu_wc,
2066 & nrlnec_active + nrladulr_wc)
2067 peak_lrlucb_ud =
2068 & max(peak_lrlucb_ud,
2069 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
2070 peak_lrlucb_wc =
2071 & max(peak_lrlucb_wc,
2072 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
2073 peak_ooc_lrlucb_ud =
2074 & max(peak_ooc_lrlucb_ud,
2075 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
2076 peak_ooc_lrlucb_wc =
2077 & max(peak_ooc_lrlucb_wc,
2078 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
2079 peak_lrcb_ud =
2080 & max(peak_lrcb_ud,
2081 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
2082 peak_ooc_lrcb_ud =
2083 & max(peak_ooc_lrcb_ud,
2084 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
2085 IF (nfr.GT.maxfr) maxfr = nfr
2086 IF (nstk.GT.0) THEN
2087 DO 70 k=1,nstk
2088 lstk = lstkr(itop)
2089 istkr = istkr - lstk
2090 IF (k==1 .AND. inssarbr.AND.keep(234).NE.0
2091 & .AND.keep(55).EQ.0) THEN
2092 ELSE
2093 current_active_mem = current_active_mem - lstk
2094 ENDIF
2095 lstk = lstkr_if_lrcb(itop)
2096 istkr_if_lrcb = istkr_if_lrcb - lstk
2097 lstk = lstkrlr_cb_ud(itop)
2098 istkrlr_cb_ud = istkrlr_cb_ud - lstk
2099 lstk = lstkrlr_cb_wc(itop)
2100 istkrlr_cb_wc = istkrlr_cb_wc - lstk
2101 stki = lstki( itop )
2102 istki = istki - stki
2103 istki_ooc = istki_ooc - stki - (xsize_ooc-xsize_ic)
2104 itop = itop - 1
2105 IF (itop.LT.0) THEN
2106 write(*,*) myid,
2107 & ': ERROR 2 in CMUMPS_ANA_DISTM. ITOP = ',itop
2108 CALL mumps_abort()
2109 ENDIF
2110 70 CONTINUE
2111 ENDIF
2112 IF (
2113 & ( (inode.NE.keep(20)).OR.(keep(60).EQ.0) )
2114 & .AND.
2115 & ( (inode.NE.keep(38)).OR.(keep(60).LE.1) )
2116 & )
2117 & THEN
2118 entries_node_lower_part = int(nfr-nelim,8) * int(nelim,8)
2119 IF ( keep(50).EQ.0 ) THEN
2120 entries_node_upper_part = int(nfr,8) * int(nelim,8)
2121 ELSE
2122 entries_node_upper_part =
2123 & (int(nelim,8)*int(nelim+1,8))/2_8
2124 ENDIF
2125 IF (keep(50).EQ.2 .AND. level.EQ.3) THEN
2126 CALL mumps_get_flops_cost(nfr,
2127 & nelim, nelim, 0,
2128 & 1,ops_node)
2129 ELSE
2130 CALL mumps_get_flops_cost(nfr,
2131 & nelim, nelim,keep(50),
2132 & 1,ops_node)
2133 ENDIF
2134 IF (level.EQ.2) THEN
2135 CALL mumps_get_flops_cost(nfr,
2136 & nelim, nelim,keep(50),
2137 & 2,ops_node_master)
2138 ops_node_slave=ops_node-ops_node_master
2139 ENDIF
2140 ELSE
2141 ops_node = 0.0d0
2142 entries_node_upper_part = 0_8
2143 entries_node_lower_part = 0_8
2144 ENDIF
2145 entries_in_factors_loc_masters =
2146 & entries_in_factors_loc_masters +
2147 & entries_node_upper_part +
2148 & entries_node_lower_part
2149 entries_in_factors_loc = entries_in_factors_loc_masters
2150 opsa_loc = opsa_loc + dble(ops_node)
2151 IF (mumps_in_or_root_ssarbr(procnode(step(inode)),
2152 & keep(199)) .OR. ne(step(inode))==0) THEN
2153 ops_sbtr_loc = ops_sbtr_loc + ops_node
2154 ENDIF
2155 IF (ifath .EQ. 0) THEN
2156 RETURN
2157 ELSE
2158 nfrf = nd(step(ifath))+keep(253)
2159 IF (dad(step(ifath)).EQ.0) THEN
2160 nelimf = nfrf
2161 ELSE
2162 nelimf = 0
2163 in = ifath
2164 DO WHILE (in.GT.0)
2165 in = fils(in)
2166 nelimf = nelimf+1
2167 ENDDO
2168 ENDIF
2169 ncbf = nfrf - nelimf
2170 levelf = mumps_typenode(procnode(step(ifath)),keep(199))
2171 masterf= mumps_procnode(procnode(step(ifath)),
2172 & keep(199)).EQ.myid
2173 IF ( inssarbr .AND. keep(234).NE.0) THEN
2174 nrlnec_active = max(nrlnec_active,nrladu_current+
2175 & nrladu_root_3+current_active_mem)
2176 nrlnec = max(nrlnec,nrladu+current_active_mem)
2177 nrlnec_if_lr_lu =
2178 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
2179 & current_active_mem+
2180 & nrladu_current_missing)
2181 nrlnec_if_lr_cb =
2182 & max(nrlnec_if_lr_cb ,nrladu+
2183 & current_active_mem-istkr+istkr_if_lrcb)
2184 nrlnec_if_lr_lucb =
2185 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
2186 & current_active_mem-istkr+istkr_if_lrcb+
2187 & nrladu_current_missing)
2188 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
2189 & nrladu_current+nrladu_root_3+
2190 & current_active_mem-istkr+istkr_if_lrcb)
2191 ELSE
2192 nrlnec = max(nrlnec,nrladu+current_active_mem+sizecb)
2193 nrlnec_active = max(nrlnec_active,nrladu_current+
2194 & nrladu_root_3+current_active_mem+sizecb)
2195 nrlnec_if_lr_lu =
2196 & max(nrlnec_if_lr_lu,nrladu_if_lr_lu+
2197 & current_active_mem+sizecb+
2198 & nrladu_current_missing)
2199 nrlnec_if_lr_cb =
2200 & max(nrlnec_if_lr_cb ,nrladu+
2201 & current_active_mem-istkr+
2202 & istkr_if_lrcb+ sizecb)
2203 nrlnec_if_lr_lucb =
2204 & max(nrlnec_if_lr_lucb,nrladu_if_lr_lu+
2205 & current_active_mem-istkr+
2206 & istkr_if_lrcb+ sizecb+
2207 & nrladu_current_missing)
2208 nrlnecooc_if_lr_lucb = max(nrlnecooc_if_lr_lucb,
2209 & nrladu_current+nrladu_root_3+
2210 & current_active_mem-istkr+
2211 & istkr_if_lrcb+ sizecb)
2212 ENDIF
2213 peak_lrlu_ud =
2214 & max(peak_lrlu_ud,
2215 & nrlnec_if_lr_lu + nrladulr_ud)
2216 peak_ooc_lrlu_ud =
2217 & max(peak_ooc_lrlu_ud,
2218 & nrlnec_active + nrladulr_ud)
2219 peak_ooc_lrlu_wc =
2220 & max(peak_ooc_lrlu_wc,
2221 & nrlnec_active + nrladulr_wc)
2222 peak_lrlucb_ud =
2223 & max(peak_lrlucb_ud,
2224 & nrlnec_if_lr_lucb + nrlneclr_lucb_ud)
2225 peak_lrlucb_wc =
2226 & max(peak_lrlucb_wc,
2227 & nrlnec_if_lr_lucb + nrlneclr_lucb_wc)
2228 peak_ooc_lrlucb_ud =
2229 & max(peak_ooc_lrlucb_ud,
2230 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_ud)
2231 peak_ooc_lrlucb_wc =
2232 & max(peak_ooc_lrlucb_wc,
2233 & nrlnecooc_if_lr_lucb + nrlneclr_lucb_wc)
2234 peak_lrcb_ud =
2235 & max(peak_lrcb_ud,
2236 & nrlnec_if_lr_cb + nrlneclr_cb_ud)
2237 peak_ooc_lrcb_ud =
2238 & max(peak_ooc_lrcb_ud,
2239 & nrlnecooc_if_lr_lucb + nrlneclr_cb_ud)
2240 IF (keep(50).NE.0.AND.levelf.NE.3
2241 & .AND.packed_cb) THEN
2242 sizecb = (ncb8*(ncb8+1_8))/2_8
2243 ELSE
2244 sizecb = ncb8*ncb8
2245 ENDIF
2246 sizecbi = 2+ xsize_ic
2247 IF (stackcb) THEN
2248 IF (frere(step(inode)).EQ.0) THEN
2249 write(*,*) ' ERROR 3 in CMUMPS_ANA_DISTM'
2250 CALL mumps_abort()
2251 ENDIF
2252 itop = itop + 1
2253 IF ( itop .GT. nsteps ) THEN
2254 WRITE(*,*) 'ERROR 4 in CMUMPS_ANA_DISTM '
2255 CALL mumps_abort()
2256 ENDIF
2257 lstki(itop) = sizecbi
2258 istki=istki + sizecbi
2259 istki_ooc = istki_ooc + sizecbi + (xsize_ooc-xsize_ic)
2260 lstkr(itop) = sizecb
2261 istkr = istkr + lstkr(itop)
2262 nrlnec = max(nrlnec,nrladu+istkr)
2263 nirnec = max0(nirnec,niradu+istki)
2264 nirnec_ooc = max0(nirnec_ooc,niradu_ooc+istki_ooc)
2265 nrlnec_if_lr_lu = max(nrlnec_if_lr_lu,
2266 & nrladu_if_lr_lu+istkr)
2267 lstkr_if_lrcb(itop) = sizecb_if_lrcb
2268 istkr_if_lrcb = istkr_if_lrcb + lstkr_if_lrcb(itop)
2269 lstkrlr_cb_ud(itop) = sizecblr_ud
2270 istkrlr_cb_ud = istkrlr_cb_ud + lstkrlr_cb_ud(itop)
2271 lstkrlr_cb_wc(itop) = sizecblr_wc
2272 istkrlr_cb_wc = istkrlr_cb_wc + lstkrlr_cb_wc(itop)
2273 nrlneclr_cb_ud = max(nrlneclr_cb_ud, istkrlr_cb_ud)
2274 nrlneclr_lucb_ud = max(nrlneclr_lucb_ud,
2275 & nrladulr_ud+istkrlr_cb_ud)
2276 nrlneclr_lucb_wc = max(nrlneclr_lucb_wc,
2277 & nrladulr_wc+istkrlr_cb_wc)
2278 ENDIF
2279 ENDIF
2280 END SUBROUTINE cmumps_process_node_underl0
2281 END SUBROUTINE cmumps_ana_distm_underl0_1thr
2283 & N, SLAVEF, COMM, MYID,
2284 & STEP, DAD, ICNTL, LP, LPOK, INFO,
2285 & PHYS_L0_OMP, L_PHYS_L0_OMP,
2286 & IPOOL_A_L0_OMP, LPOOL_A_L0_OMP,
2287 & KEEP, TNSTK_afterL0,
2288 & FLAGGED_LEAVES
2289 & )
2290 IMPLICIT NONE
2291 include 'mpif.h'
2292 include 'mumps_tags.h'
2293 INTEGER, INTENT(IN) :: N, SLAVEF, COMM, MYID, ICNTL(60),
2294 & LP
2295 LOGICAL, INTENT(IN) :: LPOK
2296 INTEGER, INTENT(IN) :: L_PHYS_L0_OMP, LPOOL_A_L0_OMP
2297 INTEGER, INTENT(IN) :: PHYS_L0_OMP(max(1,L_PHYS_L0_OMP)),
2298 & IPOOL_A_L0_OMP(max(1,LPOOL_A_L0_OMP))
2299 INTEGER, INTENT(IN) :: KEEP(500)
2300 INTEGER, INTENT(IN) :: STEP(N), DAD(KEEP(28))
2301 INTEGER, INTENT(OUT) :: FLAGGED_LEAVES(KEEP(28))
2302 INTEGER, INTENT(INOUT) :: TNSTK_afterL0(KEEP(28)), INFO(80)
2303 INTEGER :: ISLAVE, IERR, INODE, I, NSTEPS, allocok
2304 INTEGER :: SIZE_BUFREC, Itemp, SIZE_RECEIVED
2305 INTEGER, ALLOCATABLE, DIMENSION(:) :: BUFREC
2306 INTEGER, ALLOCATABLE, DIMENSION(:) :: IREQ
2307 INTEGER :: MPI_STATUS(MPI_STATUS_SIZE)
2308 size_bufrec = 0
2309 CALL mpi_allreduce(l_phys_l0_omp, itemp, 1,
2310 & mpi_integer, mpi_max, comm, ierr)
2311 size_bufrec = itemp
2312 CALL mpi_allreduce(lpool_a_l0_omp, itemp, 1,
2313 & mpi_integer, mpi_max, comm, ierr)
2314 size_bufrec= max(size_bufrec, itemp)
2315 ALLOCATE(ireq(slavef), bufrec(size_bufrec), stat=allocok)
2316 IF (allocok.GT.0) THEN
2317 IF ( lpok ) THEN
2318 WRITE(lp, '(A)')
2319 & ' Allocation failed in CMUMPS_PREP_ANA_DISTM_ABOVEL0'
2320 END IF
2321 info(1)= -7
2322 info(2)= slavef+size_bufrec
2323 ENDIF
2324 CALL mumps_propinfo( icntl(1), info(1),
2325 & comm, myid )
2326 IF ( info(1) .LT. 0 ) RETURN
2327 nsteps = keep(28)
2328 DO i=1, nsteps
2329 flagged_leaves(i) = 0
2330 ENDDO
2331 DO islave=1, slavef
2332 IF (myid.EQ.islave-1) cycle
2333 CALL mpi_isend( ipool_a_l0_omp, lpool_a_l0_omp,
2334 & mpi_integer, islave - 1, f_ipoolafter, comm,
2335 & ireq( islave ), ierr )
2336 ENDDO
2337 DO islave=1, slavef
2338 IF (myid.EQ.islave-1) cycle
2339 CALL mpi_recv( bufrec(1), size_bufrec,
2340 & mpi_integer, islave-1,
2341 & f_ipoolafter, comm, mpi_status, ierr )
2342 CALL mpi_get_count(mpi_status, mpi_integer,
2343 & size_received, ierr)
2344 DO i=1,size_received
2345 inode = bufrec(i)
2346 flagged_leaves(step(inode))=inode
2347 ENDDO
2348 ENDDO
2349 IF (lpool_a_l0_omp.GT.0) THEN
2350 DO i=1, lpool_a_l0_omp
2351 inode = ipool_a_l0_omp(i)
2352 flagged_leaves(step(inode))=inode
2353 ENDDO
2354 ENDIF
2355 DO islave=1, slavef
2356 IF (myid.EQ.islave-1) cycle
2357 CALL mpi_wait( ireq( islave ), mpi_status, ierr )
2358 ENDDO
2359 DO islave=1, slavef
2360 IF (myid.EQ.islave-1) cycle
2361 CALL mpi_isend(phys_l0_omp, l_phys_l0_omp,
2362 & mpi_integer, islave - 1, f_phys_l0, comm,
2363 & ireq( islave ), ierr )
2364 ENDDO
2365 DO islave=1, slavef
2366 IF (myid.EQ.islave-1) cycle
2367 CALL mpi_recv( bufrec(1), size_bufrec,
2368 & mpi_integer, islave-1,
2369 & f_phys_l0, comm, mpi_status, ierr )
2370 CALL mpi_get_count(mpi_status, mpi_integer,
2371 & size_received, ierr)
2372 DO i=1,size_received
2373 inode = bufrec(i)
2374 IF (dad(step(inode)).NE.0) THEN
2375 tnstk_afterl0(step(dad(step(inode))))
2376 & = tnstk_afterl0(step(dad(step(inode)))) - 1
2377 ENDIF
2378 ENDDO
2379 ENDDO
2380 DO islave=1, slavef
2381 IF (myid.EQ.islave-1) cycle
2382 CALL mpi_wait( ireq( islave ), mpi_status, ierr )
2383 ENDDO
2384 IF (allocated(ireq)) DEALLOCATE(ireq)
2385 IF (allocated(bufrec)) DEALLOCATE(bufrec)
2386 RETURN
2387 END SUBROUTINE cmumps_prep_ana_distm_abovel0
#define mumps_abort
Definition VE_Metis.h:25
subroutine mumps_propinfo(icntl, info, comm, id)
subroutine cmumps_prep_ana_distm_abovel0(n, slavef, comm, myid, step, dad, icntl, lp, lpok, info, phys_l0_omp, l_phys_l0_omp, ipool_a_l0_omp, lpool_a_l0_omp, keep, tnstk_afterl0, flagged_leaves)
subroutine cmumps_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)
Definition cana_dist_m.F:34
subroutine cmumps_ana_distm_underl0omp(lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, keep, n, ne, step, frere, fils, dad, nd, myid, procnode, i4_l0, nbstats_i4, i8_l0, nbstats_i8, nbthreads, sizecb_under_l0, sizecb_under_l0_if_lrcb_ud, tnstk, maxfr, max_front_surface_local, max_size_factor, entries_in_factors_loc, entries_in_factors_loc_masters, ops_sbtr_loc, opsa_loc, iflag, ierror)
subroutine cmumps_ana_distm_underl0_1thr(ithread, lpool_b_l0_omp, ipool_b_l0_omp, l_virt_l0_omp, virt_l0_omp, virt_l0_omp_mapping, l_phys_l0_omp, phys_l0_omp, perm_l0_omp, ptr_leafs_l0_omp, keep, n, ne, nsteps, step, frere, fils, dad, nd, myid, procnode, istkr, istki, istki_ooc, istkr_if_lrcb, istkrlr_cb_ud, istkrlr_cb_wc, itop, lstki, lstkr, lstkr_if_lrcb, lstkrlr_cb_ud, lstkrlr_cb_wc, niradu, nirnec, niradu_ooc, nirnec_ooc, nrladu, 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, nbnodes_blr, tnstk, maxfr, max_front_surface_local, max_size_factor, entries_in_factors_loc, entries_in_factors_loc_masters, ops_sbtr_loc, opsa_loc, iflag, ierror)
subroutine cmumps_process_node_underl0
subroutine mumps_get_flops_cost(nfront, npiv, nass, keep50, level, cost)
Definition estim_flops.F:74
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
Definition mpi.f:461
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
Definition mpi.f:382
subroutine mpi_wait(ireq, status, ierr)
Definition mpi.f:525
subroutine mpi_get_count(status, datatype, cnt, ierr)
Definition mpi.f:296
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
Definition mpi.f:103
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)
Definition clr_core.F:45
subroutine mumps_ldltpanel_storage(npiv, keep, iw, nb_entries)