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 REAL,
INTENT(INOUT) :: dkeep(230)
42 INTEGER ipool( lpool ), nstk_s( n )
45 INTEGER ptricb(keep(28)),(keep(28))
46 INTEGER(8) :: ptrfac(keep(28))
48 INTEGER procnode_steps(keep(28))
49 COMPLEX wcb( lwcb ), a( la )
50 COMPLEX 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
66 EXTERNAL MUMPS_PROCNODE
67 INTEGER MUMPS_PROCNODE
68 LOGICAL COMPRESS_PANEL, LR_ACTIVATED
69 LOGICAL OOCWRITE_COMPATIBLE_WITH_BLR
71 PARAMETER (ONE=(1.0E0,0.0E0), ALPHA=(-1.0E0,0.0E0))
72 INCLUDE 'mumps_headers.h
'
73.EQ.
IF ( MSGTAG RACINE_SOLVE ) THEN
75.eq.
IF ( NBFIN 0 ) GOTO 270
76.EQ.
ELSE IF (MSGTAG ContVec ) THEN
78 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
79 & FINODE, 1, MPI_INTEGER, COMM, IERR )
80 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
81 & FPERE, 1, MPI_INTEGER, COMM, IERR )
82 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
83 & NCB, 1, MPI_INTEGER, COMM, IERR )
84 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
85 & JBDEB, 1, MPI_INTEGER, COMM, IERR )
86 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
87 & JBFIN, 1, MPI_INTEGER, COMM, IERR )
88 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
89 & LONG, 1, MPI_INTEGER, COMM, IERR )
90 NRHS_B = JBFIN-JBDEB+1
92 PTRICB(STEP(FINODE)) = -1
94.EQ.
IF ( PTRICB(STEP(FINODE)) 0 ) THEN
95 PTRICB(STEP(FINODE)) = NCB + 1
97.LT.
IF ( ( POSIWCB - LONG ) 0 ) THEN
102.LT.
IF ( POSWCB - PLEFTWCB + 1_8
103 & int(LONG,8) * int(NRHS_B,8)) THEN
105 CALL MUMPS_SET_IERROR(PLEFTWCB-POSWCB-1_8+
106 & int(LONG,8) * int(NRHS_B,8),
111 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
113 & LONG, MPI_INTEGER, COMM, IERR )
115 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
117 & LONG, MPI_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.OR.
IF ( PTRICB(STEP(FINODE)) == 1
132 & PTRICB(STEP(FINODE)) == -1 ) THEN
133 NSTK_S(STEP(FPERE)) = NSTK_S(STEP(FPERE)) - 1
134 PTRICB(STEP(FINODE)) = 0
136.EQ.
IF ( NSTK_S(STEP(FPERE)) 0 ) THEN
137 IPOOL( LEAF ) = FPERE
139 IF ( LEAF > LPOOL ) THEN
146.EQ.
ELSEIF ( MSGTAG Master2Slave ) THEN
148 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
149 & FINODE, 1, MPI_INTEGER, COMM, IERR )
150 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
151 & FPERE, 1, MPI_INTEGER, COMM, IERR )
152 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
153 & NCV, 1, MPI_INTEGER, COMM, IERR )
154 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
155 & NPIV, 1, MPI_INTEGER, COMM, IERR )
156 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
157 & JBDEB, 1, MPI_INTEGER, COMM, IERR )
158 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
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.LT.
IF ( POSWCB - PLEFTWCB + 1 0 ) THEN
166 CALL MUMPS_SET_IERROR(-POSWCB+PLEFTWCB-1_8,INFO(2))
170 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
171 & WCB( PTRY + (K-1) * NCV ), NCV,
172 & MPI_COMPLEX, COMM, IERR )
174.GT.
IF ( NPIV 0 ) THEN
176 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
177 & WCB( PTRX + (K-1)*NPIV ), NPIV,
178 & MPI_COMPLEX, COMM, IERR )
181.GT.
LR_ACTIVATED = (IW(PTRIST(STEP(FINODE))+XXLR)0)
182.GE.
COMPRESS_PANEL = (IW(PTRIST(STEP(FINODE))+XXLR)2)
183 OOCWRITE_COMPATIBLE_WITH_BLR =
184.NOT..OR..NOT..OR.
& (LR_ACTIVATED(COMPRESS_PANEL)
187.GT..AND.
IF (KEEP(201)0OOCWRITE_COMPATIBLE_WITH_BLR) THEN
188 CALL CMUMPS_SOLVE_GET_OOC_NODE(
189 & FINODE,PTRFAC,KEEP,A,LA,STEP,
190 & KEEP8,N,DUMMY,IERR)
197.GE..AND.
IF ( IW(PTRIST(STEP(FINODE))+XXLR) 2
198.EQ.
& KEEP(485) 1 ) THEN
199 IWHDLR = IW(PTRIST(STEP(FINODE))+XXF)
201 CALL CMUMPS_SOL_SLAVE_LR_U( FINODE, IWHDLR,
207 & MTYPE_SLAVE, KEEP, KEEP8,
210 APOS = PTRFAC(STEP(FINODE))
211.EQ.
IF (KEEP(201) 1) THEN
218 CALL CMUMPS_SOLVE_GEMM_UPDATE
219 & ( A, LA, APOS, NPIV,
225 & MTYPE_SLAVE, KEEP, ONE )
227.GT..AND.
IF ((KEEP(201)0)OOCWRITE_COMPATIBLE_WITH_BLR) THEN
228 CALL CMUMPS_FREE_FACTORS_FOR_SOLVE(FINODE,PTRFAC,
229 & KEEP(28),A,LA,.TRUE.,IERR)
236 PLEFTWCB = PLEFTWCB - int(NPIV,8) * int(NRHS_B,8)
237 PDEST = MUMPS_PROCNODE( PROCNODE_STEPS(STEP(FPERE)),
239.EQ.
IF ( PDEST MYID ) THEN
240.EQ.
IF ( PTRICB(STEP(FINODE)) 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)
246.GE..AND.
!$ OMP_FLAG = ( JBFIN-JBDEB+1KEEP(362)
247.GE.
!$ & (NCV*(JBFIN-JBDEB+1) KEEP(363) ) )
249!$OMP PARALLEL DO PRIVATE(I,JJ,IFR8,IPOSINRHSCOMP)
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.EQ.
IF ( NSTK_S(STEP(FPERE)) 0 ) THEN
285 IPOOL( LEAF ) = FPERE
287 IF ( LEAF > LPOOL ) THEN
296 CALL CMUMPS_BUF_SEND_VCB( NRHS_B, FINODE, FPERE,
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.EQ.
IF ( IERR -1 ) THEN
303 CALL CMUMPS_SOLVE_RECV_AND_TREAT( .FALSE., FLAG,
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.LT.
IF ( INFO( 1 ) 0 ) GOTO 270
317.EQ.
ELSE IF ( IERR -2 ) THEN
319 INFO( 2 ) = ( NCV + 4 ) * KEEP( 34 ) +
322.EQ.
ELSE IF ( IERR -3 ) THEN
324 INFO( 2 ) = ( NCV + 4 ) * KEEP( 34 ) +
328 PLEFTWCB = PLEFTWCB - int(NCV,8) * int(NRHS_B,8)
329.EQ.
ELSEIF ( MSGTAG TERREUR ) THEN
333.EQ..OR.
ELSE IF ( (MSGTAGUPDATE_LOAD)
334.EQ.
& (MSGTAGTAG_DUMMY) ) THEN
343 CALL CMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
346 END SUBROUTINE CMUMPS_TRAITER_MESSAGE_SOLVE
347 SUBROUTINE CMUMPS_SOLVE_NODE_FWD( INODE,
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
366!$ USE CMUMPS_SOL_L0OMP_M, ONLY: LOCK_FOR_SCATTER
367 USE CMUMPS_SOL_L0OMP_M, ONLY: NB_LOCK_MAX
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 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 COMPLEX 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 COMPLEX 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
403 EXTERNAL cgemv, ctrsv, cgemm, ctrsm, MUMPS_PROCNODE
404 INTEGER MUMPS_PROCNODE
405 COMPLEX ALPHA,ONE,ZERO
406 PARAMETER (ZERO=(0.0E0,0.0E0),
408 & ALPHA=(-1.0E0,0.0E0))
410 INTEGER JBDEB, JBFIN, NRHS_B
412 INTEGER(8) :: APOS, APOS1, IFR8, IFR_ini8
413 INTEGER I, J, K, IPOS, NSLAVES, J1, J2, J3, FPERE, FPERE_MAPPING,
414 & NPIV, NCB, LIELL, JJ, NELIM, IERR
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,
428 LOGICAL :: LDEQLIELLPANEL
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.GT.
LR_ACTIVATED = (IW(PTRIST(STEP(INODE))+XXLR)0)
444.GE.
COMPRESS_PANEL = (IW(PTRIST(STEP(INODE))+XXLR)2)
445 OOCWRITE_COMPATIBLE_WITH_BLR =
446.NOT..OR..NOT..OR.
& (LR_ACTIVATED(COMPRESS_PANEL)
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.GT.
if (JBDEBJBFIN) then
459 write(6,*) " Internal error 1 in nbsparse :",
463.LT..OR..GT..or.
IF (JBDEB1 JBDEBNRHS
464.LT..OR..GT.
& JBFIN1 JBFINNRHS ) THEN
465 write(6,*) " Internal error 2 in nbsparse :",
470.eq..OR..eq.
IF ( INODE KEEP( 38 ) INODE 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.GT..AND.
IF ((KEEP(201)0)OOCWRITE_COMPATIBLE_WITH_BLR) THEN
485 CALL CMUMPS_SOLVE_GET_OOC_NODE(
486 & INODE,PTRFAC,KEEP,A,LA,STEP,
487 & KEEP8,N,MUST_BE_PERMUTED,IERR)
491 ERROR_WAS_BROADCASTED = .FALSE.
494.EQ..AND..NE.
IF (KEEP(201)1 KEEP(50)1) THEN
495 CALL CMUMPS_OOC_PP_CHECK_PERM_FREED(
496 & IW(IPOS+1+2*LIELL+1+NSLAVES),
500 NSLAVES = IW( PTRIST(STEP(INODE)) + 5 + KEEP(IXSZ))
501 IPOS = IPOS + 1 + NSLAVES
503.EQ..OR..NE.
IF ( MTYPE 1 KEEP(50) 0 ) THEN
508 J1 = IPOS + LIELL + 1
509 J2 = IPOS + 2 * LIELL
510 J3 = IPOS + LIELL + NPIV
513.NE.
IF (KEEP(50)0) THEN
514.GT.
IF ( KEEP(459) 1 ) THEN
522.eq..OR..eq.
IF ( INODE KEEP( 38 ) INODE KEEP(20) ) THEN
524 IPOSINRHSCOMP_TMP = POSINRHSCOMP_FWD(IW(J1))
527.GE..AND.
!$ OMP_FLAG = ( JBFIN-JBDEB+1KEEP(362)
528.GE.
!$ & (J3-J1+1)*(JBFIN-JBDEB+1) KEEP(363) )
530!$OMP PARALLEL DO PRIVATE(IFR8,JJ)
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.LT.
IF ( NPIV LIELL ) THEN
555 APOS = PTRFAC(STEP(INODE))
556.EQ..AND.
IF ( (KEEP(201)1)OOCWRITE_COMPATIBLE_WITH_BLR ) THEN
558.EQ..AND..NE.
IF ((MTYPE1)NSLAVES0) THEN
561 LDAJ_FIRST_PANEL=TempNROW
565 LDAJ_FIRST_PANEL=TempNROW
571 LDAJ_FIRST_PANEL=TempNCOL
574 PANEL_SIZE = CMUMPS_OOC_PANEL_SIZE( LDAJ_FIRST_PANEL )
576 PPIV_COURANT = PLEFTWCB
577 PLEFTWCB = PLEFTWCB + int(LIELL,8) * int(NRHS_B,8)
578.LT.
IF ( POSWCB - PLEFTWCB + 1_8 0 ) THEN
580 CALL MUMPS_SET_IERROR(PLEFTWCB-POSWCB-1_8, INFO(2))
581 ERROR_WAS_BROADCASTED = .FALSE.
584.EQ..AND.
IF (KEEP(201) 1 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.NE.
IF ( FPERE 0 ) THEN
597 FPERE_MAPPING = MUMPS_PROCNODE( PROCNODE_STEPS(STEP(FPERE)),
602.LE.
IF ( LASTFSL0DYN N ) THEN
604.EQ.
ELSE IF ( FPERE_MAPPING MYID ) THEN
609 CALL CMUMPS_RHSCOMP_TO_WCB(
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.NE.
IF ( NPIV 0 ) THEN
616.EQ..AND.
IF ((KEEP(201)1)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.NE..AND.
IF ( (KEEP(50)1) MUST_BE_PERMUTED ) THEN
629 CALL CMUMPS_GET_OOC_PERM_PTR(TYPEF, TMP_NBPANELS,
630 & I_PIVRPTR, I_PIVR, IPOS+1+2*LIELL, IW, LIW)
631.EQ.
IF (NPIV(IW(I_PIVRPTR+IPANEL-1)-1)) THEN
632 MUST_BE_PERMUTED=.FALSE.
634 CALL CMUMPS_PERMUTE_PANEL(
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 ctrsv( 'l
', 'n
', 'u
', NBJ, A(APOSDEB), LDAJ,
651 & WCB(PPIV_PANEL), 1 )
652.GT.
IF (NUPDATE_PANEL0) THEN
653 CALL cgemv('n
', NUPDATE_PANEL,NBJ,ALPHA, A(APOS1),
654 & LDAJ, WCB(PPIV_PANEL), 1, ONE,
659 CALL ctrsm( 'l
','l
','n
','u
', NBJ, NRHS_B, ONE,
660 & A(APOSDEB), LDAJ, WCB(PPIV_PANEL),
662.GT.
IF (NUPDATE_PANEL0) THEN
663 CALL cgemm('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 ctrsv( 'l
', 'n
', 'n
', NBJ, A(APOSDEB), LDAJ,
675 & WCB(PPIV_PANEL), 1 )
676.GT.
IF (NUPDATE_PANEL0) THEN
677 CALL cgemv('n
',NUPDATE_PANEL, NBJ, ALPHA, A(APOS1),
678 & LDAJ, WCB(PPIV_PANEL), 1,
679 & ONE, WCB(PCB_PANEL), 1 )
683 CALL ctrsm('l
','l
','n
','n
',NBJ, NRHS_B, ONE,
684 & A(APOSDEB), LDAJ, WCB(PPIV_PANEL),
686.GT.
IF (NUPDATE_PANEL0) THEN
687 CALL cgemm('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.LE.
IF ( J NPIV ) GOTO 10
700.GE..AND.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
701.EQ.
& KEEP(485) 1 ) THEN
702 IWHDLR = IW(PTRIST(STEP(INODE))+XXF)
703 CALL CMUMPS_SOL_FWD_LR_SU (
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.LT.
IF (INFO(1)0) THEN
714 ERROR_WAS_BROADCASTED = .FALSE.
717.GT..AND..NE.
ELSE IF ( KEEP(459) 1 KEEP(50) 0 ) THEN
718 CALL CMUMPS_SOLVE_FWD_PANELS(
720 & NPIV, IW(IPOS+LIELL+1),
721 & NRHS_B, WCB, LWCB, LD_WCBPIV,
722 & PPIV_COURANT, MTYPE, KEEP)
724 CALL CMUMPS_SOLVE_FWD_TRSOLVE (
727 & NRHS_B, WCB, LWCB, LD_WCBPIV,
728 & PPIV_COURANT, MTYPE, KEEP)
733.EQ.
IF ( MTYPE 1 ) THEN
734.EQ..OR..eq.
IF ( NSLAVES 0 NPIV 0 ) THEN
739.GT..AND..NE.
IF (KEEP(459) 1 KEEP(50) 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.NE.
IF (KEEP(201)1) THEN
750.LT..OR.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
751.EQ.
& KEEP(485)0) THEN
752.EQ.
IF (MTYPE 1) THEN
757 CALL CMUMPS_SOLVE_GEMM_UPDATE
759 & NPIV, LDAtemp, NUPDATE,
760 & NRHS_B, WCB, LWCB, PPIV_COURANT, LD_WCBPIV,
761 & PCB_COURANT, LD_WCBCB,
765.LT..OR.
IF ( IW(PTRIST(STEP(INODE))+XXLR) 2
766.EQ.
& KEEP(485)0) THEN
767.GT..AND.
IF (KEEP(201) 0 OOCWRITE_COMPATIBLE_WITH_BLR) THEN
768 CALL CMUMPS_SOL_LD_AND_RELOAD(
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,
780 CALL CMUMPS_SOL_LD_AND_RELOAD_PANEL (
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.EQ..AND.
IF ((KEEP(201)1)OOCWRITE_COMPATIBLE_WITH_BLR)
795 CALL CMUMPS_FREE_FACTORS_FOR_SOLVE(INODE,PTRFAC,KEEP(28),
800 ERROR_WAS_BROADCASTED = .FALSE.
804.EQ.
IF ( FPERE 0 ) THEN
805 PLEFTWCB = PLEFTWCB - int(LIELL,8) *int(NRHS_B,8)
808.NE..OR..EQ.
IF ( NUPDATE 0 NCB0 ) THEN
809 IF (MUMPS_PROCNODE(PROCNODE_STEPS(STEP(FPERE)),
810.EQ.
& KEEP(199)) MYID) THEN
811.ne.
IF ( NCB 0 ) THEN
812 PTRICB(STEP(INODE)) = NCB + 1
813 NUPDATE_NONCRITICAL = NUPDATE
814.LE.
IF (LASTFSL0DYN N) THEN
815.EQ.
IF ( LASTFSL0DYN 0 ) THEN
816 IPOSINRHSCOMPLASTFSDYN = 0
818 IPOSINRHSCOMPLASTFSDYN =
819 & abs(POSINRHSCOMP_FWD(LASTFSL0DYN))
822.GT.
IF ( abs(POSINRHSCOMP_FWD( IW(J3+I) ))
823 & IPOSINRHSCOMPLASTFSDYN ) THEN
824.GT.
IF (abs(STEP(IW(J3+I)))
825 & abs(STEP( LASTFSL0STA))
826.OR..NE.
& KEEP(261) 1) THEN
827 NUPDATE_NONCRITICAL = I - 1
834.GE..AND.
!$ OMP_FLAG = ( NRHS_BKEEP(362)
835.GE.
!$ & (NUPDATE*NRHS_B KEEP(363)) )
837!$OMP PARALLEL DO PRIVATE(I,IFR8,IPOSINRHSCOMP_TMP)
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, K ) =
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.NE.
IF ( NUPDATE NUPDATE_NONCRITICAL) THEN
870.NOT..AND..GT.
IF (DO_NBSPARSE(KEEP(400)1)) THEN
871 NB_LOCK = min(KEEP(400),NB_LOCK_MAX)
873 SIZEBLOCK = (JBFIN-JBDEB+1+NB_LOCK-1) / NB_LOCK
875 JCourant = JBDEB+SIZEBLOCK*(NB-1)
876!$ CALL OMP_SET_LOCK(LOCK_FOR_SCATTER(NB))
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))
890!$ CALL OMP_UNSET_LOCK(LOCK_FOR_SCATTER(NB))
894 PTRICB(STEP( INODE )) = PTRICB(STEP( INODE )) - NUPDATE
896 PTRICB(STEP( INODE )) = -1
900 CALL CMUMPS_BUF_SEND_VCB( NRHS_B, INODE, FPERE,
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.EQ.
IF ( IERR -1 ) THEN
910 CALL CMUMPS_SOLVE_RECV_AND_TREAT( .FALSE., FLAG,
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.LT.
IF ( INFO( 1 ) 0 ) THEN
923 ERROR_WAS_BROADCASTED = .TRUE.
927.EQ.
ELSE IF ( IERR -2 ) THEN
929 INFO( 2 ) = NUPDATE * KEEP( 35 ) +
930 & ( NUPDATE + 3 ) * KEEP( 34 )
931 ERROR_WAS_BROADCASTED = .FALSE.
933.EQ.
ELSE IF ( IERR -3 ) THEN
935 INFO( 2 ) = NUPDATE * KEEP( 35 ) +
936 & ( NUPDATE + 3 ) * KEEP( 34 )
937 ERROR_WAS_BROADCASTED = .FALSE.
942.NE..AND..eq.
IF ( NSLAVES 0 MTYPE 1
943.and..NE.
& NPIV 0 ) THEN
944 DO ISLAVE = 1, NSLAVES
945 PDEST = IW( PTRIST(STEP(INODE)) + 5 + ISLAVE +KEEP(IXSZ))
946 CALL MUMPS_BLOC2_GET_SLAVE_INFO(
947 & KEEP,KEEP8, INODE, STEP, N, SLAVEF,
948 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
949 & ISLAVE, NCB - NELIM,
951 & Effective_CB_Size, FirstIndex )
953 CALL CMUMPS_BUF_SEND_MASTER2SLAVE( NRHS_B,
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.EQ.
IF ( IERR -1 ) THEN
961 CALL CMUMPS_SOLVE_RECV_AND_TREAT( .FALSE., FLAG,
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.LT.
IF ( INFO( 1 ) 0 ) THEN
974 ERROR_WAS_BROADCASTED = .TRUE.
978.EQ.
ELSE IF ( IERR -2 ) THEN
980 INFO( 2 ) = (NPIV+Effective_CB_Size)*NRHS_B*KEEP(35) +
982 ERROR_WAS_BROADCASTED = .FALSE.
984.EQ.
ELSE IF ( IERR -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)
996 END SUBROUTINE CMUMPS_SOLVE_NODE_FWD
997 RECURSIVE SUBROUTINE CMUMPS_SOLVE_RECV_AND_TREAT( BLOQ, FLAG,
998 & BUFR, LBUFR, LBUFR_BYTES,
999 & MYID, SLAVEF, COMM,
1000 & N, NRHS, IPOOL, LPOOL, LEAF,
1001 & NBFIN, NSTK_S, IW, LIW, A, LA, PTRIST,PTRFAC,
1003 & WCB, LWCB, POSWCB,
1004 & PLEFTWCB, POSIWCB,
1005 & PTRICB, INFO, KEEP,KEEP8, DKEEP, STEP, PROCNODE_STEPS,
1006 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD
1011 INTEGER LBUFR, LBUFR_BYTES
1012 INTEGER MYID, SLAVEF, COMM
1013 INTEGER N, NRHS, LPOOL, LEAF, NBFIN
1014 INTEGER LIWCB, POSIWCB
1015 INTEGER(8) :: POSWCB, PLEFTWCB
1017 INTEGER(8), INTENT(IN) :: LA, LWCB
1018 INTEGER INFO( 80 ), KEEP( 500)
1019 INTEGER(8) KEEP8(150)
1020 REAL, INTENT(INOUT) :: DKEEP(230)
1021 INTEGER BUFR( LBUFR ), IPOOL(LPOOL)
1022 INTEGER NSTK_S( KEEP(28) )
1023 INTEGER IWCB( LIWCB )
1025 COMPLEX WCB( LWCB ), A( LA )
1026 INTEGER PTRICB(KEEP(28)), PTRIST(KEEP(28))
1027 INTEGER(8) :: PTRFAC(KEEP(28))
1029 INTEGER PROCNODE_STEPS(KEEP(28))
1031 INTEGER LRHSCOMP, POSINRHSCOMP_FWD(N)
1032 COMPLEX RHSCOMP(LRHSCOMP,NRHS)
1033 LOGICAL, intent(in) :: FROM_PP
1035 INCLUDE 'mumps_tags.h
'
1037 INTEGER :: STATUS(MPI_STATUS_SIZE)
1038 INTEGER MSGSOU, MSGTAG, MSGLEN
1042 CALL MPI_PROBE( MPI_ANY_SOURCE, MPI_ANY_TAG,
1043 & COMM, STATUS, IERR )
1046 CALL MPI_IPROBE( MPI_ANY_SOURCE, MPI_ANY_TAG, COMM,
1047 & FLAG, STATUS, IERR )
1050 KEEP(266) = KEEP(266) -1
1051 MSGSOU = STATUS( MPI_SOURCE )
1052 MSGTAG = STATUS( MPI_TAG )
1053 CALL MPI_GET_COUNT( STATUS, MPI_PACKED, MSGLEN, IERR )
1054.GT.
IF ( MSGLEN LBUFR_BYTES ) THEN
1057 CALL CMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
1059 CALL MPI_RECV( BUFR, LBUFR_BYTES, MPI_PACKED,
1060 & MSGSOU, MSGTAG, COMM, STATUS, IERR )
1061 CALL CMUMPS_TRAITER_MESSAGE_SOLVE( BUFR, LBUFR, LBUFR_BYTES,
1062 & MSGTAG, MSGSOU, MYID, SLAVEF, COMM,
1063 & N, NRHS, IPOOL, LPOOL, LEAF,
1064 & NBFIN, NSTK_S, IW, LIW, A, LA, PTRIST, PTRFAC,
1066 & WCB, LWCB, POSWCB,
1067 & PLEFTWCB, POSIWCB,
1068 & PTRICB, INFO, KEEP,KEEP8, DKEEP, STEP,
1070 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD
1076 END SUBROUTINE CMUMPS_SOLVE_RECV_AND_TREAT
1077 SUBROUTINE CMUMPS_RHSCOMP_TO_WCB(
1078 & NPIV, NCB, LIELL, CBINITZERO, LDEQLIELLPANEL,
1079 & RHSCOMP, LRHSCOMP, NRHS_B,
1080 & POSINRHSCOMP_FWD, N,
1082 & IW, LIW, J1, J3, J2, KEEP, DKEEP)
1084 INTEGER, INTENT( IN ) :: NPIV, NCB, LIELL, N,
1087 LOGICAL, INTENT( IN ) :: LDEQLIELLPANEL
1088 LOGICAL, INTENT( IN ) :: CBINITZERO
1089 INTEGER, INTENT( IN ) :: POSINRHSCOMP_FWD( N ), IW( LIW )
1090 COMPLEX, INTENT( INOUT ) :: RHSCOMP( LRHSCOMP, NRHS_B )
1091 COMPLEX, INTENT( OUT ) :: WCB( int(LIELL,8)*
1093 INTEGER :: KEEP(500)
1095 INTEGER, PARAMETER :: ZERO = (0.0E0,0.0E0)
1096 INTEGER(8), PARAMETER :: PPIV_COURANT = 1_8
1097 INTEGER(8) :: PCB_COURANT
1098 INTEGER :: LD_WCBCB, LD_WCBPIV, J, JJ, K, IPOSINRHSCOMP
1099 INTEGER(8) :: IFR8, IFR_ini8
1102 IF ( LDEQLIELLPANEL ) THEN
1105 PCB_COURANT = PPIV_COURANT + NPIV
1109 PCB_COURANT = PPIV_COURANT + NPIV * NRHS_B
1111 IF ( LDEQLIELLPANEL ) THEN
1113 IFR8 = PPIV_COURANT+int(K-1,8)*int(LD_WCBPIV,8)-1_8
1114 IPOSINRHSCOMP = POSINRHSCOMP_FWD(IW(J1))
1117 WCB(IFR8) = RHSCOMP(IPOSINRHSCOMP,K)
1118 IPOSINRHSCOMP = IPOSINRHSCOMP + 1
1120.GT..AND..NOT.
IF (NCB0 CBINITZERO) THEN
1127 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1128 WCB(IFR8) = RHSCOMP(IPOSINRHSCOMP,K)
1129 RHSCOMP (IPOSINRHSCOMP,K) = ZERO
1134 PCB_COURANT = PPIV_COURANT + LD_WCBPIV*NRHS_B
1135 IFR8 = PPIV_COURANT - 1_8
1137 IPOSINRHSCOMP = POSINRHSCOMP_FWD(IW(J1))
1139.GE..AND.
!$ OMP_FLAG = ( NRHS_B KEEP(362)
1140.GE.
!$ & int(NCB,8)*int(NRHS_B,8) KEEP(363) )
1142!$OMP PARALLEL DO PRIVATE(JJ,IFR8)
1144 IFR8 = IFR_ini8 + int(K-1,8)*int(NPIV,8)
1146 WCB(IFR8+int(JJ-J1+1,8)) =
1147 & RHSCOMP(IPOSINRHSCOMP+JJ-J1,K)
1150!$OMP END PARALLEL DO
1153 IFR8 = IFR_ini8 + int(K-1,8)*int(NPIV,8)
1155 WCB(IFR8+int(JJ-J1+1,8)) =
1156 & RHSCOMP(IPOSINRHSCOMP+JJ-J1,K)
1160 IFR8 = PCB_COURANT - 1_8
1161.GT..AND..NOT.
IF (NCB0 CBINITZERO) THEN
1164.GE..AND.
!$ OMP_FLAG = ( NRHS_BKEEP(362)
1165.GE.
!$ & NCB*NRHS_B KEEP(363) )
1167!$OMP PARALLEL DO PRIVATE (IFR8, JJ, J, IPOSINRHSCOMP)
1169 IFR8 = IFR_ini8+(K-1)*NCB
1175 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1176 WCB(IFR8+int(JJ-J3,8)) = RHSCOMP(IPOSINRHSCOMP,K)
1177 RHSCOMP(IPOSINRHSCOMP,K)=ZERO
1180!$OMP END PARALLEL DO
1183 IFR8 = IFR_ini8+(K-1)*NCB
1189 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1190 WCB(IFR8+int(JJ-J3,8)) = RHSCOMP(IPOSINRHSCOMP,K)
1191 RHSCOMP(IPOSINRHSCOMP,K)=ZERO
1197 IF ( CBINITZERO ) THEN
1199.GE.
!$ OMP_FLAG = int(NCB,8)*int(NRHS_B,8) KEEP(363)
1201!$OMP PARALLEL DO COLLAPSE(2)
1204 WCB(PCB_COURANT+int(K-1,8)*int(LD_WCBCB,8)+JJ-1_8) = ZERO
1207!$OMP END PARALLEL DO
1211 WCB(PCB_COURANT+int(K-1,8)*int(LD_WCBCB,8)+JJ-1_8) = ZERO
1217 END SUBROUTINE CMUMPS_RHSCOMP_TO_WCB
subroutine cmumps_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)
recursive subroutine cmumps_traiter_message_solve(bufr, lbufr, lbufr_bytes, msgtag, msgsou, myid, slavef, comm, n, nrhs, ipool, lpool, leaf, nbfin, nstk_s, iw, liw, a, la, ptrist, ptrfac, iwcb, liwcb, wcb, lwcb, poswcb, pleftwcb, posiwcb, ptricb, info, keep, keep8, dkeep, step, procnode_steps, rhscomp, lrhscomp, posinrhscomp_fwd, from_pp)
subroutine cmumps_sol_slave_lr_u(inode, iwhdlr, npiv_global, wcb, lwcb, ldx, ldy, ptrx_init, ptry_init, jbdeb, jbfin, mtype, keep, keep8, iflag, ierror)