15 & ( bufr, lbufr, lbufr_bytes,
16 & msgtag, msgsou, myid, slavef, comm,
17 & n, nrhs, ipool, lpool, leaf,
18 & nbfin, nstk_s, iw, liw, a, la, ptrist,
19 & ptrfac, iwcb, liwcb,
23 & info, keep, keep8, dkeep, step, procnode_steps
24 & rhscomp, lrhscomp, posinrhscomp_fwd
31 INTEGER lbufr, lbufr_bytes
32 INTEGER msgtag, msgsou, myid, slavef, comm
34 INTEGER(8),
INTENT(IN) :: la, lwcb
35 INTEGER n, nrhs, lpool, leaf, nbfin, lrhscomp
36 INTEGER liwcb, posiwcb
37 INTEGER(8) :: poswcb, pleftwcb
38 INTEGER info( 80 ), keep( 500)
40 DOUBLE PRECISION,
INTENT(INOUT) :: dkeep(230)
42 INTEGER ipool( lpool ), nstk_s( n )
45 INTEGER ptricb(keep(28)),ptrist(keep(28))
46 INTEGER(8) :: ptrfac(keep(28))
48 INTEGER procnode_steps(keep(28))
49 COMPLEX(kind=8) wcb( lwcb ), a( la )
50 COMPLEX(kind=8) rhscomp( lrhscomp, nrhs )
51 INTEGER,
intent(in) :: posinrhscomp_fwd(n)
52 LOGICAL,
intent(in) :: from_pp
54 include
'mumps_tags.h'
55 INTEGER(8) :: ptrx, ptry, ifr8
56 INTEGER ierr, k, jj, jbdeb, jbfin, nrhs_b
57 INTEGER :: iwhdlr, lda_slave
58 INTEGER :: mtype_slave
59 INTEGER finode, , long, ncb, position, ncv, npiv
60 INTEGER pdest, i, iposinrhscomp
68 LOGICAL compress_panel, lr_activated
69 LOGICAL oocwrite_compatible_with_blr
70 COMPLEX(kind=8) alpha, one
71 parameter(one=(1.0d0,0.0d0),
alpha=(-1.0d0,0.0d0))
72 include
'mumps_headers.h'
73 IF ( msgtag .EQ. racine_solve )
THEN
75 IF ( nbfin .eq. 0 )
GOTO 270
76 ELSE IF (msgtag .EQ. contvec )
THEN
79 & finode, 1, mpi_integer, comm, ierr )
81 & fpere, 1, mpi_integer, comm, ierr )
83 & ncb, 1, mpi_integer, comm, ierr )
85 & jbdeb, 1, mpi_integer, comm, ierr )
87 & jbfin, 1, mpi_integer, comm, ierr )
89 & long, 1, mpi_integer, comm, ierr )
90 nrhs_b = jbfin-jbdeb+1
91 IF ( ncb .eq. 0 )
THEN
92 ptricb(step(finode)) = -1
94 IF ( ptricb(step(finode)) .EQ. 0 )
THEN
95 ptricb(step(finode)) = ncb + 1
97 IF ( ( posiwcb - long ) .LT. 0 )
THEN
102 IF ( poswcb - pleftwcb + 1_8 .LT.
103 & int(long,8) * int(nrhs_b,8))
THEN
106 & int(long,8) * int(nrhs_b,8),
110 IF (long .GT. 0)
THEN
113 & long, mpi_integer, comm, ierr )
117 & long, mpi_double_complex, comm, ierr )
122 iposinrhscomp= abs(posinrhscomp_fwd(iwcb(i)))
123 rhscomp(iposinrhscomp,jbdeb+k-1) =
124 & rhscomp(iposinrhscomp,jbdeb+k-1) +
128 ptricb(step(finode)) = ptricb(step(finode)) - long
131 IF ( ptricb(step(finode)) == 1 .OR.
132 & ptricb(step(finode)) == -1 )
THEN
133 nstk_s(step(fpere)) = nstk_s(step(fpere)) - 1
134 ptricb(step(finode)) = 0
136 IF ( nstk_s(step(fpere)) .EQ. 0 )
THEN
137 ipool( leaf ) = fpere
139 IF ( leaf > lpool )
THEN
141 &
'Internal error 1 ZMUMPS_TRAITER_MESSAGE_SOLVE',
146 ELSEIF ( msgtag .EQ. master2slave )
THEN
149 & finode, 1, mpi_integer, comm, ierr )
151 & fpere, 1, mpi_integer, comm, ierr )
153 & ncv, 1, mpi_integer, comm, ierr )
155 & npiv, 1, mpi_integer, comm, ierr )
157 & jbdeb, 1, mpi_integer, comm, ierr )
159 & jbfin, 1, mpi_integer, comm, ierr )
160 nrhs_b = jbfin-jbdeb+1
162 ptrx = pleftwcb + int(ncv,8) * int(nrhs_b,8)
163 pleftwcb = pleftwcb + int(npiv + ncv,8) * int(nrhs_b,8)
164 IF ( poswcb - pleftwcb + 1 .LT. 0 )
THEN
171 & wcb( ptry + (k-1) * ncv ), ncv,
172 & mpi_double_complex, comm, ierr )
174 IF ( npiv .GT. 0 )
THEN
177 & wcb( ptrx + (k-1)*npiv ), npiv,
178 & mpi_double_complex, comm, ierr )
181 lr_activated = (iw(ptrist(step(finode))+xxlr).GT.0)
182 compress_panel = (iw(ptrist(step(finode))+xxlr).GE.2)
183 oocwrite_compatible_with_blr =
184 & (.NOT.lr_activated.OR.(.NOT.compress_panel).OR.
187 IF (keep(201).GT.0.AND.oocwrite_compatible_with_blr)
THEN
189 & finode,ptrfac,keep,a,la,step,
190 & keep8,n,dummy,ierr)
197 IF ( iw(ptrist(step(finode))+xxlr) .GE. 2 .AND.
198 & keep(485) .EQ. 1 )
THEN
199 iwhdlr = iw(ptrist(step(finode))+xxf)
207 & mtype_slave, keep, keep8,
210 apos = ptrfac(step(finode))
211 IF (keep(201) .EQ. 1)
THEN
219 & ( a, la, apos, npiv,
225 & mtype_slave, keep, one )
227 IF ((keep(201).GT.0).AND.oocwrite_compatible_with_blr)
THEN
229 & keep(28),a,la,.true.,ierr)
236 pleftwcb = pleftwcb - int(npiv,8) * int(nrhs_b,8)
239 IF ( pdest .EQ. myid )
THEN
240 IF ( ptricb(step(finode)) .EQ. 0 )
THEN
241 ncb = iw( ptrist(step(finode)) + 2 + keep(ixsz) )
242 ptricb(step(finode)) = ncb + 1
244 j1 = ptrist(step(finode))+3+keep(ixsz)
251 ifr8 = ptry+int(k-1,8)*int(ncv,8)
258 rhscomp(iposinrhscomp,jbdeb+k-1)=
259 & rhscomp(iposinrhscomp,jbdeb+k-1)
260 & + wcb(ifr8+int(i-1,8))
266 ifr8 = ptry+int(k-1,8)*int(ncv,8)
272 iposinrhscomp= abs(posinrhscomp_fwd(jj))
273 rhscomp(iposinrhscomp,jbdeb+k-1)=
274 & rhscomp(iposinrhscomp,jbdeb+k-1)
275 & + wcb(ifr8+int(i-1,8))
279 ptricb(step(finode)) = ptricb(step(finode)) - ncv
280 IF ( ptricb( step( finode ) ) == 1 )
THEN
282 ptricb(step(finode)) = 0
284 IF ( nstk_s(step(fpere)) .EQ. 0 )
THEN
285 ipool( leaf ) = fpere
287 IF ( leaf > lpool )
THEN
289 &
'INTERNAL Error in ZMUMPS_TRAITER_MESSAGE_SOLVE',
297 & iw(ptrist(step( finode )) + 2 + keep(ixsz) ), ncv,ncv,
298 & iw(ptrist(step(finode))+4+ keep(ixsz) ),
299 & wcb( ptry ), jbdeb, jbfin,
300 & rhscomp, 1, 1, -9999, -9999
301 & keep, pdest, contvec, comm, ierr )
302 IF ( ierr .EQ. -1 )
THEN
304 & bufr, lbufr, lbufr_bytes,
305 & myid, slavef, comm,
306 & n, nrhs, ipool, lpool, leaf,
307 & nbfin, nstk_s, iw, liw, a, la, ptrist, ptrfac,
309 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
310 & ptricb, info, keep,keep8, dkeep, step,
312 & rhscomp, lrhscomp, posinrhscomp_fwd
315 IF ( info( 1 ) .LT. 0 )
GOTO 270
317 ELSE IF ( ierr .EQ. -2 )
THEN
319 info( 2 ) = ( ncv + 4 ) * keep( 34 ) +
322 ELSE IF ( ierr .EQ. -3 )
THEN
324 info( 2 ) = ( ncv + 4 ) * keep( 34 ) +
328 pleftwcb = pleftwcb - int(ncv,8) * int(nrhs_b,8)
329 ELSEIF ( msgtag .EQ. terreur )
THEN
333 ELSE IF ( (msgtag.EQ.update_load).OR.
334 & (msgtag.EQ.tag_dummy) )
THEN
348 & LASTFSL0STA, LASTFSL0DYN,
349 & BUFR, LBUFR, LBUFR_BYTES,
350 & MYID, SLAVEF, COMM,
351 & N, IPOOL, LPOOL, LEAF,
354 & WCB, LWCB, A, LA, IW, LIW,
355 & NRHS, POSWCB, PLEFTWCB, POSIWCB,
356 & PTRICB, PTRIST, PTRFAC, PROCNODE_STEPS,
357 & FILS, STEP, FRERE, DAD,
358 & INFO, KEEP,KEEP8, DKEEP, RHS_ROOT, LRHS_ROOT, MTYPE,
359 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD,
361 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
362 & , RHS_BOUNDS, LRHS_BOUNDS, DO_NBSPARSE, FROM_PP
363 & , ERROR_WAS_BROADCASTED
372 INTEGER,
INTENT( IN ) :: INODE, LASTFSL0STA, LASTFSL0DYN
373 INTEGER LBUFR, LBUFR_BYTES
374 INTEGER MYID, SLAVEF, COMM
375 INTEGER LIWCB, LIW, POSIWCB
376 INTEGER(8) :: POSWCB, PLEFTWCB, LWCB
378 INTEGER N, LPOOL, LEAF, NBFIN
379 INTEGER INFO( 80 ), KEEP( 500)
380 INTEGER(8) KEEP8(150)
381 DOUBLE PRECISION,
INTENT(INOUT) :: DKEEP(230)
382 INTEGER BUFR( LBUFR )
383 INTEGER IPOOL( LPOOL ), NSTK_S(KEEP(28))
384 INTEGER IWCB( LIWCB ), IW( LIW )
386 COMPLEX(kind=8) WCB( LWCB )
387 COMPLEX(kind=8) :: A( LA )
389 COMPLEX(kind=8) RHS_ROOT( LRHS_ROOT )
390 INTEGER PTRICB(KEEP(28)), (KEEP(28))
391 INTEGER(8) :: PTRFAC(KEEP(28))
392 INTEGER PROCNODE_STEPS(KEEP(28))
393 INTEGER FILS( N ), STEP( N ), FRERE(KEEP(28)), DAD(KEEP(28))
394 INTEGER ISTEP_TO_INIV2(KEEP(71)),
395 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
396 INTEGER POSINRHSCOMP_FWD(N), LRHSCOMP
397 COMPLEX(kind=8) RHSCOMP(LRHSCOMP, NRHS)
398 LOGICAL,
intent(in) :: DO_NBSPARSE
399 INTEGER,
intent(in) :: LRHS_BOUNDS
400 INTEGER,
intent(in) :: RHS_BOUNDS(LRHS_BOUNDS)
401 LOGICAL,
intent(in) :: FROM_PP
402 LOGICAL,
intent(out) :: ERROR_WAS_BROADCASTED
404 INTEGER MUMPS_PROCNODE
405 COMPLEX(kind=8) ALPHA,ONE,ZERO
406 parameter(zero=(0.0d0,0.0d0),
408 & alpha=(-1.0d0,0.0d0))
410 INTEGER JBDEB, JBFIN, NRHS_B
412 INTEGER(8) :: APOS, APOS1, IFR8, IFR_ini8
415 INTEGER(8) :: PCB_COURANT, PPIV_COURANT, PPIV_PANEL, PCB_PANEL
416 INTEGER IPOSINRHSCOMP_TMP
417 INTEGER Effective_CB_Size, NUPDATE, ISLAVE, PDEST, FirstIndex
419 INTEGER :: NUPDATE_NONCRITICAL, IPOSINRHSCOMPLASTFSDYN
421 include
'mumps_headers.h'
422 INTEGER(8) :: APOSDEB
423 INTEGER TempNROW, TempNCOL, PANEL_SIZE,
424 & JFIN, NBJ, NUPDATE_PANEL,
429 LOGICAL :: CBINITZERO
430 INTEGER LDAJ, LDAJ_FIRST_PANEL
432 LOGICAL COMPRESS_PANEL, LR_ACTIVATED
433 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR
434 INTEGER TMP_NBPANELS,
435 & i_pivrptr, i_pivr, ipanel
436 LOGICAL MUST_BE_PERMUTED
437 INTEGER :: SIZEBLOCK, NB, JCourant, NB_LOCK
439 include
'mumps_tags.h'
441 ERROR_WAS_BROADCASTED = .false.
443 lr_activated = (iw(ptrist(step(inode))+xxlr).GT.0)
444 compress_panel = (iw(ptrist(step(inode))+xxlr).GE.2)
445 oocwrite_compatible_with_blr =
446 & (.NOT.lr_activated.OR.(.NOT.compress_panel).OR.
449 IF (do_nbsparse)
THEN
450 jbdeb= rhs_bounds(2*step(inode)-1)
451 jbfin= rhs_bounds(2*step(inode))
456 nrhs_b = jbfin-jbdeb+1
457 IF (do_nbsparse)
THEN
458 if (jbdeb.GT.jbfin)
then
459 write(6,*)
" Internal error 1 in nbsparse :",
463 IF (jbdeb.LT.1 .OR. jbdeb.GT.nrhs .or.
464 & jbfin.LT.1 .OR. jbfin.GT.nrhs )
THEN
465 write(6,*)
" Internal error 2 in nbsparse :",
470 IF ( inode .eq. keep( 38 ) .OR. inode .eq.keep( 20 ) )
THEN
471 liell = iw( ptrist( step(inode)) + 3 + keep(ixsz))
475 ipos = ptrist( step(inode)) + 5 + keep(ixsz)
477 ipos = ptrist(step(inode)) + 2 + keep(ixsz)
478 liell = iw(ipos-2)+iw(ipos+1)
480 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz) )
484 IF ((keep(201).GT.0).AND.oocwrite_compatible_with_blr)
THEN
486 & inode,ptrfac,keep,a,la,step,
487 & keep8,n,must_be_permuted,ierr)
491 error_was_broadcasted = .false.
494 IF (keep(201).EQ.1 .AND. keep(50).NE.1)
THEN
496 & iw(ipos+1+2*liell+1+nslaves),
500 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz))
501 ipos = ipos + 1 + nslaves
503 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
508 j1 = ipos + liell + 1
509 j2 = ipos + 2 * liell
510 j3 = ipos + liell + npiv
513 IF (keep(50).NE.0)
THEN
514 IF ( keep(459) .GT. 1 )
THEN
522 IF ( inode .eq. keep( 38 ) .OR. inode .eq. keep(20) )
THEN
524 iposinrhscomp_tmp = posinrhscomp_fwd(iw(j1))
532 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
534 rhs_root(ifr8+int(jj-j1+1,8)) =
535 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
541 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
543 rhs_root(ifr8+int(jj-j1+1,8)) =
544 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
548 IF ( npiv .LT. liell )
THEN
549 WRITE(*,*)
' Internal error 1 in ZMUMPS_SOLVE_NODE_FWD',
555 apos = ptrfac(step(inode))
556 IF ( (keep(201).EQ.1).AND.oocwrite_compatible_with_blr )
THEN
558 IF ((mtype.EQ.1).AND.nslaves.NE.0)
THEN
561 ldaj_first_panel=tempnrow
565 ldaj_first_panel=tempnrow
571 ldaj_first_panel=tempncol
576 ppiv_courant = pleftwcb
577 pleftwcb = pleftwcb + int(liell,8) * int(nrhs_b,8)
578 IF ( poswcb - pleftwcb + 1_8 .LT. 0 )
THEN
581 error_was_broadcasted = .false.
584 IF (keep(201) .EQ. 1 .AND. oocwrite_compatible_with_blr)
THEN
585 ldeqliellpanel = .true.
588 pcb_courant = ppiv_courant + npiv
590 ldeqliellpanel = .false.
593 pcb_courant = ppiv_courant + int(npiv,8)*int(nrhs_b,8)
595 fpere = dad(step(inode))
596 IF ( fpere .NE. 0 )
THEN
597 fpere_mapping = mumps_procnode( procnode_steps(step(fpere)),
602 IF ( lastfsl0dyn .LE. n )
THEN
604 ELSE IF ( fpere_mapping .EQ. myid )
THEN
610 & npiv, ncb, liell, cbinitzero, ldeqliellpanel,
611 & rhscomp(1, jbdeb), lrhscomp, nrhs_b,
612 & posinrhscomp_fwd, n,
614 & iw, liw, j1, j3, j2, keep, dkeep)
615 IF ( npiv .NE. 0 )
THEN
616 IF ((keep(201).EQ.1).AND.oocwrite_compatible_with_blr)
THEN
622 jfin =
min(j+panel_size-1, npiv)
623 IF (iw(ipos+ liell + jfin) < 0)
THEN
627 ldaj = ldaj_first_panel-j+1
628 IF ( (keep(50).NE.1).AND. must_be_permuted )
THEN
630 & i_pivrptr, i_pivr, ipos+1+2*liell, iw, liw)
631 IF (npiv.EQ.(iw(i_pivrptr+ipanel-1)-1))
THEN
632 must_be_permuted=.false.
635 & iw( i_pivr+ iw(i_pivrptr+ipanel-1)-
637 & npiv-iw(i_pivrptr+ipanel-1)+1,
638 & iw(i_pivrptr+ipanel-1)-1,
643 nupdate_panel = ldaj - nbj
644 ppiv_panel = ppiv_courant+int(j-1,8)
645 pcb_panel = ppiv_panel+int(nbj,8)
646 apos1 = aposdeb+int(nbj,8)
648#if defined(MUMPS_USE_BLAS2)
649 IF ( nrhs_b == 1 )
THEN
650 CALL ztrsv(
'L',
'N',
'U', nbj, a(aposdeb), ldaj,
651 & wcb(ppiv_panel), 1 )
652 IF (nupdate_panel.GT.0)
THEN
653 CALL zgemv(
'N', nupdate_panel,nbj,alpha, a(apos1),
654 & ldaj, wcb(ppiv_panel), 1, one,
659 CALL ztrsm(
'L',
'L',
'N',
'U', nbj, nrhs_b, one,
660 & a(aposdeb), ldaj, wcb(ppiv_panel),
662 IF (nupdate_panel.GT.0)
THEN
663 CALL zgemm(
'N',
'N', nupdate_panel, nrhs_b, nbj,
665 & a(apos1), ldaj, wcb(ppiv_panel), liell, one,
666 & wcb(pcb_panel), liell)
668#
if defined(mumps_use_blas2)
672#if defined(MUMPS_USE_BLAS2)
673 IF (nrhs_b == 1)
THEN
674 CALL ztrsv(
'L',
'N',
'N', nbj, a(aposdeb), ldaj,
675 & wcb(ppiv_panel), 1 )
676 IF (nupdate_panel.GT.0)
THEN
677 CALL zgemv(
'N',nupdate_panel, nbj, alpha, a(apos1),
678 & ldaj, wcb(ppiv_panel), 1,
679 & one, wcb(pcb_panel), 1 )
683 CALL ztrsm(
'L',
'L',
'N',
'N',nbj, nrhs_b, one,
684 & a(aposdeb), ldaj, wcb(ppiv_panel),
686 IF (nupdate_panel.GT.0)
THEN
687 CALL zgemm(
'N',
'N', nupdate_panel, nrhs_b, nbj,
689 & a(apos1), ldaj, wcb(ppiv_panel), liell, one,
690 & wcb(pcb_panel), liell)
692#if defined(MUMPS_USE_BLAS2)
696 aposdeb = aposdeb+int(ldaj,8)*int(nbj,8)
698 IF ( j .LE. npiv )
GOTO 10
700 IF ( iw(ptrist(step(inode))+xxlr) .GE. 2 .AND.
701 & keep(485) .EQ. 1 )
THEN
702 iwhdlr = iw(ptrist(step(inode))+xxf)
704 & inode, n, iwhdlr, npiv, nslaves,
707 & ld_wcbpiv, ld_wcbcb,
708 & ppiv_courant, pcb_courant,
709 & rhscomp, lrhscomp, nrhs,
710 & posinrhscomp_fwd, jbdeb, jbfin,
711 & mtype, keep, keep8, oocwrite_compatible_with_blr,
713 IF (info(1).LT.0)
THEN
714 error_was_broadcasted = .false.
717 ELSE IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 )
THEN
720 & npiv, iw(ipos+liell+1),
721 & nrhs_b, wcb, lwcb, ld_wcbpiv,
722 & ppiv_courant, mtype, keep)
727 & nrhs_b, wcb, lwcb, ld_wcbpiv,
728 & ppiv_courant, mtype, keep)
733 IF ( mtype .EQ. 1 )
THEN
734 IF ( nslaves .EQ. 0 .OR. npiv .eq. 0 )
THEN
739 IF (keep(459) .GT. 1 .AND. keep(50) .NE. 0)
THEN
740 CALL mumps_geti8(apos1, iw(ptrist(step(inode))+xxr))
741 apos1 = apos + apos1 - int(npiv,8)*int(nupdate,8)
743 apos1 = apos + int(npiv,8) * int(ldadiag,8)
746 apos1 = apos + int(npiv,8)
749 IF (keep(201).NE.1)
THEN
750 IF ( iw(ptrist(step(inode))+xxlr) .LT. 2 .OR.
751 & keep(485).EQ.0)
THEN
752 IF (mtype .EQ. 1)
THEN
759 & npiv, ldatemp, nupdate,
760 & nrhs_b, wcb, lwcb, ppiv_courant, ld_wcbpiv,
761 & pcb_courant, ld_wcbcb,
765 IF ( iw(ptrist(step(inode))+xxlr) .LT. 2 .OR.
766 & keep(485).EQ.0)
THEN
767 IF (keep(201) .GT. 0 .AND. oocwrite_compatible_with_blr)
THEN
769 & inode, n, npiv, liell, nelim, nslaves,
773 & wcb, lwcb, ld_wcbpiv,
774 & rhscomp, lrhscomp, nrhs,
775 & posinrhscomp_fwd, jbdeb, jbfin,
776 & mtype, keep, oocwrite_compatible_with_blr,
781 & inode, n, npiv, liell, nelim, nslaves,
785 & wcb, lwcb, ld_wcbpiv,
786 & rhscomp, lrhscomp, nrhs,
787 & posinrhscomp_fwd, jbdeb, jbfin,
788 & mtype, keep, oocwrite_compatible_with_blr,
793 IF ((keep(201).EQ.1).AND.oocwrite_compatible_with_blr)
800 error_was_broadcasted = .false.
804 IF ( fpere .EQ. 0 )
THEN
805 pleftwcb = pleftwcb - int(liell,8) *int(nrhs_b,8)
808 IF ( nupdate .NE. 0 .OR. ncb.EQ.0 )
THEN
809 IF (mumps_procnode(procnode_steps(step(fpere)),
810 & keep(199)) .EQ. myid)
THEN
811 IF ( ncb .ne. 0 )
THEN
812 ptricb(step(inode)) = ncb + 1
813 nupdate_noncritical = nupdate
814 IF (lastfsl0dyn .LE. n)
THEN
815 IF ( lastfsl0dyn .EQ. 0 )
THEN
818 iposinrhscomplastfsdyn =
819 & abs(posinrhscomp_fwd(lastfsl0dyn))
822 IF ( abs(posinrhscomp_fwd( iw(j3+i) )) .GT.
823 & iposinrhscomplastfsdyn )
THEN
824 IF (abs(step(iw(j3+i))) .GT.
825 & abs(step( lastfsl0sta))
826 & .OR. keep(261) .NE. 1)
THEN
827 nupdate_noncritical = i - 1
839 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
843 DO i = 1, nupdate_noncritical
845 & abs(posinrhscomp_fwd(iw(j3 + i)))
846 rhscomp( iposinrhscomp_tmp,
847 & rhscomp( iposinrhscomp_tmp, k )
848 & + wcb(ifr8 + int(i-1,8))
854 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
858 DO i = 1, nupdate_noncritical
860 & abs(posinrhscomp_fwd(iw(j3 + i)))
861 rhscomp( iposinrhscomp_tmp, k ) =
862 & rhscomp( iposinrhscomp_tmp, k )
863 & + wcb(ifr8 + int(i-1,8))
867 IF ( cbinitzero )
THEN
868 IF ( nupdate .NE. nupdate_noncritical)
THEN
870 IF (.NOT.do_nbsparse.AND.(keep(400).GT.1))
THEN
873 sizeblock = (jbfin-jbdeb+1+nb_lock-1) / nb_lock
875 jcourant = jbdeb+sizeblock*(nb-1)
877 DO k = jcourant,
min(jbfin,jcourant+sizeblock-1)
878 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
882 DO i = nupdate_noncritical+1, nupdate
884 & abs(posinrhscomp_fwd(iw(j3 + i)))
885 rhscomp( iposinrhscomp_tmp, k ) =
886 & rhscomp( iposinrhscomp_tmp, k )
887 & + wcb(ifr8 + int(i-1,8))
894 ptricb(step( inode )) = ptricb(step( inode )) - nupdate
896 ptricb(step( inode )) = -1
903 & iw( j3 + 1 ), wcb( pcb_courant ), jbdeb, jbfin,
904 & rhscomp, 1, 1, -9999, -9999,
906 & mumps_procnode(procnode_steps(step(fpere)), keep(199)),
909 IF ( ierr .EQ. -1 )
THEN
911 & bufr, lbufr, lbufr_bytes,
912 & myid, slavef, comm,
913 & n, nrhs, ipool, lpool, leaf,
914 & nbfin, nstk_s, iw, liw, a, la, ptrist, ptrfac,
916 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
917 & ptricb, info, keep,keep8, dkeep, step,
919 & rhscomp, lrhscomp, posinrhscomp_fwd
922 IF ( info( 1 ) .LT. 0 )
THEN
923 error_was_broadcasted = .true.
927 ELSE IF ( ierr .EQ. -2 )
THEN
929 info( 2 ) = nupdate * keep( 35 ) +
930 & ( nupdate + 3 ) * keep( 34 )
931 error_was_broadcasted = .false.
933 ELSE IF ( ierr .EQ. -3 )
THEN
935 info( 2 ) = nupdate * keep( 35 ) +
936 & ( nupdate + 3 ) * keep( 34 )
937 error_was_broadcasted = .false.
942 IF ( nslaves .NE. 0 .AND. mtype .eq. 1
943 & .and. npiv .NE. 0 )
THEN
944 DO islave = 1, nslaves
945 pdest = iw( ptrist(step(inode)) + 5 + islave +keep(ixsz))
947 & keep,keep8, inode, step, n, slavef,
948 & istep_to_iniv2, tab_pos_in_pere,
949 & islave, ncb - nelim,
951 & effective_cb_size, firstindex )
955 & effective_cb_size, ld_wcbcb, ld_wcbpiv, npiv,
957 & wcb( pcb_courant + nelim + firstindex - 1 ),
958 & wcb( ppiv_courant ),
959 & pdest, comm, keep, ierr )
960 IF ( ierr .EQ. -1 )
THEN
962 & bufr, lbufr, lbufr_bytes,
963 & myid, slavef, comm,
964 & n, nrhs, ipool, lpool, leaf,
965 & nbfin, nstk_s, iw, liw, a, la, ptrist,ptrfac,
967 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
968 & ptricb, info, keep,keep8, dkeep, step,
970 & rhscomp, lrhscomp, posinrhscomp_fwd
973 IF ( info( 1 ) .LT. 0 )
THEN
974 error_was_broadcasted = .true.
978 ELSE IF ( ierr .EQ. -2 )
THEN
980 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
982 error_was_broadcasted = .false.
984 ELSE IF ( ierr .EQ. -3 )
THEN
986 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
988 error_was_broadcasted = .false.
993 pleftwcb = pleftwcb - int(liell,8)*int(nrhs_b,8)