OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ctools.F
Go to the documentation of this file.
1C
2C This file is part of MUMPS 5.5.1, released
3C on Tue Jul 12 13:17:24 UTC 2022
4C
5C
6C Copyright 1991-2022 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria,
7C Mumps Technologies, University of Bordeaux.
8C
9C This version of MUMPS is provided to you free of charge. It is
10C released under the CeCILL-C license
11C (see doc/CeCILL-C_V1-en.txt, doc/CeCILL-C_V1-fr.txt, and
12C https://cecill.info/licences/Licence_CeCILL-C_V1-en.html)
13C
14 SUBROUTINE cmumps_compress_lu(SIZE_INPLACE,
15 &MYID,N,IOLDPS,TYPE,IW, LIW, A, LA,
16 &POSFAC, LRLU, LRLUS, IWPOS, PTRAST, PTRFAC, STEP, KEEP,KEEP8,
17 &SSARBR,INODE,IERR
18 & , LRGROUPS, NASS
19 &)
20 USE cmumps_load
21 USE cmumps_ooc
22!$ USE OMP_LIB
24 IMPLICIT NONE
25 INTEGER MYID
26 INTEGER IOLDPS, TYPE, LIW, N, KEEP(500)
27 INTEGER(8) :: SIZE_INPLACE, LA, POSFAC, LRLU, LRLUS
28 INTEGER(8) :: PTRAST(KEEP(28))
29 INTEGER(8) KEEP8(150)
30 INTEGER IW( LIW )
31 COMPLEX A( LA )
32 INTEGER IWPOS
33 INTEGER STEP( N )
34 INTEGER (8) :: PTRFAC(KEEP(28))
35 LOGICAL SSARBR
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
41 INTEGER IPS, IPSIZE
42 INTEGER(8) :: SIZELU, SIZECB, IAPOS, I, SIZESHIFT, ITMP8
43 INTEGER(8) :: SIZEXXR
44 LOGICAL MOVEPTRAST
45 LOGICAL LRCOMPRESS_PANEL
46 INTEGER INODE
47 INTEGER IERR
48 ierr=0
49 ioldshift = ioldps + keep(ixsz)
50 IF ( iw( ioldshift ) < 0 ) THEN
51 write(*,*) ' ERROR 1 compressLU:Should not point to a band.'
52 CALL mumps_abort()
53 ELSE IF ( iw( ioldshift + 2 ) < 0 ) THEN
54 write(*,*) ' ERROR 2 compressLU:Stack not performed yet',
55 & iw(ioldshift + 2)
56 CALL mumps_abort()
57 ENDIF
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 )
64 nfront = lcont + npiv
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'
70 CALL mumps_abort()
71 END IF
72 IF ( keep(50) .EQ. 0 ) THEN
73 sizelu = int(lcont + nrow, 8) * int(npiv,8)
74 ELSE
75 IF ( keep(459) .GT. 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 )
79 ELSE
80 sizelu = int(nrow,8) * int(npiv,8)
81 ENDIF
82 ENDIF
83 CALL mumps_geti8(sizexxr, iw(ioldps+xxr))
84 sizecb = sizexxr - sizelu
85 CALL mumps_subtri8toarray( iw(ioldps+xxr), sizecb )
86 IF ((keep(201).NE.0)
87 & .OR.(lrcompress_panel.AND.keep(486).EQ.2)
88 & ) THEN
89 sizeshift = sizelu
90 ELSE
91 sizeshift = 0_8
92 IF (sizecb.EQ.0_8) THEN
93 GOTO 500
94 ENDIF
95 ENDIF
96 IF (keep(201).EQ.2) THEN
97 IF (keep(405) .EQ. 0) THEN
98 keep8(31)=keep8(31)+sizelu
99 CALL cmumps_new_factor(inode,ptrfac,keep,keep8,
100 & a,la,sizelu, ierr)
101 ELSE
102!$OMP CRITICAL(critical_old_ooc)
103 keep8(31)=keep8(31)+sizelu
104 CALL cmumps_new_factor(inode,ptrfac,keep,keep8,
105 & a,la,sizelu, ierr)
106!$OMP END CRITICAL(critical_old_ooc)
107 ENDIF
108 IF(ierr.LT.0)THEN
109 WRITE(*,*)myid,': Internal error in CMUMPS_NEW_FACTOR'
110 CALL mumps_abort()
111 ENDIF
112 ENDIF
113 IF ( ioldps + intsiz .NE. iwpos ) THEN
114 ips = ioldps + intsiz
115 moveptrast = .false.
116 DO WHILE ( ips .NE. iwpos )
117 ipsize = iw(ips+xxi)
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)
128 CALL mumps_abort()
129 ENDIF
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:"
143 ips = 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)
148 ENDDO
149 CALL mumps_abort()
150 ENDIF
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)
157 ENDIF
158 ptrfac(iw(ipsshift+4))=ptrfac(iw(ipsshift+4)) -
159 & sizecb - sizeshift
160 moveptrast = .true.
161 ptrast(iw(ipsshift+4))=ptrast(iw(ipsshift+4))-sizecb
162 & - sizeshift
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)
168 ENDIF
169 ptrfac(iw(ipsshift+3)) = ptrfac(iw(ipsshift+3))
170 & -sizecb-sizeshift
171 ELSE
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)
177 ENDIF
178 ptrfac(iw( ipsshift + 4 )) =
179 & ptrfac(iw( ipsshift + 4 )) - sizecb - sizeshift
180 END IF
181 ips = ips + ipsize
182 END DO
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)
186 END DO
187 END IF
188 ENDIF
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
195 ELSE
196!$OMP ATOMIC UPDATE
197 keep8(69) = keep8(69) - itmp8
198!$OMP END ATOMIC
199 ENDIF
200 500 CONTINUE
201 IF (lrcompress_panel.AND.keep(486).EQ.2) THEN
202 CALL cmumps_load_mem_update(ssarbr,.false.,
203 & la-lrlus,sizelu-sizeshift,-(sizecb+sizeshift)+size_inplace,
204 & keep,keep8,lrlus)
205 ELSE
206 CALL cmumps_load_mem_update(ssarbr,.false.,
207 & la-lrlus,sizelu,-sizecb+size_inplace,
208 & keep,keep8,lrlus)
209 ENDIF
210 RETURN
211 END SUBROUTINE cmumps_compress_lu
212 SUBROUTINE cmumps_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
218 & )
219!$ USE OMP_LIB
220 USE cmumps_ooc
221 USE cmumps_load
223 IMPLICIT NONE
224 INTEGER(8) :: LA, LRLU, LRLUS, POSFAC, IPTRLU
225 INTEGER N, ISON, LIW, IWPOS, IWPOSCB,
226 & COMP, IFLAG, IERROR, SLAVEF, MYID, COMM,
227 & TYPE_SON
228 INTEGER KEEP(500)
229 INTEGER(8) KEEP8(150)
230 REAL DKEEP(230)
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
239 COMPLEX A( LA )
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,
246 & ioldps_cb
247 LOGICAL LAST_CALL
248 TYPE(io_block) :: MonBloc
249 INTEGER LRSTATUS
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
255 flop1 = zero
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
262 nfront = lda_band
263 ELSE
264 nfront = iw( ptrist(step( ison )) + 7 + keep(ixsz) )
265 END IF
266 IF (keep(201).EQ.1) THEN
267 ioldps_cb = ptrist(step( ison ))
268 liwfac = iw(ioldps_cb+xxi)
269 typefile = typef_l
270 nextpivdummy = -8888
271 monbloc%INODE = ison
272 monbloc%MASTER = .false.
273 monbloc%Typenode = 2
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
282 last_call = .true.
283 monbloc%Last = .true.
284 CALL cmumps_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)
290 & ( strat, typefile,
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
296 ENDIF
297 ENDIF
298 noneed_to_copy_factors = ((keep(201).EQ.1) .OR. (keep(201).EQ.-1)
299 & .OR. (lrstatus.GE.2.AND.keep(486).EQ.2)
300 & )
301 IF ((ncol_l.EQ.0).OR.(nrow_l.EQ.0)) THEN
302 GOTO 80
303 ENDIF
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
307 lreqa = 0_8
308 ELSE
309 lreqa = lreqa_header
310 ENDIF
311 IF ( lrlu .LT. lreqa .OR.
312 & iwpos + lreqi - 1 .GT. iwposcb ) THEN
313 IF ( lrlus .LT. lreqa ) THEN
314 iflag = -9
315 CALL mumps_set_ierror(lreqa - lrlus, ierror)
316 GO TO 700
317 END IF
318 CALL cmumps_compre_new( n, keep, iw, liw, a, la,
319 & lrlu, iptrlu,
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=',
326 & lrlu, lrlus
327 iflag = -9
328 CALL mumps_set_ierror(lreqa - lrlus, ierror)
329 GOTO 700
330 END IF
331 IF ( iwpos + lreqi - 1 .GT. iwposcb ) THEN
332 iflag = -8
333 ierror = iwpos + lreqi - 1 - iwposcb
334 GOTO 700
335 END IF
336 END IF
337 IF (.NOT. noneed_to_copy_factors) THEN
338 posa = posfac
339 posfac = posfac + lreqa
340 lrlu = lrlu - 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
346 CALL cmumps_load_mem_update(.false.,.false.,
347 & la-lrlus,lreqa,lreqa,keep,keep8,lrlus)
348 ELSE
349 CALL cmumps_load_mem_update(.false.,.false.,
350 & la-lrlus,0_8,lreqa,keep,keep8,lrlus)
351 ENDIF
352 ENDIF
353 posi = iwpos
354 iwpos = iwpos + lreqi
355 ptlust_s(step( ison )) = posi
356 iw(posi:posi+keep(ixsz)-1)=-99999
357 iw(posi+xxs)=-9999
358 iw(posi+xxi)=lreqi
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)
364 posi=posi+keep(ixsz)
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
371 ELSE
372 ptrfac(step(ison)) = -77777_8
373 ENDIF
374 irow_l = ptrist(step(ison)) + 6 + nslaves_l + keep(ixsz)
375 icol_l = ptrist(step(ison)) + 6 + nrow_l + nslaves_l + keep(ixsz)
376 DO i = 1, nrow_l
377 iw( posi+3+i ) = iw( irow_l+i-1 )
378 ENDDO
379 DO i = 1, ncol_l
380 iw( posi+nrow_l+3+i) = iw( icol_l+i-1 )
381 ENDDO
382 IF (.NOT.noneed_to_copy_factors) THEN
383 CALL cmumps_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)
388 posaloc = posa
389 DO i = 1, nrow_l
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 )
393 ENDDO
394 posaloc = posaloc + int(ncol_l,8)
395 END DO
396 ENDIF
397 IF (keep(201).EQ.2) THEN
398 keep8(31)=keep8(31)+lreqa
399 ENDIF
400 itmp8 = int(ncol_l,8) * int(nrow_l,8)
401 IF (keep(405) .EQ.1) THEN
402!$OMP ATOMIC UPDATE
403 keep8(10) = keep8(10) + itmp8
404!$OMP END ATOMIC
405 ELSE
406 keep8(10) = keep8(10) + itmp8
407 ENDIF
408 IF (keep(201).EQ.2) THEN
409 CALL cmumps_new_factor(ison,ptrfac,keep,keep8,a,la,lreqa,iflag)
410 IF(iflag.LT.0)THEN
411 WRITE(*,*)myid,': Internal error in CMUMPS_NEW_FACTOR'
412 ierror=0
413 GOTO 700
414 ENDIF
415 posfac = posfac - lreqa
416 lrlu = lrlu + lreqa
417 lrlus = lrlus + lreqa
418!$OMP ATOMIC UPDATE
419 keep8(69) = keep8(69) - lreqa
420!$OMP END ATOMIC
421 CALL cmumps_load_mem_update(.false.,.false.,
422 & la-lrlus,lreqa,0_8,keep,keep8,lrlus)
423 ENDIF
424 80 CONTINUE
425 IF (type_son == 1) THEN
426 GOTO 90
427 ENDIF
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)
431 ELSE
432 flop1 = dble( ncol_l ) * dble( nrow_l )
433 & * dble( 2 * lda_band - nrow_l - ncol_l + 1)
434 END IF
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)
442 ELSE
443 flop1 = dble( nass ) * dble( nrow_l ) *
444 & dble( 2 * lda_band - nrow_l - nass + 1)
445 END IF
446 END IF
447 CALL cmumps_load_update(1,.false.,flop1_effective-flop1,
448 & keep,keep8)
449 CALL cmumps_load_update(2,.false.,-flop1,keep,keep8)
450 90 CONTINUE
451 RETURN
452 700 CONTINUE
453 CALL cmumps_bdc_error( myid, slavef, comm, keep )
454 RETURN
455 END SUBROUTINE cmumps_stack_band
456 SUBROUTINE cmumps_free_band( N, ISON,
457 & PTRIST, PTRAST, IW, LIW, A, LA,
458 & LRLU, LRLUS, IWPOSCB,
459 & IPTRLU, STEP, MYID, KEEP, KEEP8, TYPE_SON
460 & )
463 IMPLICIT NONE
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))
470 INTEGER LIW
471 INTEGER IW(LIW)
472 COMPLEX A(LA)
473 INTEGER ISTCHK
474 INTEGER(8) :: DYN_SIZE
475 COMPLEX, 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 IF (dyn_size .GT. 0_8) THEN
482 CALL cmumps_dm_set_ptr( ptrast(step(ison)),
483 & dyn_size, fortran_pointer )
484 ENDIF
485 CALL cmumps_free_block_cb_static(.false.,myid, n, istchk,
486 & iw, liw, lrlu, lrlus, iptrlu,
487 & iwposcb, la, keep,keep8, .false.
488 & )
489 IF (dyn_size .GT. 0_8) THEN
490 CALL cmumps_dm_free_block(xxg_status, fortran_pointer, dyn_size,
491 & keep(405).EQ.1, keep8 )
492 ENDIF
493 ptrist(step( ison )) = -9999888
494 ptrast(step( ison )) = -9999888_8
495 RETURN
496 END SUBROUTINE cmumps_free_band
497 SUBROUTINE cmumps_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
501 & )
502 IMPLICIT NONE
503 LOGICAL, INTENT(IN) :: PROK, PROKG, SUM_OF_PEAKS
504 INTEGER , INTENT(IN) :: MYID, COMM, N, NELT, NSLAVES,
505 & LNA, MP, MPG
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
514 INTEGER :: IRANK
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
521 perlu_on = .true.
522 eff = .false.
523 compute_maxavg = .NOT.(nslaves.EQ.1 .AND. keep(46).EQ.1)
524 IF ( prokg.AND.sum_of_peaks) THEN
525 WRITE( mpg,'(A)')
526 & ' Estimations with BLR compression of LU factors:'
527 WRITE( mpg,'(A,I6,A) ')
528 & ' ICNTL(38) Estimated compression rate of LU factors =',
529 & keep(464), '/1000'
530 ENDIF
531 ooc_stat = 0
532 blr_strat = 1
533 blr_case = 1
534 CALL cmumps_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. ,
539 & .false.
540 & , i8_l0_omp, nbstats_i8, nbcols_i8
541 & )
542 IF (keep(400) .GT. 0 ) THEN
543 CALL cmumps_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. ,
548 & .true.
549 & , i8_l0_omp, nbstats_i8, nbcols_i8
550 & )
551 total_mbytes = max(total_mbytes,total_mbytes_under_l0)
552 total_bytes = max(total_bytes, total_bytes_under_l0)
553 ENDIF
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 IF (myid.EQ.master) THEN
559 infog(36) = lrlu_ud(1)
560 infog(37) = lrlu_ud(2)
561 ENDIF
562 ENDIF
563 IF (myid.EQ.master) THEN
564 IF ( keep(46) .eq. 0 ) THEN
565 lrlu_ud(3) = (lrlu_ud(2)-total_mbytes)/nslaves
566 ELSE
567 lrlu_ud(3) = lrlu_ud(2)/nslaves
568 ENDIF
569 ENDIF
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)):',
574 & infog(36)
575 ENDIF
576 WRITE(mpg,'(A,I12) ')
577 & ' Total space in MBytes, IC factorization (INFOG(37)):'
578 & ,infog(37)
579 END IF
580 ooc_stat = 1
581 blr_strat = 1
582 blr_case = 1
583 CALL cmumps_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. ,
588 & .false.
589 & , i8_l0_omp, nbstats_i8, nbcols_i8
590 & )
591 IF (keep(400) .GT. 0 ) THEN
592 CALL cmumps_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. ,
597 & .true.
598 & , i8_l0_omp, nbstats_i8, nbcols_i8
599 & )
600 total_mbytes = max(total_mbytes,total_mbytes_under_l0)
601 total_bytes = max(total_bytes, total_bytes_under_l0)
602 ENDIF
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 IF (myid.EQ.master) THEN
608 infog(38)= ooc_lrlu_ud(1)
609 infog(39)= ooc_lrlu_ud(2)
610 ENDIF
611 ENDIF
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
615 ELSE
616 ooc_lrlu_ud(3) = ooc_lrlu_ud(2)/nslaves
617 ENDIF
618 ENDIF
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)):',
623 & infog(38)
624 ENDIF
625 WRITE(mpg,'(A,I12) ')
626 & ' Total space in MBytes, OOC factorization (INFOG(39)):'
627 & ,infog(39)
628 END IF
629 END SUBROUTINE cmumps_mem_estim_blr_all
630 SUBROUTINE cmumps_max_mem( KEEP, KEEP8,
631 & MYID, N, NELT, NA, LNA, NNZ8, NA_ELT8, NSLAVES,
632 & MEMORY_MBYTES, EFF, OOC_STRAT, BLR_STRAT, PERLU_ON,
633 & MEMORY_BYTES,
634 & BLR_CASE, SUM_OF_PEAKS, MEM_EFF_ALLOCATED,
635 & UNDER_L0_OMP
636 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
637 & )
638 IMPLICIT NONE
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
662 INTEGER :: NBUFS
663 INTEGER(8) :: TEMPI
664 INTEGER(8) :: TEMPR
665 INTEGER :: MIN_PERLU
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
674 INTEGER(4) :: I4
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)
682 perlu = keep(12)
683 nsteps8 = int(keep(28),8)
684 n8 = int(n,8)
685 nelt8 = int(nelt,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 )
689 temp = 0_8
690 nb_real = 0_8
691 nb_bytes = 0_8
692 nb_int = 0_8
693 IF (keep(235) .NE. 0 .OR. keep(237) .NE. 0) THEN
694 nb_int = nb_int + nsteps8
695 ENDIF
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
702 ELSE
703 nb_int = nb_int + 2_8 * ( nelt8 + 1_8 ) * i8overi
704 ENDIF
705 IF (keep(55) .ne. 0 ) THEN
706 nb_int = nb_int + n8 + 1_8 + nelt8
707 END IF
708 nb_int = nb_int + int(lna,8)
709 IF ( .NOT. eff ) THEN
710 IF (i_am_slave) THEN
711 IF (under_l0_omp) THEN
712 i8_l0_omp_2 = 0_8
713 i8_l0_omp_3 = 0_8
714 min_nrladu_if_lr_lu_underl0 = i8_l0_omp(4,1)
715 min_nrladu_underl0 = i8_l0_omp(1,1)
716 ithmin = 1
717 ithmin_if_lrlu = 1
718 DO ith=1, keep(400)
719 IF (i8_l0_omp(1,ith).LT.min_nrladu_underl0)
720 & THEN
721 min_nrladu_underl0 = i8_l0_omp(1,ith)
722 ithmin = ith
723 ENDIF
724 IF (i8_l0_omp(4,ith).LT.min_nrladu_if_lr_lu_underl0)
725 & THEN
726 min_nrladu_if_lr_lu_underl0 = i8_l0_omp(4,ith)
727 ithmin_if_lrlu = ith
728 ENDIF
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)
731 ENDDO
732 IF (sum_of_peaks.AND.blr_strat.GT.0) THEN
733 i8_l0_omp_5 = 0_8
734 i8_l0_omp_6 = 0_8
735 i8_l0_omp_7 = 0_8
736 i8_l0_omp_8 = 0_8
737 i8_l0_omp_9 = 0_8
738 i8_l0_omp_10= 0_8
739 i8_l0_omp_11= 0_8
740 i8_l0_omp_12= 0_8
741 i8_l0_omp_13= 0_8
742 DO ith=1, keep(400)
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)
752 ENDDO
753 ENDIF
755 & ooc_strat, blr_strat, blr_case, sum_of_peaks,
756 & keep8,
757 & 0_8, 0_8, 0_8, 0_8,
758 & i8_l0_omp_2,
759 & i8_l0_omp_3,
760 & i8_l0_omp_5,
761 & i8_l0_omp_6,
762 & i8_l0_omp_7,
763 & i8_l0_omp_8,
764 & i8_l0_omp_9,
765 & i8_l0_omp_10,
766 & i8_l0_omp_11,
767 & i8_l0_omp_12,
768 & i8_l0_omp_13,
769 & memestimglobal
770 & )
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)
776 ELSE
777 memestimglobal = memestimglobal +
778 & i8_l0_omp(23, ithmin)
779 ENDIF
780 ELSE
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)
785 ELSE
786 memestimglobal = memestimglobal +
787 & i8_l0_omp(23, ithmin_if_lrlu)
788 ENDIF
789 ENDIF
790 nb_real = nb_real + memestimglobal +
791 & int(perlu,8)*(memestimglobal / 100_8 + 1_8 )
792 ELSE
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
799 DO ith=1, keep(400)
800 sum_nrladu_underl0 =
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)
808 ENDDO
809 ENDIF
811 & ooc_strat, blr_strat, blr_case, sum_of_peaks,
812 & keep8,
813 & sum_nrladu_underl0, sum_nrladu_if_lr_lu_underl0,
814 & sum_nrladulr_ud_underl0, sum_nrladulr_wc_underl0,
815 & keep8(53),
816 & keep8(54),
817 & keep8(33),
818 & keep8(34),
819 & keep8(35),
820 & keep8(50),
821 & keep8(36),
822 & keep8(47),
823 & keep8(37),
824 & keep8(38),
825 & keep8(39),
826 & memestimglobal
827 & )
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 )
835 ELSE
836 nb_real = nb_real + memestimglobal +
837 & int(perlu,8)*(keep8(12) / 100_8 + 1_8 )
838 ENDIF
839 ELSE
840 nb_real = nb_real + memestimglobal +
841 & int(perlu,8)*(memestimglobal / 100_8 + 1_8 )
842 ENDIF
843 ENDIF
844 ENDIF
845 ELSE
846 nb_real = nb_real + 1_8
847 ENDIF
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)
852 ELSE
853 nb_real = nb_real + keep8(62)
854 ENDIF
855 ELSE
856 IF (mem_eff_allocated) THEN
857 nb_real = nb_real + keep8(23) + keep8(74)
858 ELSE
859 nb_real = nb_real + keep8(67) + keep8(74)
860 ENDIF
861 ENDIF
862 ENDIF
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)
867 ELSE
868 buf_ooc_panel = 4_8 * int(keep(226),8)
869 ENDIF
870 IF (ooc_strat .EQ. 2) THEN
871 buf_ooc = buf_ooc_nopanel
872 ELSE
873 buf_ooc = buf_ooc_panel
874 ENDIF
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
879 ELSE
880 IF (keep(50).EQ.0) THEN
881 ooc_nb_file_type = 2_8
882 ELSE
883 ooc_nb_file_type = 1_8
884 ENDIF
885 ENDIF
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
889 ENDIF
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
893 ENDIF
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)
897 END IF
898 IF ( i_am_slave .and. keep(38) .ne. 0 ) THEN
899 nb_int = nb_int + 2_8 * n8
900 END IF
901 tempi= 0_8
902 tempr = 0_8
903 nbrecords = keep(39)
904 IF (keep(55).eq.0) THEN
905 IF (nnz8 < int(nbrecords,8)) THEN
906 nbrecords=int(nnz8)
907 ENDIF
908 ELSE
909 IF (na_elt8 < int(nbrecords,8)) THEN
910 nbrecords=int(na_elt8)
911 ENDIF
912 ENDIF
913 IF ( keep(54) .eq. 0 ) THEN
914 IF ( i_am_master ) THEN
915 IF ( keep(46) .eq. 0 ) THEN
916 nbufs = nslaves
917 ELSE
918 nbufs = nslaves - 1
919 IF (keep(55) .eq. 0 )
920 & tempi = tempi + 2_8 * n8
921 END IF
922 tempi = tempi + 2_8 * int(nbrecords,8) * int(nbufs,8)
923 tempr = tempr + int(nbrecords,8) * int(nbufs,8)
924 ELSE
925 IF ( keep(55) .eq. 0 )THEN
926 tempi = tempi + 2_8 * int(nbrecords,8)
927 tempr = tempr + int(nbrecords,8)
928 END IF
929 END IF
930 ELSE
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)
934 END IF
935 END IF
936 temp = max( nb_bytes + (nb_int + tempi) * int(keep(34),8)
937 & + (nb_real+tempr) * int(keep(35),8)
938 & , temp )
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)
942 ELSE
943 cmumps_lbufr_bytes8 = int(keep(44),8) * int(keep(35),8)
944 ENDIF
945 cmumps_lbufr_bytes8 = max( cmumps_lbufr_bytes8,
946 & 100000_8 )
947 IF (keep(48).EQ.5) THEN
948 min_perlu=2
949 ELSE
950 min_perlu=0
951 ENDIF
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 )
962 ELSE
963 cmumps_lbuf8 = int( real(keep(213)) / 100.0e0
964 & * real(keep( 43 ) * keep( 35 )), 8 )
965 ENDIF
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
974 ENDIF
975 cmumps_lbuf_int = ( keep(56) +
976 & nslaves * nslaves ) * 5
977 & * keep(34)
978 nb_bytes = nb_bytes + int(cmumps_lbuf_int,8)
979 IF (.NOT.eff) THEN
980 IF (under_l0_omp) THEN
981 nb_int = nb_int + n8*int(keep(400),8)
982 nb_int = nb_int +
983 & int(mumps_get_pool_length(na(1), keep, keep8),8)*
984 & int(keep(400),8)
985 ELSE
986 IF (keep(400).GT.0) THEN
987 nb_int = nb_int +
988 & int(mumps_get_pool_length(na(1), keep, keep8),8)*
989 & int(keep(400),8)
990 ENDIF
991 ENDIF
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 )
996 & ,8)
997 ELSE
998 nb_int = nb_int + int(
999 & keep(137) + 3 * max(perlu,10) *
1000 & ( keep(137) / 100 + 1 )
1001 & ,8)
1002 ENDIF
1003 ENDIF
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 )
1009 & ,8)
1010 ELSE
1011 nb_int = nb_int + int(
1012 & keep(15) + 2 * max(perlu,10) *
1013 & ( keep(15) / 100 + 1 )
1014 & ,8)
1015 ENDIF
1016 ENDIF
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
1024 ENDIF
1025 ENDIF
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) )
1030 RETURN
1031 END SUBROUTINE cmumps_max_mem
1033 & OOC_STRAT, BLR_STRAT, BLR_CASE, SUM_OF_PEAKS,
1034 & KEEP8,
1035 & SUM_NRLADU_underL0, SUM_NRLADU_if_LR_LU_underL0,
1036 & SUM_NRLADULR_UD_underL0, SUM_NRLADULR_WC_underL0,
1037 & PEAK_FR,
1038 & PEAK_FR_OOC,
1039 & NRLNEC_if_LR_LU,
1040 & NRLNEC_if_LR_LUCB,
1041 & NRLNECOOC_if_LR_LUCB,
1042 & NRLNEC_if_LR_CB,
1043 & NRLADULR_UD,
1044 & NRLADULR_WC,
1045 & NRLNECLR_CB_UD,
1046 & NRLNECLR_LUCB_UD,
1047 & NRLNECLR_LUCB_WC,
1048 & MemEstimGlobal
1049 & )
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) ::
1059 & peak_fr,
1060 & peak_fr_ooc,
1061 & nrlnec_if_lr_lu,
1062 & nrlnec_if_lr_lucb,
1063 & nrlnecooc_if_lr_lucb,
1064 & nrlnec_if_lr_cb,
1065 & nrladulr_ud,
1066 & nrladulr_wc,
1067 & nrlneclr_cb_ud,
1068 & nrlneclr_lucb_ud,
1069 & nrlneclr_lucb_wc
1070 INTEGER(8), INTENT(OUT) :: MemEstimGlobal
1071 IF ( ooc_strat .GT. 0 .OR. ooc_strat .EQ. -1 ) THEN
1072 memestimglobal = peak_fr_ooc
1073 ELSE
1074 memestimglobal = peak_fr
1075 ENDIF
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)
1082 ELSE
1083 memestimglobal = keep8(41)
1084 ENDIF
1085 ELSE IF (blr_case.EQ.2) THEN
1086 IF (ooc_strat.EQ.0) THEN
1087 memestimglobal = keep8(33)
1088 ELSE
1089 memestimglobal = keep8(54)
1090 ENDIF
1091 ELSE
1092 IF (ooc_strat.EQ.0) THEN
1093 memestimglobal = keep8(53)
1094 ELSE
1095 memestimglobal = keep8(42)
1096 ENDIF
1097 ENDIF
1098 ELSE
1099 IF (blr_case.LE.1) THEN
1100 IF (ooc_strat.EQ.0) THEN
1101 memestimglobal = keep8(43)
1102 ELSE
1103 memestimglobal = keep8(45)
1104 ENDIF
1105 ELSE IF (blr_case.EQ.2) THEN
1106 IF (ooc_strat.EQ.0) THEN
1107 memestimglobal = keep8(34)
1108 ELSE
1109 memestimglobal = keep8(35)
1110 ENDIF
1111 ELSE
1112 IF (ooc_strat.EQ.0) THEN
1113 memestimglobal = keep8(44)
1114 ELSE
1115 memestimglobal = keep8(46)
1116 ENDIF
1117 ENDIF
1118 ENDIF
1119 ELSE
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
1124 ELSE
1125 memestimglobal = peak_fr_ooc
1126 ENDIF
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
1133 ENDIF
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
1138 ELSE
1139 memestimglobal = nrlnecooc_if_lr_lucb
1140 ENDIF
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
1147 ENDIF
1148 ELSE
1149 IF (ooc_strat.EQ.0) THEN
1150 memestimglobal = nrlnec_if_lr_cb
1151 & + sum_nrladu_underl0
1152 ELSE
1153 memestimglobal = nrlnecooc_if_lr_lucb
1154 ENDIF
1155 memestimglobal = memestimglobal + nrlneclr_cb_ud
1156 ENDIF
1157 ENDIF
1158 ENDIF
1159 RETURN
1160 END SUBROUTINE cmumps_set_memestimglobal
1162 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1163 & BLR_STRAT,
1164 & KEEP, KEEP8)
1165 IMPLICIT NONE
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,
1172 & blr_strat,
1173 & keep(1),
1174 & keep8(12),
1175 & keep8(14),
1176 & keep8(33),
1177 & keep8(34),
1178 & keep8(35),
1179 & keep8(50) )
1180 RETURN
1181 END SUBROUTINE cmumps_set_blrstrat_and_maxs_k8
1183 & MAXS_BASE8, MAXS_BASE_RELAXED8,
1184 & BLR_STRAT, KEEP,
1185 & NRLNEC,
1186 & NRLNEC_ACTIVE,
1187 & NRLNEC_if_LR_LU,
1188 & NRLNEC_if_LR_LUCB,
1189 & NRLNECOOC_if_LR_LUCB,
1190 & NRLNEC_if_LR_CB )
1191 IMPLICIT NONE
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,
1196 & nrlnec_active,
1197 & nrlnec_if_lr_lu,
1198 & nrlnec_if_lr_lucb,
1199 & nrlnecooc_if_lr_lucb,
1200 & nrlnec_if_lr_cb
1201 INTEGER :: PERLU
1202 perlu = keep(12)
1203 IF (keep(201) .EQ. 0) THEN
1204 maxs_base8 = nrlnec
1205 ELSE
1206 maxs_base8 = nrlnec_active
1207 ENDIF
1208 blr_strat = 0
1209 IF (keep(486).EQ.2) THEN
1210 IF (keep(489).EQ.1) THEN
1211 blr_strat = 2
1212 IF (keep(201).NE.0) THEN
1213 maxs_base8 = nrlnecooc_if_lr_lucb
1214 ELSE
1215 maxs_base8 = nrlnec_if_lr_lucb
1216 ENDIF
1217 ELSE
1218 blr_strat = 1
1219 IF (keep(201).NE.0) THEN
1220 maxs_base8 = nrlnec_active
1221 ELSE
1222 maxs_base8 = nrlnec_if_lr_lu
1223 ENDIF
1224 ENDIF
1225 ELSE IF (keep(486).EQ.3) THEN
1226 IF (keep(489).EQ.1) THEN
1227 blr_strat = 3
1228 IF (keep(201).NE.0) THEN
1229 maxs_base8 = nrlnecooc_if_lr_lucb
1230 ELSE
1231 maxs_base8 = nrlnec_if_lr_cb
1232 ENDIF
1233 ENDIF
1234 ENDIF
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)
1239 ELSE
1240 maxs_base_relaxed8 = 1_8
1241 END IF
1242 RETURN
1243 END SUBROUTINE cmumps_set_blrstrat_and_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
1249 & )
1250 IMPLICIT NONE
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
1264 INTEGER :: BLR_CASE
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,
1269 & total_bytes_nr
1270 INTEGER :: TOTAL_MBYTES_NR
1271 INTEGER, PARAMETER :: IDUMMY = -9999
1272 LOGICAL, PARAMETER :: BDUMMY =.false.
1273 perlu_on = .true.
1274 perlu = keep(12)
1275 eff = .false.
1276 sum_of_peaks = .true.
1277 blr_case = 1
1278 mem_allowed_bytes = keep8(4)
1279 CALL cmumps_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. ,
1285 & .false.
1286 & , i8_l0_omp, nbstats_i8, nbcols_i8
1287 & )
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)
1291 ELSE
1292 mem_dispo = (mem_dispo_bytes-int(keep(35),8)+1)/
1293 & int(keep(35),8)
1294 ENDIF
1295 IF (blr_strat.EQ.0) THEN
1296 updated_diff = 0_8
1297 ELSE IF (blr_strat.EQ.1) THEN
1298 IF (keep(464).NE.0) THEN
1299 updated_diff = int(
1300 & real(keep8(36)) * ( 1.0e0 -
1301 & real(icntl38)/real(keep(464)) )
1302 & , 8)
1303 ELSE
1304 updated_diff = int(
1305 & -real(keep8(11)-keep8(32)) *
1306 & real(icntl38) / 1000.0e0
1307 & , 8)
1308 ENDIF
1309 ELSE IF (blr_strat.EQ.2) THEN
1310 IF (keep(464)+keep(465).NE.0) THEN
1311 updated_diff = int(
1312 & real(keep8(38)) * ( 1.0e0 -
1313 & real(icntl38+icntl39)/
1314 & real(keep(464)+keep(465)) )
1315 & , 8)
1316 ELSE
1317 updated_diff = int(
1318 & -real(keep8(39))*
1319 & real(icntl38+icntl39)/1000.0e0
1320 & , 8)
1321 ENDIF
1322 ELSE IF (blr_strat.EQ.3) THEN
1323 IF (keep(465).NE.0) THEN
1324 updated_diff = int(
1325 & real(keep8(37)) * ( 1.0e0 -
1326 & real(icntl39)/real(keep(465)) )
1327 & , 8)
1328 ELSE
1329 updated_diff = int(
1330 & -real(keep8(39))*
1331 & real(icntl39)/1000.0e0
1332 & , 8)
1333 ENDIF
1334 ELSE
1335 updated_diff = 0_8
1336 ENDIF
1337 mem_dispo = mem_dispo + updated_diff
1338 maxs = maxs_estim_relaxed8
1339 mem_dispo_nr = 0_8
1340 IF ( (mem_dispo.LT.0) .AND. maxs_estim_relaxed8.GT.
1341 & (mem_allowed_bytes/int(keep(35),8)) ) THEN
1342 perlu_on = .false.
1343 CALL cmumps_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.,
1349 & .false.
1350 & , i8_l0_omp, nbstats_i8, nbcols_i8
1351 & )
1352 mem_dispo_bytes_nr = mem_allowed_bytes-total_bytes_nr
1353 mem_dispo_nr =
1354 & mem_dispo_bytes_nr/int(keep(35),8)
1355 & + updated_diff
1356 IF ( mem_dispo_nr.LT.0 ) THEN
1357 iflag=-19
1358 CALL mumps_set_ierror(-mem_dispo_nr,ierror)
1359 GOTO 500
1360 ELSE
1361 IF (blr_strat.GE.2) THEN
1362 iflag=-19
1363 CALL mumps_set_ierror(-mem_dispo_nr,ierror)
1364 GOTO 500
1365 ELSE
1366 mem_dispo_nr = mem_dispo_nr -
1367 & (int(keep(12),8)/120_8)*
1368 & (keep8(11)/4_8)
1369 IF ( mem_dispo_nr.LT.0 ) THEN
1370 iflag=-19
1371 CALL mumps_set_ierror(-mem_dispo_nr,ierror)
1372 GOTO 500
1373 ELSE
1374 ENDIF
1375 ENDIF
1376 ENDIF
1377 ENDIF
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)
1383 ELSE
1384 maxs = maxs_estim_relaxed8+(mem_dispo/2_8)
1385 ENDIF
1386 ELSE
1387 maxs = maxs_estim_relaxed8 + mem_dispo
1388 ENDIF
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)
1394 ELSE
1395 smaller_maxs = keep8(35) +
1396 & int(perlu,8) * ( keep8(35) / 100_8 + 1_8)
1397 ENDIF
1398 maxs = max(maxs_estim_relaxed8+mem_dispo,
1399 & smaller_maxs)
1400 ENDIF
1401 ELSE IF (blr_strat.EQ.2) THEN
1402 IF ( mem_dispo.LT.0) THEN
1403 maxs = max(
1404 & maxs_estim_relaxed8+mem_dispo,
1405 & maxs_estim_relaxed8)
1406 ENDIF
1407 ELSE IF (blr_strat.EQ.3) THEN
1408 IF ( mem_dispo.LT.0) THEN
1409 maxs = max(
1410 & maxs_estim_relaxed8+mem_dispo,
1411 & maxs_estim_relaxed8)
1412 ENDIF
1413 ENDIF
1414 IF (maxs .LE. 0_8) THEN
1415 iflag=-19
1416 IF (mem_dispo.LT.0) THEN
1417 CALL mumps_set_ierror(mem_dispo,ierror)
1418 ELSE
1419 CALL mumps_set_ierror(maxs_estim_relaxed8-maxs,ierror)
1420 ENDIF
1421 ENDIF
1422 500 CONTINUE
1423 RETURN
1424 END SUBROUTINE cmumps_mem_allowed_set_maxs
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
1431 & )
1432 IMPLICIT NONE
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)
1448 keep8(23) = maxs
1449 perlu_on =.true.
1450 mem_eff_allocated = .true.
1451 eff = .true.
1452 keep8(74) = 0_8
1453 keep8(63) = 0_8
1454 CALL cmumps_max_mem( keep(1), keep8(1),
1455 & myid, n, nelt, na(1), lna, keep8(28),
1456 & keep8(30),
1457 & nslaves, total_mbytes, eff , keep(201),
1458 & blr_strat, perlu_on, total_bytes,
1459 & idummy, bdummy , mem_eff_allocated,
1460 & under_l0_omp
1461 & , i8_l0_omp, nbstats_i8, nbcols_i8
1462 & )
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
1467 iflag=-19
1468 CALL mumps_set_ierror(-keep8(75),ierror)
1469 ENDIF
1470 RETURN
1471 END SUBROUTINE cmumps_mem_allowed_set_k75
1473 & MYID, N,
1474 & NELT, NA, LNA, NSLAVES,
1475 & BLR_STRAT, OOC_STRAT,
1476 & KEEP, KEEP8, IFLAG, IERROR
1477 & , I8_L0_OMP, NBSTATS_I8, NBCOLS_I8
1478 & )
1479 IMPLICIT NONE
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)
1498 keep8(23) = 0_8
1499 under_l0_omp = .true.
1500 perlu_on = .true.
1501 mem_eff_allocated = .true.
1502 eff = .true.
1503 keep8(74) = 0_8
1504 keep8(63) = 0_8
1505 CALL cmumps_max_mem( keep(1), keep8(1),
1506 & myid, n, nelt, na(1), lna, keep8(28),
1507 & keep8(30),
1508 & nslaves, total_mbytes, eff , keep(201),
1509 & blr_strat, perlu_on, total_bytes,
1510 & idummy, bdummy , mem_eff_allocated,
1511 & under_l0_omp
1512 & , i8_l0_omp, nbstats_i8, nbcols_i8
1513 & )
1514 total_static = total_bytes
1515 keep8(23) = keep8_23_savetmp
1516 mem_eff_allocated = .false.
1517 eff = .false.
1518 blr_case = 2
1519 sum_of_peaks = .true.
1520 under_l0_omp = .false.
1521 CALL cmumps_max_mem( keep(1), keep8(1),
1522 & myid, n, nelt, na(1), lna, keep8(28),
1523 & keep8(30),
1524 & nslaves, total_mbytes, eff , keep(201),
1525 & blr_strat, perlu_on, total_bytes,
1526 & blr_case, sum_of_peaks , mem_eff_allocated,
1527 & under_l0_omp
1528 & , i8_l0_omp, nbstats_i8, nbcols_i8
1529 & )
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)
1534 DO ith=1, keep(400)
1535 min_nrladu_if_lr_lu_underl0 = min(
1536 & min_nrladu_if_lr_lu_underl0, i8_l0_omp(4,ith)
1537 & )
1538 ENDDO
1539 extra_mem = int(keep(12),8)*
1540 & ( min_nrladu_if_lr_lu_underl0 / 100_8 + 1_8 )
1541 ELSE
1542 min_nrladu_underl0 = i8_l0_omp(1,1)
1543 DO ith=1, keep(400)
1544 min_nrladu_underl0 = min(
1545 & min_nrladu_underl0, i8_l0_omp(1,ith)
1546 & )
1547 ENDDO
1548 extra_mem = int(keep(12),8)*
1549 & ( min_nrladu_underl0 / 100_8 + 1_8 )
1550 ENDIF
1551 total_above = total_above + extra_mem
1552 ENDIF
1553 under_l0_omp = .true.
1554 CALL cmumps_max_mem( keep(1), keep8(1),
1555 & myid, n, nelt, na(1), lna, keep8(28),
1556 & keep8(30),
1557 & nslaves, total_mbytes, eff , keep(201),
1558 & blr_strat, perlu_on, total_bytes,
1559 & blr_case, sum_of_peaks , mem_eff_allocated,
1560 & under_l0_omp
1561 & , i8_l0_omp, nbstats_i8, nbcols_i8
1562 & )
1563 total_under = total_bytes
1564 keep8(77) = ( max(total_under,total_above) - total_static )
1565 & / int(keep(35),8)
1566 RETURN
1567 END SUBROUTINE cmumps_l0_compute_peak_allowed
1568 SUBROUTINE cmumps_setmaxtozero(M_ARRAY, M_SIZE)
1569 IMPLICIT NONE
1570 INTEGER M_SIZE
1571 REAL M_ARRAY(M_SIZE)
1572 REAL ZERO
1573 parameter(zero=0.0e0)
1574 m_array=zero
1575 RETURN
1576 END SUBROUTINE cmumps_setmaxtozero
1578 & N, INODE, IFATH, KEEP,
1579 & IOLDPS, HF, IW, LIW,
1580 & NROWS, NCOLS, NPIV,
1581 & NELIM, NFS4FATHER,
1582 & NBROWSinF
1583 & )
1584 IMPLICIT NONE
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
1592 nbrowsinf = 0
1593 IF ( (keep(219).EQ.0).OR.(keep(50).NE.2).OR.
1594 & (nfs4father.LE.0) ) THEN
1595 RETURN
1596 ENDIF
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)
1602 ELSE
1603 nbrowsinf=0
1604 ENDIF
1605 RETURN
1606 END SUBROUTINE cmumps_compute_nbrowsinf
1608 & N, INODE, IFATH, FILS, PERM, KEEP,
1609 & IOLDPS, HF, IW, LIW, NFRONT, NASS1,
1610 & ESTIM_NFS4FATHER_ATSON
1611 & )
1612 IMPLICIT NONE
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
1620 in = ifath
1621 j_lastfs = in
1622 DO WHILE (in.GT.0)
1623 j_lastfs = in
1624 in = fils(in)
1625 ENDDO
1626 ncb = nfront-nass1
1627 ipos = ioldps + hf + nass1
1628 estim_nfs4father_atson = 0
1629 DO i=1, ncb
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
1634 ELSE
1635 EXIT
1636 ENDIF
1637 ENDDO
1638 RETURN
1639 END SUBROUTINE cmumps_compute_estim_nfs4father
1641 & A,ASIZE,NCOL,NROW,
1642 & M_ARRAY,NMAX,PACKED_CB,LROW1)
1643 IMPLICIT NONE
1644 INTEGER(8) :: ASIZE
1645 INTEGER NROW,NCOL,NMAX,LROW1
1646 LOGICAL PACKED_CB
1647 COMPLEX A(ASIZE)
1648 REAL M_ARRAY(NMAX)
1649 INTEGER I
1650 INTEGER(8):: APOS, J, LROW
1651 REAL ZERO,TMP
1652 parameter(zero=0.0e0)
1653 DO i=1, nmax
1654 m_array(i) = zero
1655 ENDDO
1656 apos = 0_8
1657 IF (packed_cb) THEN
1658 lrow=int(lrow1,8)
1659 ELSE
1660 lrow=int(ncol,8)
1661 ENDIF
1662 DO i=1,nrow
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
1666 ENDDO
1667 apos = apos + lrow
1668 IF (packed_cb) lrow=lrow+1_8
1669 ENDDO
1670 RETURN
1671 END SUBROUTINE cmumps_compute_maxpercol
1672 SUBROUTINE cmumps_size_in_struct( id, NB_INT, NB_CMPLX, NB_CHAR )
1674 IMPLICIT NONE
1675 TYPE(cmumps_struc) :: id
1676 INTEGER(8) NB_INT, NB_CMPLX
1677 INTEGER(8) NB_REAL,NB_CHAR
1678 nb_int = 0_8
1679 nb_cmplx = 0_8
1680 nb_real = 0_8
1681 nb_char = 0_8
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) *
1700 & id%KEEP(10)
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(64)
1820 RETURN
1821 END SUBROUTINE cmumps_size_in_struct
1822 SUBROUTINE cmumps_copyi8size(N8,SRC,DEST)
1823 IMPLICIT NONE
1824 INTEGER(8) :: N8
1825 COMPLEX, intent(in) :: SRC(N8)
1826 COMPLEX, intent(out) :: DEST(N8)
1827 INTEGER(8) :: SHIFT8, HUG8
1828 INTEGER :: I, I4SIZE
1829 IF(int(huge(i4size),8) .EQ. int(huge(hug8),8)) THEN
1830 CALL ccopy(n8, src(1), 1, dest(1), 1)
1831 ELSE
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)
1837 ENDDO
1838 END IF
1839 RETURN
1840 END SUBROUTINE cmumps_copyi8size
1841 SUBROUTINE cmumps_set_tmp_ptr( THE_ADDRESS, THE_SIZE8 )
1843 INTEGER(8), INTENT(IN) :: THE_SIZE8
1844 COMPLEX, INTENT(IN) :: THE_ADDRESS(THE_SIZE8)
1845 CALL cmumps_set_static_ptr(the_address(1:the_size8))
1846 RETURN
1847 END SUBROUTINE cmumps_set_tmp_ptr
1849 & ( strat, typefile,
1850 & afac, lafac, monbloc,
1851 & lnextpiv2bewritten, unextpiv2bewritten,
1852 & iw, liwfac,
1853 & myid, filesize, ierr , last_call)
1854 USE cmumps_ooc, ONLY : io_block,
1856 IMPLICIT NONE
1857 TYPE(io_block), INTENT(INOUT):: MonBloc
1858 INTEGER(8) :: LAFAC
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,
1870 & iw, liwfac,
1871 & myid, filesize, ierr , last_call)
1872 RETURN
1873 END SUBROUTINE cmumps_ooc_io_lu_panel_i
1875 & NBCOL_SON, NBROW_SON, INDCOL_SON, INDROW_SON,
1876 & LD_SON, VAL_SON, TAG, SUBSET_ROW, SUBSET_COL,
1877 & NSUBSET_ROW, NSUBSET_COL,
1878 & NSUPROW, NSUPCOL,
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 )
1884 IMPLICIT NONE
1885 INTEGER N, ISON, NBCOL_SON, NBROW_SON, NSUBSET_ROW, NSUBSET_COL
1886 INTEGER NPROW, NPCOL, MBLOCK, NBLOCK, LD_SON
1887 INTEGER BBPCBP
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
1895 INTEGER SIZE_PACK
1896 INTEGER KEEP(500)
1897 COMPLEX VAL_SON( LD_SON, * ), TAB(*)
1898 LOGICAL TRANSP
1899 INTEGER N_ALREADY_SENT
1900 CALL cmumps_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,
1904 & nsuprow, nsupcol,
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 )
1909 RETURN
1910 END SUBROUTINE cmumps_buf_send_contrib_type3_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,
1915 & BLR_U,
1916 & NB_BLR_U, NELIM, LBANDSLAVE, ISHIFT, NIV, SYM,
1917 & MIDBLK_COMPRESS, TOLEPS, TOL_OPT, KPERCENT)
1918 USE cmumps_lr_type, ONLY : lrb_type
1920 INTEGER(8), intent(in) :: LA
1921 INTEGER(8), intent(in) :: POSELT
1922 INTEGER, intent(in) :: NFRONT, NB_BLR_L, NB_BLR_U,
1923 & current_blr,
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,
1939 & blr_u,
1940 & nb_blr_u, nelim, lbandslave, ishift, niv, sym,
1941 & midblk_compress, toleps, tol_opt, kpercent)
1942 RETURN
1943 END SUBROUTINE cmumps_blr_update_trailing_i
1944 SUBROUTINE cmumps_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,
1953 & M_ARRAY,
1954 & NELIM,
1955 & NBROWSinF
1956 & )
1957 USE cmumps_lr_type, ONLY : lrb_type
1959 IMPLICIT NONE
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) :: 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 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
1981 CALL cmumps_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,
1990 & m_array=m_array,
1991 & nelim=nelim,
1992 & nbrowsinf=nbrowsinf
1993 & )
1994 RETURN
1995 END SUBROUTINE cmumps_compress_cb_i
1997 & A, LA, POSELT, IFLAG, IERROR, NFRONT,
1998 & BEGS_BLR, sizeBEGS_BLR,
1999 & NB_BLR, TOLEPS, TOL_OPT, K473, BLR_PANEL,
2000 & CURRENT_BLR,
2001 & DIR, WORK, TAU, JPVT,
2002 & LWORK, RWORK, BLOCK,
2003 & MAXI_CLUSTER, NELIM,
2004 & LBANDSLAVE, NPIV, ISHIFT, NIV, KPERCENT,
2005 & KEEP8,
2006 & OMP_NUM
2007 & )
2008 USE cmumps_lr_type, ONLY : lrb_type
2010 IMPLICIT NONE
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,
2027 & TOL_OPT
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,
2035 & CURRENT_BLR,
2036 & DIR, WORK, TAU, JPVT,
2037 & LWORK, RWORK, BLOCK,
2038 & maxi_cluster, nelim,
2039 & lbandslave, npiv, ishift, niv, kpercent,
2040 & keep8
2041 & )
2042 RETURN
2043 END SUBROUTINE cmumps_compress_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,
2049 & DECOMP_TIMER)
2050 USE cmumps_lr_type, ONLY : lrb_type
2052 IMPLICIT NONE
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,
2068 & decomp_timer)
2069 RETURN
2070 END SUBROUTINE cmumps_decompress_panel_i_noopt
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 cmumps_lr_type, ONLY : lrb_type
2077 IMPLICIT NONE
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, ldl,
2090 & begs_blr_l, current_blr, blr_l, nb_blr_l,
2091 & first_block, nelim, utrans)
2092 RETURN
2093 END SUBROUTINE cmumps_blr_upd_nelim_var_l_i
2094 SUBROUTINE cmumps_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,
2102 & IW2, BLOCK,
2103 & MAXI_CLUSTER, OMP_NUM,
2104 & MIDBLK_COMPRESS, TOLEPS, TOL_OPT, KPERCENT
2105 & )
2106 USE cmumps_lr_type, ONLY : lrb_type
2108 IMPLICIT NONE
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, 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,
2134 & iw2, block,
2135 & maxi_cluster,
2136 & midblk_compress, toleps, tol_opt, kpercent
2137 & )
2138 RETURN
2139 END SUBROUTINE cmumps_blr_slv_upd_trail_ldlt_i
2140 SUBROUTINE cmumps_set_innerblocksize( SIZE_INNER,
2141 & NASS, KEEP )
2142 IMPLICIT NONE
2143 INTEGER :: SIZE_INNER, NASS, KEEP(500)
2144 IF (NASS.LT.KEEP(4)) THEN
2145 SIZE_INNER = nass
2146 ELSE IF (nass .GT. keep(3)) THEN
2147 size_inner = min( keep(6), nass )
2148 ELSE
2149 size_inner = min( keep(5), nass )
2150 ENDIF
2151 RETURN
2152 END SUBROUTINE cmumps_set_innerblocksize
#define mumps_abort
Definition VE_Metis.h:25
subroutine cmumps_bdc_error(myid, slavef, comm, keep)
Definition cbcast_int.F:38
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 cmumps_compress_cb_i(a_ptr, la_ptr, poselt, lda, begs_blr, sizebegs_blr, begs_blr_u, sizebegs_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, omp_num, nfs4father, npiv, nvschur_k253, keep, m_array, nelim, nbrowsinf)
Definition ctools.F:1957
subroutine cmumps_blr_slv_upd_trail_ldlt_i(a, la, poselt, iflag, ierror, ncol, nrow, a_blocfacto, la_blocfacto, ld_blocfacto, begs_blr_lm, sizebegs_blr_lm, nb_blr_lm, blr_lm, ishift_lm, begs_blr_ls, sizebegs_blr_ls, nb_blr_ls, blr_ls, ishift_ls, current_blr_lm, current_blr_ls, iw2, block, maxi_cluster, omp_num, midblk_compress, toleps, tol_opt, kpercent)
Definition ctools.F:2106
subroutine cmumps_mem_allowed_set_maxs(maxs, blr_strat, ooc_strat, maxs_estim_relaxed8, keep, keep8, myid, n, nelt, na, lna, nslaves, icntl38, icntl39, iflag, ierror, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition ctools.F:1250
subroutine cmumps_set_innerblocksize(size_inner, nass, keep)
Definition ctools.F:2142
subroutine cmumps_compute_maxpercol(a, asize, ncol, nrow, m_array, nmax, packed_cb, lrow1)
Definition ctools.F:1643
subroutine cmumps_compress_panel_i_noopt(a, la, poselt, iflag, ierror, nfront, begs_blr, sizebegs_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, omp_num)
Definition ctools.F:2008
subroutine cmumps_ooc_io_lu_panel_i(strat, typefile, afac, lafac, monbloc, lnextpiv2bewritten, unextpiv2bewritten, iw, liwfac, myid, filesize, ierr, last_call)
Definition ctools.F:1854
subroutine cmumps_compute_estim_nfs4father(n, inode, ifath, fils, perm, keep, ioldps, hf, iw, liw, nfront, nass1, estim_nfs4father_atson)
Definition ctools.F:1612
subroutine cmumps_max_mem(keep, keep8, myid, n, nelt, na, lna, nnz8, na_elt8, nslaves, memory_mbytes, eff, ooc_strat, blr_strat, perlu_on, memory_bytes, blr_case, sum_of_peaks, mem_eff_allocated, under_l0_omp, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition ctools.F:638
subroutine cmumps_compress_lu(size_inplace, myid, n, ioldps, type, iw, liw, a, la, posfac, lrlu, lrlus, iwpos, ptrast, ptrfac, step, keep, keep8, ssarbr, inode, ierr, lrgroups, nass)
Definition ctools.F:20
subroutine cmumps_stack_band(n, ison, ptrist, ptrast, ptlust_s, ptrfac, iw, liw, a, la, lrlu, lrlus, iwpos, iwposcb, posfac, comp, iptrlu, opeliw, step, pimaster, pamaster, iflag, ierror, slavef, procnode_steps, dad, myid, comm, keep, keep8, dkeep, type_son)
Definition ctools.F:219
subroutine cmumps_blr_upd_nelim_var_l_i(a_u, la_u, upos, a_l, la_l, lpos, iflag, ierror, ldu, ldl, begs_blr_l, sizebegs_blr_l, current_blr, blr_l, nb_blr_l, first_block, nelim, utrans)
Definition ctools.F:2075
subroutine cmumps_set_blrstrat_and_maxs(maxs_base8, maxs_base_relaxed8, blr_strat, keep, nrlnec, nrlnec_active, nrlnec_if_lr_lu, nrlnec_if_lr_lucb, nrlnecooc_if_lr_lucb, nrlnec_if_lr_cb)
Definition ctools.F:1191
subroutine cmumps_l0_compute_peak_allowed(myid, n, nelt, na, lna, nslaves, blr_strat, ooc_strat, keep, keep8, iflag, ierror, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition ctools.F:1479
subroutine cmumps_set_blrstrat_and_maxs_k8(maxs_base8, maxs_base_relaxed8, blr_strat, keep, keep8)
Definition ctools.F:1165
subroutine cmumps_mem_allowed_set_k75(maxs, myid, under_l0_omp, n, nelt, na, lna, nslaves, blr_strat, ooc_strat, keep, keep8, iflag, ierror, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition ctools.F:1432
subroutine cmumps_buf_send_contrib_type3_i(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)
Definition ctools.F:1883
subroutine cmumps_setmaxtozero(m_array, m_size)
Definition ctools.F:1569
subroutine cmumps_blr_update_trailing_i(a, la, poselt, iflag, ierror, nfront, begs_blr_l, sizebegs_blr_l, begs_blr_u, sizebegs_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)
Definition ctools.F:1918
subroutine cmumps_copyi8size(n8, src, dest)
Definition ctools.F:1823
subroutine cmumps_compute_nbrowsinf(n, inode, ifath, keep, ioldps, hf, iw, liw, nrows, ncols, npiv, nelim, nfs4father, nbrowsinf)
Definition ctools.F:1584
subroutine cmumps_free_band(n, ison, ptrist, ptrast, iw, liw, a, la, lrlu, lrlus, iwposcb, iptrlu, step, myid, keep, keep8, type_son)
Definition ctools.F:461
subroutine cmumps_set_memestimglobal(ooc_strat, blr_strat, blr_case, sum_of_peaks, keep8, sum_nrladu_underl0, sum_nrladu_if_lr_lu_underl0, sum_nrladulr_ud_underl0, sum_nrladulr_wc_underl0, peak_fr, peak_fr_ooc, nrlnec_if_lr_lu, nrlnec_if_lr_lucb, nrlnecooc_if_lr_lucb, nrlnec_if_lr_cb, nrladulr_ud, nrladulr_wc, nrlneclr_cb_ud, nrlneclr_lucb_ud, nrlneclr_lucb_wc, memestimglobal)
Definition ctools.F:1050
subroutine cmumps_mem_estim_blr_all(sum_of_peaks, keep, keep8, myid, comm, n, nelt, na, lna, nnz8, na_elt8, nslaves, info, infog, prok, mp, prokg, mpg, i8_l0_omp, nbstats_i8, nbcols_i8)
Definition ctools.F:502
subroutine cmumps_size_in_struct(id, nb_int, nb_cmplx, nb_char)
Definition ctools.F:1673
subroutine cmumps_decompress_panel_i_noopt(a, la, poselt, lda11, lda21, copy_dense_blocks, begs_blr_diag, begs_blr_first_offdiag, nb_blr, blr_panel, current_blr, dir, decomp_timer)
Definition ctools.F:2050
subroutine cmumps_set_tmp_ptr(the_address, the_size8)
Definition ctools.F:1842
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
Definition ccopy.f:81
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
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)
Definition cfac_lr.F:259
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)
Definition cfac_lr.F:325
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)
Definition cfac_lr.F:96
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)
Definition cfac_lr.F:2199
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)
Definition cfac_lr.F:1754
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)
Definition cfac_lr.F:1951
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)
Definition cmumps_ooc.F:285
subroutine cmumps_set_static_ptr(array)
subroutine mumps_storei8(i8, int_array)
subroutine mumps_subtri8toarray(int_array, i8)
subroutine mumps_set_ierror(size8, ierror)
subroutine mumps_geti8(i8, int_array)
subroutine mumps_mem_centralize(myid, comm, info, infog, irank)
subroutine mumps_ldltpanel_storage(npiv, keep, iw, nb_entries)