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) :: , 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 REAL,
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 REAL wcb( lwcb ), a( la )
50 REAL 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, , ifr8
56 INTEGER ierr, k, jj, jbdeb, jbfin, nrhs_b
57 INTEGER :: iwhdlr, lda_slave
58 INTEGER :: mtype_slave
59 INTEGER finode, fpere, long, ncb, position, ncv, npiv
60 INTEGER pdest, i, iposinrhscomp
68 LOGICAL compress_panel, lr_activated
69 LOGICAL oocwrite_compatible_with_blr
71 parameter(one = 1.0e0,
alpha=-1.0e0)
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_real, 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 SMUMPS_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 )
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_real, comm, ierr )
174 IF ( npiv .GT. 0 )
THEN
177 & wcb( ptrx + (k-1)*npiv ), npiv,
178 & mpi_real, 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)
257 iposinrhscomp= abs(posinrhscomp_fwd(jj))
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
281 nstk_s(step(fpere)) = nstk_s(step(fpere)) - 1
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 SMUMPS_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, , NBFIN
379 INTEGER INFO( 80 ), KEEP( 500)
380 INTEGER(8) KEEP8(150)
381 REAL,
INTENT(INOUT) :: DKEEP(230)
382 INTEGER BUFR( LBUFR )
383 INTEGER IPOOL( LPOOL ), NSTK_S(KEEP(28))
384 INTEGER IWCB( LIWCB ), IW( LIW )
388 INTEGER(8) :: LRHS_ROOT
389 REAL RHS_ROOT( LRHS_ROOT )
390 INTEGER PTRICB(KEEP(28)), PTRIST(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 REAL 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
406 parameter(zero=0.0e0, one = 1.0e0, alpha=-1.0e0)
408 INTEGER JBDEB, JBFIN, NRHS_B
410 INTEGER(8) :: APOS, , IFR8, IFR_ini8
411 INTEGER I, J, K, IPOS, NSLAVES, J1, J2, J3, FPERE, FPERE_MAPPING,
412 & NPIV, NCB, LIELL, JJ, NELIM, IERR
413 INTEGER(8) :: PCB_COURANT, PPIV_COURANT, PPIV_PANEL, PCB_PANEL
414 INTEGER IPOSINRHSCOMP_TMP
415 INTEGER Effective_CB_Size, NUPDATE, ISLAVE, PDEST, FirstIndex
417 INTEGER :: NUPDATE_NONCRITICAL, IPOSINRHSCOMPLASTFSDYN
419 include
'mumps_headers.h'
420 INTEGER(8) :: APOSDEB
421 INTEGER TempNROW, TempNCOL, PANEL_SIZE,
422 & jfin, nbj, nupdate_panel,
426 LOGICAL :: LDEQLIELLPANEL
427 LOGICAL :: CBINITZERO
428 INTEGER LDAJ, LDAJ_FIRST_PANEL
430 LOGICAL COMPRESS_PANEL, LR_ACTIVATED
431 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR
432 INTEGER TMP_NBPANELS,
433 & i_pivrptr, i_pivr, ipanel
434 LOGICAL MUST_BE_PERMUTED
435 INTEGER :: SIZEBLOCK, NB, JCourant, NB_LOCK
437 include
'mumps_tags.h'
441 lr_activated = (iw(ptrist(step(inode))+xxlr).GT.0)
442 compress_panel = (iw(ptrist(step(inode))+xxlr).GE.2)
443 oocwrite_compatible_with_blr =
444 & (.NOT.lr_activated.OR.(.NOT.compress_panel).OR.
447 IF (do_nbsparse)
THEN
448 jbdeb= rhs_bounds(2*step(inode)-1)
449 jbfin= rhs_bounds(2*step(inode))
454 nrhs_b = jbfin-jbdeb+1
455 IF (do_nbsparse)
THEN
456 if (jbdeb.GT.jbfin)
then
457 write(6,*)
" Internal error 1 in nbsparse :",
461 IF (jbdeb.LT.1 .OR. jbdeb.GT.nrhs .or.
462 & jbfin.LT.1 .OR. jbfin.GT.nrhs )
THEN
463 write(6,*)
" Internal error 2 in nbsparse :",
468 IF ( inode .eq. keep( 38 ) .OR. inode .eq.keep( 20 ) )
THEN
469 liell = iw( ptrist( step(inode)) + 3 + keep(ixsz))
473 ipos = ptrist( step(inode)) + 5 + keep(ixsz)
475 ipos = ptrist(step(inode)) + 2 + keep(ixsz)
478 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz) )
482 IF ((keep(201).GT.0).AND.oocwrite_compatible_with_blr)
THEN
484 & inode,ptrfac,keep,a,la,step,
485 & keep8,n,must_be_permuted,ierr)
489 error_was_broadcasted = .false.
492 IF (keep(201).EQ.1 .AND. keep(50).NE.1)
THEN
494 & iw(ipos+1+2*liell+1+nslaves),
498 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz))
499 ipos = ipos + 1 + nslaves
501 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 )
THEN
506 j1 = ipos + liell + 1
507 j2 = ipos + 2 * liell
508 j3 = ipos + liell + npiv
511 IF (keep(50).NE.0)
THEN
512 IF ( keep(459) .GT. 1 )
THEN
520 IF ( inode .eq. keep( 38 ) .OR. inode .eq. keep(20) )
THEN
522 iposinrhscomp_tmp = posinrhscomp_fwd(iw(j1))
530 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
532 rhs_root(ifr8+int(jj-j1+1,8)) =
533 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
539 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
541 rhs_root(ifr8+int(jj-j1+1,8)) =
542 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
546 IF ( npiv .LT. liell )
THEN
547 WRITE(*,*)
' Internal error 1 in SMUMPS_SOLVE_NODE_FWD',
553 apos = ptrfac(step(inode))
554 IF ( (keep(201).EQ.1).AND.oocwrite_compatible_with_blr )
THEN
556 IF ((mtype.EQ.1).AND.nslaves.NE.0)
THEN
559 ldaj_first_panel=tempnrow
563 ldaj_first_panel=tempnrow
569 ldaj_first_panel=tempncol
574 ppiv_courant = pleftwcb
575 pleftwcb = pleftwcb + int(liell,8) * int(nrhs_b,8)
576 IF ( poswcb - pleftwcb + 1_8 .LT. 0 )
THEN
579 error_was_broadcasted = .false.
582 IF (keep(201) .EQ. 1 .AND. oocwrite_compatible_with_blr)
THEN
583 ldeqliellpanel = .true.
586 pcb_courant = ppiv_courant + npiv
588 ldeqliellpanel = .false.
591 pcb_courant = ppiv_courant + int(npiv,8)*int(nrhs_b,8)
593 fpere = dad(step(inode))
594 IF ( fpere .NE. 0 )
THEN
595 fpere_mapping = mumps_procnode( procnode_steps(step(fpere)),
600 IF ( lastfsl0dyn .LE. n )
THEN
602 ELSE IF ( fpere_mapping .EQ. myid )
THEN
608 & npiv, ncb, liell, cbinitzero, ldeqliellpanel,
609 & rhscomp(1, jbdeb), lrhscomp, nrhs_b,
610 & posinrhscomp_fwd, n,
612 & iw, liw, j1, j3, j2, keep, dkeep)
613 IF ( npiv .NE. 0 )
THEN
614 IF ((keep(201).EQ.1).AND.oocwrite_compatible_with_blr)
THEN
620 jfin =
min(j+panel_size-1, npiv)
621 IF (iw(ipos+ liell + jfin) < 0)
THEN
625 ldaj = ldaj_first_panel-j+1
626 IF ( (keep(50).NE.1).AND. must_be_permuted )
THEN
628 & i_pivrptr, i_pivr, ipos+1+2*liell, iw, liw)
629 IF (npiv.EQ.(iw(i_pivrptr+ipanel-1)-1))
THEN
630 must_be_permuted=.false.
633 & iw( i_pivr+ iw(i_pivrptr+ipanel-1)-
635 & npiv-iw(i_pivrptr+ipanel-1)+1,
636 & iw(i_pivrptr+ipanel-1)-1,
641 nupdate_panel = ldaj - nbj
642 ppiv_panel = ppiv_courant+int(j-1,8)
643 pcb_panel = ppiv_panel+int(nbj,8)
644 apos1 = aposdeb+int(nbj,8)
646#if defined(MUMPS_USE_BLAS2)
647 IF ( nrhs_b == 1 )
THEN
648 CALL strsv(
'L',
'N',
'U', nbj, a(aposdeb), ldaj,
649 & wcb(ppiv_panel), 1 )
650 IF (nupdate_panel.GT.0)
THEN
651 CALL sgemv(
'N', nupdate_panel,nbj,alpha, a(apos1),
652 & ldaj, wcb(ppiv_panel), 1, one,
657 CALL strsm(
'L',
'L',
'N',
'U', nbj, nrhs_b, one,
658 & a(aposdeb), ldaj, wcb(ppiv_panel),
660 IF (nupdate_panel.GT.0)
THEN
661 CALL sgemm(
'N',
'N', nupdate_panel, nrhs_b, nbj,
663 & a(apos1), ldaj, wcb(ppiv_panel), liell, one,
664 & wcb(pcb_panel), liell)
666#if defined(MUMPS_USE_BLAS2)
670#if defined(MUMPS_USE_BLAS2)
671 IF (nrhs_b == 1)
THEN
672 CALL strsv(
'L',
'N',
'N', nbj, a(aposdeb), ldaj,
673 & wcb(ppiv_panel), 1 )
674 IF (nupdate_panel.GT.0)
THEN
675 CALL sgemv(
'N',nupdate_panel, nbj, alpha, a(apos1),
676 & ldaj, wcb(ppiv_panel), 1,
677 & one, wcb(pcb_panel), 1 )
681 CALL strsm(
'L',
'L',
'N',
'N',nbj, nrhs_b, one,
682 & a(aposdeb), ldaj, wcb(ppiv_panel),
684 IF (nupdate_panel.GT.0)
THEN
685 CALL sgemm(
'N',
'N', nupdate_panel, nrhs_b, nbj,
687 & a(apos1), ldaj, wcb(ppiv_panel), liell, one,
688 & wcb(pcb_panel), liell)
690#if defined(MUMPS_USE_BLAS2)
694 aposdeb = aposdeb+int(ldaj,8)*int(nbj,8)
696 IF ( j .LE. npiv )
GOTO 10
698 IF ( iw(ptrist(step(inode))+xxlr) .GE. 2 .AND.
699 & keep(485) .EQ. 1 )
THEN
700 iwhdlr = iw(ptrist(step(inode))+xxf)
702 & inode, n, iwhdlr, npiv, nslaves,
705 & ld_wcbpiv, ld_wcbcb,
706 & ppiv_courant, pcb_courant,
707 & rhscomp, lrhscomp, nrhs,
708 & posinrhscomp_fwd, jbdeb, jbfin,
709 & mtype, keep, keep8, oocwrite_compatible_with_blr,
711 IF (info(1).LT.0)
THEN
712 error_was_broadcasted = .false.
715 ELSE IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 )
THEN
718 & npiv, iw(ipos+liell+1),
719 & nrhs_b, wcb, lwcb, ld_wcbpiv,
720 & ppiv_courant, mtype, keep)
725 & nrhs_b, wcb, lwcb, ld_wcbpiv,
726 & ppiv_courant, mtype, keep)
731 IF ( mtype .EQ. 1 )
THEN
732 IF ( nslaves .EQ. 0 .OR. npiv .eq. 0 )
THEN
737 IF (keep(459) .GT. 1 .AND. keep(50) .NE. 0)
THEN
738 CALL mumps_geti8(apos1, iw(ptrist(step(inode))+xxr))
739 apos1 = apos + apos1 - int(npiv,8)*int(nupdate,8)
741 apos1 = apos + int(npiv,8) * int(ldadiag,8)
744 apos1 = apos + int(npiv,8)
747 IF (keep(201).NE.1)
THEN
748 IF ( iw(ptrist(step(inode))+xxlr) .LT. 2 .OR.
749 & keep(485).EQ.0)
THEN
750 IF (mtype .EQ. 1)
THEN
757 & npiv, ldatemp, nupdate,
758 & nrhs_b, wcb, lwcb, ppiv_courant, ld_wcbpiv,
759 & pcb_courant, ld_wcbcb,
763 IF ( iw(ptrist(step(inode))+xxlr) .LT. 2 .OR.
764 & keep(485).EQ.0)
THEN
765 IF (keep(201) .GT. 0 .AND. oocwrite_compatible_with_blr)
THEN
767 & inode, n, npiv, liell, nelim, nslaves,
771 & wcb, lwcb, ld_wcbpiv,
772 & rhscomp, lrhscomp, nrhs,
773 & posinrhscomp_fwd, jbdeb, jbfin,
774 & mtype, keep, oocwrite_compatible_with_blr,
779 & inode, n, npiv, liell, nelim, nslaves,
783 & wcb, lwcb, ld_wcbpiv,
784 & rhscomp, lrhscomp, nrhs,
785 & posinrhscomp_fwd, jbdeb, jbfin,
786 & mtype, keep, oocwrite_compatible_with_blr,
791 IF ((keep(201).EQ.1).AND.oocwrite_compatible_with_blr)
798 error_was_broadcasted = .false.
802 IF ( fpere .EQ. 0 )
THEN
803 pleftwcb = pleftwcb - int(liell,8) *int(nrhs_b,8)
806 IF ( nupdate .NE. 0 .OR. ncb.EQ.0 )
THEN
807 IF (mumps_procnode(procnode_steps(step(fpere)),
808 & keep(199)) .EQ. myid)
THEN
809 IF ( ncb .ne. 0 )
THEN
810 ptricb(step(inode)) = ncb + 1
811 nupdate_noncritical = nupdate
812 IF (lastfsl0dyn .LE. n)
THEN
813 IF ( lastfsl0dyn .EQ. 0 )
THEN
814 iposinrhscomplastfsdyn = 0
816 iposinrhscomplastfsdyn =
817 & abs(posinrhscomp_fwd(lastfsl0dyn))
820 IF ( abs(posinrhscomp_fwd( iw(j3+i) )) .GT.
821 & iposinrhscomplastfsdyn )
THEN
822 IF (abs(step(iw(j3+i))) .GT.
823 & abs(step( lastfsl0sta))
824 & .OR. keep(261) .NE. 1)
THEN
837 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
841 DO i = 1, nupdate_noncritical
843 & abs(posinrhscomp_fwd(iw(j3 + i)))
844 rhscomp( iposinrhscomp_tmp, k ) =
845 & rhscomp( iposinrhscomp_tmp, k )
846 & + wcb(ifr8 + int(i-1,8))
852 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
856 DO i = 1, nupdate_noncritical
858 & abs(posinrhscomp_fwd(iw(j3 + i)))
859 rhscomp( iposinrhscomp_tmp, k ) =
860 & rhscomp( iposinrhscomp_tmp, k )
861 & + wcb(ifr8 + int(i-1,8))
865 IF ( cbinitzero )
THEN
866 IF ( nupdate .NE. nupdate_noncritical)
THEN
868 IF (.NOT.do_nbsparse.AND.(keep(400).GT.1))
THEN
871 sizeblock = (jbfin-jbdeb+1+nb_lock-1) / nb_lock
873 jcourant = jbdeb+sizeblock*(nb-1)
875 DO k = jcourant,
min(jbfin,jcourant+sizeblock-1)
876 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
880 DO i = nupdate_noncritical+1, nupdate
882 & abs(posinrhscomp_fwd(iw(j3 + i)))
883 rhscomp( iposinrhscomp_tmp, k ) =
884 & rhscomp( iposinrhscomp_tmp, k )
885 & + wcb(ifr8 + int(i-1,8))
892 ptricb(step( inode )) = ptricb(step( inode )) - nupdate
894 ptricb(step( inode )) = -1
901 & iw( j3 + 1 ), wcb( pcb_courant ), jbdeb, jbfin,
902 & rhscomp, 1, 1, -9999, -9999,
904 & mumps_procnode(procnode_steps(step(fpere)), keep(199)),
907 IF ( ierr .EQ. -1 )
THEN
909 & bufr, lbufr, lbufr_bytes,
910 & myid, slavef, comm,
911 & n, nrhs, ipool, lpool, leaf,
912 & nbfin, nstk_s, iw, liw, a, la, ptrist, ptrfac,
914 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
915 & ptricb, info, keep,keep8, dkeep, step,
917 & rhscomp, lrhscomp, posinrhscomp_fwd
920 IF ( info( 1 ) .LT. 0 )
THEN
921 error_was_broadcasted = .true.
925 ELSE IF ( ierr .EQ. -2 )
THEN
927 info( 2 ) = nupdate * keep( 35 ) +
928 & ( nupdate + 3 ) * keep( 34 )
929 error_was_broadcasted = .false.
931 ELSE IF ( ierr .EQ. -3 )
THEN
933 info( 2 ) = nupdate * keep( 35 ) +
934 & ( nupdate + 3 ) * keep( 34 )
935 error_was_broadcasted = .false.
940 IF ( nslaves .NE. 0 .AND. mtype .eq. 1
941 & .and. npiv .NE. 0 )
THEN
942 DO islave = 1, nslaves
943 pdest = iw( ptrist(step(inode)) + 5 + islave +keep(ixsz))
945 & keep,keep8, inode, step, n, slavef,
946 & istep_to_iniv2, tab_pos_in_pere,
947 & islave, ncb - nelim,
949 & effective_cb_size, firstindex )
953 & effective_cb_size, ld_wcbcb, ld_wcbpiv, npiv,
955 & wcb( pcb_courant + nelim + firstindex - 1 ),
956 & wcb( ppiv_courant ),
957 & pdest, comm, keep, ierr )
958 IF ( ierr .EQ. -1 )
THEN
960 & bufr, lbufr, lbufr_bytes,
961 & myid, slavef, comm,
962 & n, nrhs, ipool, lpool, leaf,
963 & nbfin, nstk_s, iw, liw, a, la, ptrist,ptrfac,
965 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
966 & ptricb, info, keep,keep8, dkeep, step,
968 & rhscomp, lrhscomp, posinrhscomp_fwd
971 IF ( info( 1 ) .LT. 0 )
THEN
972 error_was_broadcasted = .true.
976 ELSE IF ( ierr .EQ. -2 )
THEN
978 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
980 error_was_broadcasted = .false.
982 ELSE IF ( ierr .EQ. -3 )
THEN
984 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
986 error_was_broadcasted = .false.
991 pleftwcb = pleftwcb - int(liell,8)*int(nrhs_b,8)