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
38 INTEGER info( 80 ), keep( 500)
40 DOUBLE PRECISION,
INTENT(INOUT) :: dkeep(230)
42 INTEGER ipool( lpool ), nstk_s( n )
45 INTEGER (keep(28)),ptrist(keep(28))
46 INTEGER(8) :: ptrfac(keep(28))
48 INTEGER procnode_steps(keep(28))
49 DOUBLE PRECISION ( lwcb ), a( la )
50 DOUBLE PRECISION 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, fpere, long, ncb, position, ncv, npiv
60 INTEGER pdest, i, iposinrhscomp
68 LOGICAL compress_panel, lr_activated
69 LOGICAL oocwrite_compatible_with_blr
70 DOUBLE PRECISION alpha, one
71 parameter(one = 1.0d0,
alpha=-1.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_precision, 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 DMUMPS_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_precision, comm, ierr )
174 IF ( npiv .GT. 0 )
THEN
177 & wcb( ptrx + (k-1)*npiv ), npiv,
178 & mpi_double_precision, 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 DMUMPS_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
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) :: , 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 DOUBLE PRECISION WCB( LWCB )
387 DOUBLE PRECISION :: A( LA )
388 INTEGER(8) :: LRHS_ROOT
389 DOUBLE PRECISION 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 DOUBLE PRECISION 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 DOUBLE PRECISION ALPHA,ONE,ZERO
406 parameter(zero=0.0d0, one = 1.0d0, alpha=-1.0d0)
408 INTEGER JBDEB, JBFIN, NRHS_B
410 INTEGER(8) :: APOS, APOS1, 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'
439 ERROR_WAS_BROADCASTED = .false.
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)
476 liell = iw(ipos-2)+iw(ipos+1)
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 DMUMPS_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 dtrsv(
'L',
'N',
'U', nbj, a(aposdeb), ldaj,
649 & wcb(ppiv_panel), 1 )
650 IF (nupdate_panel.GT.0)
THEN
651 CALL dgemv(
'N', nupdate_panel,nbj,alpha, a(apos1),
652 & ldaj, wcb(ppiv_panel), 1, one,
657 CALL dtrsm(
'L',
'L',
'N',
'U', nbj, nrhs_b, one,
658 & a(aposdeb), ldaj, wcb(ppiv_panel),
660 IF (nupdate_panel.GT.0)
THEN
661 CALL dgemm(
'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 dtrsv(
'L',
'N',
'N', nbj, a(aposdeb), ldaj,
673 & wcb(ppiv_panel), 1 )
674 IF (nupdate_panel.GT.0)
THEN
675 CALL dgemv(
'N',nupdate_panel, nbj, alpha, a(apos1),
676 & ldaj, wcb(ppiv_panel), 1,
677 & one, wcb(pcb_panel), 1 )
681 CALL dtrsm(
'L','l
','n
','n
',NBJ, NRHS_B, ONE,
682 & A(APOSDEB), LDAJ, WCB(PPIV_PANEL),
684.GT.
IF (NUPDATE_PANEL0) THEN
685 CALL dgemm('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.LE.
IF ( J NPIV ) GOTO 10
698.GE..AND.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
699.EQ.
& KEEP(485) 1 ) THEN
700 IWHDLR = IW(PTRIST(STEP(INODE))+XXF)
701 CALL DMUMPS_SOL_FWD_LR_SU (
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.LT.
IF (INFO(1)0) THEN
712 ERROR_WAS_BROADCASTED = .FALSE.
715.GT..AND..NE.
ELSE IF ( KEEP(459) 1 KEEP(50) 0 ) THEN
716 CALL DMUMPS_SOLVE_FWD_PANELS(
718 & NPIV, IW(IPOS+LIELL+1),
719 & NRHS_B, WCB, LWCB, LD_WCBPIV,
720 & PPIV_COURANT, MTYPE, KEEP)
722 CALL DMUMPS_SOLVE_FWD_TRSOLVE (
725 & NRHS_B, WCB, LWCB, LD_WCBPIV,
726 & PPIV_COURANT, MTYPE, KEEP)
731.EQ.
IF ( MTYPE 1 ) THEN
732.EQ..OR..eq.
IF ( NSLAVES 0 NPIV 0 ) THEN
737.GT..AND..NE.
IF (KEEP(459) 1 KEEP(50) 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.NE.
IF (KEEP(201)1) THEN
748.LT..OR.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
749.EQ.
& KEEP(485)0) THEN
750.EQ.
IF (MTYPE 1) THEN
755 CALL DMUMPS_SOLVE_GEMM_UPDATE
757 & NPIV, LDAtemp, NUPDATE,
758 & NRHS_B, WCB, LWCB, PPIV_COURANT, LD_WCBPIV,
759 & PCB_COURANT, LD_WCBCB,
763.LT..OR.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
764.EQ.
& KEEP(485)0) THEN
765.GT..AND.
IF (KEEP(201) 0 OOCWRITE_COMPATIBLE_WITH_BLR) THEN
766 CALL DMUMPS_SOL_LD_AND_RELOAD(
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,
778 CALL DMUMPS_SOL_LD_AND_RELOAD_PANEL (
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.EQ..AND.
IF ((KEEP(201)1)OOCWRITE_COMPATIBLE_WITH_BLR)
793 CALL DMUMPS_FREE_FACTORS_FOR_SOLVE(INODE,PTRFAC,KEEP(28),
798 ERROR_WAS_BROADCASTED = .FALSE.
802.EQ.
IF ( FPERE 0 ) THEN
803 PLEFTWCB = PLEFTWCB - int(LIELL,8) *int(NRHS_B,8)
806.NE..OR..EQ.
IF ( NUPDATE 0 NCB0 ) THEN
807 IF (MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
808.EQ.
& KEEP(199)) MYID) THEN
809.ne.
IF ( NCB 0 ) THEN
810 PTRICB(STEP(INODE)) = NCB + 1
811 NUPDATE_NONCRITICAL = NUPDATE
812.LE.
IF (LASTFSL0DYN N) THEN
813.EQ.
IF ( LASTFSL0DYN 0 ) THEN
814 IPOSINRHSCOMPLASTFSDYN = 0
816 IPOSINRHSCOMPLASTFSDYN =
817 & abs(POSINRHSCOMP_FWD(LASTFSL0DYN))
820.GT.
IF ( abs(POSINRHSCOMP_FWD( IW(J3+I) ))
821 & IPOSINRHSCOMPLASTFSDYN ) THEN
822.GT.
IF (abs(STEP(IW(J3+I)))
823 & abs(STEP( LASTFSL0STA))
824.OR..NE.
& KEEP(261) 1) THEN
825 NUPDATE_NONCRITICAL = I - 1
832.GE..AND.
!$ OMP_FLAG = ( NRHS_BKEEP(362)
833.GE.
!$ & (NUPDATE*NRHS_B KEEP(363)) )
835!$OMP PARALLEL DO PRIVATE(I,IFR8,IPOSINRHSCOMP_TMP)
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.NE.
IF ( NUPDATE NUPDATE_NONCRITICAL) THEN
868.NOT..AND..GT.
IF (DO_NBSPARSE(KEEP(400)1)) THEN
869 NB_LOCK = min(KEEP(400),NB_LOCK_MAX)
871 SIZEBLOCK = (JBFIN-JBDEB+1+NB_LOCK-1) / NB_LOCK
873 JCourant = JBDEB+SIZEBLOCK*(NB-1)
874!$ CALL OMP_SET_LOCK(LOCK_FOR_SCATTER(NB))
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))
888!$ CALL OMP_UNSET_LOCK(LOCK_FOR_SCATTER(NB))
892 PTRICB(STEP( INODE )) = PTRICB(STEP( INODE )) - NUPDATE
894 PTRICB(STEP( INODE )) = -1
898 CALL DMUMPS_BUF_SEND_VCB( NRHS_B, INODE, FPERE,
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.EQ.
IF ( IERR -1 ) THEN
908 CALL DMUMPS_SOLVE_RECV_AND_TREAT( .FALSE., FLAG,
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.LT.
IF ( INFO( 1 ) 0 ) THEN
921 ERROR_WAS_BROADCASTED = .TRUE.
925.EQ.
ELSE IF ( IERR -2 ) THEN
927 INFO( 2 ) = NUPDATE * KEEP( 35 ) +
928 & ( NUPDATE + 3 ) * KEEP( 34 )
929 ERROR_WAS_BROADCASTED = .FALSE.
931.EQ.
ELSE IF ( IERR -3 ) THEN
933 INFO( 2 ) = NUPDATE * KEEP( 35 ) +
934 & ( NUPDATE + 3 ) * KEEP( 34 )
935 ERROR_WAS_BROADCASTED = .FALSE.
940.NE..AND..eq.
IF ( NSLAVES 0 MTYPE 1
941.and..NE.
& NPIV 0 ) THEN
942 DO ISLAVE = 1, NSLAVES
943 PDEST = IW( PTRIST(STEP(INODE)) + 5 + ISLAVE +KEEP(IXSZ))
944 CALL MUMPS_BLOC2_GET_SLAVE_INFO(
945 & KEEP,KEEP8, INODE, STEP, N, SLAVEF,
946 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
947 & ISLAVE, NCB - NELIM,
949 & Effective_CB_Size, FirstIndex )
951 CALL DMUMPS_BUF_SEND_MASTER2SLAVE( NRHS_B,
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.EQ.
IF ( IERR -1 ) THEN
959 CALL DMUMPS_SOLVE_RECV_AND_TREAT( .FALSE., FLAG,
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.LT.
IF ( INFO( 1 ) 0 ) THEN
972 ERROR_WAS_BROADCASTED = .TRUE.
976.EQ.
ELSE IF ( IERR -2 ) THEN
978 INFO( 2 ) = (NPIV+Effective_CB_Size)*NRHS_B*KEEP(35) +
980 ERROR_WAS_BROADCASTED = .FALSE.
982.EQ.
ELSE IF ( IERR -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)
subroutine dmumps_solve_node_fwd(inode, lastfsl0sta, lastfsl0dyn, bufr, lbufr, lbufr_bytes, myid, slavef, comm, n, ipool, lpool, leaf, nbfin, nstk_s, iwcb, liwcb, wcb, lwcb, a, la, iw, liw, nrhs, poswcb, pleftwcb, posiwcb, ptricb, ptrist, ptrfac, procnode_steps, fils, step, frere, dad, info, keep, keep8, dkeep, rhs_root, lrhs_root, mtype, rhscomp, lrhscomp, posinrhscomp_fwd istep_to_iniv2, tab_pos_in_pere, rhs_bounds, lrhs_bounds, do_nbsparse, from_pp, error_was_broadcasted)