35 IMPLICIT NONE
36 TYPE (DMUMPS_ROOT_STRUC) :: root
37 INTEGER COMM_LOAD, ASS_IRECV
38 INTEGER COMM, MYID, TYPE, TYPEF
39 INTEGER N, LIW, INODE,IFLAG,IERROR
40 INTEGER ICNTL(60), KEEP(500)
41 DOUBLE PRECISION DKEEP(230)
42 INTEGER(8) KEEP8(150)
43 INTEGER(8) :: LA, POSFAC, LRLU, LRLUS, LRLUSM, IPTRLU
44 INTEGER IWPOSCB, IWPOS,
45 & FPERE, SLAVEF, NELVAW, NMAXNPIV
46 INTEGER IW(LIW),PROCNODE_STEPS(KEEP(28))
47 INTEGER(8) :: PTRAST (KEEP(28))
48 INTEGER(8) :: PTRFAC (KEEP(28))
49 INTEGER(8) :: PAMASTER(KEEP(28))
50 INTEGER PTRIST(KEEP(28)), PTLUST_S(KEEP(28))
51 INTEGER STEP(N), PIMASTER(KEEP(28)), NE(KEEP(28))
52 DOUBLE PRECISION A(LA)
53 INTEGER, intent(in) :: LRGROUPS(N)
54 DOUBLE PRECISION OPASSW, OPELIW
55 DOUBLE PRECISION DBLARR(KEEP8(26))
56 INTEGER INTARR(KEEP8(27))
57 INTEGER ITLOC( N + KEEP(253) ), FILS( N ), DAD( KEEP(28) ),
58 & ND( KEEP(28) ), FRERE( KEEP(28) )
59 DOUBLE PRECISION :: RHS_MUMPS(KEEP(255))
60 INTEGER ISTEP_TO_INIV2(KEEP(71)),
61 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
62 INTEGER NELT, LPTRAR
63 INTEGER FRTPTR( N+1 ), FRTELT( NELT )
64 INTEGER(8), INTENT(IN) :: PTRAIW( LPTRAR ), PTRARW( LPTRAR )
65 INTEGER LPOOL, LEAF, COMP
66 INTEGER IPOOL( LPOOL )
67 INTEGER NSTK_S( KEEP(28) )
68 INTEGER PERM(N)
69 INTEGER LBUFR, LBUFR_BYTES
70 INTEGER BUFR( LBUFR )
71 INTEGER NBFIN
72 INTEGER NFRONT_ESTIM,NELIM_ESTIM
73 DOUBLE PRECISION FLOP_ESTIM_ACC
74 INTEGER MUMPS_PROCNODE
76 include 'mpif.h'
77 include 'mumps_tags.h'
78 INTEGER :: STATUS(MPI_STATUS_SIZE)
79 INTEGER LP
80 INTEGER NBROWS_ALREADY_SENT
81 INTEGER(8) :: POSELT, OPSFAC
82 INTEGER(8) :: IOLD, INEW, FACTOR_POS
83 INTEGER NSLAVES, NCB,
84 & H_INODE, IERR, NBCOL, NBROW, NBROW_SEND,
85 & NELIM
86 INTEGER NBROW_STACK, NBROW_INDICES, NBCOL_STACK
87 INTEGER NCBROW_ALREADY_MOVED, NCBROW_PREVIOUSLY_MOVED,
88 &NCBROW_NEWLY_MOVED
89 INTEGER(8) :: LAST_ALLOWED_POS
90 INTEGER(8) :: LREQCB, MIN_SPACE_IN_PLACE
91 INTEGER(8) :: SHIFT_VAL_SON
92 INTEGER SHIFT_LIST_ROW_SON,
93 & SHIFT_LIST_COL_SON,
94 & LIST_ROW_SON, LIST_COL_SON, LIST_SLAVES
95 INTEGER IOLDPS,NFRONT,NPIV,NASS,IOLDP1,PTROWEND,
96 & LREQI, LCONT
97 INTEGER I,LDA, INIV2
98 INTEGER MSGDEST, MSGTAG, CHK_LOAD
99 include 'mumps_headers.h'
100 LOGICAL MUST_COMPACT_FACTORS
101 LOGICAL PACKED_CB, COMPRESS_PANEL, COMPRESS_CB, LR_SOLVE
102 LOGICAL INPLACE
103 INTEGER(8) :: SIZE_INPLACE, FAC_ENTRIES, COUNT_EXTRA_IP_COPIES
104 INTEGER INTSIZ
105 DOUBLE PRECISION FLOP1, FLOP1_EFFECTIVE
106 LOGICAL BLOCKING, SET_IRECV, MESSAGE_RECEIVED
107 LOGICAL SSARBR, SSARBR_ROOT, MUMPS_INSSARBR,
108 & MUMPS_IN_OR_ROOT_SSARBR, MUMPS_ROOTSSARBR
111 lp = icntl(1)
112 IF (icntl(4) .LE. 0) lp = -1
113 inplace = .false.
114 min_space_in_place = 0_8
115 ioldps = ptlust_s(step(inode))
116 intsiz = iw(ioldps+xxi)
117 nfront = iw(ioldps+keep(ixsz))
118 npiv = iw(ioldps + 1+keep(ixsz))
119 nmaxnpiv =
max(npiv, nmaxnpiv)
120 nass = iabs(iw(ioldps + 2+keep(ixsz)))
121 nslaves= iw(ioldps+5+keep(ixsz))
122 h_inode= 6 + nslaves + keep(ixsz)
123 lcont = nfront - npiv
124 nbcol = lcont
127 & (procnode_steps(step(inode)),keep(199))
128 lreqcb = 0_8
129 inplace = .false.
130 packed_cb = ((keep(215).EQ.0)
131 & .AND.(keep(50).NE.0)
132 & .AND.(typef.EQ.1
133 & .OR.typef.EQ.2
134 & )
135 & .AND.(type.EQ.1))
136 compress_panel = (iw(ioldps+xxlr).GE.2)
137 compress_cb = (iw(ioldps+xxlr).EQ.1.OR.iw(ioldps+xxlr).EQ.3)
138 lr_solve = (keep(486).EQ.2)
139 must_compact_factors = .true.
140 IF (keep(201).EQ.1 .OR. keep(201).EQ.-1
141 & .OR. (compress_panel.AND.lr_solve)
142 & ) THEN
143 must_compact_factors = .false.
144 ENDIF
145 IF ((fpere.EQ.0).AND.(nass.NE.npiv)) THEN
146 iflag = -10
147 GOTO 600
148 ENDIF
149 nbrow = lcont
150 IF (type.EQ.2) nbrow = nass - npiv
151 IF ((keep(50).NE.0).AND.(type.EQ.2)) THEN
152 lda = nass
153 ELSE
154 lda = nfront
155 ENDIF
156 nbrow_send = nbrow
157 nelim = nass-npiv
158 IF (typef.EQ.2) nbrow_send = nelim
159 poselt = ptrast(step(inode))
160 IF (poselt .ne. ptrfac(step(inode))) THEN
161 WRITE(*,*)
myid,
":Error 1 in DMUMPS_FAC_STACK:"
162 WRITE(*,*) "INODE, PTRAST, PTRFAC =",
163 & inode, ptrast(step(inode)), ptrfac(step(inode))
164 WRITE(*,*) "PACKED_CB, NFRONT, NPIV, NASS, NSLAVES",
165 & packed_cb, nfront, npiv, nass, nslaves
166 WRITE(*,*) "TYPE, TYPEF, FPERE ",
167 & TYPE, TYPEF, FPERE
169 END IF
170 nelvaw = nelvaw + nass - npiv
171 IF (keep(50) .eq. 0) THEN
172 fac_entries = int(npiv,8) * int(nfront,8)
173 ELSE
174 fac_entries = ( int(npiv,8)*int(npiv+1,8) )/ 2_8
175 ENDIF
176 fac_entries = fac_entries + int(nbrow,8) * int(npiv,8)
177 IF ( keep(405) .EQ. 0 ) THEN
178 keep8(10) = keep8(10) + fac_entries
179 keep(429) = keep(429) - 1
180 ELSE
181
182 keep8(10) = keep8(10) + fac_entries
183
184 ENDIF
186 & keep(50), TYPE,FLOP1 )
187 IF ( (.NOT. ssarbr_root) .and. TYPE == 1) then
188 IF (ne(step(inode))==0) THEN
189 chk_load=0
190 ELSE
191 chk_load=1
192 ENDIF
194 & keep,keep8)
195 ENDIF
196 flop1_effective = flop1
197 opeliw = opeliw + flop1
198 IF ( npiv .NE. nass ) THEN
200 & keep(50), TYPE,FLOP1 )
201 IF (.NOT. ssarbr_root ) THEN
202 IF (ne(step(inode))==0) THEN
203 chk_load=0
204 ELSE
205 chk_load=1
206 ENDIF
208 & flop1_effective-flop1,
209 & keep,keep8)
210 ENDIF
211 END IF
212 IF ( ssarbr_root ) THEN
213 nfront_estim=nd(step(inode)) + keep(253)
214 nelim_estim=nass-(nfront-nfront_estim)
216 & keep(50),1,flop1)
217 END IF
218 flop1=-flop1
219 IF (keep(400).GT.0) THEN
220 flop_estim_acc = flop_estim_acc + flop1
221 ENDIF
222 IF (ssarbr_root) THEN
224 ELSE
226 ENDIF
227 IF ( fpere .EQ. 0 ) THEN
228 IF ( keep(253) .NE. 0 .AND. keep(201).NE.-1
229 & .AND. keep(201).NE.1
230 & .AND. (.NOT.compress_panel.OR..NOT.lr_solve)
231 & ) THEN
232 must_compact_factors = .true.
233 GOTO 190
234 ELSE IF ( keep(50) .NE. 0 .AND. keep(459).GT.1) THEN
235 must_compact_factors = .true.
236 GOTO 190
237 ELSE
238 must_compact_factors = .false.
239 GOTO 190
240 ENDIF
241 ENDIF
242 IF ( fpere.EQ.keep(38) ) THEN
243 ncb = nfront - nass
244 shift_list_row_son = h_inode + nass
245 shift_list_col_son = h_inode + nfront + nass
246 shift_val_son = int(nass,8)*int(nfront+1,8)
247 IF (type.EQ.1) THEN
249 & comm_load, ass_irecv,
250 & n, inode, fpere,
251 & ptlust_s, ptrast,
252 & root, ncb, ncb, shift_list_row_son,
253 & shift_list_col_son , shift_val_son, nfront,
254 & root_cont_static,
myid, comm,
255 &
256 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
257 & iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la,
258 & ptrist, ptlust_s, ptrfac,
259 & ptrast, step, pimaster, pamaster,
260 & nstk_s,
comp, iflag, ierror, perm,
261 & ipool, lpool, leaf, nbfin, slavef,
262 & opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw,
263 & intarr,dblarr,icntl,keep,keep8,dkeep,.false., nd, frere,
264 & lptrar, nelt, frtptr, frtelt,
265 & istep_to_iniv2, tab_pos_in_pere
266 & , lrgroups
267 & )
268 IF (iflag < 0 ) GOTO 500
269 ENDIF
271 ioldps = ptlust_s(step(inode))
272 list_row_son = ioldps + h_inode + npiv
273 list_col_son = ioldps + h_inode + nfront + npiv
274 list_slaves = ioldps + 6 + keep(ixsz)
275 IF (msgdest.EQ.
myid)
THEN
277 & inode, nelim, nslaves, iw(list_row_son),
278 & iw(list_col_son), iw(list_slaves),
279 &
280 & procnode_steps, iwpos, iwposcb, iptrlu,
281 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
282 & ptlust_s, ptrfac,
283 & ptrast, step, pimaster, pamaster, nstk_s,
284 & itloc, rhs_mumps,
comp,
285 & iflag, ierror,
286 & ipool, lpool, leaf,
myid, slavef,
287 & keep, keep8, dkeep,
288 & comm, comm_load, fils, dad, nd)
289 IF (iflag.LT.0) GOTO 600
290 ELSE
291 ierr = -1
292 DO WHILE (ierr.EQ.-1)
294 & iw(list_row_son), iw(list_col_son), nslaves,
295 & iw(list_slaves), msgdest, comm, keep, ierr)
296 IF ( ierr .EQ. -1 ) THEN
297 blocking =.false.
298 set_irecv =.true.
299 message_received = .false.
301 & blocking, set_irecv, message_received,
302 & mpi_any_source, mpi_any_tag, status,
303 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
304 & iwpos, iwposcb, iptrlu,
305 & lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac,
306 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
307 & iflag, ierror, comm, perm,
308 & ipool, lpool, leaf, nbfin,
myid, slavef,
309 & root, opassw, opeliw, itloc, rhs_mumps,
310 & fils, dad, ptrarw, ptraiw,
311 & intarr, dblarr, icntl, keep,keep8,dkeep,
312 & nd, frere, lptrar, nelt,
313 & frtptr, frtelt,
314 & istep_to_iniv2, tab_pos_in_pere,
315 & .true., lrgroups
316 & )
317 IF ( iflag .LT. 0 ) GOTO 500
318 ioldps = ptlust_s(step(inode))
319 list_row_son = ioldps + h_inode + npiv
320 list_col_son = ioldps + h_inode + nfront + npiv
321 list_slaves = ioldps + 6 + keep(ixsz)
322 ENDIF
323 ENDDO
324 IF ( ierr .EQ. -2 ) THEN
325 ierror = ( 3 + nslaves + 2 * nelim ) * keep( 34 )
326 iflag = - 17
327 GOTO 600
328 ELSE IF ( ierr .EQ. -3 ) THEN
329 ierror = ( 3 + nslaves + 2 * nelim ) * keep( 34 )
330 iflag = -20
331 GOTO 600
332 ENDIF
333 ENDIF
334 IF (nelim.EQ.0) THEN
335 poselt = ptrast(step(inode))
336 opsfac = poselt + int(npiv,8) * int(nfront,8) + int(npiv,8)
337 GOTO 190
338 ELSE
339 GOTO 500
340 ENDIF
341 ENDIF
342 opsfac = poselt + int(npiv,8) * int(lda,8) + int(npiv,8)
344 & keep(199)) .NE.
myid )
THEN
345 msgtag =noeud
347 ierr = -1
348 nbrows_already_sent = 0
349 DO WHILE (ierr.EQ.-1)
350 IF ( (type.EQ.1) .AND. (typef.EQ.1) ) THEN
352 & inode, fpere, nfront,
353 & lcont, nass, npiv, iw( ioldps + h_inode + npiv ),
354 & iw( ioldps + h_inode + npiv + nfront ),
355 & a( opsfac ), packed_cb,
356 & msgdest, msgtag, comm, keep, ierr )
357 ELSE
358 IF ( type.EQ.2 ) THEN
359 iniv2 = istep_to_iniv2( step(inode) )
360 ELSE
361 iniv2 = -9999
362 ENDIF
364 & fpere, inode,
365 & nbrow_send, iw(ioldps + h_inode + npiv ),
366 & nbcol, iw(ioldps + h_inode + npiv + nfront ),
367 & a(opsfac), lda, nelim, TYPE,
368 & NSLAVES, IW(IOLDPS+6+KEEP(IXSZ)), MSGDEST,
369 & COMM, IERR,
370 &
371 & SLAVEF, KEEP,KEEP8, INIV2, TAB_POS_IN_PERE )
372 END IF
373 IF ( ierr .EQ. -1 ) THEN
374 blocking = .false.
375 set_irecv = .true.
376 message_received = .false.
378 & blocking, set_irecv, message_received,
379 & mpi_any_source, mpi_any_tag,
380 & status,
381 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
382 & iwpos, iwposcb, iptrlu,
383 & lrlu, lrlus, n, iw, liw, a, la,
384 & ptrist, ptlust_s, ptrfac,
385 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
386 & iflag, ierror, comm,
387 & perm, ipool, lpool, leaf,
388 & nbfin,
myid, slavef,
389 &
390 & root, opassw, opeliw, itloc, rhs_mumps,
391 & fils, dad, ptrarw, ptraiw,
392 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
393 & lptrar, nelt, frtptr, frtelt,
394 & istep_to_iniv2, tab_pos_in_pere, .true.
395 & , lrgroups )
396 IF ( iflag .LT. 0 ) GOTO 500
397 ENDIF
398 ioldps = ptlust_s(step( inode ))
399 opsfac = poselt + int(npiv,8) * int(lda,8) + int(npiv,8)
400 END DO
401 IF ( ierr .EQ. -2 .OR. ierr .EQ. -3 ) THEN
402 IF ( (type.EQ.1) .AND. (typef.EQ.1) ) THEN
403 ierror = ( 2*lcont + 9 ) * keep( 34 ) +
404 & lcont*lcont * keep( 35 )
405 ELSE IF (keep(50).ne.0 .AND. TYPE .eq. 2 ) then
406 ierror = ( nbrow_send + nbcol+ 5 + nslaves)
407 & * keep( 34 ) +
408 & nbrow_send*nbrow_send*keep( 35 )
409 ELSE
410 ierror = ( nbrow_send + nbcol+ 5 + nslaves) * keep( 34 ) +
411 & nbrow_send*nbcol*keep( 35 )
412 ENDIF
413 IF (ierr .EQ. -2) THEN
414 iflag = -17
415 IF ( lp > 0 ) THEN
417 & ": FAILURE, SEND BUFFER TOO SMALL DURING
418 & DMUMPS_FAC_STACK", TYPE, TYPEF
419 ENDIF
420 ENDIF
421 IF (ierr .EQ. -3) THEN
422 iflag = -20
423 IF ( lp > 0 ) THEN
425 & ": FAILURE, RECV BUFFER TOO SMALL DURING
426 & DMUMPS_FAC_STACK", TYPE, TYPEF
427 ENDIF
428 ENDIF
429 GOTO 600
430 ENDIF
431 ENDIF
433 & keep(199)) .EQ.
myid )
THEN
434 nbrow_send = 0
435 lreqi = 2 + keep(ixsz)
436 nbrow_stack = nbrow
437 nbrow_indices = nbrow
438 IF ((keep(50).NE.0).AND.(type.EQ.2)) THEN
439 nbcol_stack = nelim
440 ELSE
441 nbcol_stack = nbcol
442 ENDIF
443 IF (compress_cb) THEN
444 nbrow_stack=nelim
445 IF (keep(50).NE.0) nbcol_stack = nelim
446 ENDIF
447 ELSE
448 nbrow_stack = nbrow-nbrow_send
449 nbrow_indices = nbrow-nbrow_send
450 nbcol_stack = nbcol
451 IF (compress_cb) THEN
452 nbrow_stack = 0
453 nbcol_stack = 0
454 ENDIF
455 lreqi = 6 + nbrow_indices + nbcol + keep(ixsz)
456 IF (.NOT. (type.EQ.1 .AND. typef.EQ.2 ) ) GOTO 190
457 IF (fpere.EQ.0) GOTO 190
458 ENDIF
459 IF (packed_cb) THEN
460 IF (nbrow_stack.EQ.0.OR.nbcol_stack.EQ.0) THEN
461 lreqcb = 0
462 ELSE
463 lreqcb = ( int(nbcol_stack,8) * int( nbcol_stack + 1, 8) ) / 2_8
464 & - ( int(nbrow_send ,8) * int( nbrow_send + 1, 8) ) / 2_8
465 ENDIF
466 ELSE
467 lreqcb = int(nbrow_stack,8) * int(nbcol_stack,8)
468 ENDIF
469 inplace = ( keep(234).NE.0 )
470 IF (keep(50).NE.0 .AND. TYPE .EQ. 2) inplace = .false.
471 inplace = inplace .OR. .NOT. must_compact_factors
472 inplace = inplace .AND.
473 & ( ptlust_s(step(inode)) + intsiz .EQ. iwpos )
474 min_space_in_place = 0_8
475 IF ( inplace .AND. keep(50).eq. 0 .AND.
476 & must_compact_factors) THEN
477 min_space_in_place = int(nbcol_stack,8)
478 ENDIF
479 IF ( min_space_in_place .GT. lreqcb ) THEN
480 inplace = .false.
481 ENDIF
483 & ssarbr, .false.,
484 &
myid,n,keep,keep8,dkeep,iw, liw, a, la,
485 & lrlu, iptrlu,iwpos,iwposcb, slavef, procnode_steps, dad,
486 & ptrist,ptrast,step, pimaster,pamaster,
487 & lreqi, lreqcb, inode, s_notfree, .true.,
488 &
comp, lrlus, lrlusm, iflag, ierror )
489 IF (iflag.LT.0) GOTO 600
490 iw(iwposcb+1+xxf) = iw(ioldps+xxf)
491 iw(iwposcb+1+xxlr) = iw(ioldps+xxlr)
492 ptrist(step(inode)) = iwposcb+1
494 & keep(199)) .EQ.
myid )
THEN
495 pimaster(step(inode)) = ptlust_s(step(inode))
496 pamaster(step(inode)) = iptrlu + 1_8
497 ptrast(step(inode)) = -99999999_8
498 iw(iwposcb+1+keep(ixsz)) =
min(-nbcol_stack,-1)
499 iw(iwposcb+2+keep(ixsz)) = nbrow_stack
500 IF (packed_cb) iw(iwposcb+1+xxs) = s_cb1comp
501 ELSE
502 ptrast(step(inode)) = iptrlu+1_8
503 IF (packed_cb) iw(iwposcb+1+xxs)=s_cb1comp
504 iw(iwposcb+1+keep(ixsz)) = nbcol
505 iw(iwposcb+2+keep(ixsz)) = 0
506 iw(iwposcb+3+keep(ixsz)) = nbrow_stack
507 iw(iwposcb+4+keep(ixsz)) = 0
508 iw(iwposcb+5+keep(ixsz)) = 1
509 iw(iwposcb+6+keep(ixsz)) = 0
510 ioldp1 = ptlust_s(step(inode))+h_inode
511 ptrowend = iwposcb+6+nbrow_stack+keep(ixsz)
512 DO i = 1, nbrow_stack
513 iw(iwposcb+7+keep(ixsz)+i-1) =
514 & iw(ioldp1+nfront-nbrow_stack+i-1)
515 ENDDO
516 DO i = 1, nbcol
517 iw(ptrowend+i)=iw(ioldp1+nfront+npiv+i-1)
518 ENDDO
519 END IF
520 IF ( keep(50).NE.0 .AND. TYPE .EQ. 1
521 & .AND. must_compact_factors ) THEN
522 poselt = ptrfac(step(inode))
524 & npiv, nbrow, keep,
525 & int(lda,8)*int(nbrow+npiv,8),
526 & iw( ptlust_s(step(inode)) + h_inode + nfront ) )
527 must_compact_factors = .false.
528 ENDIF
529 IF (compress_cb.AND.(lreqcb.EQ.0)) GOTO 190
530 IF ( keep(50).EQ.0 .AND. must_compact_factors )
531 & THEN
532 last_allowed_pos = poselt + int(lda,8)*int(npiv+nbrow-1,8)
533 & + int(npiv,8)
534 ELSE
535 last_allowed_pos = -1_8
536 ENDIF
537 ncbrow_already_moved = 0
538 count_extra_ip_copies = 0_8
539 10 CONTINUE
540 ncbrow_previously_moved = ncbrow_already_moved
541 IF (iptrlu .LT. posfac ) THEN
543 & poselt, iptrlu, npiv, nbcol_stack, nbrow_stack,
544 & nbrow_send, lreqcb, keep, packed_cb,
545 & last_allowed_pos, ncbrow_already_moved )
546 ELSE
548 & poselt, iptrlu, npiv, nbcol_stack, nbrow_stack,
549 & nbrow_send, lreqcb, keep, packed_cb )
550 ncbrow_already_moved = nbrow_stack
551 ENDIF
552 IF (last_allowed_pos .NE. -1_8) THEN
553 must_compact_factors =.false.
554 IF ( ncbrow_already_moved .EQ. nbrow_stack ) THEN
555 IF (compress_cb) THEN
556 ncbrow_already_moved = nbrow
557 ELSE
558 ncbrow_already_moved = ncbrow_already_moved + nbrow_send
559 ENDIF
560 ENDIF
561 ncbrow_newly_moved = ncbrow_already_moved
562 & - ncbrow_previously_moved
563 factor_pos = poselt +
564 & int(lda,8)*int(npiv+nbrow-ncbrow_already_moved,8)
566 & ncbrow_newly_moved,
567 & int(ncbrow_newly_moved,8) * int(lda,8) )
568 inew = factor_pos + int(npiv,8) * int(ncbrow_newly_moved,8)
569 iold = inew + int(ncbrow_newly_moved,8) * int(nbcol_stack,8)
570 DO i = 1, ncbrow_previously_moved*npiv
571 a(inew) = a(iold)
572 iold = iold + 1_8
573 inew = inew + 1_8
574 ENDDO
575 count_extra_ip_copies = count_extra_ip_copies +
576 & int(ncbrow_previously_moved,8)
577 & * int(npiv,8)
578 last_allowed_pos = inew
579 IF (ncbrow_already_moved.LT.nbrow_stack) THEN
580 GOTO 10
581 ENDIF
582 ENDIF
583 IF ( count_extra_ip_copies .GT. 0_8 ) THEN
584
585 keep8(8) = keep8(8) + count_extra_ip_copies
586
587 count_extra_ip_copies = 0_8
588 ENDIF
589 190 CONTINUE
590 IF (must_compact_factors) THEN
591 poselt = ptrfac(step(inode))
593 & npiv, nbrow, keep,
594 & int(lda,8)*int(nbrow+npiv,8),
595 & iw( ptlust_s(step(inode)) + h_inode + nfront ) )
596 must_compact_factors = .false.
597 ENDIF
598 ioldps = ptlust_s(step(inode))
599 iw(ioldps+keep(ixsz)) = nbcol
600 iw(ioldps + 1+keep(ixsz)) = nass - npiv
601 IF (type.EQ.2) THEN
602 iw(ioldps + 2+keep(ixsz)) = nass
603 ELSE
604 iw(ioldps + 2+keep(ixsz)) = nfront
605 ENDIF
606 iw(ioldps + 3+keep(ixsz)) = npiv
607 IF (inplace) THEN
608 size_inplace = lreqcb - min_space_in_place
609 ELSE
610 size_inplace = 0_8
611 ENDIF
613 & A, LA, POSFAC, LRLU, LRLUS,
614 & IWPOS, PTRAST, PTRFAC, STEP, KEEP,KEEP8, SSARBR,INODE,IERR
615 & , LRGROUPS, NASS
616 & )
617 IF(ierr.LT.0)THEN
618 iflag=ierr
619 ierror=0
620 GOTO 600
621 ENDIF
622 500 CONTINUE
623 RETURN
624 600 CONTINUE
625 IF (iflag .NE. -1 .AND. keep(405) .EQ. 0) THEN
627 ENDIF
628 RETURN
subroutine dmumps_bdc_error(myid, slavef, comm, keep)
subroutine dmumps_alloc_cb(inplace, min_space_in_place, ssarbr, process_bande, myid, n, keep, keep8, dkeep, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, lreq, lreqcb, node_arg, state_arg, set_header, comp, lrlus, lrlusm, iflag, ierror)
subroutine dmumps_copy_cb_right_to_left(a, la, lda, poselt, iptrlu, npiv, nbcol_stack, nbrow_stack, nbrow_send, sizecb, keep, packed_cb, last_allowed, nbrow_already_stacked)
subroutine dmumps_copy_cb_left_to_right(a, la, lda, poselt, iptrlu, npiv, nbcol_stack, nbrow_stack, nbrow_send, sizecb, keep, packed_cb)
subroutine dmumps_compact_factors(a, lda, npiv, nbrow, keep, sizea, iw)
subroutine dmumps_compact_factors_unsym(a, lda, npiv, ncontig, sizea)
recursive subroutine dmumps_try_recvtreat(comm_load, ass_irecv, blocking, set_irecv, message_received, msgsou, msgtag, status, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt istep_to_iniv2, tab_pos_in_pere, stack_right_authorized, lrgroups)
subroutine dmumps_process_rtnelind(root, inode, nelim, nslaves, row_list, col_list, slave_list, procnode_steps, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, itloc, rhs_mumps, comp, iflag, ierror, ipool, lpool, leaf, myid, slavef, keep, keep8, dkeep, comm, comm_load, fils, dad, nd)
recursive subroutine dmumps_build_and_send_cb_root(comm_load, ass_irecv, n, ison, iroot, ptri, ptrr, root, nbrow, nbcol, shift_list_row_son, shift_list_col_son, shift_val_son_arg, lda_arg, tag, myid, comm, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk, comp, iflag, ierror, perm, ipool, lpool, leaf, nbfin, slavef, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, transpose_asm, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine mumps_get_flops_cost(nfront, npiv, nass, keep50, level, cost)
subroutine, public dmumps_buf_send_maitre2(nbrows_already_sent, ipere, ison, nrow, irow, ncol, icol, val, lda, nelim, type_son, nslaves, slaves, dest, comm, ierr, slavef, keep, keep8, iniv2, tab_pos_in_pere)
subroutine, public dmumps_buf_send_rtnelind(ison, nelim, nelim_row, nelim_col, nslaves, slaves, dest, comm, keep, ierr)
subroutine, public dmumps_buf_send_cb(nbrows_already_sent, inode, fpere, nfront, lcont, nass, npiv, iwrow, iwcol, a, packed_cb, dest, tag, comm, keep, ierr)
integer, save, private myid
subroutine, public dmumps_load_update(check_flops, process_bande, inc_load, keep, keep8)