OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
dana_dist_m.F File Reference

Go to the source code of this file.

Functions/Subroutines

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)
subroutine dmumps_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 dmumps_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 dmumps_process_node_underl0
subroutine dmumps_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)

Function/Subroutine Documentation

◆ dmumps_ana_distm()

subroutine dmumps_ana_distm ( integer, intent(in) myid,
integer, intent(in) n,
integer, dimension(n) step,
integer, dimension(nsteps) frere,
integer, dimension(n) fils,
integer, dimension(max(lipool,1)) ipool,
integer, intent(in) lipool,
integer, dimension(nsteps) ne,
integer, dimension(nsteps) dad,
integer, dimension(nsteps) nd,
integer, dimension(nsteps) procnode,
integer slavef,
logical, intent(in) above_l0,
integer(8), intent(inout) sizecb_under_l0,
integer(8), intent(inout) sizecb_under_l0_if_lrcb,
integer, intent(in) maxfr_under_l0,
integer(8), intent(in) max_front_surface_local_l0,
integer(8), intent(in) max_size_factor_l0,
integer(8), intent(in) entries_in_factors_under_l0,
integer(8), intent(in) entries_in_factors_masters_lo,
double precision, intent(in) cost_subtrees_under_lo,
double precision, intent(in) opsa_under_l0,
integer(8), intent(out) peak_fr,
integer(8), intent(out) peak_fr_ooc,
integer(8) nrladu,
integer niradu,
integer nirnec,
integer(8) nrlnec,
integer(8) nrlnec_active,
integer(8), intent(out) nrladu_if_lr_lu,
integer(8), intent(out) nrlnec_if_lr_lu,
integer(8), intent(out) nrlnec_if_lr_lucb,
integer(8), intent(out) nrlnecooc_if_lr_lucb,
integer(8), intent(out) nrlnec_if_lr_cb,
integer(8), intent(out) nrladulr_ud,
integer(8), intent(out) nrladulr_wc,
integer(8), intent(out) nrlneclr_cb_ud,
integer(8), intent(out) nrlneclr_lucb_ud,
integer(8), intent(out) nrlneclr_lucb_wc,
integer(8), intent(out) peak_lrlu_ud,
integer(8), intent(out) peak_ooc_lrlu_ud,
integer(8), intent(out) peak_ooc_lrlu_wc,
integer(8), intent(out) peak_lrlucb_ud,
integer(8), intent(out) peak_lrlucb_wc,
integer(8), intent(out) peak_ooc_lrlucb_ud,
integer(8), intent(out) peak_ooc_lrlucb_wc,
integer(8), intent(out) peak_lrcb_ud,
integer(8), intent(out) peak_ooc_lrcb_ud,
integer niradu_ooc,
integer nirnec_ooc,
integer maxfr,
double precision opsa,
double precision uu,
integer, dimension(500) keep,
integer(8), dimension(150) keep8,
integer local_m,
integer local_n,
integer(8) sbuf_recold,
integer sbuf_send_fr,
integer sbuf_rec_fr,
integer sbuf_send_lr,
integer sbuf_rec_lr,
double precision ops_subtree,
integer nsteps,
logical, dimension(nmb_par2) i_am_cand,
integer nmb_par2,
integer, dimension( keep(71) ) istep_to_iniv2,
integer, dimension( slavef+1, nmb_par2 ) candidates,
integer, intent(inout) iflag,
integer, intent(inout) ierror,
integer(8) max_front_surface_local,
integer(8) max_size_factor,
integer(8) entries_in_factors_loc,
integer(8) entries_in_factors_loc_masters,
logical, intent(in) root_yes,
integer, intent(in) root_nprow,
integer, intent(in) root_npcol )

Definition at line 14 of file dana_dist_m.F.

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 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 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 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 =
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 dmumps_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.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,
881 & ': error 2 in dmumps_ana_distm. itop = ',ITOP
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,
919 & ': error 2 in dmumps_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.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
1428 write(*,*) ' error 3 in dmumps_ana_distm'
1429 CALL MUMPS_ABORT()
1430 ENDIF
1431 ITOP = ITOP + 1
1432.GT. IF ( ITOP NSTEPS ) THEN
1433 WRITE(*,*) 'error 4 in dmumps_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.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)
Definition dana_dist_m.F:34
integer function dmumps_ooc_get_panel_size(hbuf_size, nnmax, k227, k50)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
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 dlr_core.F:45
logical function mumps_in_or_root_ssarbr(procinfo_inode, k199)
integer function mumps_typenode(procinfo_inode, k199)
integer function mumps_procnode(procinfo_inode, k199)

◆ dmumps_ana_distm_underl0_1thr()

subroutine dmumps_ana_distm_underl0_1thr ( integer, intent(in) ithread,
integer, intent(in) lpool_b_l0_omp,
integer, dimension ( lpool_b_l0_omp ), intent(in) ipool_b_l0_omp,
integer, intent(in) l_virt_l0_omp,
integer, dimension ( l_virt_l0_omp ), intent(in) virt_l0_omp,
integer, dimension ( l_virt_l0_omp ), intent(in) virt_l0_omp_mapping,
integer, intent(in) l_phys_l0_omp,
integer, dimension ( l_phys_l0_omp ), intent(in) phys_l0_omp,
integer, dimension ( l_phys_l0_omp ), intent(in) perm_l0_omp,
integer, dimension ( l_phys_l0_omp + 1 ), intent(in) ptr_leafs_l0_omp,
integer, dimension(500), intent(in) keep,
integer, intent(in) n,
integer, dimension(nsteps), intent(in) ne,
integer, intent(in) nsteps,
integer, dimension(n), intent(in) step,
integer, dimension(nsteps), intent(in) frere,
integer, dimension(n), intent(in) fils,
integer, dimension(nsteps), intent(in) dad,
integer, dimension(nsteps), intent(in) nd,
integer, intent(in) myid,
integer, dimension(nsteps), intent(in) procnode,
integer(8), intent(inout) istkr,
integer, intent(inout) istki,
integer, intent(inout) istki_ooc,
integer(8), intent(inout) istkr_if_lrcb,
integer(8), intent(inout) istkrlr_cb_ud,
integer(8), intent(inout) istkrlr_cb_wc,
integer, intent(inout) itop,
integer, dimension(nsteps), intent(inout) lstki,
integer(8), dimension(nsteps), intent(inout) lstkr,
integer(8), dimension(nsteps), intent(inout) lstkr_if_lrcb,
integer(8), dimension(nsteps), intent(inout) lstkrlr_cb_ud,
integer(8), dimension(nsteps), intent(inout) lstkrlr_cb_wc,
integer, intent(out) niradu,
integer, intent(out) nirnec,
integer, intent(out) niradu_ooc,
integer, intent(out) nirnec_ooc,
integer(8), intent(out) nrladu,
integer(8), intent(out) nrlnec,
integer(8), intent(out) nrlnec_active,
integer(8), intent(out) nrladu_if_lr_lu,
integer(8), intent(out) nrlnec_if_lr_lu,
integer(8), intent(out) nrlnec_if_lr_lucb,
integer(8), intent(out) nrlnecooc_if_lr_lucb,
integer(8), intent(out) nrlnec_if_lr_cb,
integer(8), intent(out) nrladulr_ud,
integer(8), intent(out) nrladulr_wc,
integer(8), intent(out) nrlneclr_cb_ud,
integer(8), intent(out) nrlneclr_lucb_ud,
integer(8), intent(out) nrlneclr_lucb_wc,
integer(8), intent(out) peak_lrlu_ud,
integer(8), intent(out) peak_ooc_lrlu_ud,
integer(8), intent(out) peak_ooc_lrlu_wc,
integer(8), intent(out) peak_lrlucb_ud,
integer(8), intent(out) peak_lrlucb_wc,
integer(8), intent(out) peak_ooc_lrlucb_ud,
integer(8), intent(out) peak_ooc_lrlucb_wc,
integer(8), intent(out) peak_lrcb_ud,
integer(8), intent(out) peak_ooc_lrcb_ud,
integer, intent(inout) nbnodes_blr,
integer, dimension(nsteps), intent(inout) tnstk,
integer, intent(inout) maxfr,
integer(8), intent(inout) max_front_surface_local,
integer(8), intent(inout) max_size_factor,
integer(8), intent(inout) entries_in_factors_loc,
integer(8), intent(inout) entries_in_factors_loc_masters,
double precision, intent(inout) ops_sbtr_loc,
double precision, intent(out) opsa_loc,
integer, intent(inout) iflag,
integer, intent(inout) ierror )

Definition at line 1742 of file dana_dist_m.F.

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 DMUMPS_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 DMUMPS_OOC_GET_PANEL_SIZE
1913 EXTERNAL dmumps_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 = dmumps_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 DMUMPS_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 DMUMPS_ANA_DISTM'
2250 CALL mumps_abort()
2251 ENDIF
2252 itop = itop + 1
2253 IF ( itop .GT. nsteps ) THEN
2254 WRITE(*,*) 'ERROR 4 in DMUMPS_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 dmumps_process_node_underl0
#define mumps_abort
Definition VE_Metis.h:25
subroutine dmumps_process_node_underl0
subroutine mumps_get_flops_cost(nfront, npiv, nass, keep50, level, cost)
Definition estim_flops.F:74
subroutine mumps_ldltpanel_storage(npiv, keep, iw, nb_entries)

◆ dmumps_ana_distm_underl0omp()

subroutine dmumps_ana_distm_underl0omp ( integer, intent(in) lpool_b_l0_omp,
integer, dimension ( lpool_b_l0_omp ), intent(in) ipool_b_l0_omp,
integer, intent(in) l_virt_l0_omp,
integer, dimension ( l_virt_l0_omp ), intent(in) virt_l0_omp,
integer, dimension ( l_virt_l0_omp ), intent(in) virt_l0_omp_mapping,
integer, intent(in) l_phys_l0_omp,
integer, dimension ( l_phys_l0_omp ), intent(in) phys_l0_omp,
integer, dimension ( l_phys_l0_omp ), intent(in) perm_l0_omp,
integer, dimension ( l_phys_l0_omp + 1 ), intent(in) ptr_leafs_l0_omp,
integer, dimension(500), intent(inout) keep,
integer, intent(in) n,
integer, dimension(keep(28)), intent(in) ne,
integer, dimension(n), intent(in) step,
integer, dimension(keep(28)), intent(in) frere,
integer, dimension(n), intent(in) fils,
integer, dimension(keep(28)), intent(in) dad,
integer, dimension(keep(28)), intent(in) nd,
integer, intent(in) myid,
integer, dimension(keep(28)), intent(in) procnode,
integer, dimension (nbstats_i4, nbthreads), intent(out) i4_l0,
integer, intent(in) nbstats_i4,
integer(8), dimension (nbstats_i8, nbthreads), intent(out) i8_l0,
integer, intent(in) nbstats_i8,
integer, intent(in) nbthreads,
integer(8), intent(out) sizecb_under_l0,
integer(8), intent(out) sizecb_under_l0_if_lrcb_ud,
integer, dimension(keep(28)), intent(out) tnstk,
integer, intent(out) maxfr,
integer(8), intent(out) max_front_surface_local,
integer(8), intent(out) max_size_factor,
integer(8), intent(out) entries_in_factors_loc,
integer(8), intent(out) entries_in_factors_loc_masters,
double precision, intent(out) ops_sbtr_loc,
double precision, intent(out) opsa_loc,
integer, intent(inout) iflag,
integer, intent(inout) ierror )

Definition at line 1616 of file dana_dist_m.F.

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
subroutine dmumps_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)

◆ dmumps_prep_ana_distm_abovel0()

subroutine dmumps_prep_ana_distm_abovel0 ( integer, intent(in) n,
integer, intent(in) slavef,
integer, intent(in) comm,
integer, intent(in) myid,
integer, dimension(n), intent(in) step,
integer, dimension(keep(28)), intent(in) dad,
integer, dimension(60), intent(in) icntl,
integer, intent(in) lp,
logical, intent(in) lpok,
integer, dimension(80), intent(inout) info,
integer, dimension(max(1,l_phys_l0_omp)), intent(in) phys_l0_omp,
integer, intent(in) l_phys_l0_omp,
integer, dimension(max(1,lpool_a_l0_omp)), intent(in) ipool_a_l0_omp,
integer, intent(in) lpool_a_l0_omp,
integer, dimension(500), intent(in) keep,
integer, dimension(keep(28)), intent(inout) tnstk_afterl0,
integer, dimension(keep(28)), intent(out) flagged_leaves )

Definition at line 2282 of file dana_dist_m.F.

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 DMUMPS_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
subroutine mumps_propinfo(icntl, info, comm, id)
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

◆ dmumps_process_node_underl0()

subroutine dmumps_ana_distm_underl0_1thr::dmumps_process_node_underl0

Definition at line 1890 of file dana_dist_m.F.

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 DMUMPS_OOC_GET_PANEL_SIZE
1914 INTEGER MUMPS_PROCNODE, MUMPS_TYPENODE
1915 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
1917 EXTERNAL mumps_procnode, mumps_typenode,
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 = dmumps_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 DMUMPS_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 DMUMPS_ANA_DISTM'
2250 CALL mumps_abort()
2251 ENDIF
2252 itop = itop + 1
2253 IF ( itop .GT. nsteps ) THEN
2254 WRITE(*,*) 'ERROR 4 in DMUMPS_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