15 &MYID,N,IOLDPS,TYPE,IW, LIW, A, LA,
16 &POSFAC, LRLU, LRLUS, IWPOS, PTRAST, PTRFAC, STEP, KEEP,KEEP8,
26 INTEGER ,
TYPE, LIW, N, KEEP(500)
27 INTEGER(8) :: SIZE_INPLACE, LA, POSFAC, LRLU, LRLUS
28 INTEGER(8) :: PTRAST(KEEP(28))
34 INTEGER (8) :: PTRFAC(KEEP(28))
36 INTEGER IOLDSHIFT, IPSSHIFT
37 INTEGER LRGROUPS(N), NASS
38 include
'mumps_headers.h'
39 INTEGER LCONT, NELIM, NROW, NPIV, INTSIZ
40 INTEGER NFRONT, NSLAVES
42 INTEGER(8) :: SIZELU, SIZECB, IAPOS, I, SIZESHIFT, ITMP8
45 LOGICAL LRCOMPRESS_PANEL
49 ioldshift = ioldps + keep(ixsz)
50 IF ( iw( ioldshift ) < 0 )
THEN
51 write(*,*)
' ERROR 1 compressLU:Should not point to a band.'
53 ELSE IF ( iw( ioldshift + 2 ) < 0 )
THEN
54 write(*,*)
' ERROR 2 compressLU:Stack not performed yet',
58 lcont = iw( ioldshift )
59 nelim = iw( ioldshift + 1 )
60 nrow = iw( ioldshift + 2 )
61 npiv = iw( ioldshift + 3 )
62 iapos = ptrfac(iw( ioldshift + 4 ))
63 nslaves= iw( ioldshift + 5 )
65 intsiz = iw(ioldps+xxi)
66 lrcompress_panel = (iw(ioldps+xxlr).GE.2)
67 IF ( (nslaves > 0 .AND.
TYPE .NE. 2) .OR.
68 & (nslaves .eq. 0 .AND.
TYPE .EQ. 2 ) ) then
69 WRITE(*,*)
' ERROR 3 compressLU: problem with level of inode'
72 IF ( keep(50) .EQ. 0 )
THEN
73 sizelu = int(lcont + nrow, 8) * int(npiv,8)
75 IF ( keep(459) .GT. 1 )
THEN
77 & iw(ioldshift+6+nslaves+nfront), sizelu)
78 sizelu = sizelu + int( nrow - npiv, 8 ) * int( npiv, 8 )
80 sizelu = int(nrow,8) * int(npiv,8)
84 sizecb = sizexxr - sizelu
87 & .OR.(lrcompress_panel.AND.keep(486).EQ.2)
92 IF (sizecb.EQ.0_8)
THEN
96 IF (keep(201).EQ.2)
THEN
97 IF (keep(405) .EQ. 0)
THEN
98 keep8(31)=keep8(31)+sizelu
103 keep8(31)=keep8(31)+sizelu
109 WRITE(*,*)myid,
': Internal error in CMUMPS_NEW_FACTOR'
113 IF ( ioldps + intsiz .NE. iwpos )
THEN
114 ips = ioldps + intsiz
116 DO WHILE ( ips .NE. iwpos )
118 ipsshift = ips + keep(ixsz)
119 IF ( ipsize .LE. 0 .OR. ips .GT. iwpos )
THEN
120 WRITE(*,*)
" Internal error 1 CMUMPS_COMPRESS_LU"
121 WRITE(*,*)
" IOLDPS, INTSIZ, IWPOS, LIW=",
122 & ioldps, intsiz, iwpos, liw
123 WRITE(*,*)
" IWPOS, IPS, IPSIZE =", iwpos, ips, ipsize
124 WRITE(*,*)
" Header at IOLDPS =",
125 & iw(ioldps:ioldps+keep(ixsz)+5)
126 WRITE(*,*)
" Header at IPS =",
127 & iw(ips:ips+keep(ixsz)+5)
130 IF (ips+ipsize .GT. iwpos)
THEN
131 WRITE(*,*)
" Internal error 2 CMUMPS_COMPRESS_LU"
132 WRITE(*,*)
" IOLDPS, INTSIZ, IWPOS, LIW=",
133 & ioldps, intsiz, iwpos, liw
134 WRITE(*,*)
" IWPOS, IPS, IPSIZE =", iwpos, ips, ipsize
135 WRITE(*,*)
" Header at IOLDPS =",
136 & iw(ioldps:ioldps+keep(ixsz)+5)
137 WRITE(*,*)
" Header at IOLDPS+INTSIZ =",
138 & iw(ioldps+intsiz:ioldps+intsiz+keep(ixsz)+5)
139 WRITE(*,*)
" Header at IPS =",
140 & iw(ips:ips+keep(ixsz)+5)
141 WRITE(*,*)
" ========================== "
142 WRITE(*,*)
" Headers starting at IOLDPS:"
144 DO WHILE (ips .LE. iwpos)
145 WRITE(*,*)
" -> new IW header at position" , ips,
":",
146 & iw(ips:ips+keep(ixsz)+5)
147 ips = ips + iw(ips+xxi)
151 IF ( iw( ipsshift + 2 ) < 0 )
THEN
152 nfront = iw( ipsshift )
153 IF (iw(ipsshift+4) .LT. 0)
THEN
154 WRITE(*,*)
" Internal error 3 CMUMPS_COMPRESS_LU"
155 WRITE(*,*)
" IPS,IPSSHIFT,IWPOS=" ,ips,ipsshift,iwpos
156 WRITE(*,*)
" Header at IPS =", iw(ips:ips+keep(ixsz)+5)
158 ptrfac(iw(ipsshift+4))=ptrfac(iw(ipsshift+4)) -
161 ptrast(iw(ipsshift+4))=ptrast(iw(ipsshift+4))-sizecb
163 ELSE IF ( iw( ipsshift ) < 0 )
THEN
164 IF (iw(ipsshift+3) .LT. 0)
THEN
165 WRITE(*,*)
" Internal error 4 CMUMPS_COMPRESS_LU"
166 WRITE(*,*)
" IPS,IPSSHIFT,IWPOS=" ,ips,ipsshift,iwpos
167 WRITE(*,*)
" Header at IPS =", iw(ips:ips+keep(ixsz)+5)
169 ptrfac(iw(ipsshift+3)) = ptrfac(iw(ipsshift+3))
172 nfront = iw( ipsshift ) + iw( ipsshift + 3 )
173 IF (iw(ipsshift+4) .LT. 0)
THEN
174 WRITE(*,*)
" Internal error 4 CMUMPS_COMPRESS_LU"
175 WRITE(*,*)
" IPS,IPSSHIFT,IWPOS=" ,ips,ipsshift,iwpos
176 WRITE(*,*)
" Header at IPS =", iw(ips:ips+keep(ixsz)+5)
178 ptrfac(iw( ipsshift + 4 )) =
179 & ptrfac(iw( ipsshift + 4 )) - sizecb - sizeshift
183 IF (sizecb+sizeshift .NE. 0_8)
THEN
184 DO i=iapos+sizelu-sizeshift, posfac-sizecb-sizeshift-1_8
185 a( i ) = a( i + sizecb + sizeshift)
189 posfac = posfac - (sizecb+sizeshift)
190 lrlu = lrlu + (sizecb+sizeshift)
191 itmp8 = (sizecb+sizeshift) - size_inplace
192 lrlus = lrlus + itmp8
193 IF (keep(405) .EQ. 0)
THEN
194 keep8(69) = keep8(69) - itmp8
197 keep8(69) = keep8(69) - itmp8
201 IF (lrcompress_panel.AND.keep(486).EQ.2)
THEN
203 & la-lrlus,sizelu-sizeshift,-(sizecb+sizeshift)+size_inplace,
207 & la-lrlus,sizelu,-sizecb+size_inplace,
213 & PTRIST, PTRAST, PTLUST_S, PTRFAC, IW, LIW, A, LA,
214 & LRLU, LRLUS, IWPOS, IWPOSCB, POSFAC, COMP,
215 & IPTRLU, OPELIW, STEP, PIMASTER, PAMASTER,
216 & IFLAG, IERROR, SLAVEF, PROCNODE_STEPS, DAD, MYID, COMM,
217 & KEEP, KEEP8, DKEEP, TYPE_SON
224 INTEGER(8) :: LA, LRLU, LRLUS, POSFAC, IPTRLU
225 INTEGER N, ISON, LIW, IWPOS, IWPOSCB,
226 & COMP, IFLAG, IERROR, SLAVEF, MYID, COMM,
229 INTEGER(8) KEEP8(150)
231 INTEGER,
INTENT(IN) :: PROCNODE_STEPS(KEEP(28)), DAD(KEEP(28))
232 INTEGER(8) :: PTRAST(KEEP(28)), PAMASTER(KEEP(28))
233 INTEGER PTRIST(KEEP(28)), STEP(N),
234 & pimaster(keep(28)), iw(liw)
235 INTEGER PTLUST_S(KEEP(28))
236 INTEGER(8) :: PTRFAC(KEEP(28))
237 DOUBLE PRECISION OPELIW
238 DOUBLE PRECISION FLOP1, FLOP1_EFFECTIVE
240 INTEGER(8) :: LREQA, POSA, POSALOC, OLDPOS, JJ
241 INTEGER NFRONT, NCOL_L, NROW_L, LREQI, NSLAVES_L,
242 & posi, i, irow_l, icol_l, lda_band, nass
243 LOGICAL NONEED_TO_COPY_FACTORS
244 INTEGER(8) :: LREQA_HEADER
245 INTEGER LIWFAC, STRAT, TYPEFile, NextPivDummy,
248 TYPE(io_block) :: MonBloc
250 include
'mumps_headers.h'
251 DOUBLE PRECISION ZERO
252 parameter(zero=0.0d0)
253 COMPLEX,
POINTER,
DIMENSION(:) :: SON_A
254 INTEGER(8) :: IACHK, SIZFR_SON_A, ITMP8
256 ncol_l = iw( ptrist(step( ison )) + 3 + keep(ixsz) )
257 nrow_l = iw( ptrist(step( ison )) + 2 + keep(ixsz) )
258 nslaves_l = iw( ptrist(step( ison )) + 5 + keep(ixsz) )
259 lrstatus = iw( ptrist(step( ison )) + xxlr)
260 lda_band = ncol_l + iw( ptrist(step( ison )) + keep(ixsz) )
261 IF ( keep(50) .eq. 0 )
THEN
264 nfront = iw( ptrist(step( ison )) + 7 + keep(ixsz) )
266 IF (keep(201).EQ.1)
THEN
267 ioldps_cb = ptrist(step( ison ))
268 liwfac = iw(ioldps_cb+xxi)
272 monbloc%MASTER = .false.
274 monbloc%NROW = nrow_l
275 monbloc%NCOL = lda_band
276 monbloc%NFS = iw(ioldps_cb+1+keep(ixsz))
277 monbloc%LastPiv = ncol_l
278 monbloc%LastPanelWritten_L=-9999
279 monbloc%LastPanelWritten_U=-9999
280 NULLIFY(monbloc%INDICES)
281 strat = strat_write_max
283 monbloc%Last = .true.
285 & a, la, ptrast(step(ison)),
286 & iw(ptrist(step(ison))+xxd),
287 & iw(ptrist(step(ison))+xxr),
288 & son_a, iachk, sizfr_son_a)
291 & son_a(iachk), sizfr_son_a, monbloc,
292 & nextpivdummy, nextpivdummy,
293 & iw(ioldps_cb), liwfac,
294 & myid, keep8(31), iflag,last_call )
295 IF ((ncol_l.EQ.0).OR.(nrow_l.EQ.0))
THEN
298 noneed_to_copy_factors = ((keep(201).EQ.1) .OR. (keep(201).EQ.-1)
299 & .OR. (lrstatus.GE.2.AND.keep(486).EQ.2)
301 IF ((ncol_l.EQ.0).OR.(nrow_l.EQ.0))
THEN
304 lreqi = 4 + ncol_l + nrow_l + keep(ixsz)
305 lreqa_header = int(ncol_l,8) * int(nrow_l,8)
306 IF (noneed_to_copy_factors)
THEN
311 IF ( lrlu .LT. lreqa .OR.
312 & iwpos + lreqi - 1 .GT. iwposcb )
THEN
313 IF ( lrlus .LT. lreqa )
THEN
320 & iwpos,iwposcb, ptrist, ptrast,
321 & step, pimaster, pamaster, lrlus,
322 & keep(ixsz), comp, dkeep(97),
323 & myid, slavef, procnode_steps, dad )
324 IF ( lrlu .NE. lrlus )
THEN
325 WRITE(*,*)
'PB compress CMUMPS_STACK_BAND:LRLU,LRLUS=',
331 IF ( iwpos + lreqi - 1 .GT. iwposcb )
THEN
333 ierror = iwpos + lreqi - 1 - iwposcb
337 IF (.NOT. noneed_to_copy_factors)
THEN
339 posfac = posfac + lreqa
341 lrlus = lrlus - lreqa
342 keep8(67) =
min(lrlus, keep8(67))
343 keep8(69) = keep8(69) + lreqa
344 keep8(68) =
max(keep8(69), keep8(68))
345 IF(keep(201).NE.2)
THEN
347 & la-lrlus,lreqa,lreqa,keep,keep8,lrlus)
350 & la-lrlus,0_8,lreqa,keep,keep8,lrlus)
354 iwpos = iwpos + lreqi
355 ptlust_s(step( ison )) = posi
356 iw(posi:posi+keep(ixsz)-1)=-99999
362 iw(posi+xxlr) = lrstatus
363 iw(posi+xxf) = iw(ptrist(step(ison))+xxf)
365 iw( posi ) = - ncol_l
366 iw( posi + 1 ) = nrow_l
367 iw( posi + 2 ) = nfront - ncol_l
368 iw( posi + 3 ) = step(ison)
369 IF (.NOT. noneed_to_copy_factors)
THEN
370 ptrfac(step(ison)) = posa
372 ptrfac(step(ison)) = -77777_8
374 irow_l = ptrist(step(ison)) + 6 + nslaves_l + keep(ixsz)
375 icol_l = ptrist(step(ison)) + 6 + nrow_l + nslaves_l + keep(ixsz)
377 iw( posi+3+i ) = iw( irow_l+i-1 )
380 iw( posi+nrow_l+3+i) = iw( icol_l+i-1 )
382 IF (.NOT.noneed_to_copy_factors)
THEN
384 & a, la, ptrast(step(ison)),
385 & iw(ptrist(step(ison))+xxd),
386 & iw(ptrist(step(ison))+xxr),
387 & son_a, iachk, sizfr_son_a)
390 oldpos = iachk + int(i-1,8)*int(lda_band,8)
391 DO jj = 0_8, int(ncol_l-1,8)
392 a( posaloc+jj ) = son_a( oldpos+jj )
394 posaloc = posaloc + int(ncol_l,8)
397 IF (keep(201).EQ.2)
THEN
398 keep8(31)=keep8(31)+lreqa
400 itmp8 = int(ncol_l,8) * int(nrow_l,8)
401 IF (keep(405) .EQ.1)
THEN
403 keep8(10) = keep8(10) + itmp8
406 keep8(10) = keep8(10) + itmp8
408 IF (keep(201).EQ.2)
THEN
411 WRITE(*,*)myid,
': Internal error in CMUMPS_NEW_FACTOR'
415 posfac = posfac - lreqa
417 lrlus = lrlus + lreqa
419 keep8(69) = keep8(69) - lreqa
422 & la-lrlus,lreqa,0_8,keep,keep8,lrlus)
425 IF (type_son == 1)
THEN
428 IF ( keep(50) .eq. 0 )
THEN
429 flop1 = dble( ncol_l * nrow_l) +
430 & dble(nrow_l*ncol_l)*dble(2*nfront-ncol_l-1)
432 flop1 = dble( ncol_l ) * dble( nrow_l )
433 & * dble( 2 * lda_band - nrow_l - ncol_l + 1)
435 opeliw = opeliw + flop1
436 flop1_effective = flop1
437 nass = iw( ptrist(step( ison )) + 4 + keep(ixsz) )
438 IF ( ncol_l .NE. nass )
THEN
439 IF ( keep(50).eq.0 )
THEN
440 flop1 = dble( nass * nrow_l) +
441 & dble(nrow_l*nass)*dble(2*nfront-nass-1)
443 flop1 = dble( nass ) * dble( nrow_l ) *
444 & dble( 2 * lda_band - nrow_l - nass + 1)
457 & PTRIST, PTRAST, IW, LIW, A, LA,
458 & LRLU, LRLUS, IWPOSCB,
459 & IPTRLU, STEP, MYID, KEEP, KEEP8, TYPE_SON
464 INTEGER(8) :: LRLU, LRLUS, IPTRLU, LA
465 INTEGER ISON, MYID, N, IWPOSCB, TYPE_SON
466 INTEGER KEEP(500), STEP(N)
467 INTEGER(8) KEEP8(150)
468 INTEGER(8) :: PTRAST(KEEP(28))
474 INTEGER(8) :: DYN_SIZE
475 COMPLEX,
DIMENSION(:),
POINTER ::
476 INTEGER :: XXG_STATUS
477 INCLUDE
'mumps_headers.h'
478 istchk = ptrist(step(ison))
480 xxg_status = iw(istchk+xxg)
481 IF (dyn_size .GT. 0_8)
THEN
483 & dyn_size, fortran_pointer )
486 & iw, liw, lrlu, lrlus, iptrlu,
487 & iwposcb, la, keep,keep8, .false.
489 IF (dyn_size .GT. 0_8)
THEN
491 & keep(405).EQ.1, keep8 )
493 ptrist(step( ison )) = -9999888
494 ptrast(step( ison )) = -9999888_8
498 & MYID, COMM, N, NELT, NA, LNA, NNZ8, NA_ELT8, NSLAVES,
499 & INFO, INFOG, PROK, MP, PROKG, MPG
500 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
503 LOGICAL,
INTENT(IN) :: PROK, PROKG, SUM_OF_PEAKS
504 INTEGER ,
INTENT(IN) :: MYID, COMM, N, NELT, NSLAVES,
506 INTEGER(8),
INTENT(IN):: NA_ELT8, NNZ8
507 INTEGER,
INTENT(IN):: NA(LNA)
508 INTEGER :: KEEP(500), INFO(80), INFOG(80)
509 INTEGER(8) :: KEEP8(150)
510 INTEGER,
INTENT(IN) :: NBSTATS_I8, NBCOLS_I8
511 INTEGER(8),
INTENT(IN) :: (NBSTATS_I8, NBCOLS_I8)
512 INTEGER,
PARAMETER :: MASTER = 0
513 INTEGER :: OOC_STAT, BLR_STRAT, BLR_CASE
515 LOGICAL :: EFF, PERLU_ON, COMPUTE_MAXAVG
516 INTEGER(8) :: TOTAL_BYTES
517 INTEGER :: TOTAL_MBYTES
518 INTEGER(8) :: TOTAL_BYTES_UNDER_L0
519 INTEGER :: TOTAL_MBYTES_UNDER_L0
520 INTEGER,
DIMENSION(3) :: LRLU_UD, OOC_LRLU_UD
523 compute_maxavg = .NOT.(nslaves.EQ.1 .AND. keep(46).EQ.1)
524 IF ( prokg.AND.sum_of_peaks)
THEN
526 &
' Estimations with BLR compression of LU factors:'
527 WRITE( mpg,
'(A,I6,A) ')
528 &
' ICNTL(38) Estimated compression rate of LU factors =',
535 & myid, n, nelt, na(1), lna, keep8(28),
536 & keep8(30), nslaves, total_mbytes, eff,
537 & ooc_stat, blr_strat, perlu_on, total_bytes,
538 & blr_case, sum_of_peaks, .false. ,
540 & , i8_l0_omp, nbstats_i8, nbcols_i8
542 IF (keep(400) .GT. 0 )
THEN
544 & myid, n, nelt, na(1), lna, keep8(28),
545 & keep8(30), nslaves, total_mbytes_under_l0, eff,
546 & ooc_stat, blr_strat, perlu_on, total_bytes_under_l0,
547 & blr_case, sum_of_peaks, .false. ,
549 & , i8_l0_omp, nbstats_i8, nbcols_i8
551 total_mbytes =
max(total_mbytes,total_mbytes_under_l0)
552 total_bytes =
max(total_bytes, total_bytes_under_l0)
555 & total_mbytes, lrlu_ud, irank )
556 IF (sum_of_peaks)
THEN
557 info(30) = total_mbytes
558 IF (myid.EQ.master)
THEN
559 infog(36) = lrlu_ud(1)
560 infog(37) = lrlu_ud(2)
563 IF (myid.EQ.master)
THEN
564 IF ( keep(46) .eq. 0 )
THEN
565 lrlu_ud(3) = (lrlu_ud(2)-total_mbytes)/nslaves
567 lrlu_ud(3) = lrlu_ud(2)/nslaves
570 IF ( prokg.AND.sum_of_peaks )
THEN
571 IF (compute_maxavg)
THEN
572 WRITE( mpg,
'(A,I12) ')
573 &
' Maximum estim. space in Mbytes, IC facto. (INFOG(36)):',
576 WRITE(mpg,
'(A,I12) ')
577 &
' Total space in MBytes, IC factorization (INFOG(37)):'
584 & myid, n, nelt, na(1), lna, keep8(28),
585 & keep8(30), nslaves, total_mbytes, eff,
586 & ooc_stat, blr_strat, perlu_on, total_bytes,
587 & blr_case, sum_of_peaks, .false. ,
589 & , i8_l0_omp, nbstats_i8, nbcols_i8
591 IF (keep(400) .GT. 0 )
THEN
593 & myid, n, nelt, na(1), lna, keep8(28),
594 & keep8(30), nslaves, total_mbytes_under_l0, eff,
595 & ooc_stat, blr_strat, perlu_on, total_bytes_under_l0,
596 & blr_case, sum_of_peaks, .false. ,
598 & , i8_l0_omp, nbstats_i8, nbcols_i8
600 total_mbytes =
max(total_mbytes,total_mbytes_under_l0)
601 total_bytes =
max(total_bytes, total_bytes_under_l0)
604 & total_mbytes, ooc_lrlu_ud, irank )
605 IF (sum_of_peaks)
THEN
606 info(31) = total_mbytes
607 IF (myid.EQ.master)
THEN
608 infog(38)= ooc_lrlu_ud(1)
609 infog(39)= ooc_lrlu_ud(2)
612 IF (myid.EQ.master)
THEN
613 IF ( keep(46) .eq. 0 )
THEN
614 ooc_lrlu_ud(3) = (ooc_lrlu_ud(2)-total_mbytes)/nslaves
616 ooc_lrlu_ud(3) = ooc_lrlu_ud(2)/nslaves
619 IF ( prokg.AND.sum_of_peaks )
THEN
620 IF (compute_maxavg)
THEN
621 WRITE( mpg,
'(A,I12) ')
622 &
' Maximum estim. space in Mbytes, OOC facto. (INFOG(38)):',
625 WRITE(mpg,
'(A,I12) ')
626 &
' Total space in MBytes, OOC factorization (INFOG(39)):'
631 & MYID, N, NELT, NA, LNA, NNZ8, NA_ELT8, NSLAVES,
632 & MEMORY_MBYTES, EFF, OOC_STRAT, BLR_STRAT, PERLU_ON,
634 & BLR_CASE, SUM_OF_PEAKS, MEM_EFF_ALLOCATED,
636 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
639 LOGICAL,
INTENT(IN) :: EFF, PERLU_ON, UNDER_L0_OMP
640 INTEGER,
INTENT(IN) :: OOC_STRAT, BLR_STRAT
641 INTEGER,
INTENT(IN) :: KEEP(500)
642 INTEGER(8),
INTENT(IN) :: KEEP8(150)
643 INTEGER,
INTENT(IN) :: MYID, N, NELT, NSLAVES, LNA
644 INTEGER(8),
INTENT(IN) :: NA_ELT8, NNZ8
645 INTEGER,
INTENT(IN) :: NA(LNA)
646 INTEGER(8),
INTENT(OUT):: MEMORY_BYTES
647 INTEGER,
INTENT(OUT) :: MEMORY_MBYTES
648 INTEGER,
INTENT(IN) :: BLR_CASE
649 LOGICAL,
INTENT(IN) :: SUM_OF_PEAKS
650 LOGICAL,
INTENT(IN) :: MEM_EFF_ALLOCATED
651 INTEGER,
INTENT(IN) :: NBSTATS_I8, NBCOLS_I8
652 INTEGER(8),
INTENT(IN) :: I8_L0_OMP (NBSTATS_I8, NBCOLS_I8)
653 INTEGER :: MUMPS_GET_POOL_LENGTH
654 EXTERNAL :: mumps_get_pool_length
655 INTEGER(8) :: MemEstimGlobal
656 LOGICAL :: I_AM_SLAVE, I_AM_MASTER
657 INTEGER :: PERLU, NBRECORDS
658 INTEGER(8) :: NB_REAL
659 INTEGER(8) :: TEMP, NB_BYTES, NB_INT
660 INTEGER :: CMUMPS_LBUF_INT
661 INTEGER(8) :: CMUMPS_LBUFR_BYTES8, CMUMPS_LBUF8
666 INTEGER(8) :: BUF_OOC, BUF_OOC_PANEL, BUF_OOC_NOPANEL
667 INTEGER(8) :: OOC_NB_FILE_TYPE
668 INTEGER(8) :: NSTEPS8, N8, NELT8
669 INTEGER(8) :: I8OVERI
670 INTEGER(8) :: SUM_NRLADU_underL0,
671 & sum_nrladu_if_lr_lu_underl0,
672 & sum_nrladulr_ud_underl0,
673 & sum_nrladulr_wc_underl0
675 INTEGER(8) :: MIN_NRLADU_underL0, MIN_NRLADU_if_LR_LU_underL0
677INTEGER(8) :: I8_L0_OMP_2, I8_L0_OMP_3,
678 & i8_l0_omp_5, i8_l0_omp_6, i8_l0_omp_7,
679 & i8_l0_omp_8, i8_l0_omp_9, i8_l0_omp_10,
680 & i8_l0_omp_11, i8_l0_omp_12, i8_l0_omp_13
681 i8overi = int(keep(10),8)
683 nsteps8 = int(keep(28),8)
686 IF (.NOT.perlu_on) perlu = 0
687 i_am_master = ( myid .eq. 0 )
688 i_am_slave = ( keep(46).eq. 1 .or. myid .ne. 0 )
693 IF (keep(235) .NE. 0 .OR. keep(237) .NE. 0)
THEN
694 nb_int = nb_int + nsteps8
696 nb_int = nb_int + 5_8 * nsteps8
697 nb_int = nb_int + nsteps8 + int(keep(56),8)*int(nslaves+2,8)
698 nb_int = nb_int + 3_8 * n8
699 IF (keep(23).ne.0 .and. i_am_master) nb_int=nb_int + n8
700 IF (keep(55).eq.0)
THEN
701 nb_int = nb_int + 2_8 * n8 * i8overi
703 nb_int = nb_int + 2_8 * ( nelt8 + 1_8 ) * i8overi
705 IF (keep(55) .ne. 0 )
THEN
706 nb_int = nb_int + n8 + 1_8 + nelt8
708 nb_int = nb_int + int(lna,8)
709 IF ( .NOT. eff )
THEN
711 IF (under_l0_omp)
THEN
714 min_nrladu_if_lr_lu_underl0 = i8_l0_omp(4,1)
715 min_nrladu_underl0 = i8_l0_omp(1,1)
719 IF (i8_l0_omp(1,ith).LT.min_nrladu_underl0)
721 min_nrladu_underl0 = i8_l0_omp(1,ith)
724 IF (i8_l0_omp(4,ith).LT.min_nrladu_if_lr_lu_underl0)
726 min_nrladu_if_lr_lu_underl0 = i8_l0_omp(4,ith)
729 i8_l0_omp_2=i8_l0_omp_2 + i8_l0_omp(2,ith)
730 i8_l0_omp_3=i8_l0_omp_3 + i8_l0_omp(3,ith)
732 IF (sum_of_peaks.AND.blr_strat.GT.0)
THEN
743 i8_l0_omp_5 = i8_l0_omp_5 + i8_l0_omp(5,ith)
744 i8_l0_omp_6 = i8_l0_omp_6 + i8_l0_omp(6,ith)
745 i8_l0_omp_7 = i8_l0_omp_7 + i8_l0_omp(7,ith)
746 i8_l0_omp_8 = i8_l0_omp_8 + i8_l0_omp(8,ith)
747 i8_l0_omp_9 = i8_l0_omp_9 + i8_l0_omp(9,ith)
749 i8_l0_omp_11= i8_l0_omp_11+ i8_l0_omp(11,ith)
750 i8_l0_omp_12= i8_l0_omp_12+ i8_l0_omp(12,ith)
751 i8_l0_omp_13= i8_l0_omp_13+ i8_l0_omp(13,ith)
755 & ooc_strat, blr_strat, blr_case, sum_of_peaks,
757 & 0_8, 0_8, 0_8, 0_8,
771 IF (blr_strat.EQ.0)
THEN
772 IF ( ooc_strat .LE. 0 .AND. ooc_strat .NE. -1 )
THEN
773 memestimglobal = memestimglobal +
774 & i8_l0_omp(1,ithmin) +
775 & i8_l0_omp(23, ithmin)
777 memestimglobal = memestimglobal +
778 & i8_l0_omp(23, ithmin)
781 IF ( ooc_strat .LE. 0 .AND. ooc_strat .NE. -1 )
THEN
782 memestimglobal = memestimglobal +
783 & i8_l0_omp(4,ithmin_if_lrlu) +
784 & i8_l0_omp(23, ithmin_if_lrlu)
786 memestimglobal = memestimglobal +
787 & i8_l0_omp(23, ithmin_if_lrlu)
790 nb_real = nb_real + memestimglobal +
791 & int(perlu,8)*(memestimglobal / 100_8 + 1_8 )
793 IF ( keep8(24).EQ.0_8 )
THEN
794 sum_nrladu_underl0 = 0_8
795 sum_nrladu_if_lr_lu_underl0 = 0_8
796 sum_nrladulr_ud_underl0 = 0_8
797 sum_nrladulr_wc_underl0 = 0_8
798 IF (keep(400) .GT. 0 )
THEN
801 & sum_nrladu_underl0 + i8_l0_omp(1,ith)
802 sum_nrladu_if_lr_lu_underl0 =
803 & sum_nrladu_if_lr_lu_underl0 + i8_l0_omp(4,ith)
804 sum_nrladulr_ud_underl0 =
805 & sum_nrladulr_ud_underl0 + i8_l0_omp(9,ith)
806 sum_nrladulr_wc_underl0 =
807 & sum_nrladulr_wc_underl0 + i8_l0_omp(10,ith)
811 & ooc_strat, blr_strat, blr_case, sum_of_peaks,
813 & sum_nrladu_underl0, sum_nrladu_if_lr_lu_underl0,
814 & sum_nrladulr_ud_underl0, sum_nrladulr_wc_underl0,
828 IF (keep(400).LE.0)
THEN
829 nb_real = nb_real + memestimglobal +
830 & int(perlu,8)*(memestimglobal / 100_8 + 1_8 )
831 ELSE IF (blr_strat.EQ.0)
THEN
832 IF ( ooc_strat .GT. 0 .OR. ooc_strat .EQ. -1 )
THEN
833 nb_real = nb_real + memestimglobal +
834 & int(perlu,8)*(keep8(14) / 100_8 + 1_8 )
836 nb_real = nb_real + memestimglobal +
837 & int(perlu,8)*(keep8(12) / 100_8 + 1_8 )
840 nb_real = nb_real + memestimglobal +
841 & int(perlu,8)*(memestimglobal / 100_8 + 1_8 )
846 nb_real = nb_real + 1_8
848 ELSE IF (i_am_slave)
THEN
849 IF (under_l0_omp)
THEN
850 IF (mem_eff_allocated)
THEN
851 nb_real = nb_real + keep8(63)
853 nb_real = nb_real + keep8(62)
856 IF (mem_eff_allocated)
THEN
857 nb_real = nb_real + keep8(23) + keep8(74)
859 nb_real = nb_real + keep8(67) + keep8(74)
863 IF ( ooc_strat .GT. 0 .AND. i_am_slave )
THEN
864 buf_ooc_nopanel = 2_8 * keep8(119)
865 IF (keep(50).EQ.0)
THEN
866 buf_ooc_panel = 8_8 * int(keep(226),8)
868 buf_ooc_panel = 4_8 * int(keep(226),8)
870 IF (ooc_strat .EQ. 2)
THEN
871 buf_ooc = buf_ooc_nopanel
873 buf_ooc = buf_ooc_panel
875 nb_real = nb_real +
min(buf_ooc + int(
max(perlu,0),8) *
876 & (buf_ooc/100_8+1_8),12000000_8)
877 IF (ooc_strat .EQ. 2)
THEN
878 ooc_nb_file_type = 1_8
880 IF (keep(50).EQ.0)
THEN
881 ooc_nb_file_type = 2_8
883 ooc_nb_file_type = 1_8
886 nb_int = nb_int + ooc_nb_file_type * nsteps8 * i8overi
887 nb_int = nb_int + ooc_nb_file_type * nsteps8
888 nb_int = nb_int + ooc_nb_file_type * nsteps8
890 nb_real = nb_real + keep8(26)
891 IF (keep(252).EQ.1 .AND. .NOT. i_am_master)
THEN
892 nb_real = nb_real + n8
894 IF ( .not. ( i_am_slave .and. i_am_master .and. keep(52) .eq. 0
895 & .and. keep(55) .ne. 0 ) )
THEN
896 nb_int = nb_int + keep8(27)
898 IF ( i_am_slave .and. keep(38) .ne. 0 )
THEN
899 nb_int = nb_int + 2_8 * n8
904 IF (keep(55).eq.0)
THEN
905 IF (nnz8 < int(nbrecords,8))
THEN
909 IF (na_elt8 < int(nbrecords,8))
THEN
910 nbrecords=int(na_elt8)
913 IF ( keep(54) .eq. 0 )
THEN
914 IF ( i_am_master )
THEN
915 IF ( keep(46) .eq. 0 )
THEN
919 IF (keep(55) .eq. 0 )
920 & tempi = tempi + 2_8 * n8
922 tempi = tempi + 2_8 * int(nbrecords,8) * int(nbufs,8)
923 tempr = tempr + int(nbrecords,8) * int(nbufs,8)
925 IF ( keep(55) .eq. 0 )
THEN
926 tempi = tempi + 2_8 * int(nbrecords,8)
927 tempr = tempr + int(nbrecords,8)
931 IF ( i_am_slave )
THEN
932 tempi = tempi + int(1+4*nslaves,8) * int(nbrecords,8)
933 tempr = tempr + int(1+2*nslaves,8) * int(nbrecords,8)
936 temp =
max( nb_bytes + (nb_int + tempi) * int(keep(34),8)
937 & + (nb_real+tempr) * int(keep(35),8)
939 IF ( i_am_slave )
THEN
940 IF (blr_strat.NE.0)
THEN
941 cmumps_lbufr_bytes8 = int(keep(380),8) * int(keep(35),8)
943 cmumps_lbufr_bytes8 = int(keep(44),8) * int(keep(35),8)
945 cmumps_lbufr_bytes8 =
max( cmumps_lbufr_bytes8,
947 IF (keep(48).EQ.5)
THEN
952 cmumps_lbufr_bytes8 = cmumps_lbufr_bytes8
953 & + int( 2.0e0 * real(
max(perlu,min_perlu))*
954 & real(cmumps_lbufr_bytes8)/100e0,8)
955 cmumps_lbufr_bytes8 =
min(cmumps_lbufr_bytes8,
956 & int(huge(i4)-100,8))
957 nb_bytes = nb_bytes + cmumps_lbufr_bytes8
958 IF (.NOT.under_l0_omp)
THEN
959 IF (blr_strat.NE.0)
THEN
960 cmumps_lbuf8 = int( real(keep(213)) / 100.0e0
961 & * real(keep( 379 ) * keep( 35 )), 8 )
963 cmumps_lbuf8 = int( real(keep(213)) / 100.0e0
964 & * real(keep( 43 ) * keep( 35 )), 8 )
966 cmumps_lbuf8 =
max( cmumps_lbuf8, 100000_8 )
967 cmumps_lbuf8 = cmumps_lbuf8
968 & + int( 2.0e0 * real(
max(perlu,min_perlu))*
969 & real(cmumps_lbuf8)/100e0, 8)
970 cmumps_lbuf8 =
min(cmumps_lbuf8, int(huge(i4)-100,8))
971 cmumps_lbuf8 =
max(cmumps_lbuf8, cmumps_lbufr_bytes8+
972 & 3_8*int(keep(34),8))
973 nb_bytes = nb_bytes + cmumps_lbuf8
975 cmumps_lbuf_int = ( keep(56) +
976 & nslaves * nslaves ) * 5
978 nb_bytes = nb_bytes + int(cmumps_lbuf_int,8)
980 IF (under_l0_omp)
THEN
981 nb_int = nb_int + n8*int(keep(400),8)
983 & int(mumps_get_pool_length(na(1), keep, keep8),8)*
986 IF (keep(400).GT.0)
THEN
988 & int(mumps_get_pool_length(na(1), keep, keep8),8)*
992 IF (ooc_strat .GT. 0)
THEN
993 nb_int = nb_int + int(
994 & keep(138) + 3 *
max(perlu,10) *
995 & ( keep(138) / 100 + 1 )
998 nb_int = nb_int + int(
999 & keep(137) + 3 *
max(perlu,10) *
1000 & ( keep(137) / 100 + 1 )
1004 IF (.NOT.under_l0_omp)
THEN
1005 IF (ooc_strat .GT. 0)
THEN
1006 nb_int = nb_int + int(
1007 & keep(225) + 2 *
max(perlu,10) *
1008 & ( keep(225) / 100 + 1 )
1011 nb_int = nb_int + int(
1012 & keep(15) + 2 *
max(perlu,10) *
1013 & ( keep(15) / 100 + 1 )
1017 nb_int = nb_int + nsteps8
1018 nb_int = nb_int + nsteps8 * i8overi
1019 nb_int = nb_int + n8 + 4_8 * nsteps8 +
1020 & int(mumps_get_pool_length(na(1), keep, keep8),8)
1021 nb_int = nb_int + 2_8 * nsteps8 * i8overi
1022 IF (keep(494).NE.0)
THEN
1023 nb_int = nb_int + n8
1026 memory_bytes = nb_bytes + nb_int * int(keep(34),8) +
1027 & nb_real * int(keep(35),8)
1028 memory_bytes =
max( memory_bytes, temp )
1029 memory_mbytes = nint( real(memory_bytes) / real(1000000) )
1033 & OOC_STRAT, BLR_STRAT, BLR_CASE, SUM_OF_PEAKS,
1035 & SUM_NRLADU_underL0, SUM_NRLADU_if_LR_LU_underL0,
1036 & SUM_NRLADULR_UD_underL0, SUM_NRLADULR_WC_underL0,
1040 & NRLNEC_if_LR_LUCB,
1041 & NRLNECOOC_if_LR_LUCB,
1050 INTEGER,
INTENT(IN) :: OOC_STRAT, BLR_STRAT
1051 INTEGER,
INTENT(IN) :: BLR_CASE
1052 LOGICAL,
INTENT(IN) :: SUM_OF_PEAKS
1053 INTEGER(8),
INTENT(IN) :: KEEP8(150)
1054 INTEGER(8),
INTENT(IN) :: SUM_NRLADU_underL0,
1055 & SUM_NRLADU_if_LR_LU_underL0,
1056 & SUM_NRLADULR_UD_underL0,
1057 & SUM_NRLADULR_WC_underL0
1058 INTEGER(8),
INTENT(IN) ::
1062 & nrlnec_if_lr_lucb,
1063 & nrlnecooc_if_lr_lucb,
1070 INTEGER(8),
INTENT(OUT) :: MemEstimGlobal
1071 IF ( ooc_strat .GT. 0 .OR. ooc_strat .EQ. -1 )
THEN
1072 memestimglobal = peak_fr_ooc
1074 memestimglobal = peak_fr
1076 IF (blr_strat.GT.0)
THEN
1077 IF (.NOT.sum_of_peaks)
THEN
1078 IF (blr_strat.EQ.1)
THEN
1079 IF (blr_case.LE.1)
THEN
1080 IF (ooc_strat.EQ.0)
THEN
1081 memestimglobal = keep8(40)
1083 memestimglobal = keep8(41)
1085 ELSE IF (blr_case.EQ.2)
THEN
1086 IF (ooc_strat.EQ.0)
THEN
1087 memestimglobal = keep8(33)
1089 memestimglobal = keep8(54)
1092 IF (ooc_strat.EQ.0)
THEN
1093 memestimglobal = keep8(53)
1095 memestimglobal = keep8(42)
1099 IF (blr_case.LE.1)
THEN
1100 IF (ooc_strat.EQ.0)
THEN
1101 memestimglobal = keep8(43)
1103 memestimglobal = keep8(45)
1105 ELSE IF (blr_case.EQ.2)
THEN
1106 IF (ooc_strat.EQ.0)
THEN
1107 memestimglobal = keep8(34)
1109 memestimglobal = keep8(35)
1112 IF (ooc_strat.EQ.0)
THEN
1113 memestimglobal = keep8(44)
1115 memestimglobal = keep8(46)
1120 IF (blr_strat.EQ.1)
THEN
1121 IF (ooc_strat.EQ.0)
THEN
1122 memestimglobal = nrlnec_if_lr_lu
1123 & + sum_nrladu_if_lr_lu_underl0
1125 memestimglobal = peak_fr_ooc
1127 IF (blr_case.EQ.1)
THEN
1128 memestimglobal = memestimglobal + nrladulr_ud
1129 & + sum_nrladulr_ud_underl0
1130 ELSE IF (blr_case.EQ.3)
THEN
1131 memestimglobal = memestimglobal + nrladulr_wc
1132 & + sum_nrladulr_wc_underl0
1134 ELSE IF (blr_strat.EQ.2)
THEN
1135 IF (ooc_strat.EQ.0)
THEN
1136 memestimglobal = nrlnec_if_lr_lucb
1137 & + sum_nrladu_if_lr_lu_underl0
1139 memestimglobal = nrlnecooc_if_lr_lucb
1141 IF (blr_case.EQ.1)
THEN
1142 memestimglobal = memestimglobal + nrlneclr_lucb_ud
1143 & + sum_nrladulr_ud_underl0
1144 ELSE IF (blr_case.EQ.3)
THEN
1145 memestimglobal = memestimglobal + nrlneclr_lucb_wc
1146 & + sum_nrladulr_wc_underl0
1149 IF (ooc_strat.EQ.0)
THEN
1150 memestimglobal = nrlnec_if_lr_cb
1151 & + sum_nrladu_underl0
1153 memestimglobal = nrlnecooc_if_lr_lucb
1155 memestimglobal = memestimglobal + nrlneclr_cb_ud
1162 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1166 INTEGER(8),
INTENT(OUT) :: MAXS_BASE8, MAXS_BASE_RELAXED8
1167 INTEGER,
INTENT(OUT) :: BLR_STRAT
1168 INTEGER,
INTENT(IN) :: KEEP(500)
1169 INTEGER(8),
INTENT(IN) :: KEEP8(150)
1171 & maxs_base8, maxs_base_relaxed8,
1183 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1188 & NRLNEC_if_LR_LUCB,
1189 & NRLNECOOC_if_LR_LUCB,
1192 INTEGER(8),
INTENT(OUT) :: MAXS_BASE8,
1193 INTEGER,
INTENT(OUT) :: BLR_STRAT
1194 INTEGER,
INTENT(IN) :: KEEP(500)
1195 INTEGER(8),
INTENT(IN) :: NRLNEC,
1198 & nrlnec_if_lr_lucb,
1199 & nrlnecooc_if_lr_lucb,
1203 IF (keep(201) .EQ. 0)
THEN
1206 maxs_base8 = nrlnec_active
1209 IF (keep(486).EQ.2)
THEN
1210 IF (keep(489).EQ.1)
THEN
1212 IF (keep(201).NE.0)
THEN
1213 maxs_base8 = nrlnecooc_if_lr_lucb
1215 maxs_base8 = nrlnec_if_lr_lucb
1219 IF (keep(201).NE.0)
THEN
1220 maxs_base8 = nrlnec_active
1222 maxs_base8 = nrlnec_if_lr_lu
1225 ELSE IF (keep(486).EQ.3)
THEN
1226 IF (keep(489).EQ.1)
THEN
1228 IF (keep(201).NE.0)
THEN
1229 maxs_base8 = nrlnecooc_if_lr_lucb
1231 maxs_base8 = nrlnec_if_lr_cb
1235 IF ( maxs_base8 .GT. 0_8 )
THEN
1236 maxs_base_relaxed8 =
1237 & maxs_base8 + int(perlu,8) * ( maxs_base8 / 100_8 + 1_8)
1238 maxs_base_relaxed8 =
max(maxs_base_relaxed8, 1_8)
1240 maxs_base_relaxed8 = 1_8
1245 & BLR_STRAT, OOC_STRAT, MAXS_ESTIM_RELAXED8,
1246 & KEEP, KEEP8, MYID, N, NELT, NA, LNA,
1247 & NSLAVES, ICNTL38, ICNTL39, IFLAG, IERROR
1248 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
1251 INTEGER(8),
INTENT(OUT) :: MAXS
1252 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
1253 INTEGER,
INTENT(IN) :: BLR_STRAT
1254 INTEGER,
INTENT(IN) :: OOC_STRAT
1255 INTEGER(8),
INTENT(IN) :: MAXS_ESTIM_RELAXED8
1256 INTEGER,
INTENT(IN) :: KEEP(500)
1257 INTEGER(8),
INTENT(INOUT) :: KEEP8(150)
1258 INTEGER,
INTENT(IN) :: MYID, N, NELT, NSLAVES, LNA
1259 INTEGER,
INTENT(IN) :: NA(), ICNTL38, ICNTL39
1260 INTEGER,
INTENT(IN) :: NBSTATS_I8, NBCOLS_I8
1261 INTEGER(8),
INTENT(IN) :: I8_L0_OMP (NBSTATS_I8, NBCOLS_I8)
1262 INTEGER(8) :: SMALLER_MAXS, UPDATED_DIFF
1263 LOGICAL :: EFF, PERLU_ON, SUM_OF_PEAKS
1265 INTEGER(8) :: TOTAL_BYTES, MEM_ALLOWED_BYTES,
1266 & mem_dispo_bytes, mem_dispo
1267 INTEGER :: TOTAL_MBYTES, PERLU
1268 INTEGER(8) :: MEM_DISPO_BYTES_NR, MEM_DISPO_NR,
1270 INTEGER :: TOTAL_MBYTES_NR
1271 INTEGER,
PARAMETER :: IDUMMY = -9999
1272 LOGICAL,
PARAMETER :: =.false.
1276 sum_of_peaks = .true.
1278 mem_allowed_bytes = keep8(4)
1280 & myid, n, nelt, na(1), lna,
1281 & keep8(28), keep8(30),
1282 & nslaves, total_mbytes, eff, ooc_strat,
1283 & blr_strat, perlu_on, total_bytes,
1284 & blr_case, sum_of_peaks, .false. ,
1286 & , i8_l0_omp, nbstats_i8, nbcols_i8
1288 mem_dispo_bytes = mem_allowed_bytes-total_bytes
1289 IF (mem_dispo_bytes.GT.0)
THEN
1290 mem_dispo = mem_dispo_bytes/int(keep(35),8)
1292 mem_dispo = (mem_dispo_bytes-int(keep(35),8)+1)/
1295 IF (blr_strat.EQ.0)
THEN
1297 ELSE IF (blr_strat.EQ.1)
THEN
1298 IF (keep(464).NE.0)
THEN
1300 & real(keep8(36)) * ( 1.0e0 -
1301 & real(icntl38)/real(keep(464)) )
1305 & -real(keep8(11)-keep8(32)) *
1306 & real(icntl38) / 1000.0e0
1309 ELSE IF (blr_strat.EQ.2)
THEN
1310 IF (keep(464)+keep(465).NE.0)
THEN
1312 & real(keep8(38)) * ( 1.0e0 -
1313 & real(icntl38+icntl39)/
1314 & real(keep(464)+keep(465)) )
1319 & real(icntl38+icntl39)/1000.0e0
1322 ELSE IF (blr_strat.EQ.3)
THEN
1323 IF (keep(465).NE.0)
THEN
1325 & real(keep8(37)) * ( 1.0e0 -
1326 & real(icntl39)/real(keep(465)) )
1331 & real(icntl39)/1000.0e0
1337 mem_dispo = mem_dispo + updated_diff
1338 maxs = maxs_estim_relaxed8
1340 IF ( (mem_dispo.LT.0) .AND. maxs_estim_relaxed8.GT.
1341 & (mem_allowed_bytes/int(keep(35),8)) )
THEN
1344 & myid, n, nelt, na(1), lna,
1345 & keep8(28), keep8(30),
1346 & nslaves, total_mbytes_nr, eff, ooc_strat,
1347 & blr_strat, perlu_on, total_bytes_nr,
1348 & blr_case, sum_of_peaks, .false.,
1350 & , i8_l0_omp, nbstats_i8, nbcols_i8
1352 mem_dispo_bytes_nr = mem_allowed_bytes-total_bytes_nr
1354 & mem_dispo_bytes_nr/int(keep(35),8)
1356 IF ( mem_dispo_nr.LT.0 )
THEN
1361 IF (blr_strat.GE.2)
THEN
1366 mem_dispo_nr = mem_dispo_nr -
1367 & (int(keep(12),8)/120_8)*
1369 IF ( mem_dispo_nr.LT.0 )
THEN
1378 maxs = maxs_estim_relaxed8
1379 IF (blr_strat.EQ.0)
THEN
1380 IF (mem_dispo.GT.0)
THEN
1381 IF (ooc_strat.EQ.0)
THEN
1382 maxs = maxs_estim_relaxed8+(mem_dispo/2_8)
1384 maxs = maxs_estim_relaxed8+(mem_dispo/2_8)
1387 maxs = maxs_estim_relaxed8 + mem_dispo
1389 ELSE IF (blr_strat.EQ.1)
THEN
1390 IF ( mem_dispo .LT. 0)
THEN
1391 IF (ooc_strat.EQ.0)
THEN
1392 smaller_maxs = keep8(34) +
1393 & int(perlu,8) * ( keep8(34) / 100_8 + 1_8)
1395 smaller_maxs = keep8(35) +
1396 & int(perlu,8) * ( keep8(35) / 100_8 + 1_8)
1398 maxs =
max(maxs_estim_relaxed8+mem_dispo,
1401 ELSE IF (blr_strat.EQ.2)
THEN
1402 IF ( mem_dispo.LT.0)
THEN
1404 & maxs_estim_relaxed8+mem_dispo,
1405 & maxs_estim_relaxed8)
1407 ELSE IF (blr_strat.EQ.3)
THEN
1408 IF ( mem_dispo.LT.0)
THEN
1410 & maxs_estim_relaxed8+mem_dispo,
1411 & maxs_estim_relaxed8)
1414 IF (maxs .LE. 0_8)
THEN
1416 IF (mem_dispo.LT.0)
THEN
1426 & MAXS, MYID, UNDER_L0_OMP,
1427 & N, NELT, NA, LNA, NSLAVES,
1428 & BLR_STRAT, OOC_STRAT,
1429 & KEEP, KEEP8, IFLAG, IERROR
1430 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
1433 INTEGER(8),
INTENT(IN) :: MAXS
1434 INTEGER,
INTENT(IN) :: MYID, N, NELT, LNA, NSLAVES,
1435 & blr_strat, ooc_strat
1436 LOGICAL,
INTENT(IN) :: UNDER_L0_OMP
1437 INTEGER,
INTENT(IN) :: NA(LNA), KEEP(500)
1438 INTEGER(8),
INTENT(INOUT) :: (150)
1439 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
1440 INTEGER,
INTENT(IN) :: NBSTATS_I8, NBCOLS_I8
1441 INTEGER(8),
INTENT(IN) :: I8_L0_OMP (NBSTATS_I8, NBCOLS_I8)
1442 INTEGER(8) :: KEEP8_23_SAVETMP, TOTAL_BYTES
1443 INTEGER :: TOTAL_MBYTES
1444 LOGICAL :: PERLU_ON, MEM_EFF_ALLOCATED, EFF
1445 INTEGER,
PARAMETER :: IDUMMY = -9999
1446 LOGICAL,
PARAMETER :: BDUMMY =.false.
1447 keep8_23_savetmp = keep8(23)
1450 mem_eff_allocated = .true.
1455 & myid, n, nelt, na(1), lna, keep8(28),
1457 & nslaves, total_mbytes, eff , keep(201),
1458 & blr_strat, perlu_on, total_bytes,
1459 & idummy, bdummy , mem_eff_allocated,
1461 & , i8_l0_omp, nbstats_i8, nbcols_i8
1463 keep8(23) = keep8_23_savetmp
1464 keep8(75) = keep8(4) - total_bytes
1465 keep8(75) = keep8(75)/int(keep(35),8)
1466 IF (keep8(75).LT.0_8)
THEN
1474 & NELT, NA, LNA, NSLAVES,
1475 & BLR_STRAT, OOC_STRAT,
1476 & KEEP, KEEP8, IFLAG, IERROR
1477 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
1480 INTEGER,
INTENT(IN) :: MYID, N, NELT, LNA, NSLAVES,
1481 & BLR_STRAT, OOC_STRAT
1482 INTEGER,
INTENT(IN) :: NA(LNA), KEEP(500)
1483 INTEGER(8),
INTENT(INOUT) :: KEEP8(150)
1484 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
1485 INTEGER,
INTENT(IN) :: NBSTATS_I8, NBCOLS_I8
1486 INTEGER(8),
INTENT(IN) :: I8_L0_OMP (, NBCOLS_I8)
1487 INTEGER(8) :: KEEP8_23_SAVETMP, TOTAL_BYTES, TOTAL_STATIC,
1488 & total_above, total_under
1489 INTEGER(8) :: EXTRA_MEM, MIN_NRLADU_underL0,
1490 & min_nrladu_if_lr_lu_underl0
1491 INTEGER :: TOTAL_MBYTES
1492 LOGICAL :: PERLU_ON, MEM_EFF_ALLOCATED, EFF
1493 LOGICAL :: UNDER_L0_OMP, SUM_OF_PEAKS
1494 INTEGER :: BLR_CASE, ITH
1495 INTEGER,
PARAMETER :: IDUMMY = -9999
1496 LOGICAL,
PARAMETER :: =.false.
1497 keep8_23_savetmp = keep8(23)
1499 under_l0_omp = .true.
1501 mem_eff_allocated = .true.
1506 & myid, n, nelt, na(1), lna, keep8(28),
1508 & nslaves, total_mbytes, eff , keep(201),
1509 & blr_strat, perlu_on, total_bytes,
1510 & idummy, bdummy , mem_eff_allocated,
1512 & , i8_l0_omp, nbstats_i8, nbcols_i8
1514 total_static = total_bytes
1515 keep8(23) = keep8_23_savetmp
1516 mem_eff_allocated = .false.
1519 sum_of_peaks = .true.
1520 under_l0_omp = .false.
1522 & myid, n, nelt, na(1), lna, keep8(28),
1524 & nslaves, total_mbytes, eff , keep(201),
1525 & blr_strat, perlu_on, total_bytes,
1526 & blr_case, sum_of_peaks , mem_eff_allocated,
1528 & , i8_l0_omp, nbstats_i8, nbcols_i8
1530 total_above = total_bytes
1531 IF (perlu_on.AND.keep(201).LE.0)
THEN
1532 IF (blr_strat.GT.0)
THEN
1533 min_nrladu_if_lr_lu_underl0 = i8_l0_omp(4,1)
1535 min_nrladu_if_lr_lu_underl0 =
min(
1536 & min_nrladu_if_lr_lu_underl0, i8_l0_omp(4,ith)
1539 extra_mem = int(keep(12),8)*
1540 & ( min_nrladu_if_lr_lu_underl0 / 100_8 + 1_8 )
1542 min_nrladu_underl0 = i8_l0_omp(1,1)
1544 min_nrladu_underl0 =
min(
1545 & min_nrladu_underl0, i8_l0_omp(1,ith)
1548 extra_mem = int(keep(12),8)*
1549 & ( min_nrladu_underl0 / 100_8 + 1_8 )
1551 total_above = total_above + extra_mem
1553 under_l0_omp = .true.
1555 & myid, n, nelt, na(1), lna, keep8(28),
1557 & nslaves, total_mbytes, eff , keep(201),
1558 & blr_strat, perlu_on, total_bytes,
1559 & blr_case, sum_of_peaks , mem_eff_allocated,
1561 & , i8_l0_omp, nbstats_i8, nbcols_i8
1563 total_under = total_bytes
1564 keep8(77) = (
max(total_under,total_above) - total_static )
1571 REAL M_ARRAY(M_SIZE)
1573 parameter(zero=0.0e0)
1578 & N, INODE, IFATH, KEEP,
1579 & IOLDPS, HF, IW, LIW,
1580 & NROWS, NCOLS, NPIV,
1581 & NELIM, NFS4FATHER,
1585 INTEGER,
INTENT(IN) :: N, INODE, IFATH
1586 INTEGER,
INTENT(IN) :: KEEP(500)
1587 INTEGER,
INTENT(IN) :: IOLDPS, HF, LIW, NROWS, NCOLS
1588 INTEGER,
INTENT(IN) :: NPIV, , NFS4FATHER
1589 INTEGER,
INTENT(IN) :: IW(LIW)
1590 INTEGER,
INTENT(OUT):: NBROWSinF
1593 IF ( (keep(219).EQ.0).OR.(keep(50).NE.2).OR.
1594 & (nfs4father.LE.0) )
THEN
1597 shiftfirstrowinfront = ncols-npiv-nelim-nrows
1598 IF (shiftfirstrowinfront.EQ.0)
THEN
1599 nbrowsinf =
min(nrows, nfs4father-nelim)
1600 ELSE IF (shiftfirstrowinfront.LT.nfs4father-nelim)
THEN
1601 nbrowsinf =
min(nrows,nfs4father-nelim-shiftfirstrowinfront)
1608 & N, INODE, IFATH, FILS, PERM, KEEP,
1609 & IOLDPS, HF, IW, LIW, NFRONT, NASS1,
1610 & ESTIM_NFS4FATHER_ATSON
1613 INTEGER,
INTENT(IN) :: N, INODE, IFATH
1614 INTEGER,
INTENT(IN) :: FILS(N), PERM(N), KEEP(500)
1615 INTEGER,
INTENT(IN) :: IOLDPS, HF, , NFRONT, NASS1
1616 INTEGER,
INTENT(IN) :: IW(LIW)
1617 INTEGER,
INTENT(OUT)::
1618 INTEGER :: J, , IN, NCB, I, IPOS
1619 estim_nfs4father_atson = 0
1627 ipos = ioldps + hf + nass1
1628 estim_nfs4father_atson = 0
1630 j = iw(ipos+estim_nfs4father_atson)
1631 IF (perm(j).LE.perm(j_lastfs))
THEN
1632 estim_nfs4father_atson =
1633 & estim_nfs4father_atson+1
1641 & A,ASIZE,NCOL,NROW,
1642 & M_ARRAY,NMAX,PACKED_CB,LROW1)
1645 INTEGER NROW,NCOL,NMAX,LROW1
1650 INTEGER(8):: APOS, J, LROW
1652 parameter(zero=0.0e0)
1663 DO j=1_8,int(nmax,8)
1664 tmp = abs(a(apos+j))
1665 IF(tmp.GT.m_array(j)) m_array(j) = tmp
1668 IF (packed_cb) lrow=lrow+1_8
1675 TYPE(cmumps_struc) :: id
1676 INTEGER(8) NB_INT, NB_CMPLX
1677 INTEGER(8) NB_REAL,NB_CHAR
1682 IF (
associated(id%IS)) nb_int=nb_int+
size(id%IS)
1683 nb_int=nb_int+
size(id%KEEP)
1684 nb_int=nb_int+
size(id%ICNTL)
1685 nb_int=nb_int+
size(id%INFO)
1686 nb_int=nb_int+
size(id%INFOG)
1687 IF (
associated(id%MAPPING)) nb_int=nb_int+
size(id%MAPPING)
1688 IF (
associated(id%STEP)) nb_int=nb_int+
size(id%STEP)
1689 IF (
associated(id%NE_STEPS )) nb_int=nb_int+
size(id%NE_STEPS )
1690 IF (
associated(id%ND_STEPS)) nb_int=nb_int+
size(id%ND_STEPS)
1691 IF (
associated(id%Step2node)) nb_int=nb_int+
size(id%Step2node)
1692 IF (
associated(id%FRERE_STEPS)) nb_int=nb_int+
size(id%FRERE_STEPS)
1693 IF (
associated(id%DAD_STEPS)) nb_int=nb_int+
size(id%DAD_STEPS)
1694 IF (
associated(id%FILS)) nb_int=nb_int+
size(id%FILS)
1695 IF (
associated(id%PTRAR))
1696 & nb_int=nb_int+
size(id%PTRAR)* id%KEEP(10)
1697 IF (
associated(id%FRTPTR)) nb_int=nb_int+
size(id%FRTPTR)
1698 nb_int=nb_int+
size(id%KEEP8) * id%KEEP(10)
1699 IF (
associated(id%PTRFAC)) nb_int=nb_int+
size(id%PTRFAC) *
1701 IF (
associated(id%FRTELT)) nb_int=nb_int+
size(id%FRTELT)
1702 IF (
associated(id%NA)) nb_int=nb_int+
size(id%NA)
1703 IF (
associated(id%PROCNODE_STEPS))
1704 & nb_int=nb_int+
size(id%PROCNODE_STEPS)
1705 IF (
associated(id%PTLUST_S)) nb_int=nb_int+
size(id%PTLUST_S)
1706 IF (
associated(id%INTARR)) nb_int=nb_int+id%KEEP8(27)
1707 IF (
associated(id%ELTPROC)) nb_int=nb_int+
size(id%ELTPROC)
1708 IF (
associated(id%CANDIDATES))
1709 & nb_int=nb_int+
size(id%CANDIDATES)
1710 IF (
associated(id%SYM_PERM))
1711 & nb_int=nb_int+
size(id%SYM_PERM)
1712 IF (
associated(id%UNS_PERM))
1713 & nb_int=nb_int+
size(id%UNS_PERM)
1714 IF (
associated(id%ISTEP_TO_INIV2))
1715 & nb_int=nb_int+
size(id%ISTEP_TO_INIV2)
1716 IF (
associated(id%FUTURE_NIV2))
1717 & nb_int=nb_int+
size(id%FUTURE_NIV2)
1718 IF (
associated(id%TAB_POS_IN_PERE))
1719 & nb_int=nb_int+
size(id%TAB_POS_IN_PERE)
1720 IF (
associated(id%I_AM_CAND))
1721 & nb_int=nb_int+
size(id%I_AM_CAND)
1722 IF (
associated(id%MEM_DIST))
1723 & nb_int=nb_int+
size(id%MEM_DIST)
1724 IF (
associated(id%POSINRHSCOMP_ROW))
1725 & nb_int=nb_int+
size(id%POSINRHSCOMP_ROW)
1726 IF(id%POSINRHSCOMP_COL_ALLOC.AND.
associated(id%POSINRHSCOMP_COL))
1727 & nb_int=nb_int+
size(id%POSINRHSCOMP_COL)
1728 IF (
associated(id%MEM_SUBTREE))
1729 & nb_real=nb_real+
size(id%MEM_SUBTREE)*(id%KEEP(35)/id%KEEP(16))
1730 IF (
associated(id%MY_ROOT_SBTR))
1731 & nb_int=nb_int+
size(id%MY_ROOT_SBTR)
1732 IF (
associated(id%MY_FIRST_LEAF))
1733 & nb_int=nb_int+
size(id%MY_FIRST_LEAF)
1734 IF (
associated(id%MY_NB_LEAF)) nb_int=nb_int+
size(id%MY_NB_LEAF)
1735 IF (
associated(id%DEPTH_FIRST)) nb_int=nb_int+
size(id%DEPTH_FIRST)
1736 IF (
associated(id%DEPTH_FIRST_SEQ))
1737 & nb_int=nb_int+
size(id%DEPTH_FIRST_SEQ)
1738 IF (
associated(id%SBTR_ID)) nb_int=nb_int+
size(id%SBTR_ID)
1739 IF (
associated(id%SCHED_DEP)) nb_int=nb_int+
size(id%SCHED_DEP)
1740 IF (
associated(id%SCHED_GRP)) nb_int=nb_int+
size(id%SCHED_GRP)
1741 IF (
associated(id%SCHED_SBTR)) nb_int=nb_int+
size(id%SCHED_SBTR)
1742 IF (
associated(id%CROIX_MANU)) nb_int=nb_int+
size(id%CROIX_MANU)
1743 IF (
associated(id%COST_TRAV))
1744 & nb_real=nb_real+
size(id%COST_TRAV)*(id%KEEP(35)/id%KEEP(16))
1745 IF (
associated(id%CB_SON_SIZE)) nb_int=nb_int+
size(id%CB_SON_SIZE)
1746 IF (
associated(id%OOC_INODE_SEQUENCE))
1747 & nb_int=nb_int+
size(id%OOC_INODE_SEQUENCE)
1748 IF (
associated(id%OOC_SIZE_OF_BLOCK))
1749 & nb_int=nb_int+
size(id%OOC_SIZE_OF_BLOCK)*id%KEEP(10)
1750 IF (
associated(id%OOC_VADDR))
1751 & nb_int=nb_int+
size(id%OOC_VADDR)*id%KEEP(10)
1752 IF (
associated(id%OOC_TOTAL_NB_NODES))
1753 & nb_int=nb_int+
size(id%OOC_TOTAL_NB_NODES)
1754 IF (
associated(id%OOC_NB_FILES))
1755 & nb_int=nb_int+
size(id%OOC_NB_FILES)
1756 IF (
associated(id%OOC_FILE_NAME_LENGTH))
1757 & nb_int=nb_int+
size(id%OOC_FILE_NAME_LENGTH)
1758 IF (
associated(id%PIVNUL_LIST)) nb_int=nb_int+
size(id%PIVNUL_LIST)
1759 IF (
associated(id%SUP_PROC)) nb_int=nb_int+
size(id%SUP_PROC)
1760 IF (
associated(id%IPTR_WORKING))
1761 & nb_int=nb_int+
size(id%IPTR_WORKING)
1762 IF (
associated(id%WORKING)) nb_int=nb_int+
size(id%WORKING)
1763 IF (
associated(id%LRGROUPS))
1764 & nb_int=nb_int+
size(id%LRGROUPS)
1765 IF (
associated(id%IPOOL_B_L0_OMP))
1766 & nb_int=nb_int+
size(id%IPOOL_B_L0_OMP)
1767 IF (
associated(id%IPOOL_A_L0_OMP))
1768 & nb_int=nb_int+
size(id%IPOOL_A_L0_OMP)
1769 IF (
associated(id%PHYS_L0_OMP))
1770 & nb_int=nb_int+
size(id%PHYS_L0_OMP)
1771 IF (
associated(id%VIRT_L0_OMP))
1772 & nb_int=nb_int+
size(id%VIRT_L0_OMP)
1773 IF (
associated(id%PERM_L0_OMP))
1774 & nb_int=nb_int+
size(id%PERM_L0_OMP)
1775 IF (
associated(id%PTR_LEAFS_L0_OMP))
1776 & nb_int=nb_int+
size(id%PTR_LEAFS_L0_OMP)
1777 IF (
associated(id%L0_OMP_MAPPING))
1778 & nb_int=nb_int+
size(id%L0_OMP_MAPPING)
1779 IF (
associated(id%SINGULAR_VALUES))
1780 & nb_real=nb_real+
size(id%SINGULAR_VALUES)
1781 IF (
associated(id%root%RG2L_COL))
1782 & nb_int=nb_int+
size(id%root%RG2L_COL)
1783 IF (
associated(id%root%RG2L_ROW))
1784 & nb_int=nb_int+
size(id%root%RG2L_ROW)
1785 IF (
associated(id%root%IPIV))
1786 & nb_int=nb_int+
size(id%root%IPIV)
1787 IF (
associated(id%root%RHS_CNTR_MASTER_ROOT))
1788 & nb_cmplx=nb_cmplx+
size(id%root%RHS_CNTR_MASTER_ROOT)
1789 IF (
associated(id%root%SCHUR_POINTER))
1790 & nb_cmplx=nb_cmplx+
size(id%root%SCHUR_POINTER)
1791 IF (
associated(id%root%QR_TAU))
1792 & nb_cmplx=nb_cmplx+
size(id%root%QR_TAU)
1793 IF (
associated(id%root%RHS_ROOT))
1794 & nb_cmplx=nb_cmplx+
size(id%root%RHS_ROOT)
1795 IF (
associated(id%root%SVD_U))
1796 & nb_cmplx=nb_cmplx+
size(id%root%SVD_U)
1797 IF (
associated(id%root%SVD_VT))
1798 & nb_cmplx=nb_cmplx+
size(id%root%SVD_VT)
1799 IF (
associated(id%root%SINGULAR_VALUES))
1800 & nb_real=nb_real+
size(id%root%SINGULAR_VALUES)
1801 IF (
associated(id%DBLARR)) nb_cmplx=nb_cmplx+id%KEEP8(26)
1802 IF (
associated(id%RHSCOMP)) nb_cmplx = nb_cmplx + id%KEEP8(25)
1803 IF (
associated(id%S)) nb_cmplx=nb_cmplx+id%KEEP8(23)
1804 IF (
associated(id%COLSCA).AND.(id%KEEP(52).NE.-1))
1805 & nb_real=nb_real+
size(id%COLSCA)
1806 IF (
associated(id%ROWSCA).AND.(id%KEEP(52).NE.-1))
1807 & nb_real=nb_real+
size(id%ROWSCA)
1808 nb_real=nb_real+
size(id%CNTL)
1809 nb_real=nb_real+
size(id%RINFO)
1810 nb_real=nb_real+
size(id%RINFOG)
1811 nb_real=nb_real+
size(id%DKEEP)
1812 nb_char=nb_char+len(id%VERSION_NUMBER)
1813 nb_char=nb_char+len(id%OOC_TMPDIR)
1814 nb_char=nb_char+len(id%OOC_PREFIX)
1815 nb_char=nb_char+len(id%WRITE_PROBLEM)
1816 nb_char=nb_char+len(id%SAVE_DIR)
1817 nb_char=nb_char+len(id%SAVE_PREFIX)
1818 nb_cmplx = nb_cmplx + nb_real/2_8
1819 nb_cmplx = nb_cmplx + id%KEEP8(71) + id%KEEP8
1825 COMPLEX,
intent(in) :: (N8)
1826 COMPLEX,
intent(out) :: DEST(N8)
1827 INTEGER(8) :: SHIFT8, HUG8
1829 IF(int(huge(i4size),8) .EQ. int(huge(hug8),8))
THEN
1830 CALL ccopy(n8, src(1), 1, dest(1), 1)
1832 hug8=int(huge(i4size),8)
1833 DO i = 1, int(( n8 + hug8 - 1_8 ) / hug8)
1834 shift8 = 1_8 + int(i-1,8) * hug8
1835 i4size = int(
min(hug8, n8-shift8+1_8))
1836 CALL ccopy(i4size, src(shift8), 1, dest(shift8), 1)
1843 INTEGER(8),
INTENT(IN) :: THE_SIZE8
1844 COMPLEX,
INTENT(IN) :: THE_ADDRESS(THE_SIZE8)
1849 & ( strat, typefile,
1850 & afac, lafac, monbloc,
1851 & lnextpiv2bewritten, unextpiv2bewritten,
1853 & myid, filesize, ierr , last_call)
1857 TYPE(io_block),
INTENT(INOUT):: MonBloc
1859 INTEGER,
INTENT(IN) :: STRAT, LIWFAC, MYID, TYPEFile
1860 INTEGER,
INTENT(INOUT) :: IW(0:LIWFAC-1)
1861 COMPLEX,
INTENT(IN) :: AFAC(LAFAC)
1862 INTEGER,
INTENT(INOUT) :: LNextPiv2beWritten, UNextPiv2beWritten
1863 INTEGER(8),
INTENT(INOUT) :: FILESIZE
1864 INTEGER,
INTENT(OUT) :: IERR
1865 LOGICAL,
INTENT(IN) :: LAST_CALL
1867 & ( strat, typefile,
1868 & afac, lafac, monbloc,
1869 & lnextpiv2bewritten, unextpiv2bewritten,
1871 & myid, filesize, ierr , last_call)
1875 & NBCOL_SON, NBROW_SON, INDCOL_SON, INDROW_SON,
1876 & LD_SON, VAL_SON, TAG, SUBSET_ROW, SUBSET_COL,
1877 & NSUBSET_ROW, NSUBSET_COL,
1879 & NPROW, NPCOL, MBLOCK, RG2L_ROW, RG2L_COL,
1880 & NBLOCK, PDEST, COMM, IERR ,
1881 & TAB, TABSIZE, TRANSP, SIZE_PACK,
1882 & N_ALREADY_SENT, KEEP, BBPCBP )
1885 INTEGER N, ISON, NBCOL_SON, NBROW_SON, NSUBSET_ROW, NSUBSET_COL
1886 INTEGER NPROW, NPCOL, MBLOCK, NBLOCK, LD_SON
1888 INTEGER PDEST, TAG, COMM, IERR
1889 INTEGER INDCOL_SON( NBCOL_SON ), INDROW_SON( NBROW_SON )
1890 INTEGER SUBSET_ROW( NSUBSET_ROW ),
1891INTEGER :: RG2L_ROW(N)
1892 INTEGER :: RG2L_COL()
1893 INTEGER NSUPROW, NSUPCOL
1894 INTEGER(8),
INTENT(IN) :: TABSIZE
1897 COMPLEX VAL_SON( LD_SON, * ), TAB(*)
1899 INTEGER N_ALREADY_SENT
1901 & nbcol_son, nbrow_son, indcol_son
1902 & ld_son, val_son, tag, subset_row, subset_col,
1903 & nsubset_row, nsubset_col,
1905 & nprow, npcol, mblock, rg2l_row, rg2l_col,
1906 & nblock, pdest, comm, ierr ,
1907 & tab, tabsize, transp, size_pack,
1908 & n_already_sent, keep, bbpcbp )
1912 & A, LA, POSELT, IFLAG, IERROR, NFRONT,
1913 & BEGS_BLR_L, sizeBEGS_BLR_L,
1914 & BEGS_BLR_U, sizeBEGS_BLR_U, CURRENT_BLR, BLR_L, NB_BLR_L,
1916 & NB_BLR_U, NELIM, LBANDSLAVE, ISHIFT, NIV, SYM,
1917 & MIDBLK_COMPRESS, TOLEPS, TOL_OPT, KPERCENT)
1920 INTEGER(8),
intent(in) :: LA
1921 INTEGER(8),
intent(in) :: POSELT
1922 INTEGER,
intent(in) :: NFRONT, NB_BLR_L, NB_BLR_U,
1924 & nelim, niv, sym, tol_opt
1925 INTEGER,
intent(inout) :: IFLAG, IERROR
1926 LOGICAL,
intent(in) :: LBANDSLAVE
1927 INTEGER,
intent(in) :: ISHIFT
1928 COMPLEX,
intent(inout) :: A(LA)
1929 TYPE(
lrb_type),
intent(in) :: BLR_U(NB_BLR_U-CURRENT_BLR)
1930 TYPE(
lrb_type),
intent(in) :: BLR_L(NB_BLR_L-CURRENT_BLR)
1931 INTEGER :: sizeBEGS_BLR_L, sizeBEGS_BLR_U
1932 INTEGER :: BEGS_BLR_L(sizeBEGS_BLR_L)
1933 INTEGER :: BEGS_BLR_U(sizeBEGS_BLR_U)
1934 INTEGER,
intent(in) :: MIDBLK_COMPRESS, KPERCENT
1935 REAL,
intent(in) :: TOLEPS
1937 & a, la, poselt, iflag, ierror, nfront,
1938 & begs_blr_l, begs_blr_u, current_blr, blr_l, nb_blr_l,
1940 & nb_blr_u, nelim, lbandslave, ishift, niv, sym,
1941 & midblk_compress, toleps, tol_opt, kpercent)
1945 & BEGS_BLR, sizeBEGS_BLR, BEGS_BLR_U, sizeBEGS_BLR_U,
1946 & NB_ROWS, NB_COLS, NB_INASM,
1947 & NROWS, NCOLS, INODE,
1948 & IWHANDLER, SYM, NIV, IFLAG, IERROR,
1949 & TOLEPS, TOL_OPT, KPERCENT, K489, CB_LRB,
1950 & WORK, TAU, JPVT, LWORK, RWORK, BLOCK,
1951 & MAXI_CLUSTER, KEEP8, OMP_NUM,
1952 & NFS4FATHER, NPIV, NVSCHUR_K253, KEEP,
1960 INTEGER(8),
intent(in) :: LA_PTR
1961 COMPLEX,
intent(inout) :: A_PTR(LA_PTR)
1962 INTEGER(8),
intent(in) :: POSELT
1963 INTEGER :: sizeBEGS_BLR, sizeBEGS_BLR_U
1964 INTEGER,
intent(in) :: LDA, NB_ROWS, NB_COLS, NB_INASM
1965 INTEGER,
INTENT(IN) :: NIV, IWHANDLER, MAXI_CLUSTER,
1966 & kpercent, tol_opt, lwork, omp_num
1967 INTEGER,
INTENT(IN) :: , NROWS, NCOLS, INODE, SYM
1968 INTEGER,
intent(inout) :: IFLAG, IERROR
1969 TYPE(
lrb_type),
intent(inout) :: CB_LRB(NB_ROWS,NB_COLS)
1970 INTEGER :: BEGS_BLR(sizeBEGS_BLR), BEGS_BLR_U(sizeBEGS_BLR_U)
1971 REAL :: RWORK(2*MAXI_CLUSTER*OMP_NUM)
1972 COMPLEX :: BLOCK(MAXI_CLUSTER, MAXI_CLUSTER*OMP_NUM)
1973 COMPLEX :: WORK(LWORK*OMP_NUM), TAU(MAXI_CLUSTER*OMP_NUM)
1974 INTEGER :: JPVT(MAXI_CLUSTER*OMP_NUM)
1975 INTEGER(8) :: KEEP8(150)
1976 REAL,
intent(in) :: TOLEPS
1977 INTEGER,
INTENT(in) :: NFS4FATHER, NPIV, NVSCHUR_K253, KEEP(500)
1978 REAL :: M_ARRAY(max(NFS4FATHER,1))
1979 INTEGER,
intent(in) :: NELIM
1980 INTEGER,
intent(in) :: NBROWSinF
1982 & begs_blr, begs_blr_u,
1983 & nb_rows, nb_cols, nb_inasm,
1984 & nrows, ncols, inode,
1985 & iwhandler, sym, niv, iflag, ierror,
1986 & toleps, tol_opt, kpercent, k489, cb_lrb,
1987 & work, tau, jpvt, lwork, rwork, block,
1988 & maxi_cluster, keep8,
1989 & nfs4father, npiv, nvschur_k253, keep,
1992 & nbrowsinf=nbrowsinf
1997 & A, LA, POSELT, IFLAG, IERROR, NFRONT,
1998 & BEGS_BLR, sizeBEGS_BLR,
1999 & NB_BLR, TOLEPS, TOL_OPT, K473, BLR_PANEL,
2001 & DIR, WORK, TAU, JPVT,
2002 & LWORK, RWORK, BLOCK,
2003 & MAXI_CLUSTER, NELIM,
2004 & LBANDSLAVE, NPIV, ISHIFT, NIV, KPERCENT,
2011 INTEGER(8),
intent(in) :: LA, POSELT
2012 INTEGER,
intent(in) :: NFRONT, NB_BLR, CURRENT_BLR, NIV
2013 INTEGER,
intent(in) :: OMP_NUM
2014 INTEGER,
intent(inout) :: IFLAG, IERROR
2015 TYPE(
lrb_type),
intent(inout) :: BLR_PANEL(NB_BLR-CURRENT_BLR)
2016 COMPLEX,
intent(inout) :: A(LA)
2017 INTEGER :: MAXI_CLUSTER
2018 REAL :: RWORK(2*MAXI_CLUSTER*OMP_NUM)
2019 COMPLEX :: BLOCK(MAXI_CLUSTER,MAXI_CLUSTER*OMP_NUM)
2020 COMPLEX :: WORK(MAXI_CLUSTER*MAXI_CLUSTER*OMP_NUM)
2021 COMPLEX :: TAU(MAXI_CLUSTER*OMP_NUM)
2022 INTEGER :: JPVT(MAXI_CLUSTER*OMP_NUM)
2023 INTEGER :: sizeBEGS_BLR
2024 INTEGER :: BEGS_BLR(sizeBEGS_BLR)
2025 INTEGER(8) :: KEEP8(150)
2026 INTEGER,
intent(in) :: NPIV, ISHIFT, KPERCENT, K473,
2028 LOGICAL,
intent(in) :: LBANDSLAVE
2029 INTEGER :: LWORK, NELIM
2030 REAL,
intent(in) :: TOLEPS
2031 CHARACTER(len=1) :: DIR
2032 CALL CMUMPS_COMPRESS_PANEL(
2033 & A, LA, POSELT, IFLAG, IERROR, NFRONT,
2034 & BEGS_BLR, NB_BLR, TOLEPS, TOL_OPT, K473, BLR_PANEL,
2036 & DIR, WORK, TAU, JPVT,
2037 & LWORK, RWORK, BLOCK,
2038 & maxi_cluster, nelim,
2039 & lbandslave, npiv, ishift, niv, kpercent,
2045 & A, LA, POSELT, LDA11,
2046 & LDA21, COPY_DENSE_BLOCKS,
2047 & BEGS_BLR_DIAG, BEGS_BLR_FIRST_OFFDIAG,
2048 & NB_BLR, BLR_PANEL, CURRENT_BLR, DIR,
2053 INTEGER(8),
intent(in) :: LA
2054 COMPLEX,
intent(inout) :: A(LA)
2055 INTEGER(8),
intent(in) :: POSELT
2056 LOGICAL,
intent(in) :: COPY_DENSE_BLOCKS
2057 INTEGER,
intent(in) :: NB_BLR, CURRENT_BLR
2058 INTEGER,
intent(in) :: BEGS_BLR_DIAG,
2059 & begs_blr_first_offdiag
2060 TYPE(
lrb_type),
intent(inout) :: BLR_PANEL(NB_BLR-CURRENT_BLR)
2061 CHARACTER(len=1) :: DIR
2062 INTEGER,
intent(in) :: DECOMP_TIMER
2063 INTEGER,
intent(in) :: LDA11, LDA21
2064 CALL CMUMPS_DECOMPRESS_PANEL(A, LA, POSELT, LDA11,
2065 & LDA21, COPY_DENSE_BLOCKS,
2066 & BEGS_BLR_DIAG, BEGS_BLR_FIRST_OFFDIAG,
2067 & nb_blr, blr_panel, current_blr, dir,
2072 & A_U, LA_U, UPOS, A_L, LA_L, LPOS, IFLAG, IERROR, LDU, LDL,
2073 & BEGS_BLR_L, sizeBEGS_BLR_L, CURRENT_BLR, BLR_L, NB_BLR_L,
2074 & FIRST_BLOCK, NELIM, UTRANS)
2078 INTEGER(8),
intent(in) :: LA_U, LA_L
2079 INTEGER(8),
intent(in) :: UPOS, LPOS
2080 INTEGER,
intent(in) :: LDU, LDL, NB_BLR_L, CURRENT_BLR,
2081 & NELIM, FIRST_BLOCK
2082 CHARACTER(len=1),
INTENT(IN) :: UTRANS
2083 INTEGER,
intent(inout) :: IFLAG, IERROR
2084 COMPLEX,
TARGET,
intent(inout) :: A_L(LA_L), A_U(LA_U)
2085 TYPE(
lrb_type),
intent(in) :: BLR_L(NB_BLR_L-CURRENT_BLR)
2086 INTEGER,
INTENT(in) :: sizeBEGS_BLR_L
2087 INTEGER :: BEGS_BLR_L(sizeBEGS_BLR_L)
2089 & a_u, la_u, upos, a_l, la_l, lpos, iflag, ierror, ldu
2091 & first_block, nelim, utrans)
2095 & IFLAG, IERROR, NCOL, NROW,
2096 & A_BLOCFACTO, LA_BLOCFACTO, LD_BLOCFACTO,
2097 & BEGS_BLR_LM, sizeBEGS_BLR_LM,
2098 & NB_BLR_LM, BLR_LM, ISHIFT_LM,
2099 & BEGS_BLR_LS, sizeBEGS_BLR_LS,
2100 & NB_BLR_LS, BLR_LS, ISHIFT_LS,
2101 & CURRENT_BLR_LM, CURRENT_BLR_LS,
2103 & MAXI_CLUSTER, OMP_NUM,
2104 & MIDBLK_COMPRESS, TOLEPS, TOL_OPT, KPERCENT
2109 INTEGER(8),
intent(in) :: LA, LA_BLOCFACTO
2110 COMPLEX,
intent(inout) :: A(LA)
2111 COMPLEX,
intent(in) :: A_BLOCFACTO(LA_BLOCFACTO)
2112 INTEGER(8),
intent(in) :: POSELT
2113 INTEGER,
intent(inout) :: IFLAG, IERROR
2114 INTEGER,
intent(in) :: NCOL, NROW, IW2(*), TOL_OPT,
2115 & maxi_cluster, omp_num, ld_blocfacto
2116 INTEGER,
intent(in) :: NB_BLR_LM, NB_BLR_LS,
2117 & ishift_lm, ishift_ls,
2118 & current_blr_lm, current_blr_ls
2119 COMPLEX,
INTENT(INOUT) ::
2120 & block(maxi_cluster,maxi_cluster*omp_num)
2121 INTEGER :: sizeBEGS_BLR_LM, sizeBEGS_BLR_LS
2122 INTEGER :: BEGS_BLR_LM(sizeBEGS_BLR_LM)
2123 INTEGER :: BEGS_BLR_LS(sizeBEGS_BLR_LS)
2124 TYPE(LRB_TYPE),
intent(in) :: BLR_LM(NB_BLR_LM-CURRENT_BLR_LM),
2125 & BLR_LS(NB_BLR_LS-CURRENT_BLR_LS)
2126 INTEGER,
intent(in) :: MIDBLK_COMPRESS, KPERCENT
2127 REAL,
intent(in) :: TOLEPS
2128 CALL CMUMPS_BLR_SLV_UPD_TRAIL_LDLT(A
2133 & current_blr_lm, current_blr_ls,
2136 & midblk_compress, toleps, tol_opt, kpercent
2143 INTEGER :: SIZE_INNER, NASS, KEEP(500)
2144 IF (NASS.LT.KEEP(4)) THEN
2146 ELSE IF (nass .GT. keep(3))
THEN
2147 size_inner =
min( keep(6), nass )
2149 size_inner =
min( keep(5), nass )
subroutine cmumps_bdc_error(myid, slavef, comm, keep)
subroutine cmumps_compre_new(n, keep, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, ptrist, ptrast, step, pimaster, pamaster, lrlus, xsize, comp, acc_time, myid, slavef, procnode_steps, dad)
subroutine cmumps_free_block_cb_static(ssarbr, myid, n, iposblock, iw, liw, lrlu, lrlus, iptrlu, iwposcb, la, keep, keep8, in_place_stats)
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine, public cmumps_buf_send_contrib_type3(n, ison, nbcol_son, nbrow_son, indcol_son, indrow_son, ld_son, val_son, tag, subset_row, subset_col, nsubset_row, nsubset_col, nsuprow, nsupcol, nprow, npcol, mblock, rg2l_row, rg2l_col, nblock, pdest, comm, ierr, tab, tabsize, transp, size_pack, n_already_sent, keep, bbpcbp)
subroutine cmumps_dm_free_block(xxg_status, dynptr, sizfr8, atomic_updates, keep8)
subroutine cmumps_dm_set_ptr(address, sizfr8, cbptr)
subroutine cmumps_dm_set_dynptr(cb_state, a, la, pamaster_or_ptrast, ixxd, ixxr, son_a, iachk, recsize)
subroutine cmumps_blr_upd_nelim_var_l(a_u, la_u, upos, a_l, la_l, lpos, iflag, ierror, ldu, ldl, begs_blr_l, current_blr, blr_l, nb_blr_l, first_block, nelim, utrans)
subroutine cmumps_blr_update_trailing(a, la, poselt, iflag, ierror, nfront, begs_blr_l, begs_blr_u, current_blr, blr_l, nb_blr_l, blr_u, nb_blr_u, nelim, lbandslave, ishift, niv, sym, midblk_compress, toleps, tol_opt, kpercent)
subroutine cmumps_blr_slv_upd_trail_ldlt(a, la, poselt, iflag, ierror, ncol, nrow, a_blocfacto, la_blocfacto, ld_blocfacto, begs_blr_lm, nb_blr_lm, blr_lm, ishift_lm, begs_blr_ls, nb_blr_ls, blr_ls, ishift_ls, current_blr_lm, current_blr_ls, iw2, block, maxi_cluster, midblk_compress, toleps, tol_opt, kpercent)
subroutine cmumps_compress_panel(a, la, poselt, iflag, ierror, nfront, begs_blr, nb_blr, toleps, tol_opt, k473, blr_panel, current_blr, dir, work, tau, jpvt, lwork, rwork, block, maxi_cluster, nelim, lbandslave, npiv, ishift, niv, kpercent, keep8, k480, beg_i_in, end_i_in, frswap)
subroutine cmumps_decompress_panel(a, la, poselt, lda11, lda21, copy_dense_blocks, begs_blr_diag, begs_blr_first_offdiag, nb_blr, blr_panel, current_blr, dir, decomp_timer, beg_i_in, end_i_in, only_nelim_in, cbasm_tofix_in)
subroutine cmumps_compress_cb(a, la, poselt, lda, begs_blr, begs_blr_u, nb_rows, nb_cols, nb_inasm, nrows, ncols, inode, iwhandler, sym, niv, iflag, ierror, toleps, tol_opt, kpercent, k489, cb_lrb, work, tau, jpvt, lwork, rwork, block, maxi_cluster, keep8, nfs4father, npiv, nvschur_k253, keep, m_array, nelim, nbrowsinf)
subroutine, public cmumps_load_mem_update(ssarbr, process_bande_arg, mem_value, new_lu, inc_mem_arg, keep, keep8, lrlus)
subroutine, public cmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)
subroutine, public cmumps_ooc_io_lu_panel(strat, typefile, afac, lafac, monbloc, lnextpiv2bewritten, unextpiv2bewritten, iw, liwfac, myid, filesize, ierr, last_call)
subroutine, public cmumps_new_factor(inode, ptrfac, keep, keep8, a, la, size, ierr)
subroutine cmumps_set_static_ptr(array)