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)),ptrist(keep(28))
46 INTEGER(8) :: ptrfac((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, 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, ALPHA=-1.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_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.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_REAL, 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_REAL, 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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
346 END SUBROUTINE SMUMPS_TRAITER_MESSAGE_SOLVE
347 SUBROUTINE SMUMPS_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 SMUMPS_SOL_L0OMP_M, ONLY: LOCK_FOR_SCATTER
367 USE SMUMPS_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 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
403 EXTERNAL sgemv, strsv, sgemm, strsm, MUMPS_PROCNODE
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, 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.GT.
LR_ACTIVATED = (IW(PTRIST(STEP(INODE))+XXLR)0)
442.GE.
COMPRESS_PANEL = (IW(PTRIST(STEP(INODE))+XXLR)2)
443 OOCWRITE_COMPATIBLE_WITH_BLR =
444.NOT..OR..NOT..OR.
& (LR_ACTIVATED(COMPRESS_PANEL)
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.GT.
if (JBDEBJBFIN) then
457 write(6,*) " Internal error 1 in nbsparse :",
461.LT..OR..GT..or.
IF (JBDEB1 JBDEBNRHS
462.LT..OR..GT.
& JBFIN1 JBFINNRHS ) THEN
463 write(6,*) " Internal error 2 in nbsparse :",
468.eq..OR..eq.
IF ( INODE KEEP( 38 ) INODE 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.GT..AND.
IF ((KEEP(201)0)OOCWRITE_COMPATIBLE_WITH_BLR) THEN
483 CALL SMUMPS_SOLVE_GET_OOC_NODE(
484 & INODE,PTRFAC,KEEP,A,LA,STEP,
485 & KEEP8,N,MUST_BE_PERMUTED,IERR)
489 ERROR_WAS_BROADCASTED = .FALSE.
492.EQ..AND..NE.
IF (KEEP(201)1 KEEP(50)1) THEN
493 CALL SMUMPS_OOC_PP_CHECK_PERM_FREED(
494 & IW(IPOS+1+2*LIELL+1+NSLAVES),
498 NSLAVES = IW( PTRIST(STEP(INODE)) + 5 + KEEP(IXSZ))
499 IPOS = IPOS + 1 + NSLAVES
501.EQ..OR..NE.
IF ( MTYPE 1 KEEP(50) 0 ) THEN
506 J1 = IPOS + LIELL + 1
507 J2 = IPOS + 2 * LIELL
508 J3 = IPOS + LIELL + NPIV
511.NE.
IF (KEEP(50)0) THEN
512.GT.
IF ( KEEP(459) 1 ) THEN
520.eq..OR..eq.
IF ( INODE KEEP( 38 ) INODE KEEP(20) ) THEN
522 IPOSINRHSCOMP_TMP = POSINRHSCOMP_FWD(IW(J1))
525.GE..AND.
!$ OMP_FLAG = ( JBFIN-JBDEB+1KEEP(362)
526.GE.
!$ & (J3-J1+1)*(JBFIN-JBDEB+1) KEEP(363) )
528!$OMP PARALLEL DO PRIVATE(IFR8,JJ)
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.LT.
IF ( NPIV LIELL ) THEN
553 APOS = PTRFAC(STEP(INODE))
554.EQ..AND.
IF ( (KEEP(201)1)OOCWRITE_COMPATIBLE_WITH_BLR ) THEN
556.EQ..AND..NE.
IF ((MTYPE1)NSLAVES0) THEN
559 LDAJ_FIRST_PANEL=TempNROW
563 LDAJ_FIRST_PANEL=TempNROW
569 LDAJ_FIRST_PANEL=TempNCOL
572 PANEL_SIZE = SMUMPS_OOC_PANEL_SIZE( LDAJ_FIRST_PANEL )
574 PPIV_COURANT = PLEFTWCB
575 PLEFTWCB = PLEFTWCB + int(LIELL,8) * int(NRHS_B,8)
576.LT.
IF ( POSWCB - PLEFTWCB + 1_8 0 ) THEN
578 CALL MUMPS_SET_IERROR(PLEFTWCB-POSWCB-1_8, INFO(2))
579 ERROR_WAS_BROADCASTED = .FALSE.
582.EQ..AND.
IF (KEEP(201) 1 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.NE.
IF ( FPERE 0 ) THEN
595 FPERE_MAPPING = MUMPS_PROCNODE( PROCNODE_STEPS(STEP(FPERE)),
600.LE.
IF ( LASTFSL0DYN N ) THEN
602.EQ.
ELSE IF ( FPERE_MAPPING MYID ) THEN
607 CALL SMUMPS_RHSCOMP_TO_WCB(
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.NE.
IF ( NPIV 0 ) THEN
614.EQ..AND.
IF ((KEEP(201)1)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.NE..AND.
IF ( (KEEP(50)1) MUST_BE_PERMUTED ) THEN
627 CALL SMUMPS_GET_OOC_PERM_PTR(TYPEF, TMP_NBPANELS,
628 & I_PIVRPTR, I_PIVR, IPOS+1+2*LIELL, IW, LIW)
629.EQ.
IF (NPIV(IW(I_PIVRPTR+IPANEL-1)-1)) THEN
630 MUST_BE_PERMUTED=.FALSE.
632 CALL SMUMPS_PERMUTE_PANEL(
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.GT.
IF (NUPDATE_PANEL0) 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.GT.
IF (NUPDATE_PANEL0) 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.GT.
IF (NUPDATE_PANEL0) 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.GT.
IF (NUPDATE_PANEL0) 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.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 SMUMPS_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 SMUMPS_SOLVE_FWD_PANELS(
718 & NPIV, IW(IPOS+LIELL+1),
719 & NRHS_B, WCB, LWCB, LD_WCBPIV,
720 & PPIV_COURANT, MTYPE, KEEP)
722 CALL SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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 SMUMPS_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)
994 END SUBROUTINE SMUMPS_SOLVE_NODE_FWD
995 RECURSIVE SUBROUTINE SMUMPS_SOLVE_RECV_AND_TREAT( BLOQ, FLAG,
996 & BUFR, LBUFR, LBUFR_BYTES,
997 & MYID, SLAVEF, COMM,
998 & N, NRHS, IPOOL, LPOOL, LEAF,
999 & NBFIN, NSTK_S, IW, LIW, A, LA, PTRIST,PTRFAC,
1001 & WCB, LWCB, POSWCB,
1002 & PLEFTWCB, POSIWCB,
1003 & PTRICB, INFO, KEEP,KEEP8, DKEEP, STEP, PROCNODE_STEPS,
1004 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD
1009 INTEGER LBUFR, LBUFR_BYTES
1010 INTEGER MYID, SLAVEF, COMM
1011 INTEGER N, NRHS, LPOOL, LEAF, NBFIN
1012 INTEGER LIWCB, POSIWCB
1013 INTEGER(8) :: POSWCB, PLEFTWCB
1015 INTEGER(8), INTENT(IN) :: LA, LWCB
1016 INTEGER INFO( 80 ), KEEP( 500)
1017 INTEGER(8) KEEP8(150)
1018 REAL, INTENT(INOUT) :: DKEEP(230)
1019 INTEGER BUFR( LBUFR ), IPOOL(LPOOL)
1020 INTEGER NSTK_S( KEEP(28) )
1021 INTEGER IWCB( LIWCB )
1023 REAL WCB( LWCB ), A( LA )
1024 INTEGER PTRICB(KEEP(28)), PTRIST(KEEP(28))
1025 INTEGER(8) :: PTRFAC(KEEP(28))
1027 INTEGER PROCNODE_STEPS(KEEP(28))
1029 INTEGER LRHSCOMP, POSINRHSCOMP_FWD(N)
1030 REAL RHSCOMP(LRHSCOMP,NRHS)
1031 LOGICAL, intent(in) :: FROM_PP
1033 INCLUDE 'mumps_tags.h
'
1035 INTEGER :: STATUS(MPI_STATUS_SIZE)
1036 INTEGER MSGSOU, MSGTAG, MSGLEN
1040 CALL MPI_PROBE( MPI_ANY_SOURCE, MPI_ANY_TAG,
1041 & COMM, STATUS, IERR )
1044 CALL MPI_IPROBE( MPI_ANY_SOURCE, MPI_ANY_TAG, COMM,
1045 & FLAG, STATUS, IERR )
1048 KEEP(266) = KEEP(266) -1
1049 MSGSOU = STATUS( MPI_SOURCE )
1050 MSGTAG = STATUS( MPI_TAG )
1051 CALL MPI_GET_COUNT( STATUS, MPI_PACKED, MSGLEN, IERR )
1052.GT.
IF ( MSGLEN LBUFR_BYTES ) THEN
1055 CALL SMUMPS_BDC_ERROR( MYID, SLAVEF, COMM, KEEP )
1057 CALL MPI_RECV( BUFR, LBUFR_BYTES, MPI_PACKED,
1058 & MSGSOU, MSGTAG, COMM, STATUS, IERR )
1059 CALL SMUMPS_TRAITER_MESSAGE_SOLVE( BUFR, LBUFR, LBUFR_BYTES,
1060 & MSGTAG, MSGSOU, MYID, SLAVEF, COMM,
1061 & N, NRHS, IPOOL, LPOOL, LEAF,
1062 & NBFIN, NSTK_S, IW, LIW, A, LA, PTRIST, PTRFAC,
1064 & WCB, LWCB, POSWCB,
1065 & PLEFTWCB, POSIWCB,
1066 & PTRICB, INFO, KEEP,KEEP8, DKEEP, STEP,
1068 & RHSCOMP, LRHSCOMP, POSINRHSCOMP_FWD
1074 END SUBROUTINE SMUMPS_SOLVE_RECV_AND_TREAT
1075 SUBROUTINE SMUMPS_RHSCOMP_TO_WCB(
1076 & NPIV, NCB, LIELL, CBINITZERO, LDEQLIELLPANEL,
1077 & RHSCOMP, LRHSCOMP, NRHS_B,
1078 & POSINRHSCOMP_FWD, N,
1080 & IW, LIW, J1, J3, J2, KEEP, DKEEP)
1082 INTEGER, INTENT( IN ) :: NPIV, NCB, LIELL, N,
1085 LOGICAL, INTENT( IN ) :: LDEQLIELLPANEL
1086 LOGICAL, INTENT( IN ) :: CBINITZERO
1087 INTEGER, INTENT( IN ) :: POSINRHSCOMP_FWD( N ), IW( LIW )
1088 REAL, INTENT( INOUT ) :: RHSCOMP( LRHSCOMP, NRHS_B )
1089 REAL, INTENT( OUT ) :: WCB( int(LIELL,8)*
1091 INTEGER :: KEEP(500)
1093 INTEGER, PARAMETER :: ZERO = 0.0E0
1094 INTEGER(8), PARAMETER :: PPIV_COURANT = 1_8
1095 INTEGER(8) :: PCB_COURANT
1096 INTEGER :: LD_WCBCB, LD_WCBPIV, J, JJ, K, IPOSINRHSCOMP
1097 INTEGER(8) :: IFR8, IFR_ini8
1100 IF ( LDEQLIELLPANEL ) THEN
1103 PCB_COURANT = PPIV_COURANT + NPIV
1107 PCB_COURANT = PPIV_COURANT + NPIV * NRHS_B
1109 IF ( LDEQLIELLPANEL ) THEN
1111 IFR8 = PPIV_COURANT+int(K-1,8)*int(LD_WCBPIV,8)-1_8
1112 IPOSINRHSCOMP = POSINRHSCOMP_FWD(IW(J1))
1115 WCB(IFR8) = RHSCOMP(IPOSINRHSCOMP,K)
1116 IPOSINRHSCOMP = IPOSINRHSCOMP + 1
1118.GT..AND..NOT.
IF (NCB0 CBINITZERO) THEN
1125 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1126 WCB(IFR8) = RHSCOMP(IPOSINRHSCOMP,K)
1127 RHSCOMP (IPOSINRHSCOMP,K) = ZERO
1132 PCB_COURANT = PPIV_COURANT + LD_WCBPIV*NRHS_B
1133 IFR8 = PPIV_COURANT - 1_8
1135 IPOSINRHSCOMP = POSINRHSCOMP_FWD(IW(J1))
1137.GE..AND.
!$ OMP_FLAG = ( NRHS_B KEEP(362)
1138.GE.
!$ & int(NCB,8)*int(NRHS_B,8) KEEP(363) )
1140!$OMP PARALLEL DO PRIVATE(JJ,IFR8)
1142 IFR8 = IFR_ini8 + int(K-1,8)*int(NPIV,8)
1144 WCB(IFR8+int(JJ-J1+1,8)) =
1145 & RHSCOMP(IPOSINRHSCOMP+JJ-J1,K)
1148!$OMP END PARALLEL DO
1151 IFR8 = IFR_ini8 + int(K-1,8)*int(NPIV,8)
1153 WCB(IFR8+int(JJ-J1+1,8)) =
1154 & RHSCOMP(IPOSINRHSCOMP+JJ-J1,K)
1158 IFR8 = PCB_COURANT - 1_8
1159.GT..AND..NOT.
IF (NCB0 CBINITZERO) THEN
1162.GE..AND.
!$ OMP_FLAG = ( NRHS_BKEEP(362)
1163.GE.
!$ & NCB*NRHS_B KEEP(363) )
1165!$OMP PARALLEL DO PRIVATE (IFR8, JJ, J, IPOSINRHSCOMP)
1167 IFR8 = IFR_ini8+(K-1)*NCB
1173 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1174 WCB(IFR8+int(JJ-J3,8)) = RHSCOMP(IPOSINRHSCOMP,K)
1175 RHSCOMP(IPOSINRHSCOMP,K)=ZERO
1178!$OMP END PARALLEL DO
1181 IFR8 = IFR_ini8+(K-1)*NCB
1187 IPOSINRHSCOMP = abs(POSINRHSCOMP_FWD(J))
1188 WCB(IFR8+int(JJ-J3,8)) = RHSCOMP(IPOSINRHSCOMP,K)
1189 RHSCOMP(IPOSINRHSCOMP,K)=ZERO
1195 IF ( CBINITZERO ) THEN
1197.GE.
!$ OMP_FLAG = int(NCB,8)*int(NRHS_B,8) KEEP(363)
1199!$OMP PARALLEL DO COLLAPSE(2)
1202 WCB(PCB_COURANT+int(K-1,8)*int(LD_WCBCB,8)+JJ-1_8) = ZERO
1205!$OMP END PARALLEL DO
1209 WCB(PCB_COURANT+int(K-1,8)*int(LD_WCBCB,8)+JJ-1_8) = ZERO
1215 END SUBROUTINE SMUMPS_RHSCOMP_TO_WCB
subroutine smumps_sol_slave_lr_u(inode, iwhdlr, npiv_global, wcb, lwcb, ldx, ldy, ptrx_init, ptry_init, jbdeb, jbfin, mtype, keep, keep8, iflag, ierror)
recursive subroutine smumps_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 smumps_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)