366
370 IMPLICIT NONE
371 INTEGER MTYPE
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
377 INTEGER(8) :: LA
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 )
385 INTEGER NRHS
386 REAL WCB( LWCB )
387 REAL :: A( LA )
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
405 REAL ALPHA,ONE,ZERO
406 parameter(zero=0.0e0, one = 1.0e0,
alpha=-1.0e0)
407 INTEGER :: IWHDLR
408 INTEGER JBDEB, JBFIN, NRHS_B
409 INTEGER LDADIAG
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
416 LOGICAL FLAG
417 INTEGER :: NUPDATE_NONCRITICAL, IPOSINRHSCOMPLASTFSDYN
418 LOGICAL :: OMP_FLAG
419 include 'mumps_headers.h'
420 INTEGER(8) :: APOSDEB
421 INTEGER TempNROW, TempNCOL, PANEL_SIZE,
422 & JFIN, NBJ, NUPDATE_PANEL,
423 & TYPEF
424 INTEGER LD_WCBPIV
425 INTEGER LD_WCBCB
426 LOGICAL :: LDEQLIELLPANEL
427 LOGICAL :: CBINITZERO
428 INTEGER LDAJ, LDAJ_FIRST_PANEL
429 INTEGER LDAtemp
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
436 include 'mpif.h'
437 include 'mumps_tags.h'
438 INTEGER DUMMY( 1 )
439 error_was_broadcasted = .false.
440 dummy(1)=1
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.
445 & (keep(485).EQ.0)
446 & )
447 IF (do_nbsparse) THEN
448 jbdeb= rhs_bounds(2*step(inode)-1)
449 jbfin= rhs_bounds(2*step(inode))
450 ELSE
451 jbdeb = 1
452 jbfin = nrhs
453 ENDIF
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 :",
458 & jbdeb, jbfin
460 endif
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 :",
464 & jbdeb, jbfin
466 endif
467 ENDIF
468 IF ( inode .eq. keep( 38 ) .OR. inode .eq.keep( 20 ) ) THEN
469 liell = iw( ptrist( step(inode)) + 3 + keep(ixsz))
470 npiv = liell
471 nelim = 0
472 nslaves = 0
473 ipos = ptrist( step(inode)) + 5 + keep(ixsz)
474 ELSE
475 ipos = ptrist(step(inode)) + 2 + keep(ixsz)
476 liell = iw(ipos-2)+iw(ipos+1)
477 nelim = iw(ipos-1)
478 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz) )
479 ipos = ipos + 1
480 npiv = iw(ipos)
481 ipos = ipos + 1
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)
486 IF(ierr.LT.0)THEN
487 info(1)=ierr
488 info(2)=0
489 error_was_broadcasted = .false.
490 GOTO 270
491 ENDIF
492 IF (keep(201).EQ.1 .AND. keep(50).NE.1) THEN
494 & iw(ipos+1+2*liell+1+nslaves),
495 & must_be_permuted )
496 ENDIF
497 ENDIF
498 nslaves = iw( ptrist(step(inode)) + 5 + keep(ixsz))
499 ipos = ipos + 1 + nslaves
500 END IF
501 IF ( mtype .EQ. 1 .OR. keep(50) .NE. 0 ) THEN
502 j1 = ipos + 1
503 j2 = ipos + liell
504 j3 = ipos + npiv
505 ELSE
506 j1 = ipos + liell + 1
507 j2 = ipos + 2 * liell
508 j3 = ipos + liell + npiv
509 END IF
510 ncb = liell-npiv
511 IF (keep(50).NE.0) THEN
512 IF ( keep(459) .GT. 1 ) THEN
513 ldadiag = -99999
514 ELSE
515 ldadiag = npiv
516 ENDIF
517 ELSE
518 ldadiag = liell
519 ENDIF
520 IF ( inode .eq. keep( 38 ) .OR. inode .eq. keep(20) ) THEN
521 ifr8 = 0_8
522 iposinrhscomp_tmp = posinrhscomp_fwd(iw(j1))
523 ifr_ini8 = ifr8
524 omp_flag = .false.
525
526
527 IF (omp_flag) THEN
528
529 DO k=jbdeb,jbfin
530 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
531 DO jj = j1, j3
532 rhs_root(ifr8+int(jj-j1+1,8)) =
533 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
534 ENDDO
535 ENDDO
536
537 ELSE
538 DO k=jbdeb,jbfin
539 ifr8 = ifr_ini8 + int(k-1,8)*int(npiv,8)
540 DO jj = j1, j3
541 rhs_root(ifr8+int(jj-j1+1,8)) =
542 & rhscomp(iposinrhscomp_tmp+jj-j1,k)
543 ENDDO
544 ENDDO
545 ENDIF
546 IF ( npiv .LT. liell ) THEN
547 WRITE(*,*) ' Internal error 1 in SMUMPS_SOLVE_NODE_FWD',
548 & npiv, liell
550 END IF
551 GO TO 270
552 END IF
553 apos = ptrfac(step(inode))
554 IF ( (keep(201).EQ.1).AND.oocwrite_compatible_with_blr ) THEN
555 IF (mtype.EQ.1) THEN
556 IF ((mtype.EQ.1).AND.nslaves.NE.0) THEN
557 tempnrow= npiv+nelim
558 tempncol= npiv
559 ldaj_first_panel=tempnrow
560 ELSE
561 tempnrow= liell
562 tempncol= npiv
563 ldaj_first_panel=tempnrow
564 ENDIF
565 typef=typef_l
566 ELSE
567 tempncol= liell
568 tempnrow= npiv
569 ldaj_first_panel=tempncol
570 typef= typef_u
571 ENDIF
573 ENDIF
574 ppiv_courant = pleftwcb
575 pleftwcb = pleftwcb + int(liell,8) * int(nrhs_b,8)
576 IF ( poswcb - pleftwcb + 1_8 .LT. 0 ) THEN
577 info(1) = -11
579 error_was_broadcasted = .false.
580 GOTO 270
581 END IF
582 IF (keep(201) .EQ. 1 .AND. oocwrite_compatible_with_blr) THEN
583 ldeqliellpanel = .true.
584 ld_wcbpiv = liell
585 ld_wcbcb = liell
586 pcb_courant = ppiv_courant + npiv
587 ELSE
588 ldeqliellpanel = .false.
589 ld_wcbpiv = npiv
590 ld_wcbcb = ncb
591 pcb_courant = ppiv_courant + int(npiv,8)*int(nrhs_b,8)
592 ENDIF
593 fpere = dad(step(inode))
594 IF ( fpere .NE. 0 ) THEN
596 & keep(199) )
597 ELSE
598 fpere_mapping = -1
599 ENDIF
600 IF ( lastfsl0dyn .LE. n ) THEN
601 cbinitzero = .true.
602 ELSE IF ( fpere_mapping .EQ. myid ) THEN
603 cbinitzero = .true.
604 ELSE
605 cbinitzero = .false.
606 ENDIF
608 & npiv, ncb, liell, cbinitzero, ldeqliellpanel,
609 & rhscomp(1, jbdeb), lrhscomp, nrhs_b,
610 & posinrhscomp_fwd, n,
611 & wcb(ppiv_courant),
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
615 aposdeb = apos
616 j = 1
617 ipanel = 0
618 10 CONTINUE
619 ipanel = ipanel + 1
620 jfin =
min(j+panel_size-1, npiv)
621 IF (iw(ipos+ liell + jfin) < 0) THEN
622 jfin=jfin+1
623 ENDIF
624 nbj = jfin-j+1
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.
631 ELSE
633 & iw( i_pivr+ iw(i_pivrptr+ipanel-1)-
634 & iw(i_pivrptr)),
635 & npiv-iw(i_pivrptr+ipanel-1)+1,
636 & iw(i_pivrptr+ipanel-1)-1,
637 & a(aposdeb),
638 & ldaj, nbj, j-1 )
639 ENDIF
640 ENDIF
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)
645 IF (mtype.EQ.1) THEN
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,
653 & wcb(pcb_panel), 1)
654 ENDIF
655 ELSE
656#endif
657 CALL strsm(
'L',
'L',
'N',
'U', nbj, nrhs_b, one,
658 & a(aposdeb), ldaj, wcb(ppiv_panel),
659 & liell )
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)
665 ENDIF
666#if defined(MUMPS_USE_BLAS2)
667 ENDIF
668#endif
669 ELSE
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 )
678 ENDIF
679 ELSE
680#endif
681 CALL strsm(
'L',
'L',
'N',
'N',nbj, nrhs_b, one,
682 & a(aposdeb), ldaj, wcb(ppiv_panel),
683 & liell)
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)
689 ENDIF
690#if defined(MUMPS_USE_BLAS2)
691 ENDIF
692#endif
693 ENDIF
694 aposdeb = aposdeb+int(ldaj,8)*int(nbj,8)
695 j=jfin+1
696 IF ( j .LE. npiv ) GOTO 10
697 ELSE
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,
703 & iw, ipos, liw,
704 & liell, wcb, lwcb,
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,
710 & info(1), info(2) )
711 IF (info(1).LT.0) THEN
712 error_was_broadcasted = .false.
713 GOTO 270
714 ENDIF
715 ELSE IF ( keep(459) .GT. 1 .AND. keep(50) .NE. 0 ) THEN
717 & a, la, apos,
718 & npiv, iw(ipos+liell+1),
719 & nrhs_b, wcb, lwcb, ld_wcbpiv,
720 & ppiv_courant, mtype, keep)
721 ELSE
723 & a, la, apos,
724 & npiv, ldadiag,
725 & nrhs_b, wcb, lwcb, ld_wcbpiv,
726 & ppiv_courant, mtype, keep)
727 ENDIF
728 END IF
729 END IF
730 ncb = liell - npiv
731 IF ( mtype .EQ. 1 ) THEN
732 IF ( nslaves .EQ. 0 .OR. npiv .eq. 0 ) THEN
733 nupdate = ncb
734 ELSE
735 nupdate = nelim
736 END IF
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)
740 ELSE
741 apos1 = apos + int(npiv,8) * int(ldadiag,8)
742 ENDIF
743 ELSE
744 apos1 = apos + int(npiv,8)
745 nupdate = ncb
746 END IF
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
751 ldatemp = npiv
752 ELSE
753 ldatemp = liell
754 ENDIF
756 & (a, la, apos1,
757 & npiv, ldatemp, nupdate,
758 & nrhs_b, wcb, lwcb, ppiv_courant, ld_wcbpiv,
759 & pcb_courant, ld_wcbcb,
760 & mtype, keep, one)
761 ENDIF
762 END IF
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,
768 & ppiv_courant,
769 & iw, ipos, liw,
770 & a, la, apos,
771 & wcb, lwcb, ld_wcbpiv,
772 & rhscomp, lrhscomp, nrhs,
773 & posinrhscomp_fwd, jbdeb, jbfin,
774 & mtype, keep, oocwrite_compatible_with_blr,
775 & .false.
776 & )
777 ELSE
779 & inode, n, npiv, liell, nelim, nslaves,
780 & ppiv_courant,
781 & iw, ipos, liw,
782 & a, la, apos,
783 & wcb, lwcb, ld_wcbpiv,
784 & rhscomp, lrhscomp, nrhs,
785 & posinrhscomp_fwd, jbdeb, jbfin,
786 & mtype, keep, oocwrite_compatible_with_blr,
787 & .false.
788 & )
789 ENDIF
790 ENDIF
791 IF ((keep(201).EQ.1).AND.oocwrite_compatible_with_blr)
792 &THEN
794 & a,la,.true.,ierr)
795 IF(ierr.LT.0)THEN
796 info(1)=ierr
797 info(2)=0
798 error_was_broadcasted = .false.
799 GOTO 270
800 ENDIF
801 END IF
802 IF ( fpere .EQ. 0 ) THEN
803 pleftwcb = pleftwcb - int(liell,8) *int(nrhs_b,8)
804 GOTO 270
805 ENDIF
806 IF ( nupdate .NE. 0 .OR. ncb.EQ.0 ) THEN
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
815 ELSE
816 iposinrhscomplastfsdyn =
817 & abs(posinrhscomp_fwd(lastfsl0dyn))
818 ENDIF
819 DO i = 1, nupdate
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
825 nupdate_noncritical = i - 1
826 EXIT
827 ENDIF
828 ENDIF
829 ENDDO
830 ENDIF
831 omp_flag = .false.
832
833
834 IF (omp_flag) THEN
835
836 DO k = jbdeb, jbfin
837 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
838#if defined(__ve__)
839
840#endif
841 DO i = 1, nupdate_noncritical
842 iposinrhscomp_tmp =
843 & abs(posinrhscomp_fwd(iw(j3 + i)))
844 rhscomp( iposinrhscomp_tmp, k ) =
845 & rhscomp( iposinrhscomp_tmp, k )
846 & + wcb(ifr8 + int(i-1,8))
847 ENDDO
848 ENDDO
849
850 ELSE
851 DO k = jbdeb, jbfin
852 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
853#if defined(__ve__)
854
855#endif
856 DO i = 1, nupdate_noncritical
857 iposinrhscomp_tmp =
858 & abs(posinrhscomp_fwd(iw(j3 + i)))
859 rhscomp( iposinrhscomp_tmp, k ) =
860 & rhscomp( iposinrhscomp_tmp, k )
861 & + wcb(ifr8 + int(i-1,8))
862 ENDDO
863 ENDDO
864 ENDIF
865 IF ( cbinitzero ) THEN
866 IF ( nupdate .NE. nupdate_noncritical) THEN
867 nb_lock = 1
868 IF (.NOT.do_nbsparse.AND.(keep(400).GT.1)) THEN
870 ENDIF
871 sizeblock = (jbfin-jbdeb+1+nb_lock-1) / nb_lock
872 DO nb = 1, nb_lock
873 jcourant = jbdeb+sizeblock*(nb-1)
874
875 DO k = jcourant,
min(jbfin,jcourant+sizeblock-1)
876 ifr8 = pcb_courant + int(k-jbdeb,8)*int(ld_wcbcb,8)
877#if defined(__ve__)
878
879#endif
880 DO i = nupdate_noncritical+1, nupdate
881 iposinrhscomp_tmp =
882 & abs(posinrhscomp_fwd(iw(j3 + i)))
883 rhscomp( iposinrhscomp_tmp, k ) =
884 & rhscomp( iposinrhscomp_tmp, k )
885 & + wcb(ifr8 + int(i-1,8))
886 ENDDO
887 ENDDO
888
889 ENDDO
890 ENDIF
891 ENDIF
892 ptricb(step( inode )) = ptricb(step( inode )) - nupdate
893 ELSE
894 ptricb(step( inode )) = -1
895 ENDIF
896 ELSE
897 210 CONTINUE
899 & ncb, ld_wcbcb,
900 & nupdate,
901 & iw( j3 + 1 ), wcb( pcb_courant ), jbdeb, jbfin,
902 & rhscomp, 1, 1, -9999, -9999,
903 & keep,
905 & contvec,
906 & comm, ierr )
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,
913 & iwcb, liwcb,
914 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
915 & ptricb, info, keep,keep8, dkeep, step,
916 & procnode_steps,
917 & rhscomp, lrhscomp, posinrhscomp_fwd
918 & , from_pp
919 & )
920 IF ( info( 1 ) .LT. 0 ) THEN
921 error_was_broadcasted = .true.
922 GOTO 270
923 ENDIF
924 GOTO 210
925 ELSE IF ( ierr .EQ. -2 ) THEN
926 info( 1 ) = -17
927 info( 2 ) = nupdate * keep( 35 ) +
928 & ( nupdate + 3 ) * keep( 34 )
929 error_was_broadcasted = .false.
930 GOTO 270
931 ELSE IF ( ierr .EQ. -3 ) THEN
932 info( 1 ) = -20
933 info( 2 ) = nupdate * keep( 35 ) +
934 & ( nupdate + 3 ) * keep( 34 )
935 error_was_broadcasted = .false.
936 GOTO 270
937 END IF
938 ENDIF
939 END IF
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,
948 & nslaves,
949 & effective_cb_size, firstindex )
950 222 CONTINUE
952 & inode, fpere,
953 & effective_cb_size, ld_wcbcb, ld_wcbpiv, npiv,
954 & jbdeb, jbfin,
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,
964 & iwcb, liwcb,
965 & wcb, lwcb, poswcb, pleftwcb, posiwcb,
966 & ptricb, info, keep,keep8, dkeep, step,
967 & procnode_steps,
968 & rhscomp, lrhscomp, posinrhscomp_fwd
969 & , from_pp
970 & )
971 IF ( info( 1 ) .LT. 0 ) THEN
972 error_was_broadcasted = .true.
973 GOTO 270
974 ENDIF
975 GOTO 222
976 ELSE IF ( ierr .EQ. -2 ) THEN
977 info( 1 ) = -17
978 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
979 & 6 * keep( 34 )
980 error_was_broadcasted = .false.
981 GOTO 270
982 ELSE IF ( ierr .EQ. -3 ) THEN
983 info( 1 ) = -20
984 info( 2 ) = (npiv+effective_cb_size)*nrhs_b*keep(35) +
985 & 6 * keep( 34 )
986 error_was_broadcasted = .false.
987 GOTO 270
988 END IF
989 END DO
990 END IF
991 pleftwcb = pleftwcb - int(liell,8)*int(nrhs_b,8)
992 270 CONTINUE
993 RETURN
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine strsv(uplo, trans, diag, n, a, lda, x, incx)
STRSV
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine mumps_bloc2_get_slave_info(keep, keep8, inode, step, n, slavef, istep_to_iniv2, tab_pos_in_pere islave, ncb, nslaves, size, first_index)
subroutine, public smumps_buf_send_master2slave(nrhs, inode, ifath, eff_cb_size, ld_cb, ld_piv, npiv, jbdeb, jbfin, cb, sol, dest, comm, keep, ierr)
subroutine, public smumps_buf_send_vcb(nrhs_b, node1, node2, ncb, ldw, long, iw, w, jbdeb, jbfin, rhscomp, nrhs, lrhscomp, iposinrhscomp, npiv, keep, dest, tag, comm, ierr)
integer function, public smumps_ooc_panel_size(nnmax)
subroutine smumps_free_factors_for_solve(inode, ptrfac, nsteps, a, la, flag, ierr)
integer, parameter nb_lock_max
subroutine smumps_sol_fwd_lr_su(inode, n, iwhdlr, npiv_global, nslaves, iw, ipos_init, liw, liell, wcb, lwcb, ld_wcbpiv, ld_wcbcb, ppiv_init, pcb_init, rhscomp, lrhscomp, nrhs, posinrhscomp_fwd, jbdeb, jbfin, mtype, keep, keep8, oocwrite_compatible_with_blr, iflag, ierror)
subroutine smumps_ooc_pp_check_perm_freed(iw_location, must_be_permuted)
subroutine smumps_get_ooc_perm_ptr(typef, nbpanels, i_pivptr, i_piv, ipos, iw, liw)
subroutine smumps_permute_panel(ipiv, lpiv, ishift, the_panel, nbrow, nbcol, kbeforepanel)
subroutine smumps_sol_ld_and_reload_panel(inode, n, npiv, liell, nelim, nslaves, ppiv_courant, iw, ipos, liw, a, la, apos, wcb, lwcb, ld_wcbpiv, rhscomp, lrhscomp, nrhs, posinrhscomp_fwd, jbdeb, jbfin, mtype, keep, oocwrite_compatible_with_blr, ignore_k459)
subroutine smumps_solve_fwd_trsolve(a, la, apos, npiv, ldadiag, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_sol_ld_and_reload(inode, n, npiv, liell, nelim, nslaves, ppiv_courant, iw, ipos, liw, a, la, apos, wcb, lwcb, ld_wcbpiv, rhscomp, lrhscomp, nrhs, posinrhscomp_fwd, jbdeb, jbfin, mtype, keep, oocwrite_compatible_with_blr, ignore_k459)
subroutine smumps_solve_gemm_update(a, la, apos1, nx, lda, ny, nrhs_b, wcb, lwcb, ptrx, ldx, ptry, ldy, mtype, keep, coef_y)
subroutine smumps_solve_get_ooc_node(inode, ptrfac, keep, a, la, step, keep8, n, must_be_permuted, ierr)
subroutine smumps_solve_fwd_panels(a, la, apos, npiv, iw, nrhs_b, wcb, lwcb, lda_wcb, ppiv_courant, mtype, keep)
subroutine smumps_rhscomp_to_wcb(npiv, ncb, liell, cbinitzero, ldeqliellpanel, rhscomp, lrhscomp, nrhs_b, posinrhscomp_fwd, n, wcb, iw, liw, j1, j3, j2, keep, dkeep)
recursive subroutine smumps_solve_recv_and_treat(bloq, flag, bufr, lbufr, lbufr_bytes, 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)