15 &MYID,N,IOLDPS,TYPE,IW, LIW, A, LA,
16 &POSFAC, LRLU, LRLUS, IWPOS, PTRAST, PTRFAC, STEP, KEEP,KEEP8,
26 INTEGER IOLDPS,
TYPE, LIW, N, KEEP(500)
27 INTEGER(8) :: , LA, POSFAC, LRLU, LRLUS
28 INTEGER(8) :: PTRAST(KEEP(28))
34 INTEGER (8) :: PTRFAC((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.GE.
LRCOMPRESS_PANEL = (IW(IOLDPS+XXLR)2)
67.AND..NE..OR.
IF ( (NSLAVES > 0 TYPE 2)
68.eq..AND..EQ.
& (NSLAVES 0 TYPE 2 ) ) THEN
69 WRITE(*,*) ' error 3 compresslu: problem with level of inode
'
72.EQ.
IF ( KEEP(50) 0 ) THEN
73 SIZELU = int(LCONT + NROW, 8) * int(NPIV,8)
75.GT.
IF ( KEEP(459) 1 ) THEN
76 CALL MUMPS_LDLTPANEL_STORAGE( NPIV, KEEP,
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)
83 CALL MUMPS_GETI8(SIZEXXR, IW(IOLDPS+XXR))
84 SIZECB = SIZEXXR - SIZELU
85 CALL MUMPS_SUBTRI8TOARRAY( IW(IOLDPS+XXR), SIZECB )
87.OR..AND..EQ.
& (LRCOMPRESS_PANELKEEP(486)2)
92.EQ.
IF (SIZECB0_8) THEN
96.EQ.
IF (KEEP(201)2) THEN
97.EQ.
IF (KEEP(405) 0) THEN
98 KEEP8(31)=KEEP8(31)+SIZELU
99 CALL SMUMPS_NEW_FACTOR(INODE,PTRFAC,KEEP,KEEP8,
102!$OMP CRITICAL(critical_old_ooc)
103 KEEP8(31)=KEEP8(31)+SIZELU
104 CALL SMUMPS_NEW_FACTOR(INODE,PTRFAC,KEEP,KEEP8,
106!$OMP END CRITICAL(critical_old_ooc)
113.NE.
IF ( IOLDPS + INTSIZ IWPOS ) THEN
114 IPS = IOLDPS + INTSIZ
116.NE.
DO WHILE ( IPS IWPOS )
118 IPSSHIFT = IPS + KEEP(IXSZ)
119.LE..OR..GT.
IF ( IPSIZE 0 IPS IWPOS ) THEN
120 WRITE(*,*) " Internal error 1 SMUMPS_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.GT.
IF (IPS+IPSIZE IWPOS) THEN
131 WRITE(*,*) " Internal error 2 SMUMPS_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.LE.
DO WHILE (IPS 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.LT.
IF (IW(IPSSHIFT+4) 0) THEN
154 WRITE(*,*) " Internal error 3 SMUMPS_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.LT.
IF (IW(IPSSHIFT+3) 0) THEN
165 WRITE(*,*) " Internal error 4 SMUMPS_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.LT.
IF (IW(IPSSHIFT+4) 0) THEN
174 WRITE(*,*) " Internal error 4 SMUMPS_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.NE.
IF (SIZECB+SIZESHIFT 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.EQ.
IF (KEEP(405) 0) THEN
194 KEEP8(69) = KEEP8(69) - ITMP8
197 KEEP8(69) = KEEP8(69) - ITMP8
201.AND..EQ.
IF (LRCOMPRESS_PANELKEEP(486)2) THEN
202 CALL SMUMPS_LOAD_MEM_UPDATE(SSARBR,.FALSE.,
203 & LA-LRLUS,SIZELU-SIZESHIFT,-(SIZECB+SIZESHIFT)+SIZE_INPLACE,
206 CALL SMUMPS_LOAD_MEM_UPDATE(SSARBR,.FALSE.,
207 & LA-LRLUS,SIZELU,-SIZECB+SIZE_INPLACE,
211 END SUBROUTINE SMUMPS_COMPRESS_LU
212 SUBROUTINE SMUMPS_STACK_BAND( N, ISON,
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
222 USE SMUMPS_DYNAMIC_MEMORY_M, ONLY : SMUMPS_DM_SET_DYNPTR
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 REAL, 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.eq.
IF ( KEEP(50) 0 ) THEN
264 NFRONT = IW( PTRIST(STEP( ISON )) + 7 + KEEP(IXSZ) )
266.EQ.
IF (KEEP(201)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.
284 CALL SMUMPS_DM_SET_DYNPTR(IW(PTRIST(STEP(ISON))+XXS),
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)
289 CALL SMUMPS_OOC_IO_LU_PANEL_I
291 & SON_A(IACHK), SIZFR_SON_A, MonBloc,
292 & NextPivDummy, NextPivDummy,
293 & IW(IOLDPS_CB), LIWFAC,
294 & MYID, KEEP8(31), IFLAG,LAST_CALL )
295.EQ..OR..EQ.
IF ((NCOL_L0)(NROW_L0)) THEN
298.EQ..OR..EQ.
NONEED_TO_COPY_FACTORS = ((KEEP(201)1) (KEEP(201)-1)
299.OR..GE..AND..EQ.
& (LRSTATUS2KEEP(486)2)
301.EQ..OR..EQ.
IF ((NCOL_L0)(NROW_L0)) 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.LT..OR.
IF ( LRLU LREQA
312.GT.
& IWPOS + LREQI - 1 IWPOSCB ) THEN
313.LT.
IF ( LRLUS LREQA ) THEN
315 CALL MUMPS_SET_IERROR(LREQA - LRLUS, IERROR)
318 CALL SMUMPS_COMPRE_NEW( N, KEEP, IW, LIW, A, LA,
320 & IWPOS,IWPOSCB, PTRIST, PTRAST,
321 & STEP, PIMASTER, PAMASTER, LRLUS,
322 & KEEP(IXSZ), COMP, DKEEP(97),
323 & MYID, SLAVEF, PROCNODE_STEPS, DAD )
324.NE.
IF ( LRLU LRLUS ) THEN
328 CALL MUMPS_SET_IERROR(LREQA - LRLUS, IERROR)
331.GT.
IF ( IWPOS + LREQI - 1 IWPOSCB ) THEN
333 IERROR = IWPOS + LREQI - 1 - IWPOSCB
337.NOT.
IF ( 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.NE.
IF(KEEP(201)2)THEN
346 CALL SMUMPS_LOAD_MEM_UPDATE(.FALSE.,.FALSE.,
347 & LA-LRLUS,LREQA,LREQA,KEEP,KEEP8,LRLUS)
349 CALL SMUMPS_LOAD_MEM_UPDATE(.FALSE.,.FALSE.,
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
359 CALL MUMPS_STOREI8(0_8, IW(POSI+XXD))
360 CALL MUMPS_STOREI8(LREQA, IW(POSI+XXR))
361 CALL MUMPS_STOREI8(LREQA_HEADER, IW(POSI+XXR))
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.NOT.
IF ( 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.NOT.
IF (NONEED_TO_COPY_FACTORS) THEN
383 CALL SMUMPS_DM_SET_DYNPTR(IW(PTRIST(STEP(ISON))+XXS),
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.EQ.
IF (KEEP(201)2) THEN
398 KEEP8(31)=KEEP8(31)+LREQA
400 ITMP8 = int(NCOL_L,8) * int(NROW_L,8)
401.EQ.
IF (KEEP(405) 1) THEN
403 KEEP8(10) = KEEP8(10) + ITMP8
406 KEEP8(10) = KEEP8(10) + ITMP8
408.EQ.
IF (KEEP(201)2) THEN
409 CALL SMUMPS_NEW_FACTOR(ISON,PTRFAC,KEEP,KEEP8,A,LA,LREQA,IFLAG)
415 POSFAC = POSFAC - LREQA
417 LRLUS = LRLUS + LREQA
419 KEEP8(69) = KEEP8(69) - LREQA
421 CALL SMUMPS_LOAD_MEM_UPDATE(.FALSE.,.FALSE.,
422 & LA-LRLUS,LREQA,0_8,KEEP,KEEP8,LRLUS)
425 IF (TYPE_SON == 1) THEN
428.eq.
IF ( KEEP(50) 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.NE.
IF ( NCOL_L NASS ) THEN
439.eq.
IF ( KEEP(50)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)
447 CALL SMUMPS_LOAD_UPDATE(1,.FALSE.,FLOP1_EFFECTIVE-FLOP1,
449 CALL SMUMPS_LOAD_UPDATE(2,.FALSE.,-FLOP1,KEEP,KEEP8)
453 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
455 END SUBROUTINE SMUMPS_STACK_BAND
456 SUBROUTINE SMUMPS_FREE_BAND( N, ISON,
457 & PTRIST, PTRAST, IW, LIW, A, LA,
458 & LRLU, LRLUS, IWPOSCB,
459 & IPTRLU, STEP, MYID, KEEP, KEEP8, TYPE_SON
461 USE SMUMPS_DYNAMIC_MEMORY_M, ONLY : SMUMPS_DM_SET_PTR,
462 & SMUMPS_DM_FREE_BLOCK
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))
469 INTEGER PTRIST(KEEP(28))
474 INTEGER(8) :: DYN_SIZE
475 REAL, DIMENSION(:), POINTER :: FORTRAN_POINTER
476 INTEGER :: XXG_STATUS
477 INCLUDE 'mumps_headers.h
'
478 ISTCHK = PTRIST(STEP(ISON))
479 CALL MUMPS_GETI8( DYN_SIZE, IW(ISTCHK+XXD) )
480 XXG_STATUS = IW(ISTCHK+XXG)
481.GT.
IF (DYN_SIZE 0_8) THEN
482 CALL SMUMPS_DM_SET_PTR( PTRAST(STEP(ISON)),
483 & DYN_SIZE, FORTRAN_POINTER )
485 CALL SMUMPS_FREE_BLOCK_CB_STATIC(.FALSE.,MYID, N, ISTCHK,
486 & IW, LIW, LRLU, LRLUS, IPTRLU,
487 & IWPOSCB, LA, KEEP,KEEP8, .FALSE.
489.GT.
IF (DYN_SIZE 0_8) THEN
490 CALL SMUMPS_DM_FREE_BLOCK(XXG_STATUS, FORTRAN_POINTER, DYN_SIZE,
491.EQ.
& KEEP(405)1, KEEP8 )
493 PTRIST(STEP( ISON )) = -9999888
494 PTRAST(STEP( ISON )) = -9999888_8
496 END SUBROUTINE SMUMPS_FREE_BAND
497 SUBROUTINE SMUMPS_MEM_ESTIM_BLR_ALL( SUM_OF_PEAKS, KEEP, KEEP8,
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) :: I8_L0_OMP (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.NOT..EQ..AND..EQ.
COMPUTE_MAXAVG = (NSLAVES1 KEEP(46)1)
524.AND.
IF ( PROKGSUM_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 =
',
534 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.GT.
IF (KEEP(400) 0 ) THEN
543 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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)
554 CALL MUMPS_MEM_CENTRALIZE( MYID, COMM,
555 & TOTAL_MBYTES, LRLU_UD, IRANK )
556 IF (SUM_OF_PEAKS) THEN
557 INFO(30) = TOTAL_MBYTES
558.EQ.
IF (MYIDMASTER) THEN
559 INFOG(36) = LRLU_UD(1)
560 INFOG(37) = LRLU_UD(2)
563.EQ.
IF (MYIDMASTER) THEN
564.eq.
IF ( KEEP(46) 0 ) THEN
565 LRLU_UD(3) = (LRLU_UD(2)-TOTAL_MBYTES)/NSLAVES
567 LRLU_UD(3) = LRLU_UD(2)/NSLAVES
570.AND.
IF ( PROKGSUM_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)):
'
583 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.GT.
IF (KEEP(400) 0 ) THEN
592 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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)
603 CALL MUMPS_MEM_CENTRALIZE( MYID, COMM,
604 & TOTAL_MBYTES, OOC_LRLU_UD, IRANK )
605 IF (SUM_OF_PEAKS) THEN
606 INFO(31) = TOTAL_MBYTES
607.EQ.
IF (MYIDMASTER) THEN
608 INFOG(38)= OOC_LRLU_UD(1)
609 INFOG(39)= OOC_LRLU_UD(2)
612.EQ.
IF (MYIDMASTER) THEN
613.eq.
IF ( KEEP(46) 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.AND.
IF ( PROKGSUM_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)):
'
629 END SUBROUTINE SMUMPS_MEM_ESTIM_BLR_ALL
630 SUBROUTINE SMUMPS_MAX_MEM( KEEP, KEEP8,
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 :: SMUMPS_LBUF_INT
661 INTEGER(8) :: SMUMPS_LBUFR_BYTES8, SMUMPS_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
676 INTEGER :: ITH, ITHMIN, ITHMIN_if_LRLU
677 INTEGER(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.NOT.
IF (PERLU_ON) PERLU = 0
687.eq.
I_AM_MASTER = ( MYID 0 )
688.eq..or..ne.
I_AM_SLAVE = ( KEEP(46) 1 MYID 0 )
693.NE..OR..NE.
IF (KEEP(235) 0 KEEP(237) 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.ne..and.
IF (KEEP(23)0 I_AM_MASTER) NB_INT=NB_INT + N8
700.eq.
IF (KEEP(55)0) THEN
701 NB_INT = NB_INT + 2_8 * N8 * I8OVERI
703 NB_INT = NB_INT + 2_8 * ( NELT8 + 1_8 ) * I8OVERI
705.ne.
IF (KEEP(55) 0 ) THEN
706 NB_INT = NB_INT + N8 + 1_8 + NELT8
708 NB_INT = NB_INT + int(LNA,8)
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.LT.
IF (I8_L0_OMP(1,ITH)MIN_NRLADU_underL0)
721 MIN_NRLADU_underL0 = I8_L0_OMP(1,ITH)
724.LT.
IF (I8_L0_OMP(4,ITH)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.AND..GT.
IF (SUM_OF_PEAKSBLR_STRAT0) 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)
748 I8_L0_OMP_10= I8_L0_OMP_10+ I8_L0_OMP(10,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)
754 CALL SMUMPS_SET_MEMESTIMGLOBAL (
755 & OOC_STRAT, BLR_STRAT, BLR_CASE, SUM_OF_PEAKS,
757 & 0_8, 0_8, 0_8, 0_8,
771.EQ.
IF (BLR_STRAT0) THEN
772.LE..AND..NE.
IF ( OOC_STRAT 0 OOC_STRAT -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.LE..AND..NE.
IF ( OOC_STRAT 0 OOC_STRAT -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.EQ.
IF ( KEEP8(24)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.GT.
IF (KEEP(400) 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)
810 CALL SMUMPS_SET_MEMESTIMGLOBAL (
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.LE.
IF (KEEP(400)0) THEN
829 NB_REAL = NB_REAL + MemEstimGlobal +
830 & int(PERLU,8)*(MemEstimGlobal / 100_8 + 1_8 )
831.EQ.
ELSE IF (BLR_STRAT0) THEN
832.GT..OR..EQ.
IF ( OOC_STRAT 0 OOC_STRAT -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.GT..AND.
IF ( OOC_STRAT 0 I_AM_SLAVE ) THEN
864 BUF_OOC_NOPANEL = 2_8 * KEEP8(119)
865.EQ.
IF (KEEP(50)0)THEN
866 BUF_OOC_PANEL = 8_8 * int(KEEP(226),8)
868 BUF_OOC_PANEL = 4_8 * int(KEEP(226),8)
870.EQ.
IF (OOC_STRAT 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.EQ.
IF (OOC_STRAT 2) THEN
878 OOC_NB_FILE_TYPE = 1_8
880.EQ.
IF (KEEP(50)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 * I8OVERI
888 NB_INT = NB_INT + OOC_NB_FILE_TYPE * NSTEPS8
890 NB_REAL = NB_REAL + KEEP8(26)
891.EQ..AND..NOT.
IF (KEEP(252)1 I_AM_MASTER) THEN
892 NB_REAL = NB_REAL + N8
894.not..and..and..eq.
IF ( ( I_AM_SLAVE I_AM_MASTER KEEP(52) 0
895.and..ne.
& KEEP(55) 0 ) ) THEN
896 NB_INT = NB_INT + KEEP8(27)
898.and..ne.
IF ( I_AM_SLAVE KEEP(38) 0 ) THEN
899 NB_INT = NB_INT + 2_8 * N8
904.eq.
IF (KEEP(55)0) THEN
905 IF (NNZ8 < int(NBRECORDS,8)) THEN
909 IF (NA_ELT8 < int(NBRECORDS,8)) THEN
910 NBRECORDS=int(NA_ELT8)
913.eq.
IF ( KEEP(54) 0 ) THEN
914 IF ( I_AM_MASTER ) THEN
915.eq.
IF ( KEEP(46) 0 ) THEN
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.eq.
IF ( KEEP(55) 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.NE.
IF (BLR_STRAT0) THEN
941 SMUMPS_LBUFR_BYTES8 = int(KEEP(380),8) * int(KEEP(35),8)
943 SMUMPS_LBUFR_BYTES8 = int(KEEP(44),8) * int(KEEP(35),8)
945 SMUMPS_LBUFR_BYTES8 = max( SMUMPS_LBUFR_BYTES8,
947.EQ.
IF (KEEP(48)5) THEN
952 SMUMPS_LBUFR_BYTES8 = SMUMPS_LBUFR_BYTES8
953 & + int( 2.0E0 * real(max(PERLU,MIN_PERLU))*
954 & real(SMUMPS_LBUFR_BYTES8)/100E0,8)
955 SMUMPS_LBUFR_BYTES8 = min(SMUMPS_LBUFR_BYTES8,
956 & int(huge (I4)-100,8))
957 NB_BYTES = NB_BYTES + SMUMPS_LBUFR_BYTES8
958.NOT.
IF (UNDER_L0_OMP) THEN
959.NE.
IF (BLR_STRAT0) THEN
960 SMUMPS_LBUF8 = int( real(KEEP(213)) / 100.0E0
961 & * real(KEEP( 379 ) * KEEP( 35 )), 8 )
963 SMUMPS_LBUF8 = int( real(KEEP(213)) / 100.0E0
964 & * real(KEEP( 43 ) * KEEP( 35 )), 8 )
966 SMUMPS_LBUF8 = max( SMUMPS_LBUF8, 100000_8 )
967 SMUMPS_LBUF8 = SMUMPS_LBUF8
968 & + int( 2.0E0 * real(max(PERLU,MIN_PERLU))*
969 & real(SMUMPS_LBUF8)/100E0, 8)
970 SMUMPS_LBUF8 = min(SMUMPS_LBUF8, int(huge(I4)-100,8))
971 SMUMPS_LBUF8 = max(SMUMPS_LBUF8, SMUMPS_LBUFR_BYTES8+
972 & 3_8*int(KEEP(34),8))
973 NB_BYTES = NB_BYTES + SMUMPS_LBUF8
975 SMUMPS_LBUF_INT = ( KEEP(56) +
976 & NSLAVES * NSLAVES ) * 5
978 NB_BYTES = NB_BYTES + int(SMUMPS_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.GT.
IF (KEEP(400)0) THEN
988 & int(MUMPS_GET_POOL_LENGTH(NA(1), KEEP, KEEP8),8)*
992.GT.
IF (OOC_STRAT 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.NOT.
IF (UNDER_L0_OMP) THEN
1005.GT.
IF (OOC_STRAT 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.NE.
IF (KEEP(494)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) )
1031 END SUBROUTINE SMUMPS_MAX_MEM
1032 SUBROUTINE SMUMPS_SET_MEMESTIMGLOBAL (
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.GT..OR..EQ.
IF ( OOC_STRAT 0 OOC_STRAT -1 ) THEN
1072 MemEstimGlobal = PEAK_FR_OOC
1074 MemEstimGlobal = PEAK_FR
1076.GT.
IF (BLR_STRAT0) THEN
1077.NOT.
IF (SUM_OF_PEAKS) THEN
1078.EQ.
IF (BLR_STRAT1) THEN
1079.LE.
IF (BLR_CASE1) THEN
1080.EQ.
IF (OOC_STRAT0) THEN
1081 MemEstimGlobal = KEEP8(40)
1083 MemEstimGlobal = KEEP8(41)
1085.EQ.
ELSE IF (BLR_CASE2) THEN
1086.EQ.
IF (OOC_STRAT0) THEN
1087 MemEstimGlobal = KEEP8(33)
1089 MemEstimGlobal = KEEP8(54)
1092.EQ.
IF (OOC_STRAT0) THEN
1093 MemEstimGlobal = KEEP8(53)
1095 MemEstimGlobal = KEEP8(42)
1099.LE.
IF (BLR_CASE1) THEN
1100.EQ.
IF (OOC_STRAT0) THEN
1101 MemEstimGlobal = KEEP8(43)
1103 MemEstimGlobal = KEEP8(45)
1105.EQ.
ELSE IF (BLR_CASE2) THEN
1106.EQ.
IF (OOC_STRAT0) THEN
1107 MemEstimGlobal = KEEP8(34)
1109 MemEstimGlobal = KEEP8(35)
1112.EQ.
IF (OOC_STRAT0) THEN
1113 MemEstimGlobal = KEEP8(44)
1115 MemEstimGlobal = KEEP8(46)
1120.EQ.
IF (BLR_STRAT1) THEN
1121.EQ.
IF (OOC_STRAT0) THEN
1122 MemEstimGlobal = NRLNEC_if_LR_LU
1123 & + SUM_NRLADU_if_LR_LU_underL0
1125 MemEstimGlobal = PEAK_FR_OOC
1127.EQ.
IF (BLR_CASE1) THEN
1128 MemEstimGlobal = MemEstimGlobal + NRLADULR_UD
1129 & + SUM_NRLADULR_UD_underL0
1130.EQ.
ELSE IF (BLR_CASE3) THEN
1131 MemEstimGlobal = MemEstimGlobal + NRLADULR_WC
1132 & + SUM_NRLADULR_WC_underL0
1134.EQ.
ELSE IF (BLR_STRAT2) THEN
1135.EQ.
IF (OOC_STRAT0) THEN
1136 MemEstimGlobal = NRLNEC_if_LR_LUCB
1137 & + SUM_NRLADU_if_LR_LU_underL0
1139 MemEstimGlobal = NRLNECOOC_if_LR_LUCB
1141.EQ.
IF (BLR_CASE1) THEN
1142 MemEstimGlobal = MemEstimGlobal + NRLNECLR_LUCB_UD
1143 & + SUM_NRLADULR_UD_underL0
1144.EQ.
ELSE IF (BLR_CASE3) THEN
1145 MemEstimGlobal = MemEstimGlobal + NRLNECLR_LUCB_WC
1146 & + SUM_NRLADULR_WC_underL0
1149.EQ.
IF (OOC_STRAT0) THEN
1150 MemEstimGlobal = NRLNEC_if_LR_CB
1151 & + SUM_NRLADU_underL0
1153 MemEstimGlobal = NRLNECOOC_if_LR_LUCB
1155 MemEstimGlobal = MemEstimGlobal + NRLNECLR_CB_UD
1160 END SUBROUTINE SMUMPS_SET_MEMESTIMGLOBAL
1161 SUBROUTINE SMUMPS_SET_BLRSTRAT_AND_MAXS_K8 (
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)
1170 CALL SMUMPS_SET_BLRSTRAT_AND_MAXS (
1171 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1181 END SUBROUTINE SMUMPS_SET_BLRSTRAT_AND_MAXS_K8
1182 SUBROUTINE SMUMPS_SET_BLRSTRAT_AND_MAXS(
1183 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1188 & NRLNEC_if_LR_LUCB,
1189 & NRLNECOOC_if_LR_LUCB,
1192 INTEGER(8), INTENT(OUT) :: MAXS_BASE8, MAXS_BASE_RELAXED8
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.EQ.
IF (KEEP(201) 0) THEN
1206 MAXS_BASE8 = NRLNEC_ACTIVE
1209.EQ.
IF (KEEP(486)2) THEN
1210.EQ.
IF (KEEP(489)1) THEN
1212.NE.
IF (KEEP(201)0) THEN
1213 MAXS_BASE8 = NRLNECOOC_if_LR_LUCB
1215 MAXS_BASE8 = NRLNEC_if_LR_LUCB
1219.NE.
IF (KEEP(201)0) THEN
1220 MAXS_BASE8 = NRLNEC_ACTIVE
1222 MAXS_BASE8 = NRLNEC_if_LR_LU
1225.EQ.
ELSE IF (KEEP(486)3) THEN
1226.EQ.
IF (KEEP(489)1) THEN
1228.NE.
IF (KEEP(201)0) THEN
1229 MAXS_BASE8 = NRLNECOOC_if_LR_LUCB
1231 MAXS_BASE8 = NRLNEC_if_LR_CB
1235.GT.
IF ( MAXS_BASE8 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
1243 END SUBROUTINE SMUMPS_SET_BLRSTRAT_AND_MAXS
1244 SUBROUTINE SMUMPS_MEM_ALLOWED_SET_MAXS ( MAXS,
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(LNA), 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 :: BDUMMY =.FALSE.
1276 SUM_OF_PEAKS = .TRUE.
1278 MEM_ALLOWED_BYTES = KEEP8(4)
1279 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.GT.
IF (MEM_DISPO_BYTES0) THEN
1290 MEM_DISPO = MEM_DISPO_BYTES/int(KEEP(35),8)
1292 MEM_DISPO = (MEM_DISPO_BYTES-int(KEEP(35),8)+1)/
1295.EQ.
IF (BLR_STRAT0) THEN
1297.EQ.
ELSE IF (BLR_STRAT1) THEN
1298.NE.
IF (KEEP(464)0) THEN
1300 & real(KEEP8(36)) * ( 1.0E0 -
1301 & real(ICNTL38)/real(KEEP(464)) )
1304 UPDATED_DIFF = int (
1305 & -real(KEEP8(11)-KEEP8(32)) *
1306 & real(ICNTL38) / 1000.0E0
1309.EQ.
ELSE IF (BLR_STRAT2) THEN
1310.NE.
IF (KEEP(464)+KEEP(465)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.EQ.
ELSE IF (BLR_STRAT3) THEN
1323.NE.
IF (KEEP(465)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.LT..AND..GT.
IF ( (MEM_DISPO0) MAXS_ESTIM_RELAXED8
1341 & (MEM_ALLOWED_BYTES/int(KEEP(35),8)) ) THEN
1343 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.LT.
IF ( MEM_DISPO_NR0 ) THEN
1358 CALL MUMPS_SET_IERROR(-MEM_DISPO_NR,IERROR)
1361.GE.
IF (BLR_STRAT2) THEN
1363 CALL MUMPS_SET_IERROR(-MEM_DISPO_NR,IERROR)
1366 MEM_DISPO_NR = MEM_DISPO_NR -
1367 & (int(KEEP(12),8)/120_8)*
1369.LT.
IF ( MEM_DISPO_NR0 ) THEN
1371 CALL MUMPS_SET_IERROR(-MEM_DISPO_NR,IERROR)
1378 MAXS = MAXS_ESTIM_RELAXED8
1379.EQ.
IF (BLR_STRAT0) THEN
1380.GT.
IF (MEM_DISPO0) THEN
1381.EQ.
IF (OOC_STRAT0) 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.EQ.
ELSE IF (BLR_STRAT1) THEN
1390.LT.
IF ( MEM_DISPO 0) THEN
1391.EQ.
IF (OOC_STRAT0) 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.EQ.
ELSE IF (BLR_STRAT2) THEN
1402.LT.
IF ( MEM_DISPO0) THEN
1404 & MAXS_ESTIM_RELAXED8+MEM_DISPO,
1405 & MAXS_ESTIM_RELAXED8)
1407.EQ.
ELSE IF (BLR_STRAT3) THEN
1408.LT.
IF ( MEM_DISPO0) THEN
1410 & MAXS_ESTIM_RELAXED8+MEM_DISPO,
1411 & MAXS_ESTIM_RELAXED8)
1414.LE.
IF (MAXS 0_8) THEN
1416.LT.
IF (MEM_DISPO0) THEN
1417 CALL MUMPS_SET_IERROR(MEM_DISPO,IERROR)
1419 CALL MUMPS_SET_IERROR(MAXS_ESTIM_RELAXED8-MAXS,IERROR)
1424 END SUBROUTINE SMUMPS_MEM_ALLOWED_SET_MAXS
1425 SUBROUTINE SMUMPS_MEM_ALLOWED_SET_K75 (
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) :: KEEP8(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.
1454 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.LT.
IF (KEEP8(75)0_8) THEN
1468 CALL MUMPS_SET_IERROR(-KEEP8(75),IERROR)
1471 END SUBROUTINE SMUMPS_MEM_ALLOWED_SET_K75
1472 SUBROUTINE SMUMPS_L0_COMPUTE_PEAK_ALLOWED (
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 (NBSTATS_I8, 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 :: BDUMMY =.FALSE.
1497 KEEP8_23_SAVETMP = KEEP8(23)
1499 UNDER_L0_OMP = .TRUE.
1501 MEM_EFF_ALLOCATED = .TRUE.
1505 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.
1521 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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.AND..LE.
IF (PERLU_ONKEEP(201)0) THEN
1532.GT.
IF (BLR_STRAT0) 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.
1554 CALL SMUMPS_MAX_MEM( KEEP(1), KEEP8(1),
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 )
1567 END SUBROUTINE SMUMPS_L0_COMPUTE_PEAK_ALLOWED
1568 SUBROUTINE SMUMPS_SETMAXTOZERO(M_ARRAY, M_SIZE)
1571 REAL M_ARRAY(M_SIZE)
1573 PARAMETER (ZERO=0.0E0)
1576 END SUBROUTINE SMUMPS_SETMAXTOZERO
1577 SUBROUTINE SMUMPS_COMPUTE_NBROWSinF (
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, NELIM, NFS4FATHER
1589 INTEGER, INTENT(IN) :: IW(LIW)
1590 INTEGER, INTENT(OUT):: NBROWSinF
1591 INTEGER :: ShiftFirstRowinFront
1593.EQ..OR..NE..OR.
IF ( (KEEP(219)0)(KEEP(50)2)
1594.LE.
& (NFS4FATHER0) ) THEN
1597 ShiftFirstRowinFront = NCOLS-NPIV-NELIM-NROWS
1598.EQ.
IF (ShiftFirstRowinFront0) THEN
1599 NBROWSinF = min(NROWS, NFS4FATHER-NELIM)
1600.LT.
ELSE IF (ShiftFirstRowinFrontNFS4FATHER-NELIM) THEN
1601 NBROWSinF = min(NROWS,NFS4FATHER-NELIM-ShiftFirstRowinFront)
1606 END SUBROUTINE SMUMPS_COMPUTE_NBROWSinF
1607 SUBROUTINE SMUMPS_COMPUTE_ESTIM_NFS4FATHER (
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, LIW, NFRONT, NASS1
1616 INTEGER, INTENT(IN) :: IW(LIW)
1617 INTEGER, INTENT(OUT):: ESTIM_NFS4FATHER_ATSON
1618 INTEGER :: J, J_LASTFS, 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.LE.
IF (PERM(J)PERM(J_LASTFS)) THEN
1632 ESTIM_NFS4FATHER_ATSON =
1633 & ESTIM_NFS4FATHER_ATSON+1
1639 END SUBROUTINE SMUMPS_COMPUTE_ESTIM_NFS4FATHER
1640 SUBROUTINE SMUMPS_COMPUTE_MAXPERCOL(
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.GT.
IF(TMPM_ARRAY(J)) M_ARRAY(J) = TMP
1668 IF (PACKED_CB) LROW=LROW+1_8
1671 END SUBROUTINE SMUMPS_COMPUTE_MAXPERCOL
1672 SUBROUTINE SMUMPS_SIZE_IN_STRUCT( id, NB_INT, NB_CMPLX, NB_CHAR )
1673 USE SMUMPS_STRUC_DEF
1675 TYPE(SMUMPS_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.AND.
IF(id%POSINRHSCOMP_COL_ALLOCassociated(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.AND..NE.
IF (associated(id%COLSCA)(id%KEEP(52)-1))
1805 & NB_REAL=NB_REAL+size(id%COLSCA)
1806.AND..NE.
IF (associated(id%ROWSCA)(id%KEEP(52)-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
1819 NB_CMPLX = NB_CMPLX + id%KEEP8(71) + id%KEEP8(64)
1821 END SUBROUTINE SMUMPS_SIZE_IN_STRUCT
1822 SUBROUTINE SMUMPS_COPYI8SIZE(N8,SRC,DEST)
1825 REAL, intent(in) :: SRC(N8)
1826 REAL, intent(out) :: DEST(N8)
1827 INTEGER(8) :: SHIFT8, HUG8
1828 INTEGER :: I, I4SIZE
1829.EQ.
IF(int(huge(I4SIZE),8) int(huge(HUG8),8)) THEN
1830 CALL scopy(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 scopy(I4SIZE, SRC(SHIFT8), 1, DEST(SHIFT8), 1)
1840 END SUBROUTINE SMUMPS_COPYI8SIZE
1841 SUBROUTINE SMUMPS_SET_TMP_PTR( THE_ADDRESS, THE_SIZE8 )
1842 USE SMUMPS_STATIC_PTR_M
1843 INTEGER(8), INTENT(IN) :: THE_SIZE8
1844 REAL, INTENT(IN) :: THE_ADDRESS(THE_SIZE8)
1845 CALL SMUMPS_SET_STATIC_PTR(THE_ADDRESS(1:THE_SIZE8))
1847 END SUBROUTINE SMUMPS_SET_TMP_PTR
1848 SUBROUTINE SMUMPS_OOC_IO_LU_PANEL_I
1849 & ( STRAT, TYPEFile,
1850 & AFAC, LAFAC, MonBloc,
1851 & LNextPiv2beWritten, UNextPiv2beWritten,
1853 & MYID, FILESIZE, IERR , LAST_CALL)
1854 USE SMUMPS_OOC, ONLY : IO_BLOCK,
1855 & SMUMPS_OOC_IO_LU_PANEL
1857 TYPE(IO_BLOCK), INTENT(INOUT):: MonBloc
1859 INTEGER, INTENT(IN) :: STRAT, LIWFAC, MYID, TYPEFile
1860 INTEGER, INTENT(INOUT) :: IW(0:LIWFAC-1)
1861 REAL, 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
1866 CALL SMUMPS_OOC_IO_LU_PANEL
1867 & ( STRAT, TYPEFile,
1868 & AFAC, LAFAC, MonBloc,
1869 & LNextPiv2beWritten, UNextPiv2beWritten,
1871 & MYID, FILESIZE, IERR , LAST_CALL)
1873 END SUBROUTINE SMUMPS_OOC_IO_LU_PANEL_I
1874 SUBROUTINE SMUMPS_BUF_SEND_CONTRIB_TYPE3_I ( N, ISON,
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 )
1883 USE SMUMPS_BUF, ONLY : SMUMPS_BUF_SEND_CONTRIB_TYPE3
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 ), SUBSET_COL( NSUBSET_COL )
1891 INTEGER :: RG2L_ROW(N)
1892 INTEGER :: RG2L_COL(N)
1893 INTEGER NSUPROW, NSUPCOL
1894 INTEGER(8), INTENT(IN) :: TABSIZE
1897 REAL VAL_SON( LD_SON, * ), TAB(*)
1899 INTEGER N_ALREADY_SENT
1900 CALL SMUMPS_BUF_SEND_CONTRIB_TYPE3( N, ISON,
1901 & NBCOL_SON, NBROW_SON, INDCOL_SON, INDROW_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 )
1910 END SUBROUTINE SMUMPS_BUF_SEND_CONTRIB_TYPE3_I
1911 SUBROUTINE SMUMPS_BLR_UPDATE_TRAILING_I(
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)
1918 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
1919 USE SMUMPS_FAC_LR, ONLY : SMUMPS_BLR_UPDATE_TRAILING
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 REAL, 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
1936 CALL SMUMPS_BLR_UPDATE_TRAILING(
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)
1943 END SUBROUTINE SMUMPS_BLR_UPDATE_TRAILING_I
1944 SUBROUTINE SMUMPS_COMPRESS_CB_I(A_PTR, LA_PTR, POSELT, LDA,
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,
1957 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
1958 USE SMUMPS_FAC_LR, ONLY : SMUMPS_COMPRESS_CB
1960 INTEGER(8), intent(in) :: LA_PTR
1961 REAL, 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) :: K489, 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 REAL :: BLOCK(MAXI_CLUSTER, MAXI_CLUSTER*OMP_NUM)
1973 REAL :: 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
1981 CALL SMUMPS_COMPRESS_CB(A_PTR, LA_PTR, POSELT, LDA,
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
1995 END SUBROUTINE SMUMPS_COMPRESS_CB_I
1996 SUBROUTINE SMUMPS_COMPRESS_PANEL_I_NOOPT(
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,
2008 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
2009 USE SMUMPS_FAC_LR, ONLY : SMUMPS_COMPRESS_PANEL
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 REAL, intent(inout) :: A(LA)
2017 INTEGER :: MAXI_CLUSTER
2018 REAL :: RWORK(2*MAXI_CLUSTER*OMP_NUM)
2019 REAL :: BLOCK(MAXI_CLUSTER,MAXI_CLUSTER*OMP_NUM)
2020 REAL :: WORK(MAXI_CLUSTER*MAXI_CLUSTER*OMP_NUM)
2021 REAL :: 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 SMUMPS_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,
2043 END SUBROUTINE SMUMPS_COMPRESS_PANEL_I_NOOPT
2044 SUBROUTINE SMUMPS_DECOMPRESS_PANEL_I_NOOPT(
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,
2050 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
2051 USE SMUMPS_FAC_LR, ONLY : SMUMPS_DECOMPRESS_PANEL
2053 INTEGER(8), intent(in) :: LA
2054 REAL, 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 SMUMPS_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,
2070 END SUBROUTINE SMUMPS_DECOMPRESS_PANEL_I_NOOPT
2071 SUBROUTINE SMUMPS_BLR_UPD_NELIM_VAR_L_I(
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)
2075 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
2076 USE SMUMPS_FAC_LR, ONLY : SMUMPS_BLR_UPD_NELIM_VAR_L
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 REAL, 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)
2088 CALL SMUMPS_BLR_UPD_NELIM_VAR_L(
2089 & A_U, LA_U, UPOS, A_L, LA_L, LPOS, IFLAG, IERROR, LDU, LDL,
2090 & BEGS_BLR_L, CURRENT_BLR, BLR_L, NB_BLR_L,
2091 & FIRST_BLOCK, NELIM, UTRANS)
2093 END SUBROUTINE SMUMPS_BLR_UPD_NELIM_VAR_L_I
2094 SUBROUTINE SMUMPS_BLR_SLV_UPD_TRAIL_LDLT_I(A, LA, POSELT,
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
2106 USE SMUMPS_LR_TYPE, ONLY : LRB_TYPE
2107 USE SMUMPS_FAC_LR, ONLY : SMUMPS_BLR_SLV_UPD_TRAIL_LDLT
2109 INTEGER(8), intent(in) :: LA, LA_BLOCFACTO
2110 REAL, intent(inout) :: A(LA)
2111 REAL, 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 REAL, 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 SMUMPS_BLR_SLV_UPD_TRAIL_LDLT(A, LA, POSELT,
2129 & IFLAG, IERROR, NCOL, NROW,
2130 & A_BLOCFACTO, LA_BLOCFACTO, LD_BLOCFACTO,
2131 & BEGS_BLR_LM, NB_BLR_LM, BLR_LM, ISHIFT_LM,
2132 & BEGS_BLR_LS, NB_BLR_LS, BLR_LS, ISHIFT_LS,
2133 & CURRENT_BLR_LM, CURRENT_BLR_LS,
2136 & MIDBLK_COMPRESS, TOLEPS, TOL_OPT, KPERCENT
2139 END SUBROUTINE SMUMPS_BLR_SLV_UPD_TRAIL_LDLT_I
2140 SUBROUTINE SMUMPS_SET_INNERBLOCKSIZE( SIZE_INNER,
2143 INTEGER :: SIZE_INNER, NASS, KEEP(500)
2144.LT.
IF (NASSKEEP(4)) THEN
2146.GT.
ELSE IF (NASS KEEP(3)) THEN
2147 SIZE_INNER = min( KEEP(6), NASS )
2149 SIZE_INNER = min( KEEP(5), NASS )
2152 END SUBROUTINE SMUMPS_SET_INNERBLOCKSIZE
subroutine, public smumps_new_factor(inode, ptrfac, keep, keep8, a, la, size, ierr)