43 INTEGER lbuf, head, tail,lbuf_int, ilastmsg
51 DOUBLE PRECISION,
DIMENSION(:), allocatable
61 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: B
65 INTEGER :: STATUS(MPI_STATUS_SIZE)
66 IF ( b%HEAD .NE. b%TAIL )
THEN
71 b%HEAD = b%CONTENT( b%HEAD +
next )
72 IF ( b%HEAD .EQ. 0 ) b%HEAD = b%TAIL
73 IF ( b%HEAD .NE. b%TAIL )
GOTO 10
76 IF ( b%HEAD .EQ. b%TAIL )
THEN
91 INTEGER intsize, realsize
145 INTEGER ierr, nfs4father
152 IF ( ierr .GT. 0 )
THEN
173 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: BUF
178 IF (
associated ( buf%CONTENT ) )
DEALLOCATE( buf%CONTENT )
179 ALLOCATE( buf%CONTENT( buf%LBUF_INT ), stat = ierr )
180 IF (ierr .NE. 0)
THEN
181 NULLIFY( buf%CONTENT )
193 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: BUF
197 INTEGER :: STATUS(MPI_STATUS_SIZE)
199 IF ( .NOT.
associated ( buf%CONTENT ) )
THEN
207 DO WHILE ( buf%HEAD.NE.0 .AND. buf%HEAD .NE. buf%TAIL )
210 IF ( .not. flag )
THEN
211 WRITE(*,*)
'** Warning: trying to cancel a request.'
212 WRITE(*,*)
'** This might be problematic'
217 buf%HEAD = buf%CONTENT( buf%HEAD +
next )
219 DEALLOCATE( buf%CONTENT )
220 NULLIFY( buf%CONTENT )
229 & INODE, FPERE, NFRONT, LCONT,
231 & IWROW, IWCOL, A, PACKED_CB,
232 & DEST, TAG, COMM, KEEP, IERR )
234 INTEGER dest, tag, comm, ierr
235 INTEGER nbrows_already_sent
236 INTEGER,
INTENT(INOUT) :: keep(500)
237 INTEGER inode, fpere, nfront, lcont, nass, npiv
238 INTEGER iwrow( lcont ), iwcol( lcont )
239 COMPLEX(kind=8) a( * )
243 INTEGER nbrows_packet
244 INTEGER position, ireq, ipos, i, j1
245 INTEGER size1, size2, size_pack, size_av, size_av_reals
250 parameter( izero = 0, ione = 1 )
251 LOGICAL recv_buf_smaller_than_send
255 IF (nbrows_already_sent .EQ. 0)
THEN
257 & comm, size1, ierr_mpi)
263 recv_buf_smaller_than_send = .false.
266 recv_buf_smaller_than_send = .true.
268 size_av_reals = ( size_av - size1 ) /
sizeofreal
269 IF (size_av_reals < 0 )
THEN
273 tmp=2.0d0*dble(nbrows_already_sent)+1.0d0
276 & + 8.0d0 * dble(size_av_reals)) - tmp )
282 nbrows_packet = size_av_reals / lcont
287 nbrows_packet =
max(0,
288 &
min(nbrows_packet, lcont - nbrows_already_sent))
289 IF (nbrows_packet .EQ. 0 .AND. lcont .NE. 0)
THEN
290 IF (recv_buf_smaller_than_send)
THEN
299 sizecb = (nbrows_already_sent*nbrows_packet)+(nbrows_packet
300 & *(nbrows_packet+1))/2
302 sizecb = nbrows_packet * lcont
305 & comm, size2, ierr_mpi )
306 size_pack = size1 + size2
307 IF (size_pack .GT. size_av )
THEN
308 nbrows_packet = nbrows_packet - 1
309 IF (nbrows_packet > 0)
THEN
312 IF (recv_buf_smaller_than_send)
THEN
321 IF (nbrows_packet + nbrows_already_sent.NE.lcont .AND.
324 & .NOT. recv_buf_smaller_than_send)
331 IF (ierr .EQ. -1 .OR. ierr .EQ. -2)
THEN
332 nbrows_packet = nbrows_packet - 1
333 IF ( nbrows_packet > 0 )
GOTO 10
335 IF ( ierr .LT. 0 )
GOTO 100
337 CALL mpi_pack( inode, 1, mpi_integer,
338 &
buf_cb%CONTENT( ipos ), size_pack,
339 & position, comm, ierr_mpi )
340 CALL mpi_pack( fpere, 1, mpi_integer,
341 &
buf_cb%CONTENT( ipos ), size_pack,
342 & position, comm, ierr_mpi )
348 CALL mpi_pack( lcont_sent, 1, mpi_integer,
349 &
buf_cb%CONTENT( ipos ), size_pack,
350 & position, comm, ierr_mpi )
351 CALL mpi_pack( nbrows_already_sent, 1, mpi_integer,
352 &
buf_cb%CONTENT( ipos ), size_pack,
353 & position, comm, ierr_mpi )
354 CALL mpi_pack( nbrows_packet, 1, mpi_integer,
355 &
buf_cb%CONTENT( ipos ), size_pack,
356 & position, comm, ierr_mpi )
357 IF (nbrows_already_sent == 0)
THEN
358 CALL mpi_pack( lcont, 1, mpi_integer,
359 &
buf_cb%CONTENT( ipos ), size_pack,
360 & position, comm, ierr_mpi )
361 CALL mpi_pack( nass-npiv, 1, mpi_integer,
362 &
buf_cb%CONTENT( ipos ), size_pack,
363 & position, comm, ierr_mpi )
364 CALL mpi_pack( lcont , 1, mpi_integer,
365 &
buf_cb%CONTENT( ipos ), size_pack,
366 & position, comm, ierr_mpi )
367 CALL mpi_pack( izero, 1, mpi_integer,
368 &
buf_cb%CONTENT( ipos ), size_pack,
369 & position, comm, ierr_mpi )
370 CALL mpi_pack( ione, 1, mpi_integer,
371 &
buf_cb%CONTENT( ipos ), size_pack,
372 & position, comm, ierr_mpi )
373 CALL mpi_pack( izero, 1, mpi_integer,
374 &
buf_cb%CONTENT( ipos ), size_pack,
375 & position, comm, ierr_mpi )
376 CALL mpi_pack( iwrow, lcont, mpi_integer,
378 & position, comm, ierr_mpi )
379 CALL mpi_pack( iwcol, lcont, mpi_integer,
380 &
buf_cb%CONTENT( ipos ), size_pack,
381 & position, comm, ierr_mpi )
383 IF ( lcont .NE. 0 )
THEN
384 j1 = 1 + nbrows_already_sent * nfront
386 DO i = nbrows_already_sent+1,
387 & nbrows_already_sent+nbrows_packet
388 CALL mpi_pack( a( j1 ), i, mpi_double_complex,
389 &
buf_cb%CONTENT( ipos ), size_pack,
390 & position, comm, ierr_mpi )
394 DO i = nbrows_already_sent+1,
395 & nbrows_already_sent+nbrows_packet
396 CALL mpi_pack( a( j1 ), lcont, mpi_double_complex,
397 &
buf_cb%CONTENT( ipos ), size_pack,
398 & position, comm, ierr_mpi )
403 keep(266)=keep(266)+1
405 & dest, tag, comm,
buf_cb%CONTENT( ireq ),
407 IF ( size_pack .LT. position )
THEN
408 WRITE(*,*)
'Error Try_send_cb: SIZE, POSITION=',size_pack,
412 IF ( size_pack .NE. position )
414 nbrows_already_sent = nbrows_already_sent + nbrows_packet
415 IF (nbrows_already_sent .NE. lcont )
THEN
423 & EFF_CB_SIZE, LD_CB, LD_PIV, NPIV,
426 & DEST, COMM, KEEP, IERR )
428 INTEGER nrhs, inode, ifath, eff_cb_size, ld_cb, ld_piv, npiv
429 INTEGER dest, comm, ierr, jbdeb, jbfin
430 COMPLEX(kind=8) cb( ld_cb*(nrhs-1)+eff_cb_size )
431 COMPLEX(kind=8) sol(
max(1, ld_piv*(nrhs-1)+npiv) )
432 INTEGER,
INTENT(INOUT) :: keep(500)
434 include
'mumps_tags.h'
436 INTEGER size, size1, size2, k
437 INTEGER position, ireq, ipos
445 & mpi_double_complex, comm,
451 IF ( ierr .LT. 0 )
THEN
455 CALL mpi_pack( inode, 1, mpi_integer,
456 &
buf_cb%CONTENT( ipos ),
SIZE,
457 & position, comm, ierr_mpi )
458 CALL mpi_pack( ifath, 1, mpi_integer,
459 &
buf_cb%CONTENT( ipos ),
SIZE,
460 & position, comm, ierr_mpi )
461 CALL mpi_pack( eff_cb_size , 1, mpi_integer,
462 &
buf_cb%CONTENT( ipos ),
SIZE,
463 & position, comm, ierr_mpi )
464 CALL mpi_pack( npiv , 1, mpi_integer,
465 &
buf_cb%CONTENT( ipos ),
SIZE,
466 & position, comm, ierr_mpi )
467 CALL mpi_pack( jbdeb , 1, mpi_integer,
468 &
buf_cb%CONTENT( ipos ),
SIZE,
469 & position, comm, ierr_mpi )
470 CALL mpi_pack( jbfin , 1, mpi_integer,
471 &
buf_cb%CONTENT( ipos ),
SIZE,
472 & position, comm, ierr_mpi )
474 CALL mpi_pack( cb( 1 + ld_cb * (k-1) ),
475 & eff_cb_size, mpi_double_complex,
476 &
buf_cb%CONTENT( ipos ),
SIZE,
477 & position, comm, ierr_mpi )
479 IF ( npiv .GT. 0 )
THEN
482 & npiv, mpi_double_complex,
483 &
buf_cb%CONTENT( ipos ),
SIZE,
484 & position, comm, ierr_mpi )
487 keep(266)=keep(266)+1
489 & dest, master2slave, comm,
490 &
buf_cb%CONTENT( ireq ), ierr_mpi )
491 IF (
SIZE .LT. position )
THEN
492 WRITE(*,*)
'Try_send_master2slave: SIZE, POSITION = ',
501 & IW, W, JBDEB, JBFIN,
502 & RHSCOMP, NRHS, LRHSCOMP, IPOSINRHSCOMP, NPIV,
504 & DEST, TAG, COMM, IERR )
506 INTEGER ldw, dest, tag, comm, ierr
507 INTEGER nrhs_b, node1, node2, ncb, long, jbdeb, jbfin
508 INTEGER iw(
max( 1, long ) )
509 INTEGER,
INTENT(IN) :: lrhscomp, nrhs, iposinrhscomp, npiv
510 COMPLEX(kind=8) w(
max( 1, ldw * nrhs_b ) )
511 COMPLEX(kind=8) rhscomp(lrhscomp,nrhs)
512 INTEGER,
INTENT(INOUT) :: keep(500)
515 INTEGER position, ireq, ipos
516 INTEGER size1, size2, size, k
522 IF ( node2 .EQ. 0 )
THEN
530 IF ( long .GT. 0 )
THEN
532 & comm, size2, ierr_mpi )
538 IF ( ierr .LT. 0 )
THEN
542 CALL mpi_pack( node1, 1, mpi_integer,
543 &
buf_cb%CONTENT( ipos ),
SIZE,
544 & position, comm, ierr_mpi )
545 IF ( node2 .NE. 0 )
THEN
546 CALL mpi_pack( node2, 1, mpi_integer,
547 &
buf_cb%CONTENT( ipos ),
SIZE,
548 & position, comm, ierr_mpi )
550 &
buf_cb%CONTENT( ipos ),
SIZE,
551 & position, comm, ierr_mpi )
553 CALL mpi_pack( jbdeb, 1, mpi_integer,
554 &
buf_cb%CONTENT( ipos ),
SIZE,
555 & position, comm, ierr_mpi )
556 CALL mpi_pack( jbfin, 1, mpi_integer,
557 &
buf_cb%CONTENT( ipos ),
SIZE,
558 & position, comm, ierr_mpi )
559 CALL mpi_pack( long, 1, mpi_integer,
560 &
buf_cb%CONTENT( ipos ),
SIZE,
561 & position, comm, ierr_mpi )
562 IF ( long .GT. 0 )
THEN
563 CALL mpi_pack( iw, long, mpi_integer,
564 &
buf_cb%CONTENT( ipos ),
SIZE,
565 & position, comm, ierr_mpi )
570 & mpi_double_complex,
571 &
buf_cb%CONTENT( ipos ),
SIZE,
572 & position, comm, ierr_mpi )
574 IF (long-npiv .NE.0)
THEN
575 CALL mpi_pack( w(npiv+1+(k-1)*ldw), long-npiv,
576 & mpi_double_complex,
577 &
buf_cb%CONTENT( ipos ),
SIZE,
578 & position, comm, ierr_mpi )
583 CALL mpi_pack( w(1+(k-1)*ldw), long, mpi_double_complex,
584 &
buf_cb%CONTENT( ipos ),
SIZE,
585 & position, comm, ierr_mpi )
589 keep(266)=keep(266)+1
591 & dest, tag, comm,
buf_cb%CONTENT( ireq ),
600 INTEGER dest, tag, comm, ierr
601 INTEGER,
INTENT(INOUT) :: keep(500)
604 INTEGER ipos, ireq, msg_size, position
611 & comm, msg_size, ierr_mpi )
615 IF ( ierr .LT. 0 )
THEN
616 write(6,*)
' Internal error in ZMUMPS_BUF_SEND_1INT',
622 & mpi_integer,
buf_small%CONTENT( ipos ),
624 & position, comm, ierr_mpi )
625 keep(266)=keep(266)+1
627 & mpi_packed, dest, tag, comm,
632 & CHECK_COMM_LOAD,FLAG)
633 LOGICAL,
INTENT(IN) :: check_comm_nodes, check_comm_load
634 LOGICAL,
INTENT(OUT) :: flag
635 LOGICAL flag1, flag2, flag3
637 IF (check_comm_nodes)
THEN
640 flag = flag .AND. flag1 .AND. flag2
642 IF ( check_comm_load )
THEN
644 flag = flag .AND. flag3
649 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: B
653 flag = ( b%HEAD == b%TAIL )
658 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: B
662 INTEGER :: STATUS(MPI_STATUS_SIZE)
664 IF ( b%HEAD .NE. b%TAIL )
THEN
666 CALL mpi_test( b%CONTENT( b%HEAD +
req ), flag, status,
669 b%HEAD = b%CONTENT( b%HEAD +
next )
670 IF ( b%HEAD .EQ. 0 ) b%HEAD = b%TAIL
671 IF ( b%HEAD .NE. b%TAIL )
GOTO 10
674 IF ( b%HEAD .EQ. b%TAIL )
THEN
679 IF ( b%HEAD .LE. b%TAIL )
THEN
680 size_av =
max( b%LBUF_INT - b%TAIL, b%HEAD - 2 )
682 size_av = b%HEAD - b%TAIL - 1
689 INTEGER :: ipos, ireq, ierr
690 INTEGER,
PARAMETER :: ione=1
696 & ione , dest2,.true.)
699 SUBROUTINE buf_look( B, IPOS, IREQ, MSG_SIZE, IERR,
700 & NDEST , PDEST, TEST_ONLY)
702 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: B
703 INTEGER,
INTENT(IN) :: MSG_SIZE
704 INTEGER,
INTENT(OUT) :: IPOS, IREQ, IERR
705 LOGICAL,
INTENT(IN),
OPTIONAL :: TEST_ONLY
707 INTEGER,
INTENT(IN) :: PDEST(max(1,NDEST))
710 INTEGER :: MSG_SIZE_INT
713 INTEGER :: STATUS(MPI_STATUS_SIZE)
715.NE.
IF ( B%HEAD B%TAIL ) THEN
717 CALL MPI_TEST( B%CONTENT( B%HEAD + REQ ), FLAG, STATUS,
720 B%HEAD = B%CONTENT( B%HEAD + NEXT )
721.EQ.
IF ( B%HEAD 0 ) B%HEAD = B%TAIL
722.NE.
IF ( B%HEAD B%TAIL ) GOTO 10
725.EQ.
IF ( B%HEAD B%TAIL ) THEN
730 MSG_SIZE_INT = ( MSG_SIZE + ( SIZEofINT - 1 ) ) / SIZEofINT
731 MSG_SIZE_INT = MSG_SIZE_INT + OVHSIZE
732 IF (present(TEST_ONLY)) RETURN
733.LE.
FLAG = ( ( B%HEAD B%TAIL )
735.LE.
& ( MSG_SIZE_INT B%LBUF_INT - B%TAIL )
736.OR..LE.
& ( MSG_SIZE_INT B%HEAD - 2 ) ) )
738.GT.
& ( ( B%HEAD B%TAIL )
739.AND..LE.
& ( MSG_SIZE_INT B%HEAD - B%TAIL - 1 ) )
743.GT.
IF ( MSG_SIZE_INT B%LBUF_INT - 1 ) THEN
750.LE.
IF ( B%HEAD B%TAIL ) THEN
751.LE.
IF ( MSG_SIZE_INT B%LBUF_INT - B%TAIL + 1 ) THEN
753.LE.
ELSE IF ( MSG_SIZE_INT B%HEAD - 1 ) THEN
759 B%CONTENT( B%ILASTMSG + NEXT ) = IBUF
761 B%TAIL = IBUF + MSG_SIZE_INT
762 B%CONTENT( IBUF + NEXT ) = 0
763 IPOS = IBUF + CONTENT
766 END SUBROUTINE BUF_LOOK
767 SUBROUTINE BUF_ADJUST( BUF, SIZE )
769 TYPE ( ZMUMPS_COMM_BUFFER_TYPE ) :: BUF
772 SIZE_INT = ( SIZE + SIZEofINT - 1 ) / SIZEofINT
773 SIZE_INT = SIZE_INT + OVHSIZE
774 BUF%TAIL = BUF%ILASTMSG + SIZE_INT
776 END SUBROUTINE BUF_ADJUST
777 SUBROUTINE ZMUMPS_BUF_SEND_DESC_BANDE(
778 & INODE, NBPROCFILS, NLIG, ILIG, NCOL, ICOL,
779 & NASS, NSLAVES_HDR, LIST_SLAVES,
781 & ESTIM_NFS4FATHER_ATSON,
782 & DEST, IBC_SOURCE, NFRONT, COMM, KEEP, IERR
786 INTEGER COMM, IERR, NFRONT
787 INTEGER, intent(in) :: INODE
788 INTEGER, intent(in) :: NLIG, NCOL, NASS, NSLAVES_HDR, NSLAVES
789 INTEGER, intent(in) :: ESTIM_NFS4FATHER_ATSON
790 INTEGER NBPROCFILS, DEST
793 INTEGER, INTENT(IN) :: IBC_SOURCE
794 INTEGER LIST_SLAVES( max(NSLAVES_HDR,1) )
795 INTEGER, INTENT(INOUT) :: KEEP(500)
796 INTEGER, INTENT(IN) :: LRSTATUS
798 INCLUDE 'mumps_tags.h
'
800 INTEGER SIZE_INT, SIZE_BYTES, POSITION, IPOS, IREQ
806 SIZE_INT = ( 11 + NLIG + NCOL + NSLAVES_HDR )
807 SIZE_BYTES = SIZE_INT * SIZEofINT
808.GT.
IF (SIZE_INTSIZE_RBUF_BYTES ) THEN
812 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE_BYTES, IERR,
815.LT.
IF ( IERR 0 ) THEN
819 BUF_CB%CONTENT( POSITION ) = SIZE_INT
820 POSITION = POSITION + 1
821 BUF_CB%CONTENT( POSITION ) = INODE
822 POSITION = POSITION + 1
823 BUF_CB%CONTENT( POSITION ) = NBPROCFILS
824 POSITION = POSITION + 1
825 BUF_CB%CONTENT( POSITION ) = NLIG
826 POSITION = POSITION + 1
827 BUF_CB%CONTENT( POSITION ) = NCOL
828 POSITION = POSITION + 1
829 BUF_CB%CONTENT( POSITION ) = NASS
830 POSITION = POSITION + 1
831 BUF_CB%CONTENT( POSITION ) = NFRONT
832 POSITION = POSITION + 1
833 BUF_CB%CONTENT( POSITION ) = NSLAVES_HDR
834 POSITION = POSITION + 1
835 BUF_CB%CONTENT( POSITION ) = NSLAVES
836 POSITION = POSITION + 1
837 BUF_CB%CONTENT( POSITION ) = LRSTATUS
838 POSITION = POSITION + 1
839 BUF_CB%CONTENT( POSITION ) = ESTIM_NFS4FATHER_ATSON
840 POSITION = POSITION + 1
841.GT.
IF (NSLAVES_HDR0) THEN
842 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES_HDR - 1 ) =
843 & LIST_SLAVES( 1: NSLAVES_HDR )
844 POSITION = POSITION + NSLAVES_HDR
846 BUF_CB%CONTENT( POSITION:POSITION + NLIG - 1 ) = ILIG
847 POSITION = POSITION + NLIG
848 BUF_CB%CONTENT( POSITION:POSITION + NCOL - 1 ) = ICOL
849 POSITION = POSITION + NCOL
850 POSITION = POSITION - IPOS
851.NE.
IF ( POSITION * SIZEofINT SIZE_BYTES ) THEN
853 & ' wrong estimated size
'
856 KEEP(266)=KEEP(266)+1
857 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), SIZE_BYTES,
859 & DEST, MAITRE_DESC_BANDE, COMM,
860 & BUF_CB%CONTENT( IREQ ), IERR_MPI )
862 END SUBROUTINE ZMUMPS_BUF_SEND_DESC_BANDE
863 SUBROUTINE ZMUMPS_BUF_SEND_MAITRE2( NBROWS_ALREADY_SENT,
865 & IROW, NCOL, ICOL, VAL, LDA, NELIM, TYPE_SON,
866 & NSLAVES, SLAVES, DEST, COMM, IERR,
868 & SLAVEF, KEEP,KEEP8, INIV2, TAB_POS_IN_PERE )
870 INTEGER NBROWS_ALREADY_SENT
871 INTEGER LDA, NELIM, TYPE_SON
872 INTEGER IPERE, ISON, NROW, NCOL, NSLAVES
875 INTEGER SLAVES( NSLAVES )
876 COMPLEX(kind=8) VAL(LDA, *)
877 INTEGER IPOS, IREQ, DEST, COMM, IERR
878 INTEGER SLAVEF, KEEP(500), INIV2
879 INTEGER(8) KEEP8(150)
880 INTEGER TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
882 INCLUDE 'mumps_tags.h
'
884 INTEGER SIZE1, SIZE2, SIZE3, SIZE_PACK, POSITION, I
885 INTEGER NBROWS_PACKET, NCOL_SEND
887 LOGICAL RECV_BUF_SMALLER_THAN_SEND
893.NE.
IF ( NELIM NROW ) THEN
894 WRITE(*,*) 'error in try_send_maitre2:
',NELIM, NROW
897.EQ.
IF (NBROWS_ALREADY_SENT 0) THEN
898 CALL MPI_PACK_SIZE( NROW+NCOL+7+NSLAVES, MPI_INTEGER,
899 & COMM, SIZE1, IERR_MPI )
900.eq.
IF ( TYPE_SON 2 ) THEN
901 CALL MPI_PACK_SIZE( NSLAVES+1, MPI_INTEGER,
902 & COMM, SIZE3, IERR_MPI )
908 CALL MPI_PACK_SIZE(7, MPI_INTEGER,COMM,SIZE1,IERR_MPI)
910.ne..AND..eq.
IF ( KEEP(50)0 TYPE_SON 2 ) THEN
915 CALL ZMUMPS_BUF_SIZE_AVAILABLE( BUF_CB, SIZE_AV )
916.LT.
IF (SIZE_AV SIZE_RBUF_BYTES) THEN
917 RECV_BUF_SMALLER_THAN_SEND = .FALSE.
919 RECV_BUF_SMALLER_THAN_SEND = .TRUE.
920 SIZE_AV = SIZE_RBUF_BYTES
922.GT.
IF (NROW 0 ) THEN
923 NBROWS_PACKET = (SIZE_AV - SIZE1) / NCOL_SEND / SIZEofREAL
924 NBROWS_PACKET = min(NBROWS_PACKET, NROW - NBROWS_ALREADY_SENT)
925 NBROWS_PACKET = max(NBROWS_PACKET, 0)
929.EQ..AND..NE.
IF (NBROWS_PACKET 0 NROW 0) THEN
930 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
939 CALL MPI_PACK_SIZE( NBROWS_PACKET * NCOL_SEND,
940 & MPI_DOUBLE_COMPLEX,
941 & COMM, SIZE2, IERR_MPI )
942 SIZE_PACK = SIZE1 + SIZE2
943.GT.
IF (SIZE_PACK SIZE_AV) THEN
944 NBROWS_PACKET = NBROWS_PACKET - 1
945.GT.
IF ( NBROWS_PACKET 0 ) THEN
948 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
957.NE..AND.
IF (NBROWS_PACKET + NBROWS_ALREADY_SENTNROW
958.LT.
& SIZE_PACK - SIZE1 ( SIZE_RBUF_BYTES - SIZE1 ) / 2
960.NOT.
& RECV_BUF_SMALLER_THAN_SEND)
965 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE_PACK, IERR,
968.LT.
IF ( IERR 0 ) THEN
972 CALL MPI_PACK( IPERE, 1, MPI_INTEGER,
973 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
974 & POSITION, COMM, IERR_MPI )
975 CALL MPI_PACK( ISON, 1, MPI_INTEGER,
976 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
977 & POSITION, COMM, IERR_MPI )
978 CALL MPI_PACK( NSLAVES, 1, MPI_INTEGER,
979 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
980 & POSITION, COMM, IERR_MPI )
981 CALL MPI_PACK( NROW, 1, MPI_INTEGER,
982 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
983 & POSITION, COMM, IERR_MPI )
984 CALL MPI_PACK( NCOL, 1, MPI_INTEGER,
985 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
986 & POSITION, COMM, IERR_MPI )
987 CALL MPI_PACK( NBROWS_ALREADY_SENT, 1, MPI_INTEGER,
988 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
989 & POSITION, COMM, IERR_MPI )
990 CALL MPI_PACK( NBROWS_PACKET, 1, MPI_INTEGER,
991 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
992 & POSITION, COMM, IERR_MPI )
993.EQ.
IF (NBROWS_ALREADY_SENT 0) THEN
994.GT.
IF (NSLAVES0) THEN
995 CALL MPI_PACK( SLAVES, NSLAVES, MPI_INTEGER,
996 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
997 & POSITION, COMM, IERR_MPI )
999 CALL MPI_PACK( IROW, NROW, MPI_INTEGER,
1000 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1001 & POSITION, COMM, IERR_MPI )
1002 CALL MPI_PACK( ICOL, NCOL, MPI_INTEGER,
1003 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1004 & POSITION, COMM, IERR_MPI )
1005.eq.
IF ( TYPE_SON 2 ) THEN
1006 CALL MPI_PACK( TAB_POS_IN_PERE(1,INIV2), NSLAVES+1,
1008 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1009 & POSITION, COMM, IERR_MPI )
1012.GE.
IF (NBROWS_PACKET1) THEN
1013 DO I=NBROWS_ALREADY_SENT+1,
1014 & NBROWS_ALREADY_SENT+NBROWS_PACKET
1015 CALL MPI_PACK( VAL(1,I), NCOL_SEND,
1016 & MPI_DOUBLE_COMPLEX,
1017 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1018 & POSITION, COMM, IERR_MPI )
1021 KEEP(266)=KEEP(266)+1
1022 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), POSITION, MPI_PACKED,
1023 & DEST, MAITRE2, COMM,
1024 & BUF_CB%CONTENT( IREQ ), IERR_MPI )
1025.LT.
IF ( SIZE_PACK POSITION ) THEN
1026 write(*,*) 'try_send_maitre2,
SIZE,position=
',
1027 & SIZE_PACK,POSITION
1030.NE.
IF ( SIZE_PACK POSITION )
1031 & CALL BUF_ADJUST( BUF_CB, POSITION )
1032 NBROWS_ALREADY_SENT = NBROWS_ALREADY_SENT + NBROWS_PACKET
1033.NE.
IF ( NBROWS_ALREADY_SENT NROW ) THEN
1038 END SUBROUTINE ZMUMPS_BUF_SEND_MAITRE2
1039 SUBROUTINE ZMUMPS_BUF_SEND_CONTRIB_TYPE2(NBROWS_ALREADY_SENT,
1041 & IPERE, NFRONT_PERE, NASS_PERE, NFS4FATHER,
1043 & ISON, NBROW, LMAP, MAPROW, PERM, IW_CBSON, A_CBSON, LA_CBSON,
1044 & ISLAVE, PDEST, PDEST_MASTER, COMM, IERR,
1046 & KEEP,KEEP8, STEP, N, SLAVEF,
1047 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1048 & PACKED_CB, KEEP253_LOC, NVSCHUR,
1049 & SON_NIV, MYID, NPIV_CHECK )
1051 USE ZMUMPS_LR_DATA_M
1053 INTEGER NBROWS_ALREADY_SENT
1054 INTEGER, INTENT (in) :: KEEP253_LOC, NVSCHUR
1055 INTEGER, INTENT (in) :: SON_NIV
1056 INTEGER, INTENT (in), OPTIONAL :: NPIV_CHECK
1057 INTEGER IPERE, ISON, NBROW, MYID
1058 INTEGER PDEST, ISLAVE, COMM, IERR
1059 INTEGER PDEST_MASTER, NASS_PERE, NSLAVES_PERE,
1061 INTEGER MAPROW( LMAP ), PERM( max(1, NBROW ))
1062 INTEGER IW_CBSON( * )
1063 COMPLEX(kind=8) A_CBSON( : )
1064 INTEGER(8) :: LA_CBSON
1065 LOGICAL DESC_IN_LU, PACKED_CB
1066 INTEGER KEEP(500), N , SLAVEF
1067 INTEGER(8) KEEP8(150)
1069 & ISTEP_TO_INIV2(KEEP(71)),
1070 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
1072 INCLUDE 'mumps_tags.h
'
1074 INTEGER NFS4FATHER,SIZE3,PS1,NCA,LROW1
1077 DOUBLE PRECISION, POINTER, DIMENSION(:) :: M_ARRAY
1078 INTEGER NBROWS_PACKET
1079 INTEGER MAX_ROW_LENGTH
1082 INTEGER NPIV, NFRONT, HS
1083 INTEGER SIZE_PACK, SIZE0, SIZE1, SIZE2, POSITION,I
1084 INTEGER SIZE_INTEGERS, B, SIZE_REALS, TMPSIZE, ONEorTWO, SIZE_AV
1086 INTEGER(8) :: APOS, SHIFTCB_SON, LDA_SON8
1087 INTEGER IPOS_IN_SLAVE
1089 INTEGER INDICE_PERE, NROW, IPOS, IREQ, NOSLA
1090 INTEGER IONE, J, THIS_ROW_LENGTH
1091 INTEGER SIZE_DESC_BANDE, DESC_BANDE_BYTES
1092 LOGICAL RECV_BUF_SMALLER_THAN_SEND
1093 LOGICAL NOT_ENOUGH_SPACE
1096 TYPE(LRB_TYPE), POINTER :: CB_LRB(:,:)
1097 INTEGER, POINTER, DIMENSION(:) :: BEGS_BLR_ROW, BEGS_BLR_COL,
1099 INTEGER :: NB_ROW_SHIFT, NB_COL_SHIFT, NASS_SHIFT, PANEL2SEND,
1100 & CURRENT_PANEL_SIZE, NB_BLR_ROWS, NB_BLR_COLS,
1101 & CB_IS_LR_INT, NCOL_SHIFT, NROW_SHIFT,
1102 & NBROWS_PACKET_2PACK,
1105 PARAMETER ( IONE=1 )
1106 INCLUDE 'mumps_headers.h
'
1107 DOUBLE PRECISION ZERO
1108 PARAMETER (ZERO = 0.0D0)
1109.EQ.
CB_IS_LR = (IW_CBSON(1+XXLR)1
1110.OR..EQ.
& IW_CBSON(1+XXLR)3)
1116.NE..AND.
COMPUTE_MAX = (KEEP(219) 0)
1117.EQ..AND.
& (KEEP(50) 2)
1118.EQ.
& (PDESTPDEST_MASTER)
1119 IF (NBROWS_ALREADY_SENT == 0) THEN
1120 IF (COMPUTE_MAX) THEN
1121 CALL ZMUMPS_BUF_MAX_ARRAY_MINSIZE(NFS4FATHER,IERR)
1122.NE.
IF (IERR 0) THEN
1130 LROW = IW_CBSON( 1 + KEEP(IXSZ))
1131 NELIM = IW_CBSON( 2 + KEEP(IXSZ))
1132 NPIV = IW_CBSON( 4 + KEEP(IXSZ))
1133.LT.
IF ( NPIV 0 ) THEN
1136 NROW = IW_CBSON( 3 + KEEP(IXSZ))
1137 NFRONT = LROW + NPIV
1138 HS = 6 + IW_CBSON( 6 + KEEP(IXSZ)) + KEEP(IXSZ)
1140 CALL ZMUMPS_BLR_RETRIEVE_CB_LRB(IW_CBSON(1+XXF), CB_LRB)
1141.EQ.
IF (SON_NIV1) THEN
1142 CALL ZMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW_CBSON(1+XXF),
1144 CALL ZMUMPS_BLR_RETRIEVE_BEGSBLR_DYN(IW_CBSON(1+XXF),
1146 NB_BLR_ROWS = size(BEGS_BLR_ROW) - 1
1147 CALL ZMUMPS_BLR_RETRIEVE_NB_PANELS(IW_CBSON(1+XXF),
1149 NB_ROW_SHIFT = NB_COL_SHIFT
1150 NASS_SHIFT = BEGS_BLR_ROW(NB_ROW_SHIFT+1)-1
1151 NPIV_LR = BEGS_BLR_COL(NB_COL_SHIFT+1)-1
1154 CALL ZMUMPS_BLR_RETRIEVE_BEGSBLR_STA(IW_CBSON(1+XXF),
1156 NB_BLR_ROWS = size(BEGS_BLR_STA) - 2
1157 BEGS_BLR_ROW => BEGS_BLR_STA(2:NB_BLR_ROWS+2)
1158 CALL ZMUMPS_BLR_RETRIEVE_BEGS_BLR_C(IW_CBSON(1+XXF),
1159 & BEGS_BLR_COL, NB_COL_SHIFT)
1164 DO I=NB_ROW_SHIFT+1,NB_BLR_ROWS
1165 IF (BEGS_BLR_ROW(I+1)-1-NASS_SHIFT
1166.GT.
& NBROWS_ALREADY_SENT+PERM(1)-1) THEN
1171.EQ.
IF (PANEL2SEND-1) THEN
1172 write(*,*) 'internal error: panel2send not found
'
1175.EQ.
IF (KEEP(50)0) THEN
1176 NB_BLR_COLS = size(BEGS_BLR_COL) - 1
1177.EQ.
ELSEIF (SON_NIV1) THEN
1178 NB_BLR_COLS = PANEL2SEND
1181 NCOL_SHIFT = NPIV_LR
1182 NROW_SHIFT = LROW - NROW
1183 DO I=NB_COL_SHIFT+1,size(BEGS_BLR_COL)-1
1184.GT.
IF (BEGS_BLR_COL(I+1)-NCOL_SHIFT
1185 & BEGS_BLR_ROW(PANEL2SEND+1)-1+NROW_SHIFT) THEN
1190.EQ.
IF (NB_BLR_COLS-1) THEN
1191 write(*,*) 'internal error: nb_blr_cols not found
'
1194 MAX_ROW_LENGTH = BEGS_BLR_ROW(PANEL2SEND+1)-1+NROW_SHIFT
1196 CURRENT_PANEL_SIZE = BEGS_BLR_ROW(PANEL2SEND+1)
1197 & - BEGS_BLR_ROW(PANEL2SEND)
1198 PANEL_BEG_OFFSET = PERM(1) + NBROWS_ALREADY_SENT -
1199 & BEGS_BLR_ROW(PANEL2SEND) + NASS_SHIFT
1201 STATE_SON = IW_CBSON(1+XXS)
1202.EQ.
IF (STATE_SON S_NOLCBCONTIG) THEN
1203 LDA_SON8 = int(LROW,8)
1204 SHIFTCB_SON = int(NPIV,8)*int(NROW,8)
1205.EQ.
ELSE IF (STATE_SON S_NOLCLEANED) THEN
1206 LDA_SON8 = int(LROW,8)
1209 LDA_SON8 = int(NFRONT,8)
1210 SHIFTCB_SON = int(NPIV,8)
1212 CALL ZMUMPS_BUF_SIZE_AVAILABLE( BUF_CB, SIZE_AV )
1213.EQ.
IF (PDEST PDEST_MASTER) THEN
1216 SIZE_DESC_BANDE=(7+SLAVEF+KEEP(127)*2)
1217 SIZE_DESC_BANDE=SIZE_DESC_BANDE+int(dble(KEEP(12))*
1218 & dble(SIZE_DESC_BANDE)/100.0D0)
1219 SIZE_DESC_BANDE=max(SIZE_DESC_BANDE,
1220 & 7+NSLAVES_PERE+NFRONT_PERE+NFRONT_PERE-NASS_PERE)
1222 DESC_BANDE_BYTES=SIZE_DESC_BANDE*SIZEofINT
1223.LT.
IF ( SIZE_AV SIZE_RBUF_BYTES-DESC_BANDE_BYTES ) THEN
1224 RECV_BUF_SMALLER_THAN_SEND = .FALSE.
1226 RECV_BUF_SMALLER_THAN_SEND = .TRUE.
1227 SIZE_AV = SIZE_RBUF_BYTES-DESC_BANDE_BYTES
1230 IF (NBROWS_ALREADY_SENT==0) THEN
1231 IF(COMPUTE_MAX) THEN
1232 CALL MPI_PACK_SIZE(1, MPI_INTEGER,
1233 & COMM, SIZE0, IERR_MPI )
1234.GT.
IF(NFS4FATHER 0) THEN
1235 CALL MPI_PACK_SIZE( NFS4FATHER, MPI_DOUBLE_PRECISION,
1236 & COMM, SIZE1, IERR_MPI )
1241.EQ.
IF (KEEP(50) 0) THEN
1246.EQ.
IF (PDEST PDEST_MASTER) THEN
1248.EQ.
ELSE IF (KEEP(50) 0) THEN
1251 L = LROW + PERM(1) - LMAP + NBROWS_ALREADY_SENT - 1
1256 NBINT = NBINT + 4*(NB_BLR_COLS-NB_COL_SHIFT) + 2
1258 CALL MPI_PACK_SIZE( NBINT, MPI_INTEGER,
1259 & COMM, TMPSIZE, IERR_MPI )
1260 SIZE1 = SIZE1 + TMPSIZE
1261 SIZE_AV = SIZE_AV - SIZE1
1262 NOT_ENOUGH_SPACE=.FALSE.
1263.LT.
IF (SIZE_AV 0 ) THEN
1265 NOT_ENOUGH_SPACE=.TRUE.
1267.EQ.
IF ( KEEP(50) 0 ) THEN
1269 & SIZE_AV / ( ONEorTWO*SIZEofINT+LROW*SIZEofREAL)
1272 & ( 1 + 2 * LROW + 2 * PERM(1) + 2 * NBROWS_ALREADY_SENT )
1273 & * SIZEofREAL / SIZEofINT
1274 NBROWS_PACKET=int((dble(-B)+sqrt((dble(B)*dble(B))+
1275 & dble(4)*dble(2)*dble(SIZE_AV)/dble(SIZEofINT) *
1276 & dble(SIZEofREAL/SIZEofINT)))*
1277 & dble(SIZEofINT) / dble(2) / dble(SIZEofREAL))
1281 NBROWS_PACKET = max( 0, NBROWS_PACKET)
1282 NBROWS_PACKET = min(NBROW-NBROWS_ALREADY_SENT, NBROWS_PACKET)
1283.OR.
NOT_ENOUGH_SPACE = NOT_ENOUGH_SPACE
1284.EQ..AND..NE.
& (NBROWS_PACKET 0 NBROW0)
1285 NBROWS_PACKET_2PACK = NBROWS_PACKET
1287 NBROWS_PACKET_2PACK = CURRENT_PANEL_SIZE
1288 CALL MUMPS_BLR_GET_SIZEREALS_CB_LRB(SIZE_REALS, CB_LRB,
1290 & NB_COL_SHIFT, NB_BLR_COLS, PANEL2SEND
1292.LT.
NOT_ENOUGH_SPACE = (SIZE_AVSIZE_REALS)
1293.NOT.
IF (NOT_ENOUGH_SPACE) THEN
1294 NBROWS_PACKET = min(NBROWS_PACKET,
1295 & CURRENT_PANEL_SIZE-PANEL_BEG_OFFSET)
1298 IF (NOT_ENOUGH_SPACE) THEN
1299 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
1308.EQ.
IF (KEEP(50)0) THEN
1309 MAX_ROW_LENGTH = -99999
1310.EQ.
ELSEIF (SON_NIV1) THEN
1311 MAX_ROW_LENGTH = LROW+PERM(1)-LMAP+NBROWS_ALREADY_SENT
1312 & + NBROWS_PACKET_2PACK-1
1315.EQ.
IF (KEEP(50)0) THEN
1316 MAX_ROW_LENGTH = -99999
1317 SIZE_REALS = NBROWS_PACKET_2PACK * LROW
1319 SIZE_REALS = ( LROW + PERM(1) + NBROWS_ALREADY_SENT ) *
1320 & NBROWS_PACKET_2PACK + ( NBROWS_PACKET_2PACK *
1321 & ( NBROWS_PACKET_2PACK + 1) ) / 2
1322 MAX_ROW_LENGTH = LROW+PERM(1)-LMAP+NBROWS_ALREADY_SENT
1323 & + NBROWS_PACKET_2PACK-1
1326 SIZE_INTEGERS = ONEorTWO* NBROWS_PACKET_2PACK
1327 CALL MPI_PACK_SIZE( SIZE_REALS, MPI_DOUBLE_COMPLEX,
1328 & COMM, SIZE2, IERR_MPI )
1329 CALL MPI_PACK_SIZE( SIZE_INTEGERS, MPI_INTEGER,
1330 & COMM, SIZE3, IERR_MPI )
1331.GT.
IF (SIZE2 + SIZE3 SIZE_AV ) THEN
1332 NBROWS_PACKET = NBROWS_PACKET -1
1333.GT..AND..NOT.
IF (NBROWS_PACKET 0 CB_IS_LR) THEN
1336 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
1345 SIZE_PACK = SIZE1 + SIZE2 + SIZE3
1346.NE..AND.
IF (NBROWS_PACKET + NBROWS_ALREADY_SENTNBROW
1347.LT..AND.
& SIZE_PACK SIZE_RBUF_BYTES / 4
1348.NOT..AND.
& RECV_BUF_SMALLER_THAN_SEND
1354.GT.
IF (SIZE_PACKSIZE_RBUF_BYTES ) THEN
1358 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE_PACK, IERR,
1360.EQ..OR..EQ.
IF (IERR -1 IERR -2) THEN
1361 NBROWS_PACKET = NBROWS_PACKET - 1
1362 IF (NBROWS_PACKET > 0 ) GOTO 10
1364.LT.
IF ( IERR 0 ) GOTO 100
1366 CALL MPI_PACK( IPERE, 1, MPI_INTEGER,
1367 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1368 & POSITION, COMM, IERR_MPI )
1369 CALL MPI_PACK( ISON, 1, MPI_INTEGER,
1370 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1371 & POSITION, COMM, IERR_MPI )
1372 CALL MPI_PACK( NBROW, 1, MPI_INTEGER,
1373 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1374 & POSITION, COMM, IERR_MPI )
1375 IF (KEEP(50)==0) THEN
1376 CALL MPI_PACK( LROW, 1, MPI_INTEGER,
1377 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1378 & POSITION, COMM, IERR_MPI )
1380 CALL MPI_PACK( MAX_ROW_LENGTH, 1, MPI_INTEGER,
1381 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1382 & POSITION, COMM, IERR_MPI )
1384 CALL MPI_PACK( NBROWS_ALREADY_SENT, 1, MPI_INTEGER,
1385 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1386 & POSITION, COMM, IERR_MPI )
1387 CALL MPI_PACK( NBROWS_PACKET, 1, MPI_INTEGER,
1388 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1389 & POSITION, COMM, IERR_MPI )
1390 CALL MPI_PACK( CB_IS_LR_INT, 1, MPI_INTEGER,
1391 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1392 & POSITION, COMM, IERR_MPI )
1393.NE.
IF ( PDEST PDEST_MASTER ) THEN
1394 IF (KEEP(50)==0) THEN
1395 CALL MPI_PACK( IW_CBSON( HS + NROW + NPIV + 1 ), LROW,
1397 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1398 & POSITION, COMM, IERR_MPI )
1400 IF (MAX_ROW_LENGTH > 0) THEN
1401 CALL MPI_PACK( IW_CBSON( HS + NROW + NPIV + 1 ),
1404 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1405 & POSITION, COMM, IERR_MPI )
1409 DO J=NBROWS_ALREADY_SENT+1,NBROWS_ALREADY_SENT+NBROWS_PACKET
1411 INDICE_PERE=MAPROW(I)
1412 CALL MUMPS_BLOC2_GET_ISLAVE(
1413 & KEEP,KEEP8, IPERE, STEP, N, SLAVEF,
1414 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1417 & NFRONT_PERE - NASS_PERE,
1422 INDICE_PERE = IPOS_IN_SLAVE
1423 CALL MPI_PACK( INDICE_PERE, 1, MPI_INTEGER,
1424 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1425 & POSITION, COMM, IERR_MPI )
1428 CALL ZMUMPS_BLR_PACK_CB_LRB(CB_LRB, NB_ROW_SHIFT,
1429 & NB_COL_SHIFT, NB_BLR_COLS, PANEL2SEND,
1431 & BUF_CB%CONTENT(IPOS:),
1432 & SIZE_PACK, POSITION, COMM, IERR
1434.ne.
IF (KEEP(50)0) THEN
1435 DO J=NBROWS_ALREADY_SENT+1,NBROWS_ALREADY_SENT+NBROWS_PACKET
1437 THIS_ROW_LENGTH = LROW + I - LMAP
1438 CALL MPI_PACK( THIS_ROW_LENGTH, 1, MPI_INTEGER,
1439 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1440 & POSITION, COMM, IERR_MPI )
1445 DO J=NBROWS_ALREADY_SENT+1,NBROWS_ALREADY_SENT+NBROWS_PACKET
1447 INDICE_PERE=MAPROW(I)
1448 CALL MUMPS_BLOC2_GET_ISLAVE(
1449 & KEEP,KEEP8, IPERE, STEP, N, SLAVEF,
1450 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1453 & NFRONT_PERE - NASS_PERE,
1458.ne.
IF (KEEP(50)0) THEN
1459 THIS_ROW_LENGTH = LROW + I - LMAP
1460 CALL MPI_PACK( THIS_ROW_LENGTH, 1, MPI_INTEGER,
1461 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1462 & POSITION, COMM, IERR_MPI )
1464 THIS_ROW_LENGTH = LROW
1466 IF (DESC_IN_LU) THEN
1467 IF ( PACKED_CB ) THEN
1468.EQ.
IF (NELIM0) THEN
1471 ITMP8 = int(NELIM+I,8)
1473 APOS = ITMP8 * (ITMP8-1_8) / 2_8 + 1_8
1475 APOS = int(I+NELIM-1, 8) * int(LROW,8) + 1_8
1478 IF ( PACKED_CB ) THEN
1479.EQ.
IF ( LROW NROW ) THEN
1481 APOS = ITMP8 * (ITMP8-1_8)/2_8 + 1_8
1483 ITMP8 = int(I + LROW - NROW,8)
1484 APOS = ITMP8 * (ITMP8-1_8)/2_8 + 1_8 -
1485 & int(LROW - NROW, 8) * int(LROW-NROW+1,8) / 2_8
1488 APOS = int( I - 1, 8 ) * LDA_SON8 + SHIFTCB_SON + 1_8
1491 CALL MPI_PACK( A_CBSON( APOS ), THIS_ROW_LENGTH,
1492 & MPI_DOUBLE_COMPLEX,
1493 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1494 & POSITION, COMM, IERR_MPI )
1497 IF (NBROWS_ALREADY_SENT == 0) THEN
1498 IF (COMPUTE_MAX) THEN
1499 CALL MPI_PACK(NFS4FATHER,1,
1501 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1502 & POSITION, COMM, IERR_MPI )
1503.GT.
IF (NFS4FATHER 0) THEN
1505 CALL ZMUMPS_BLR_RETRIEVE_M_ARRAY (
1506 & IW_CBSON(1+XXF), M_ARRAY)
1507 CALL MPI_PACK(M_ARRAY(1), NFS4FATHER,
1508 & MPI_DOUBLE_PRECISION,
1509 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1510 & POSITION, COMM, IERR_MPI )
1511 CALL ZMUMPS_BLR_FREE_M_ARRAY ( IW_CBSON(1+XXF) )
1513 BUF_MAX_ARRAY(1:NFS4FATHER) = ZERO
1514.GT.
IF(MAPROW(NROW) NASS_PERE) THEN
1516.GT.
IF(MAPROW(PS1)NASS_PERE) EXIT
1518 IF (DESC_IN_LU) THEN
1520 APOS = int(NELIM+PS1,8) * int(NELIM+PS1-1,8) /
1523 ASIZE = int(NROW,8) * int(NROW+1,8)/2_8 -
1524 & int(NELIM+PS1,8) * int(NELIM+PS1-1,8)/2_8
1527 APOS = int(PS1+NELIM-1,8) * int(LROW,8) + 1_8
1529 ASIZE = int(NCA,8) * int(NROW-PS1+1,8)
1535 WRITE(*,*) "Error in PARPIV/ZMUMPS_BUF_SEND_CONTRIB_TYPE2"
1539 ITMP8 = int(PS1 + LROW - NROW,8)
1540 APOS = ITMP8 * (ITMP8 - 1_8) / 2_8 + 1_8 -
1541 & int(LROW-NROW,8)*int(LROW-NROW+1,8)/2_8
1542 ASIZE = int(LROW,8)*int(LROW+1,8)/2_8 -
1543 & ITMP8*(ITMP8-1_8)/2_8
1546 APOS = int(PS1-1,8) * LDA_SON8 + 1_8 + SHIFTCB_SON
1548 ASIZE = LA_CBSON - APOS + 1_8
1552.GT.
IF ( NROW-PS1+1-KEEP253_LOC-NVSCHUR 0 ) THEN
1553 CALL ZMUMPS_COMPUTE_MAXPERCOL(
1554 & A_CBSON(APOS),ASIZE,NCA,
1555 & NROW-PS1+1-KEEP253_LOC-NVSCHUR,
1556 & BUF_MAX_ARRAY,NFS4FATHER,PACKED_CB,LROW1)
1559 CALL MPI_PACK(BUF_MAX_ARRAY, NFS4FATHER,
1560 & MPI_DOUBLE_PRECISION,
1561 & BUF_CB%CONTENT( IPOS ), SIZE_PACK,
1562 & POSITION, COMM, IERR_MPI )
1567 KEEP(266)=KEEP(266)+1
1568 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), POSITION, MPI_PACKED,
1569 & PDEST, CONTRIB_TYPE2, COMM,
1570 & BUF_CB%CONTENT( IREQ ), IERR_MPI )
1571.LT.
IF ( SIZE_PACK POSITION ) THEN
1572 WRITE(*,*) ' contniv2:
SIZE, position =
',SIZE_PACK, POSITION
1573 WRITE(*,*) ' nbrow, lrow =
', NBROW, LROW
1576.NE.
IF ( SIZE_PACK POSITION )
1577 & CALL BUF_ADJUST( BUF_CB, POSITION )
1578 NBROWS_ALREADY_SENT=NBROWS_ALREADY_SENT + NBROWS_PACKET
1579.NE.
IF (NBROWS_ALREADY_SENT NBROW ) THEN
1584 END SUBROUTINE ZMUMPS_BUF_SEND_CONTRIB_TYPE2
1585 SUBROUTINE MUMPS_BLR_GET_SIZEREALS_CB_LRB(SIZE_OUT,
1586 & CB_LRB, NB_ROW_SHIFT, NB_COL_SHIFT, NB_BLR_COLS,
1591 TYPE(LRB_TYPE), POINTER :: CB_LRB(:,:)
1592 INTEGER, INTENT(IN) :: NB_ROW_SHIFT, NB_COL_SHIFT, NB_BLR_COLS,
1594 INTEGER, intent(out) :: SIZE_OUT
1596 TYPE(LRB_TYPE), POINTER :: LRB
1598 DO J=1,NB_BLR_COLS-NB_COL_SHIFT
1599 LRB => CB_LRB(PANEL2SEND-NB_ROW_SHIFT,J)
1601.GT.
IF (LRB%K0) THEN
1602 SIZE_OUT = SIZE_OUT + LRB%K*(LRB%M+LRB%N)
1605 SIZE_OUT = SIZE_OUT + LRB%M*LRB%N
1609 END SUBROUTINE MUMPS_BLR_GET_SIZEREALS_CB_LRB
1610 SUBROUTINE ZMUMPS_BLR_PACK_CB_LRB(
1611 & CB_LRB, NB_ROW_SHIFT, NB_COL_SHIFT, NB_BLR_COLS,
1612 & PANEL2SEND, PANEL_BEG_OFFSET,
1613 & BUF, LBUF, POSITION, COMM, IERR
1617 TYPE(LRB_TYPE), POINTER :: CB_LRB(:,:)
1618 INTEGER, INTENT(IN) :: NB_ROW_SHIFT, NB_COL_SHIFT, NB_BLR_COLS,
1619 & PANEL2SEND, PANEL_BEG_OFFSET
1620 INTEGER, intent(out) :: IERR
1621 INTEGER, intent(in) :: COMM, LBUF
1622 INTEGER, intent(inout) :: POSITION
1623 INTEGER, intent(inout) :: BUF(:)
1624 INTEGER :: J, IERR_MPI
1627 CALL MPI_PACK( NB_BLR_COLS-NB_COL_SHIFT, 1, MPI_INTEGER,
1628 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
1629 CALL MPI_PACK( PANEL_BEG_OFFSET, 1, MPI_INTEGER,
1630 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
1631 DO J=1,NB_BLR_COLS-NB_COL_SHIFT
1632 CALL ZMUMPS_MPI_PACK_LRB(
1633 & CB_LRB(PANEL2SEND-NB_ROW_SHIFT,J),
1634 & BUF, LBUF, POSITION, COMM, IERR
1637 END SUBROUTINE ZMUMPS_BLR_PACK_CB_LRB
1638 SUBROUTINE ZMUMPS_BUF_SEND_MAPLIG(
1639 & INODE, NFRONT, NASS1, NFS4FATHER,
1640 & ISON, MYID, NSLAVES, SLAVES_PERE,
1643 & DEST, NDEST, SLAVEF,
1645 & KEEP,KEEP8, STEP, N,
1646 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
1650 INTEGER INODE, NFRONT, NASS1, NCBSON, NSLAVES,
1652 INTEGER SLAVEF, MYID, ISON
1653 INTEGER TROW( NCBSON )
1654 INTEGER DEST( NDEST )
1655 INTEGER SLAVES_PERE( NSLAVES )
1657 INTEGER KEEP(500), N
1658 INTEGER(8) KEEP8(150)
1660 & ISTEP_TO_INIV2(KEEP(71)),
1661 & TAB_POS_IN_PERE(SLAVEF+2,max(1,KEEP(56)))
1663 INCLUDE 'mumps_tags.h
'
1665 INTEGER SIZE_AV, IDEST, NSEND, SIZE, NFS4FATHER
1666 INTEGER TROW_SIZE, POSITION, INDX, INIV2
1669 PARAMETER ( IONE=1 )
1673.eq.
IF ( NDEST 1 ) THEN
1674.EQ.
IF ( DEST(1)MYID ) GOTO 500
1675 SIZE = SIZEofINT * ( 7 + NSLAVES + NCBSON )
1676.GT.
IF ( NSLAVES0 ) THEN
1677 SIZE = SIZE + SIZEofINT * ( NSLAVES + 1 )
1679.GT.
IF (SIZESIZE_RBUF_BYTES ) THEN
1683 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE, IERR,
1686.LT.
IF (IERR 0 ) THEN
1690 BUF_CB%CONTENT( POSITION ) = INODE
1691 POSITION = POSITION + 1
1692 BUF_CB%CONTENT( POSITION ) = ISON
1693 POSITION = POSITION + 1
1694 BUF_CB%CONTENT( POSITION ) = NSLAVES
1695 POSITION = POSITION + 1
1696 BUF_CB%CONTENT( POSITION ) = NFRONT
1697 POSITION = POSITION + 1
1698 BUF_CB%CONTENT( POSITION ) = NASS1
1699 POSITION = POSITION + 1
1700 BUF_CB%CONTENT( POSITION ) = NCBSON
1701 POSITION = POSITION + 1
1702 BUF_CB%CONTENT( POSITION ) = NFS4FATHER
1703 POSITION = POSITION + 1
1704.GT.
IF ( NSLAVES0 ) THEN
1705 INIV2 = ISTEP_TO_INIV2 ( STEP(INODE) )
1706 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES )
1707 & = TAB_POS_IN_PERE(1:NSLAVES+1,INIV2)
1708 POSITION = POSITION + NSLAVES + 1
1710.NE.
IF ( NSLAVES 0 ) THEN
1711 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES - 1 )
1712 & = SLAVES_PERE( 1: NSLAVES )
1713 POSITION = POSITION + NSLAVES
1715 BUF_CB%CONTENT( POSITION:POSITION+NCBSON-1 ) =
1717 POSITION = POSITION + NCBSON
1718 POSITION = POSITION - IPOS
1719.NE.
IF ( POSITION * SIZEofINT SIZE ) THEN
1721 & ' wrong estimated size
'
1724 KEEP(266)=KEEP(266)+1
1725 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), SIZE,
1727 & DEST( NDEST ), MAPLIG, COMM,
1728 & BUF_CB%CONTENT( IREQ ),
1733.ne.
IF ( DEST( IDEST ) MYID ) NSEND = NSEND + 1
1736 & ( ( OVHSIZE + 7 + NSLAVES )* NSEND + NCBSON )
1737.GT.
IF ( NSLAVES0 ) THEN
1738 SIZE = SIZE + SIZEofINT * NSEND*( NSLAVES + 1 )
1740 CALL ZMUMPS_BUF_SIZE_AVAILABLE( BUF_CB, SIZE_AV )
1741.LT.
IF ( SIZE_AV SIZE ) THEN
1746 CALL MUMPS_BLOC2_GET_SLAVE_INFO(
1747 & KEEP,KEEP8, ISON, STEP, N, SLAVEF,
1748 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
1752 SIZE = SIZEofINT * ( NSLAVES + TROW_SIZE + 7 )
1753.GT.
IF ( NSLAVES0 ) THEN
1754 SIZE = SIZE + SIZEofINT * ( NSLAVES + 1 )
1756.NE.
IF ( MYID DEST( IDEST ) ) THEN
1757.GT.
IF (SIZESIZE_RBUF_BYTES) THEN
1761 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE, IERR,
1762 & IONE, DEST(IDEST) )
1763.LT.
IF ( IERR 0 ) THEN
1769 BUF_CB%CONTENT( POSITION ) = INODE
1770 POSITION = POSITION + 1
1771 BUF_CB%CONTENT( POSITION ) = ISON
1772 POSITION = POSITION + 1
1773 BUF_CB%CONTENT( POSITION ) = NSLAVES
1774 POSITION = POSITION + 1
1775 BUF_CB%CONTENT( POSITION ) = NFRONT
1776 POSITION = POSITION + 1
1777 BUF_CB%CONTENT( POSITION ) = NASS1
1778 POSITION = POSITION + 1
1779 BUF_CB%CONTENT( POSITION ) = TROW_SIZE
1780 POSITION = POSITION + 1
1781 BUF_CB%CONTENT( POSITION ) = NFS4FATHER
1782 POSITION = POSITION + 1
1783.GT.
IF ( NSLAVES0 ) THEN
1784 INIV2 = ISTEP_TO_INIV2 ( STEP(INODE) )
1785 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES )
1786 & = TAB_POS_IN_PERE(1:NSLAVES+1,INIV2)
1787 POSITION = POSITION + NSLAVES + 1
1789.NE.
IF ( NSLAVES 0 ) THEN
1790 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES - 1 )
1791 & = SLAVES_PERE( 1: NSLAVES )
1792 POSITION = POSITION + NSLAVES
1794 BUF_CB%CONTENT( POSITION:POSITION+TROW_SIZE-1 ) =
1795 & TROW( INDX: INDX + TROW_SIZE - 1 )
1796 POSITION = POSITION + TROW_SIZE
1797 POSITION = POSITION - IPOS
1798.NE.
IF ( POSITION * SIZEofINT SIZE ) THEN
1799 WRITE(*,*) ' error 1 in try_send_maplig:
',
1800 & 'wrong estimated size
'
1803 KEEP(266)=KEEP(266)+1
1804 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), SIZE,
1806 & DEST( IDEST ), MAPLIG, COMM,
1807 & BUF_CB%CONTENT( IREQ ),
1814 END SUBROUTINE ZMUMPS_BUF_SEND_MAPLIG
1815 SUBROUTINE ZMUMPS_BUF_SEND_BLOCFACTO( INODE, NFRONT,
1816 & NCOL, NPIV, FPERE, LASTBL, IPIV, VAL,
1817 & PDEST, NDEST, KEEP, NB_BLOC_FAC,
1820 & NELIM, NPARTSASS, CURRENT_BLR_PANEL,
1821 & LR_ACTIVATED, BLR_LorU,
1826 INTEGER, intent(in) :: INODE, NCOL, NPIV,
1827 & FPERE, NFRONT, NDEST
1828 INTEGER, intent(in) :: IPIV( NPIV )
1829 COMPLEX(kind=8), intent(in) :: VAL( NFRONT, * )
1830 INTEGER, intent(in) :: PDEST( NDEST )
1831 INTEGER, intent(inout) :: KEEP(500)
1832 INTEGER, intent(in) :: NB_BLOC_FAC,
1833 & NSLAVES_TOT, COMM, WIDTH
1834 LOGICAL, intent(in) :: LASTBL
1835 LOGICAL, intent(in) :: LR_ACTIVATED
1836 INTEGER, intent(in) :: NELIM, NPARTSASS, CURRENT_BLR_PANEL
1837 TYPE (LRB_TYPE), DIMENSION(:), intent(in) :: BLR_LorU
1838 INTEGER, intent(inout) :: IERR
1840 INCLUDE 'mumps_tags.h
'
1842 INTEGER POSITION, IREQ, IPOS, SIZE1, SIZE2, SIZE3, SIZET,
1847 INTEGER :: LRELAY_INFO, DEST_BLOCFACTO, TAG_BLOCFACTO
1848 INTEGER :: LR_ACTIVATED_INT
1853.eq.
IF ( KEEP(50) 0 ) THEN
1854 CALL MPI_PACK_SIZE( 4 + NPIV + ( NBMSGS - 1 ) * OVHSIZE +
1856 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
1858 CALL MPI_PACK_SIZE( 6 + NPIV + ( NBMSGS - 1 ) * OVHSIZE +
1860 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
1863.eq.
IF ( KEEP(50) 0 ) THEN
1864 CALL MPI_PACK_SIZE( 3 + NPIV + ( NBMSGS - 1 ) * OVHSIZE +
1866 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
1868 CALL MPI_PACK_SIZE( 4 + NPIV + ( NBMSGS - 1 ) * OVHSIZE +
1870 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
1874 CALL MPI_PACK_SIZE( 4, MPI_INTEGER, COMM, SIZE3, IERR_MPI )
1876.NE.
IF ( KEEP(50)0 ) THEN
1877 CALL MPI_PACK_SIZE( 1, MPI_INTEGER, COMM, SIZE3, IERR_MPI )
1882.NOT.
IF ( LR_ACTIVATED) THEN
1883 CALL MPI_PACK_SIZE( NPIV*NCOL, MPI_DOUBLE_COMPLEX,
1884 & COMM, SIZE3, IERR_MPI )
1887 CALL MPI_PACK_SIZE( NPIV*(NPIV+NELIM), MPI_DOUBLE_COMPLEX,
1888 & COMM, SIZE3, IERR_MPI )
1890 CALL MUMPS_MPI_PACK_SIZE_LR( BLR_LorU, SIZE3, COMM, IERR )
1894 SIZET = SIZE1 + SIZE2
1895.GT.
IF (SIZETSIZE_RBUF_BYTES) THEN
1898.eq.
IF ( KEEP(50) 0 ) THEN
1899 CALL MPI_PACK_SIZE( 4 + NPIV + 1+LRELAY_INFO,
1900 & MPI_INTEGER, COMM, SSS, IERR_MPI )
1902 CALL MPI_PACK_SIZE( 6 + NPIV + 1+LRELAY_INFO,
1903 & MPI_INTEGER, COMM, SSS, IERR_MPI )
1906.eq.
IF ( KEEP(50) 0 ) THEN
1907 CALL MPI_PACK_SIZE( 3 + NPIV + 1+LRELAY_INFO,
1908 & MPI_INTEGER, COMM, SSS, IERR_MPI )
1910 CALL MPI_PACK_SIZE( 4 + NPIV + 1+LRELAY_INFO,
1911 & MPI_INTEGER, COMM, SSS, IERR_MPI )
1915.GT.
IF (SSSSIZE_RBUF_BYTES) THEN
1920 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZET, IERR,
1922.LT.
IF ( IERR 0 ) THEN
1925 BUF_CB%ILASTMSG = BUF_CB%ILASTMSG + ( NBMSGS - 1 ) * OVHSIZE
1926 IPOS = IPOS - OVHSIZE
1927 DO IDEST = 1, NBMSGS - 1
1928 BUF_CB%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
1929 & IPOS + IDEST * OVHSIZE
1931 BUF_CB%CONTENT( IPOS + ( NBMSGS - 1 ) * OVHSIZE ) = 0
1932 IPOSMSG = IPOS + OVHSIZE * NBMSGS
1934 CALL MPI_PACK( INODE, 1, MPI_INTEGER,
1935 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1936 & POSITION, COMM, IERR_MPI )
1938 IF (LASTBL) NPIVSENT = -NPIV
1939 CALL MPI_PACK( NPIVSENT, 1, MPI_INTEGER,
1940 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1941 & POSITION, COMM, IERR_MPI )
1942.or..ne.
IF ( LASTBL KEEP(50)0 ) THEN
1943 CALL MPI_PACK( FPERE, 1, MPI_INTEGER,
1944 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1945 & POSITION, COMM, IERR_MPI )
1947.AND..NE.
IF ( LASTBL KEEP(50) 0 ) THEN
1948 CALL MPI_PACK( NSLAVES_TOT, 1, MPI_INTEGER,
1949 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1950 & POSITION, COMM, IERR_MPI )
1951 CALL MPI_PACK( NB_BLOC_FAC, 1, MPI_INTEGER,
1952 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1953 & POSITION, COMM, IERR_MPI )
1955 CALL MPI_PACK( NCOL, 1, MPI_INTEGER,
1956 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1957 & POSITION, COMM, IERR_MPI )
1958 CALL MPI_PACK( NELIM, 1, MPI_INTEGER,
1959 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1960 & POSITION, COMM, IERR_MPI )
1961 CALL MPI_PACK( NPARTSASS, 1, MPI_INTEGER,
1962 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1963 & POSITION, COMM, IERR_MPI )
1964 CALL MPI_PACK( CURRENT_BLR_PANEL, 1, MPI_INTEGER,
1965 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1966 & POSITION, COMM, IERR_MPI )
1967 IF (LR_ACTIVATED) THEN
1968 LR_ACTIVATED_INT = 1
1970 LR_ACTIVATED_INT = 0
1972 CALL MPI_PACK( LR_ACTIVATED_INT, 1, MPI_INTEGER,
1973 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1974 & POSITION, COMM, IERR_MPI )
1975.ne.
IF ( KEEP(50) 0 ) THEN
1976 CALL MPI_PACK( NSLAVES_TOT, 1, MPI_INTEGER,
1977 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1978 & POSITION, COMM, IERR_MPI )
1983 CALL MPI_PACK( IPIV, NPIV, MPI_INTEGER,
1984 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1985 & POSITION, COMM, IERR_MPI )
1987 IF (LR_ACTIVATED) THEN
1989 CALL MPI_PACK( VAL(1,I), NPIV+NELIM,
1990 & MPI_DOUBLE_COMPLEX,
1991 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
1992 & POSITION, COMM, IERR_MPI )
1994 CALL ZMUMPS_MPI_PACK_LR( BLR_LorU,
1995 & BUF_CB%CONTENT(IPOSMSG:
1996 & IPOSMSG+(SIZET+KEEP(34)-1)/KEEP(34)-1),
1997 & SIZET, POSITION, COMM, IERR)
2000 CALL MPI_PACK( VAL(1,I), NCOL,
2001 & MPI_DOUBLE_COMPLEX,
2002 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2003 & POSITION, COMM, IERR_MPI )
2007 CALL MPI_PACK( LRELAY_INFO, 1, MPI_INTEGER,
2008 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2009 & POSITION, COMM, IERR_MPI )
2010 DO IDEST = 1, NBMSGS
2011 DEST_BLOCFACTO = PDEST(IDEST)
2012.EQ.
IF ( KEEP(50) 0) THEN
2013 TAG_BLOCFACTO = BLOC_FACTO
2014 KEEP(266)=KEEP(266)+1
2015 CALL MPI_ISEND( BUF_CB%CONTENT( IPOSMSG ), POSITION,
2017 & DEST_BLOCFACTO, TAG_BLOCFACTO, COMM,
2018 & BUF_CB%CONTENT( IREQ + ( IDEST-1 ) * OVHSIZE ),
2021 KEEP(266)=KEEP(266)+1
2022 CALL MPI_ISEND( BUF_CB%CONTENT( IPOSMSG ), POSITION,
2024 & DEST_BLOCFACTO, BLOC_FACTO_SYM, COMM,
2025 & BUF_CB%CONTENT( IREQ + ( IDEST-1 ) * OVHSIZE ),
2029 SIZET = SIZET - ( NBMSGS - 1 ) * OVHSIZE * SIZEofINT
2030.LT.
IF ( SIZET POSITION ) THEN
2031 WRITE(*,*) ' error sending blocfacto :
size < position
'
2032 WRITE(*,*) ' Size,position=
',SIZET,POSITION
2035.NE.
IF ( SIZET POSITION ) CALL BUF_ADJUST( BUF_CB, POSITION )
2037 END SUBROUTINE ZMUMPS_BUF_SEND_BLOCFACTO
2038 SUBROUTINE ZMUMPS_BUF_SEND_BLFAC_SLAVE( INODE,
2039 & NPIV, FPERE, IPOSK, JPOSK, UIP21K, NCOLU,
2040 & NDEST, PDEST, COMM, KEEP,
2041 & LR_ACTIVATED, BLR_LS, IPANEL,
2042 & A , LA, POSBLOCFACTO, LD_BLOCFACTO,
2043 & IPIV, MAXI_CLUSTER, IERR )
2046 INTEGER INODE, NCOLU, IPOSK, JPOSK, NPIV, NDEST, FPERE
2047 COMPLEX(kind=8) UIP21K( NPIV, * )
2048 INTEGER PDEST( NDEST )
2050 INTEGER, INTENT(INOUT) :: KEEP(500)
2051 LOGICAL, intent(in) :: LR_ACTIVATED
2052 TYPE (LRB_TYPE), DIMENSION(:), POINTER :: BLR_LS
2053 INTEGER(8), intent(in) :: LA, POSBLOCFACTO
2054 INTEGER, intent(in) :: LD_BLOCFACTO, IPIV(NPIV),
2055 & MAXI_CLUSTER, IPANEL
2056 COMPLEX(kind=8), intent(inout) :: A(LA)
2058 INCLUDE 'mumps_tags.h
'
2060 INTEGER LR_ACTIVATED_INT
2061 INTEGER POSITION, IREQ, IPOS, SIZE1, SIZE2, SIZET,
2062 & IDEST, IPOSMSG, SSS, SSLR
2064 CALL MPI_PACK_SIZE( 6 + ( NDEST - 1 ) * OVHSIZE,
2065 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
2067 CALL MPI_PACK_SIZE(2, MPI_INTEGER, COMM, SSLR, IERR_MPI )
2069.NOT.
IF ( LR_ACTIVATED) THEN
2070 CALL MPI_PACK_SIZE( abs(NPIV)*NCOLU, MPI_DOUBLE_COMPLEX,
2071 & COMM, SSLR, IERR_MPI )
2074 CALL MUMPS_MPI_PACK_SIZE_LR( BLR_LS, SSLR, COMM, IERR )
2077 SIZET = SIZE1 + SIZE2
2078.GT.
IF (SIZETSIZE_RBUF_BYTES) THEN
2079 CALL MPI_PACK_SIZE( 6 ,
2080 & MPI_INTEGER, COMM, SSS, IERR_MPI )
2082.GT.
IF (SSSSIZE_RBUF_BYTES) THEN
2087 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZET, IERR,
2089.LT.
IF ( IERR 0 ) THEN
2092 BUF_CB%ILASTMSG = BUF_CB%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
2093 IPOS = IPOS - OVHSIZE
2094 DO IDEST = 1, NDEST - 1
2095 BUF_CB%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
2096 & IPOS + IDEST * OVHSIZE
2098 BUF_CB%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
2099 IPOSMSG = IPOS + OVHSIZE * NDEST
2101 CALL MPI_PACK( INODE, 1, MPI_INTEGER,
2102 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2103 & POSITION, COMM, IERR_MPI )
2104 CALL MPI_PACK( IPOSK, 1, MPI_INTEGER,
2105 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2106 & POSITION, COMM, IERR_MPI )
2107 CALL MPI_PACK( JPOSK, 1, MPI_INTEGER,
2108 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2109 & POSITION, COMM, IERR_MPI )
2110 CALL MPI_PACK( NPIV, 1, MPI_INTEGER,
2111 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2112 & POSITION, COMM, IERR_MPI )
2113 CALL MPI_PACK( FPERE, 1, MPI_INTEGER,
2114 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2115 & POSITION, COMM, IERR_MPI )
2116 CALL MPI_PACK( NCOLU, 1, MPI_INTEGER,
2117 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2118 & POSITION, COMM, IERR_MPI )
2119 IF (LR_ACTIVATED) THEN
2120 LR_ACTIVATED_INT = 1
2122 LR_ACTIVATED_INT = 0
2124 CALL MPI_PACK( LR_ACTIVATED_INT, 1, MPI_INTEGER,
2125 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2126 & POSITION, COMM, IERR_MPI )
2127 CALL MPI_PACK( IPANEL, 1, MPI_INTEGER,
2128 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2129 & POSITION, COMM, IERR_MPI )
2130 IF (LR_ACTIVATED) THEN
2131 CALL MUMPS_MPI_PACK_SCALE_LR( BLR_LS,
2132 & BUF_CB%CONTENT( IPOSMSG:
2133 & IPOSMSG+(SIZET+KEEP(34)-1)/KEEP(34)-1 ),
2134 & SIZET, POSITION, COMM,
2135 & A, LA, POSBLOCFACTO, LD_BLOCFACTO,
2136 & IPIV, NPIV, MAXI_CLUSTER, IERR )
2138 CALL MPI_PACK( UIP21K, abs(NPIV) * NCOLU,
2139 & MPI_DOUBLE_COMPLEX,
2140 & BUF_CB%CONTENT( IPOSMSG ), SIZET,
2141 & POSITION, COMM, IERR_MPI )
2144 KEEP(266)=KEEP(266)+1
2145 CALL MPI_ISEND( BUF_CB%CONTENT( IPOSMSG ), POSITION, MPI_PACKED,
2146 & PDEST(IDEST), BLOC_FACTO_SYM_SLAVE, COMM,
2147 & BUF_CB%CONTENT( IREQ + ( IDEST-1 ) * OVHSIZE ),
2150 SIZET = SIZET - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
2151.LT.
IF ( SIZET POSITION ) THEN
2152 WRITE(*,*) ' error sending blfac slave :
size < position
'
2153 WRITE(*,*) ' Size,position=
',SIZET,POSITION
2156.NE.
IF ( SIZET POSITION ) CALL BUF_ADJUST( BUF_CB, POSITION )
2158 END SUBROUTINE ZMUMPS_BUF_SEND_BLFAC_SLAVE
2159 SUBROUTINE ZMUMPS_BUF_SEND_CONTRIB_TYPE3( N, ISON,
2160 & NBCOL_SON, NBROW_SON, INDCOL_SON, INDROW_SON,
2161 & LD_SON, VAL_SON, TAG, SUBSET_ROW, SUBSET_COL,
2162 & NSUBSET_ROW, NSUBSET_COL,
2164 & NPROW, NPCOL, MBLOCK, RG2L_ROW, RG2L_COL,
2165 & NBLOCK, PDEST, COMM, IERR ,
2166 & TAB, TABSIZE, TRANSP, SIZE_PACK,
2167 & N_ALREADY_SENT, KEEP, BBPCBP )
2169 INTEGER N, ISON, NBCOL_SON, NBROW_SON, NSUBSET_ROW, NSUBSET_COL
2170 INTEGER NPROW, NPCOL, MBLOCK, NBLOCK, LD_SON
2172 INTEGER PDEST, TAG, COMM, IERR
2173 INTEGER INDCOL_SON( NBCOL_SON ), INDROW_SON( NBROW_SON )
2174 INTEGER SUBSET_ROW( NSUBSET_ROW ), SUBSET_COL( NSUBSET_COL )
2175 INTEGER :: RG2L_ROW(N)
2176 INTEGER :: RG2L_COL(N)
2177 INTEGER NSUPROW, NSUPCOL
2178 INTEGER(8), INTENT(IN) :: TABSIZE
2181 COMPLEX(kind=8) VAL_SON( LD_SON, * ), TAB(*)
2183 INTEGER N_ALREADY_SENT
2186 INTEGER SIZE1, SIZE2, SIZE_AV, POSITION
2187 INTEGER SIZE_CBP, SIZE_TMP
2188 INTEGER IREQ, IPOS, ITAB
2189 INTEGER ISUB, JSUB, I, J
2190 INTEGER ILOC_ROOT, JLOC_ROOT
2191 INTEGER IPOS_ROOT, JPOS_ROOT
2193 LOGICAL RECV_BUF_SMALLER_THAN_SEND
2195 PARAMETER ( IONE=1 )
2197 INTEGER NSUBSET_ROW_EFF, NSUBSET_COL_EFF, NSUPCOL_EFF
2200.NE.
IF ( NSUBSET_ROW * NSUBSET_COL 0 ) THEN
2201 CALL ZMUMPS_BUF_SIZE_AVAILABLE( BUF_CB, SIZE_AV )
2202.LT.
IF (SIZE_AV SIZE_RBUF_BYTES) THEN
2203 RECV_BUF_SMALLER_THAN_SEND = .FALSE.
2205 RECV_BUF_SMALLER_THAN_SEND = .TRUE.
2206 SIZE_AV = SIZE_RBUF_BYTES
2208 SIZE_AV = min(SIZE_AV, SIZE_RBUF_BYTES)
2209 CALL MPI_PACK_SIZE(8 + NSUBSET_COL,
2210 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
2212.EQ..AND.
IF (N_ALREADY_SENT 0
2213.GT.
& min(NSUPROW,NSUPCOL) 0) THEN
2214 CALL MPI_PACK_SIZE(NSUPROW, MPI_INTEGER, COMM,
2215 & SIZE_CBP, IERR_MPI )
2216 CALL MPI_PACK_SIZE(NSUPCOL, MPI_INTEGER, COMM,
2217 & SIZE_TMP, IERR_MPI )
2218 SIZE_CBP = SIZE_CBP + SIZE_TMP
2219 CALL MPI_PACK_SIZE(NSUPROW*NSUPCOL,
2220 & MPI_DOUBLE_COMPLEX, COMM,
2221 & SIZE_TMP, IERR_MPI )
2222 SIZE_CBP = SIZE_CBP + SIZE_TMP
2223 SIZE1 = SIZE1 + SIZE_CBP
2225.EQ.
IF (BBPCBP1) THEN
2226 NSUBSET_COL_EFF = NSUBSET_COL - NSUPCOL
2229 NSUBSET_COL_EFF = NSUBSET_COL
2230 NSUPCOL_EFF = NSUPCOL
2232 NSUBSET_ROW_EFF = NSUBSET_ROW - NSUPROW
2234 & (SIZE_AV - SIZE1) / (SIZEofINT + NSUBSET_COL_EFF * SIZEofREAL)
2236 N_PACKET = min( N_PACKET,
2237 & NSUBSET_ROW_EFF-N_ALREADY_SENT )
2238.LE..AND.
IF (N_PACKET 0
2239.GT.
& NSUBSET_ROW_EFF-N_ALREADY_SENT0) THEN
2240 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
2248 CALL MPI_PACK_SIZE( 8 + NSUBSET_COL_EFF + N_PACKET,
2249 & MPI_INTEGER, COMM, SIZE1, IERR_MPI )
2250 SIZE1 = SIZE1 + SIZE_CBP
2251 CALL MPI_PACK_SIZE( N_PACKET * NSUBSET_COL_EFF,
2252 & MPI_DOUBLE_COMPLEX,
2253 & COMM, SIZE2, IERR_MPI )
2254 SIZE_PACK = SIZE1 + SIZE2
2255.GT.
IF (SIZE_PACK SIZE_AV) THEN
2256 N_PACKET = N_PACKET - 1
2257 IF ( N_PACKET > 0 ) THEN
2260 IF (RECV_BUF_SMALLER_THAN_SEND) THEN
2269.NE.
IF (N_PACKET + N_ALREADY_SENT NSUBSET_ROW - NSUPROW
2271.LT.
& SIZE_PACK SIZE_RBUF_BYTES / 4
2272.AND..NOT.
& RECV_BUF_SMALLER_THAN_SEND)
2279 CALL MPI_PACK_SIZE(8,MPI_INTEGER, COMM, SIZE_PACK, IERR_MPI )
2281.GT.
IF ( SIZE_PACKSIZE_RBUF_BYTES ) THEN
2285 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE_PACK, IERR,
2288.LT.
IF ( IERR 0 ) GOTO 100
2290 CALL MPI_PACK( ISON, 1, MPI_INTEGER,
2291 & BUF_CB%CONTENT( IPOS ),
2292 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2293 CALL MPI_PACK( NSUBSET_ROW, 1, MPI_INTEGER,
2294 & BUF_CB%CONTENT( IPOS ),
2295 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2296 CALL MPI_PACK( NSUPROW, 1, MPI_INTEGER,
2297 & BUF_CB%CONTENT( IPOS ),
2298 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2299 CALL MPI_PACK( NSUBSET_COL, 1, MPI_INTEGER,
2300 & BUF_CB%CONTENT( IPOS ),
2301 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2302 CALL MPI_PACK( NSUPCOL, 1, MPI_INTEGER,
2303 & BUF_CB%CONTENT( IPOS ),
2304 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2305 CALL MPI_PACK( N_ALREADY_SENT, 1, MPI_INTEGER,
2306 & BUF_CB%CONTENT( IPOS ),
2307 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2308 CALL MPI_PACK( N_PACKET, 1, MPI_INTEGER,
2309 & BUF_CB%CONTENT( IPOS ),
2310 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2311 CALL MPI_PACK( BBPCBP, 1, MPI_INTEGER,
2312 & BUF_CB%CONTENT( IPOS ),
2313 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2314.NE.
IF ( NSUBSET_ROW * NSUBSET_COL 0 ) THEN
2315.EQ..AND.
IF (N_ALREADY_SENT 0
2316.GT.
& min(NSUPROW, NSUPCOL) 0) THEN
2317 DO ISUB = NSUBSET_ROW-NSUPROW+1, NSUBSET_ROW
2318 I = SUBSET_ROW( ISUB )
2319 IPOS_ROOT = RG2L_ROW(INDCOL_SON( I ))
2321 & * ( ( IPOS_ROOT - 1 ) / ( MBLOCK * NPROW ) )
2322 & + mod( IPOS_ROOT - 1, MBLOCK ) + 1
2323 CALL MPI_PACK( ILOC_ROOT, 1, MPI_INTEGER,
2324 & BUF_CB%CONTENT( IPOS ),
2325 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2327 DO ISUB = NSUBSET_COL-NSUPCOL+1, NSUBSET_COL
2328 J = SUBSET_COL( ISUB )
2329 JPOS_ROOT = INDROW_SON( J ) - N
2331 & * ( ( JPOS_ROOT - 1 ) / ( NBLOCK * NPCOL ) )
2332 & + mod( JPOS_ROOT - 1, NBLOCK ) + 1
2333 CALL MPI_PACK( JLOC_ROOT, 1, MPI_INTEGER,
2334 & BUF_CB%CONTENT( IPOS ),
2335 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2337.GE.
IF ( TABSIZEint(NSUPROW,8)*int(NSUPCOL,8) ) THEN
2339 DO JSUB = NSUBSET_ROW - NSUPROW+1, NSUBSET_ROW
2340 J = SUBSET_ROW(JSUB)
2341 DO ISUB = NSUBSET_COL - NSUPCOL+1, NSUBSET_COL
2342 I = SUBSET_COL(ISUB)
2343 TAB(ITAB) = VAL_SON(J, I)
2347 CALL MPI_PACK(TAB(1), NSUPROW*NSUPCOL,
2348 & MPI_DOUBLE_COMPLEX,
2349 & BUF_CB%CONTENT( IPOS ),
2350 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2352 DO JSUB = NSUBSET_ROW - NSUPROW+1, NSUBSET_ROW
2353 J = SUBSET_ROW(JSUB)
2354 DO ISUB = NSUBSET_COL - NSUPCOL+1, NSUBSET_COL
2355 I = SUBSET_COL(ISUB)
2356 CALL MPI_PACK(VAL_SON(J,I), 1,
2357 & MPI_DOUBLE_COMPLEX,
2358 & BUF_CB%CONTENT( IPOS ),
2359 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2364.NOT.
IF ( TRANSP ) THEN
2365 DO ISUB = N_ALREADY_SENT+1, N_ALREADY_SENT+N_PACKET
2366 I = SUBSET_ROW( ISUB )
2367 IPOS_ROOT = RG2L_ROW( INDROW_SON( I ) )
2369 & * ( ( IPOS_ROOT - 1 ) / ( MBLOCK * NPROW ) )
2370 & + mod( IPOS_ROOT - 1, MBLOCK ) + 1
2371 CALL MPI_PACK( ILOC_ROOT, 1, MPI_INTEGER,
2372 & BUF_CB%CONTENT( IPOS ),
2373 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2375 DO JSUB = 1, NSUBSET_COL_EFF - NSUPCOL_EFF
2376 J = SUBSET_COL( JSUB )
2377 JPOS_ROOT = RG2L_COL( INDCOL_SON( J ) )
2379 & * ( ( JPOS_ROOT - 1 ) / ( NBLOCK * NPCOL ) )
2380 & + mod( JPOS_ROOT - 1, NBLOCK ) + 1
2381 CALL MPI_PACK( JLOC_ROOT, 1, MPI_INTEGER,
2382 & BUF_CB%CONTENT( IPOS ),
2383 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2385 DO JSUB = NSUBSET_COL_EFF-NSUPCOL_EFF+1, NSUBSET_COL_EFF
2386 J = SUBSET_COL( JSUB )
2387 JPOS_ROOT = INDCOL_SON( J ) - N
2389 & * ( ( JPOS_ROOT - 1 ) / ( NBLOCK * NPCOL ) )
2390 & + mod( JPOS_ROOT - 1, NBLOCK ) + 1
2391 CALL MPI_PACK( JLOC_ROOT, 1, MPI_INTEGER,
2392 & BUF_CB%CONTENT( IPOS ),
2393 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2396 DO JSUB = N_ALREADY_SENT+1, N_ALREADY_SENT+N_PACKET
2397 J = SUBSET_ROW( JSUB )
2398 IPOS_ROOT = RG2L_ROW( INDCOL_SON( J ) )
2400 & * ( ( IPOS_ROOT - 1 ) / ( MBLOCK * NPROW ) )
2401 & + mod( IPOS_ROOT - 1, MBLOCK ) + 1
2402 CALL MPI_PACK( ILOC_ROOT, 1, MPI_INTEGER,
2403 & BUF_CB%CONTENT( IPOS ),
2404 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2406 DO ISUB = 1, NSUBSET_COL_EFF - NSUPCOL_EFF
2407 I = SUBSET_COL( ISUB )
2408 JPOS_ROOT = RG2L_COL( INDROW_SON( I ) )
2410 & * ( ( JPOS_ROOT - 1 ) / ( NBLOCK * NPCOL ) )
2411 & + mod( JPOS_ROOT - 1, NBLOCK ) + 1
2412 CALL MPI_PACK( JLOC_ROOT, 1, MPI_INTEGER,
2413 & BUF_CB%CONTENT( IPOS ),
2414 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2416 DO ISUB = NSUBSET_COL_EFF - NSUPCOL_EFF + 1, NSUBSET_COL_EFF
2417 I = SUBSET_COL( ISUB )
2418 JPOS_ROOT = INDROW_SON(I) - N
2420 & * ( ( JPOS_ROOT - 1 ) / ( NBLOCK * NPCOL ) )
2421 & + mod( JPOS_ROOT - 1, NBLOCK ) + 1
2422 CALL MPI_PACK( JLOC_ROOT, 1, MPI_INTEGER,
2423 & BUF_CB%CONTENT( IPOS ),
2424 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2427.GE.
IF ( TABSIZEint(N_PACKET,8)*int(NSUBSET_COL_EFF,8) ) THEN
2428.NOT.
IF ( TRANSP ) THEN
2430 DO ISUB = N_ALREADY_SENT+1,
2431 & N_ALREADY_SENT+N_PACKET
2432 I = SUBSET_ROW( ISUB )
2433 DO JSUB = 1, NSUBSET_COL_EFF
2434 J = SUBSET_COL( JSUB )
2435 TAB( ITAB ) = VAL_SON(J,I)
2439 CALL MPI_PACK(TAB(1), NSUBSET_COL_EFF*N_PACKET,
2440 & MPI_DOUBLE_COMPLEX,
2441 & BUF_CB%CONTENT( IPOS ),
2442 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2445 DO JSUB = N_ALREADY_SENT+1, N_ALREADY_SENT+N_PACKET
2446 J = SUBSET_ROW( JSUB )
2447 DO ISUB = 1, NSUBSET_COL_EFF
2448 I = SUBSET_COL( ISUB )
2449 TAB( ITAB ) = VAL_SON( J, I )
2453 CALL MPI_PACK(TAB(1), NSUBSET_COL_EFF*N_PACKET,
2454 & MPI_DOUBLE_COMPLEX,
2455 & BUF_CB%CONTENT( IPOS ),
2456 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2459.NOT.
IF ( TRANSP ) THEN
2460 DO ISUB = N_ALREADY_SENT+1, N_ALREADY_SENT+N_PACKET
2461 I = SUBSET_ROW( ISUB )
2462 DO JSUB = 1, NSUBSET_COL_EFF
2463 J = SUBSET_COL( JSUB )
2464 CALL MPI_PACK( VAL_SON( J, I ), 1,
2465 & MPI_DOUBLE_COMPLEX,
2466 & BUF_CB%CONTENT( IPOS ),
2467 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2471 DO JSUB = N_ALREADY_SENT+1, N_ALREADY_SENT+N_PACKET
2472 J = SUBSET_ROW( JSUB )
2473 DO ISUB = 1, NSUBSET_COL_EFF
2474 I = SUBSET_COL( ISUB )
2475 CALL MPI_PACK( VAL_SON( J, I ), 1,
2476 & MPI_DOUBLE_COMPLEX,
2477 & BUF_CB%CONTENT( IPOS ),
2478 & SIZE_PACK, POSITION, COMM, IERR_MPI )
2484 KEEP(266)=KEEP(266)+1
2485 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), POSITION, MPI_PACKED,
2486 & PDEST, TAG, COMM, BUF_CB%CONTENT( IREQ ),
2488.LT.
IF ( SIZE_PACK POSITION ) THEN
2489 WRITE(*,*) ' error sending contribution to root:size<positn
'
2490 WRITE(*,*) ' Size,position=
',SIZE_PACK,POSITION
2493.NE.
IF ( SIZE_PACK POSITION )
2494 & CALL BUF_ADJUST( BUF_CB, POSITION )
2495 N_ALREADY_SENT = N_ALREADY_SENT + N_PACKET
2496.NE.
IF (NSUBSET_ROW * NSUBSET_COL 0) THEN
2497.NE.
IF ( N_ALREADY_SENTNSUBSET_ROW_EFF ) IERR = -1
2501 END SUBROUTINE ZMUMPS_BUF_SEND_CONTRIB_TYPE3
2502 SUBROUTINE ZMUMPS_BUF_SEND_RTNELIND( ISON, NELIM,
2503 & NELIM_ROW, NELIM_COL, NSLAVES, SLAVES,
2504 & DEST, COMM, KEEP, IERR )
2506 INTEGER NSLAVES, DEST, COMM, IERR
2507 INTEGER NELIM_ROW( NELIM ), NELIM_COL( NELIM )
2508 INTEGER SLAVES( NSLAVES )
2509 INTEGER, INTENT(INOUT) :: KEEP(500)
2511 INCLUDE 'mumps_tags.h
'
2513 INTEGER SIZE, POSITION, IPOS, IREQ
2516 PARAMETER ( IONE=1 )
2519 SIZE = ( 3 + NSLAVES + 2 * NELIM ) * SIZEofINT
2520.GT.
IF (SIZESIZE_RBUF_BYTES) THEN
2524 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE, IERR,
2527.LT.
IF ( IERR 0 ) THEN
2531 BUF_CB%CONTENT( POSITION ) = ISON
2532 POSITION = POSITION + 1
2533 BUF_CB%CONTENT( POSITION ) = NELIM
2534 POSITION = POSITION + 1
2535 BUF_CB%CONTENT( POSITION ) = NSLAVES
2536 POSITION = POSITION + 1
2537 BUF_CB%CONTENT( POSITION: POSITION + NELIM - 1 ) = NELIM_ROW
2538 POSITION = POSITION + NELIM
2539 BUF_CB%CONTENT( POSITION: POSITION + NELIM - 1 ) = NELIM_COL
2540 POSITION = POSITION + NELIM
2541 BUF_CB%CONTENT( POSITION: POSITION + NSLAVES - 1 ) = SLAVES
2542 POSITION = POSITION + NSLAVES
2543 POSITION = POSITION - IPOS
2544.NE.
IF ( POSITION * SIZEofINT SIZE ) THEN
2545 WRITE(*,*) 'error in zmumps_buf_send_root_nelim_indices:
',
2546 & 'wrong estimated size
'
2549 KEEP(266)=KEEP(266)+1
2550 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), SIZE,
2552 & DEST, ROOT_NELIM_INDICES, COMM,
2553 & BUF_CB%CONTENT( IREQ ), IERR_MPI )
2555 END SUBROUTINE ZMUMPS_BUF_SEND_RTNELIND
2556 SUBROUTINE ZMUMPS_BUF_SEND_ROOT2SON( ISON, NELIM_ROOT,
2557 & DEST, COMM, KEEP, IERR )
2559 INTEGER ISON, NELIM_ROOT, DEST, COMM, IERR
2560 INTEGER, INTENT(INOUT) :: KEEP(500)
2562 INCLUDE 'mumps_tags.h
'
2564 INTEGER IPOS, IREQ, SIZE
2567 PARAMETER ( IONE=1 )
2570 SIZE = 2 * SIZEofINT
2571 CALL BUF_LOOK( BUF_SMALL, IPOS, IREQ, SIZE, IERR,
2574.LT.
IF ( IERR 0 ) THEN
2575 WRITE(*,*) 'internal error 1 with small buffers
'
2578.LT.
IF ( IERR 0 ) THEN
2581 BUF_SMALL%CONTENT( IPOS ) = ISON
2582 BUF_SMALL%CONTENT( IPOS + 1 ) = NELIM_ROOT
2583 KEEP(266)=KEEP(266)+1
2584 CALL MPI_ISEND( BUF_SMALL%CONTENT( IPOS ), SIZE,
2586 & DEST, ROOT_2SON, COMM,
2587 & BUF_SMALL%CONTENT( IREQ ), IERR_MPI )
2589 END SUBROUTINE ZMUMPS_BUF_SEND_ROOT2SON
2590 SUBROUTINE ZMUMPS_BUF_SEND_ROOT2SLAVE
2591 & ( TOT_ROOT_SIZE, TOT_CONT2RECV, DEST, COMM, KEEP, IERR )
2593 INTEGER TOT_ROOT_SIZE, TOT_CONT2RECV, DEST, COMM, IERR
2594 INTEGER, INTENT(INOUT) :: KEEP(500)
2596 INCLUDE 'mumps_tags.h
'
2598 INTEGER SIZE, IPOS, IREQ
2601 PARAMETER ( IONE=1 )
2604 SIZE = 2 * SIZEofINT
2605 CALL BUF_LOOK( BUF_SMALL, IPOS, IREQ, SIZE, IERR,
2608.LT.
IF ( IERR 0 ) THEN
2609 WRITE(*,*) 'internal error 2 with small buffers
'
2612.LT.
IF ( IERR 0 ) THEN
2615 BUF_SMALL%CONTENT( IPOS ) = TOT_ROOT_SIZE
2616 BUF_SMALL%CONTENT( IPOS + 1 ) = TOT_CONT2RECV
2617 KEEP(266)=KEEP(266)+1
2618 CALL MPI_ISEND( BUF_SMALL%CONTENT( IPOS ), SIZE,
2620 & DEST, ROOT_2SLAVE, COMM,
2621 & BUF_SMALL%CONTENT( IREQ ), IERR_MPI )
2623 END SUBROUTINE ZMUMPS_BUF_SEND_ROOT2SLAVE
2624 SUBROUTINE ZMUMPS_BUF_SEND_BACKVEC
2625 & ( NRHS, INODE, W, LW, LD_W, DEST, MSGTAG,
2626 & JBDEB, JBFIN, KEEP, COMM, IERR )
2628 INTEGER NRHS, INODE,LW,COMM,IERR,DEST,MSGTAG, LD_W
2629 INTEGER, intent(in) :: JBDEB, JBFIN
2630 COMPLEX(kind=8) :: W(LD_W, *)
2631 INTEGER, INTENT(INOUT) :: KEEP(500)
2634 INTEGER SIZE, SIZE1, SIZE2
2635 INTEGER POSITION, IREQ, IPOS
2638 PARAMETER ( IONE=1 )
2641 CALL MPI_PACK_SIZE( 4 , MPI_INTEGER, COMM, SIZE1, IERR_MPI )
2642 CALL MPI_PACK_SIZE( LW*NRHS, MPI_DOUBLE_COMPLEX, COMM,
2644 SIZE = SIZE1 + SIZE2
2645 CALL BUF_LOOK( BUF_CB, IPOS, IREQ, SIZE, IERR,
2648.LT.
IF ( IERR 0 ) THEN
2652 CALL MPI_PACK( INODE, 1, MPI_INTEGER,
2653 & BUF_CB%CONTENT( IPOS ), SIZE,
2654 & POSITION, COMM, IERR_MPI )
2655 CALL MPI_PACK( LW , 1, MPI_INTEGER,
2656 & BUF_CB%CONTENT( IPOS ), SIZE,
2657 & POSITION, COMM, IERR_MPI )
2658 CALL MPI_PACK( JBDEB , 1, MPI_INTEGER,
2659 & BUF_CB%CONTENT( IPOS ), SIZE,
2660 & POSITION, COMM, IERR_MPI )
2661 CALL MPI_PACK( JBFIN , 1, MPI_INTEGER,
2662 & BUF_CB%CONTENT( IPOS ), SIZE,
2663 & POSITION, COMM, IERR_MPI )
2665 CALL MPI_PACK( W(1,K), LW, MPI_DOUBLE_COMPLEX,
2666 & BUF_CB%CONTENT( IPOS ), SIZE,
2667 & POSITION, COMM, IERR_MPI )
2669 KEEP(266)=KEEP(266)+1
2670 CALL MPI_ISEND( BUF_CB%CONTENT( IPOS ), POSITION, MPI_PACKED,
2671 & DEST, MSGTAG, COMM,
2672 & BUF_CB%CONTENT( IREQ ), IERR_MPI )
2673.LT.
IF ( SIZE POSITION ) THEN
2674 WRITE(*,*) 'try_update:
SIZE, position =
',
2678.NE.
IF ( SIZE POSITION ) CALL BUF_ADJUST( BUF_CB, POSITION )
2680 END SUBROUTINE ZMUMPS_BUF_SEND_BACKVEC
2681 SUBROUTINE ZMUMPS_BUF_SEND_UPDATE_LOAD
2682 & ( BDC_SBTR,BDC_MEM,BDC_MD, COMM, NPROCS, LOAD,
2688 INTEGER COMM, NPROCS, MYID, IERR
2689 INTEGER, INTENT(INOUT) :: KEEP(500)
2690 INTEGER FUTURE_NIV2(NPROCS)
2691 DOUBLE PRECISION LU_USAGE
2692 DOUBLE PRECISION LOAD
2693 DOUBLE PRECISION MEM,SBTR_CUR
2694 LOGICAL BDC_MEM,BDC_SBTR,BDC_MD
2696 INCLUDE 'mumps_tags.h
'
2698 INTEGER POSITION, IREQ, IPOS, SIZE1, SIZE2, SIZE
2699 INTEGER I, NDEST, IDEST, IPOSMSG, WHAT, NREALS
2702 PARAMETER ( IZERO=0 )
2708.NE..AND..NE.
IF ( I MYID + 1 FUTURE_NIV2(I)0) THEN
2712.eq.
IF ( NDEST 0 ) THEN
2715 CALL MPI_PACK_SIZE( 1 + (NDEST-1) * OVHSIZE,
2716 & MPI_INTEGER, COMM,
2728 CALL MPI_PACK_SIZE( NREALS, MPI_DOUBLE_PRECISION,
2729 & COMM, SIZE2, IERR_MPI )
2730 SIZE = SIZE1 + SIZE2
2731 CALL BUF_LOOK( BUF_LOAD, IPOS, IREQ, SIZE, IERR,
2734.LT.
IF ( IERR 0 ) THEN
2737 BUF_LOAD%ILASTMSG = BUF_LOAD%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
2738 IPOS = IPOS - OVHSIZE
2739 DO IDEST = 1, NDEST - 1
2740 BUF_LOAD%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
2741 & IPOS + IDEST * OVHSIZE
2743 BUF_LOAD%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
2744 IPOSMSG = IPOS + OVHSIZE * NDEST
2747 CALL MPI_PACK( WHAT, 1, MPI_INTEGER,
2748 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2749 & POSITION, COMM, IERR_MPI )
2750 CALL MPI_PACK( LOAD, 1, MPI_DOUBLE_PRECISION,
2751 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2752 & POSITION, COMM, IERR_MPI )
2754 CALL MPI_PACK( MEM, 1, MPI_DOUBLE_PRECISION,
2755 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2756 & POSITION, COMM, IERR_MPI )
2759 CALL MPI_PACK( SBTR_CUR, 1, MPI_DOUBLE_PRECISION,
2760 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2761 & POSITION, COMM, IERR_MPI )
2764 CALL MPI_PACK( LU_USAGE, 1, MPI_DOUBLE_PRECISION,
2765 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2766 & POSITION, COMM, IERR_MPI )
2769 DO I = 0, NPROCS - 1
2770.NE..AND..NE.
IF ( I MYID FUTURE_NIV2(I+1) 0) THEN
2772 KEEP(267)=KEEP(267)+1
2773 CALL MPI_ISEND( BUF_LOAD%CONTENT( IPOSMSG ),
2774 & POSITION, MPI_PACKED, I,
2775 & UPDATE_LOAD, COMM,
2776 & BUF_LOAD%CONTENT( IREQ+(IDEST-1)*OVHSIZE ),
2780 SIZE = SIZE - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
2781.LT.
IF ( SIZE POSITION ) THEN
2783 WRITE(*,*) ' Size,position=
',SIZE,POSITION
2786.NE.
IF ( SIZE POSITION )
2787 & CALL BUF_ADJUST( BUF_LOAD, POSITION )
2789 END SUBROUTINE ZMUMPS_BUF_SEND_UPDATE_LOAD
2790 SUBROUTINE ZMUMPS_BUF_BROADCAST
2791 & ( WHAT, COMM, NPROCS,
2796 INTEGER COMM, NPROCS, MYID, IERR, WHAT
2797 DOUBLE PRECISION LOAD,UPD_LOAD
2798 INTEGER, INTENT(INOUT) :: KEEP(500)
2800 INCLUDE 'mumps_tags.h
'
2802 INTEGER POSITION, IREQ, IPOS, SIZE1, SIZE2, SIZE
2803 INTEGER I, NDEST, IDEST, IPOSMSG, NREALS
2806 INTEGER FUTURE_NIV2(NPROCS)
2807 PARAMETER ( IZERO=0 )
2809.NE..AND..NE..AND.
IF (WHAT 2 WHAT 3
2810.NE..AND..NE..AND..NE..AND.
& WHAT6 WHAT8 WHAT9
2813 & "Internal error 1 in ZMUMPS_BUF_BROADCAST",WHAT
2819.NE..AND..NE.
IF ( I MYID + 1 FUTURE_NIV2(I)0) THEN
2823.eq.
IF ( NDEST 0 ) THEN
2826 CALL MPI_PACK_SIZE( 1 + (NDEST-1) * OVHSIZE,
2827 & MPI_INTEGER, COMM,
2829.NE..AND..NE.
IF((WHAT17)(WHAT10))THEN
2834 CALL MPI_PACK_SIZE( NREALS, MPI_DOUBLE_PRECISION,
2835 & COMM, SIZE2, IERR_MPI )
2836 SIZE = SIZE1 + SIZE2
2837 CALL BUF_LOOK( BUF_LOAD, IPOS, IREQ, SIZE, IERR,
2840.LT.
IF ( IERR 0 ) THEN
2843 BUF_LOAD%ILASTMSG = BUF_LOAD%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
2844 IPOS = IPOS - OVHSIZE
2845 DO IDEST = 1, NDEST - 1
2846 BUF_LOAD%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
2847 & IPOS + IDEST * OVHSIZE
2849 BUF_LOAD%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
2850 IPOSMSG = IPOS + OVHSIZE * NDEST
2852 CALL MPI_PACK( WHAT, 1, MPI_INTEGER,
2853 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2854 & POSITION, COMM, IERR_MPI )
2855 CALL MPI_PACK( LOAD, 1, MPI_DOUBLE_PRECISION,
2856 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2857 & POSITION, COMM, IERR_MPI )
2858.EQ..OR..EQ.
IF((WHAT17)(WHAT10))THEN
2859 CALL MPI_PACK( UPD_LOAD, 1, MPI_DOUBLE_PRECISION,
2860 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2861 & POSITION, COMM, IERR_MPI )
2864 DO I = 0, NPROCS - 1
2865.NE..AND..NE.
IF ( I MYID FUTURE_NIV2(I+1) 0) THEN
2867 KEEP(267)=KEEP(267)+1
2868 CALL MPI_ISEND( BUF_LOAD%CONTENT( IPOSMSG ),
2869 & POSITION, MPI_PACKED, I,
2870 & UPDATE_LOAD, COMM,
2871 & BUF_LOAD%CONTENT( IREQ+(IDEST-1)*OVHSIZE ),
2875 SIZE = SIZE - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
2876.LT.
IF ( SIZE POSITION ) THEN
2878 WRITE(*,*) ' Size,position=
',SIZE,POSITION
2881.NE.
IF ( SIZE POSITION )
2882 & CALL BUF_ADJUST( BUF_LOAD, POSITION )
2884 END SUBROUTINE ZMUMPS_BUF_BROADCAST
2885 SUBROUTINE ZMUMPS_BUF_SEND_FILS
2886 & ( WHAT, COMM, NPROCS,
2887 & FATHER_NODE,INODE,NCB,KEEP,
2888 & MYID,REMOTE, IERR)
2890 INTEGER COMM, NPROCS, MYID, IERR, WHAT,REMOTE
2891 INTEGER FATHER_NODE,INODE
2893 INCLUDE 'mumps_tags.h
'
2895 INTEGER POSITION, IREQ, IPOS, SIZE
2896 INTEGER NDEST, IDEST, IPOSMSG
2897 INTEGER IZERO,NCB,KEEP(500)
2899 PARAMETER ( IZERO=0 )
2902.eq.
IF ( NDEST 0 ) THEN
2905.EQ..OR..EQ.
IF((KEEP(81)2)(KEEP(81)3))THEN
2906 CALL MPI_PACK_SIZE( 4 + OVHSIZE,
2907 & MPI_INTEGER, COMM,
2910 CALL MPI_PACK_SIZE( 2 + OVHSIZE,
2911 & MPI_INTEGER, COMM,
2914 CALL BUF_LOOK( BUF_LOAD, IPOS, IREQ, SIZE, IERR,
2917.LT.
IF ( IERR 0 ) THEN
2920 BUF_LOAD%ILASTMSG = BUF_LOAD%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
2921 IPOS = IPOS - OVHSIZE
2922 DO IDEST = 1, NDEST - 1
2923 BUF_LOAD%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
2924 & IPOS + IDEST * OVHSIZE
2926 BUF_LOAD%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
2927 IPOSMSG = IPOS + OVHSIZE * NDEST
2929 CALL MPI_PACK( WHAT, 1, MPI_INTEGER,
2930 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2931 & POSITION, COMM, IERR_MPI )
2932 CALL MPI_PACK( FATHER_NODE, 1, MPI_INTEGER,
2933 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2934 & POSITION, COMM, IERR_MPI )
2935.EQ..OR..EQ.
IF((KEEP(81)2)(KEEP(81)3))THEN
2936 CALL MPI_PACK( INODE, 1, MPI_INTEGER,
2937 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2938 & POSITION, COMM, IERR_MPI )
2939 CALL MPI_PACK( NCB, 1, MPI_INTEGER,
2940 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
2941 & POSITION, COMM, IERR_MPI )
2944 KEEP(267)=KEEP(267)+1
2945 CALL MPI_ISEND( BUF_LOAD%CONTENT( IPOSMSG ),
2946 & POSITION, MPI_PACKED, REMOTE,
2947 & UPDATE_LOAD, COMM,
2948 & BUF_LOAD%CONTENT( IREQ+(IDEST-1)*OVHSIZE ),
2950 SIZE = SIZE - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
2951.LT.
IF ( SIZE POSITION ) THEN
2953 WRITE(*,*) ' Size,position=
',SIZE,POSITION
2956.NE.
IF ( SIZE POSITION )
2957 & CALL BUF_ADJUST( BUF_LOAD, POSITION )
2959 END SUBROUTINE ZMUMPS_BUF_SEND_FILS
2960 SUBROUTINE ZMUMPS_BUF_SEND_NOT_MSTR( COMM, MYID, NPROCS,
2961 & MAX_SURF_MASTER, KEEP, IERR)
2964 INCLUDE 'mumps_tags.h
'
2965 INTEGER COMM, MYID, IERR, NPROCS
2966 DOUBLE PRECISION MAX_SURF_MASTER
2967 INTEGER, INTENT(INOUT) :: KEEP(500)
2969 INTEGER IPOS, IREQ, IDEST, IPOSMSG, POSITION, I
2972 PARAMETER ( IZERO=0 )
2973 INTEGER NDEST, NINTS, NREALS, SIZE, SIZE1, SIZE2
2978 NINTS = 1 + ( NDEST-1 ) * OVHSIZE
2980 CALL MPI_PACK_SIZE( NINTS,
2981 & MPI_INTEGER, COMM,
2983 CALL MPI_PACK_SIZE( NREALS,
2984 & MPI_DOUBLE_PRECISION, COMM,
2987 CALL BUF_LOOK( BUF_LOAD, IPOS, IREQ, SIZE, IERR,
2989.LT.
IF ( IERR 0 ) THEN
2992 BUF_LOAD%ILASTMSG = BUF_LOAD%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
2993 IPOS = IPOS - OVHSIZE
2994 DO IDEST = 1, NDEST - 1
2995 BUF_LOAD%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
2996 & IPOS + IDEST * OVHSIZE
2998 BUF_LOAD%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
2999 IPOSMSG = IPOS + OVHSIZE * NDEST
3002 CALL MPI_PACK( WHAT, 1, MPI_INTEGER,
3003 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3004 & POSITION, COMM, IERR_MPI )
3005 CALL MPI_PACK( MAX_SURF_MASTER, 1, MPI_DOUBLE_PRECISION,
3006 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3007 & POSITION, COMM, IERR_MPI )
3009 DO I = 0, NPROCS - 1
3010.ne.
IF ( I MYID ) THEN
3012 KEEP(267)=KEEP(267)+1
3013 CALL MPI_ISEND( BUF_LOAD%CONTENT( IPOSMSG ),
3014 & POSITION, MPI_PACKED, I,
3015 & UPDATE_LOAD, COMM,
3016 & BUF_LOAD%CONTENT( IREQ+(IDEST-1)*OVHSIZE ),
3020 SIZE = SIZE - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
3021.LT.
IF ( SIZE POSITION ) THEN
3023 WRITE(*,*) ' Size,position=
',SIZE,POSITION
3026.NE.
IF ( SIZE POSITION )
3027 & CALL BUF_ADJUST( BUF_LOAD, POSITION )
3029 END SUBROUTINE ZMUMPS_BUF_SEND_NOT_MSTR
3030 SUBROUTINE ZMUMPS_BUF_BCAST_ARRAY( BDC_MEM,
3031 & COMM, MYID, NPROCS,
3034 & LIST_SLAVES,INODE,
3035 & MEM_INCREMENT, FLOPS_INCREMENT,CB_BAND, WHAT,
3040 INCLUDE 'mumps_tags.h
'
3042 INTEGER COMM, MYID, NPROCS, NSLAVES, IERR
3043 INTEGER FUTURE_NIV2(NPROCS)
3044 INTEGER LIST_SLAVES(NSLAVES),INODE
3045 DOUBLE PRECISION MEM_INCREMENT(NSLAVES)
3046 DOUBLE PRECISION FLOPS_INCREMENT(NSLAVES)
3047 DOUBLE PRECISION CB_BAND(NSLAVES)
3048 INTEGER, INTENT(INOUT) :: KEEP(500)
3050 INTEGER NDEST, NINTS, NREALS, SIZE1, SIZE2, SIZE
3051 INTEGER IPOS, IPOSMSG, IREQ, POSITION
3052 INTEGER I, IDEST, WHAT
3055 PARAMETER ( IZERO=0 )
3060.NE..AND..NE.
IF ( I MYID + 1 FUTURE_NIV2(I)0) THEN
3064 IF ( NDEST == 0 ) THEN
3067 NINTS = 2 + NSLAVES + ( NDEST - 1 ) * OVHSIZE + 1
3069 IF (BDC_MEM) NREALS = NREALS + NSLAVES
3071 NREALS = NREALS + NSLAVES
3073 CALL MPI_PACK_SIZE( NINTS,
3074 & MPI_INTEGER, COMM,
3076 CALL MPI_PACK_SIZE( NREALS, MPI_DOUBLE_PRECISION,
3077 & COMM, SIZE2, IERR_MPI )
3079 CALL BUF_LOOK( BUF_LOAD, IPOS, IREQ, SIZE, IERR,
3081.LT.
IF ( IERR 0 ) THEN
3084 BUF_LOAD%ILASTMSG = BUF_LOAD%ILASTMSG + ( NDEST - 1 ) * OVHSIZE
3085 IPOS = IPOS - OVHSIZE
3086 DO IDEST = 1, NDEST - 1
3087 BUF_LOAD%CONTENT( IPOS + ( IDEST - 1 ) * OVHSIZE ) =
3088 & IPOS + IDEST * OVHSIZE
3090 BUF_LOAD%CONTENT( IPOS + ( NDEST - 1 ) * OVHSIZE ) = 0
3091 IPOSMSG = IPOS + OVHSIZE * NDEST
3093 CALL MPI_PACK( WHAT, 1, MPI_INTEGER,
3094 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3095 & POSITION, COMM, IERR_MPI )
3096 CALL MPI_PACK( NSLAVES, 1, MPI_INTEGER,
3097 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3098 & POSITION, COMM, IERR_MPI )
3099 CALL MPI_PACK( INODE, 1, MPI_INTEGER,
3100 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3101 & POSITION, COMM, IERR_MPI )
3102 CALL MPI_PACK( LIST_SLAVES, NSLAVES, MPI_INTEGER,
3103 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3104 & POSITION, COMM, IERR_MPI )
3105 CALL MPI_PACK( FLOPS_INCREMENT, NSLAVES,
3106 & MPI_DOUBLE_PRECISION,
3107 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3108 & POSITION, COMM, IERR_MPI )
3110 CALL MPI_PACK( MEM_INCREMENT, NSLAVES,
3111 & MPI_DOUBLE_PRECISION,
3112 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3113 & POSITION, COMM, IERR_MPI )
3116 CALL MPI_PACK( CB_BAND, NSLAVES,
3117 & MPI_DOUBLE_PRECISION,
3118 & BUF_LOAD%CONTENT( IPOSMSG ), SIZE,
3119 & POSITION, COMM, IERR_MPI )
3122 DO I = 0, NPROCS - 1
3123.NE..AND..NE.
IF ( I MYID FUTURE_NIV2(I+1) 0) THEN
3125 KEEP(267)=KEEP(267)+1
3126 CALL MPI_ISEND( BUF_LOAD%CONTENT( IPOSMSG ),
3127 & POSITION, MPI_PACKED, I,
3128 & UPDATE_LOAD, COMM,
3129 & BUF_LOAD%CONTENT( IREQ+(IDEST-1)*OVHSIZE ),
3133 SIZE = SIZE - ( NDEST - 1 ) * OVHSIZE * SIZEofINT
3134.LT.
IF ( SIZE POSITION ) THEN
3136 WRITE(*,*) ' Size,position=
',SIZE,POSITION
3139.NE.
IF ( SIZE POSITION )
3140 & CALL BUF_ADJUST( BUF_LOAD, POSITION )
3142 END SUBROUTINE ZMUMPS_BUF_BCAST_ARRAY
3143 SUBROUTINE ZMUMPS_BUF_DIST_IRECV_SIZE
3144 & ( ZMUMPS_LBUFR_BYTES)
3146 INTEGER ZMUMPS_LBUFR_BYTES
3147 SIZE_RBUF_BYTES = ZMUMPS_LBUFR_BYTES
3149 END SUBROUTINE ZMUMPS_BUF_DIST_IRECV_SIZE
3150 SUBROUTINE MUMPS_MPI_PACK_SIZE_LR( BLR_LorU, SIZE_OUT, COMM,
3153 INTEGER, intent(out) :: SIZE_OUT, IERR
3154 INTEGER, intent(in) :: COMM
3155 TYPE (LRB_TYPE), DIMENSION(:), intent(in) :: BLR_LorU
3156 INTEGER :: I, SIZE_LOC, IERR_MPI
3160 CALL MPI_PACK_SIZE( 1, MPI_INTEGER, COMM, SIZE_LOC, IERR_MPI )
3161 SIZE_OUT = SIZE_OUT + SIZE_LOC
3162 DO I = 1, size(BLR_LorU)
3163 CALL MUMPS_MPI_PACK_SIZE_LRB(BLR_LorU(I), SIZE_LOC, COMM,
3165 SIZE_OUT = SIZE_OUT + SIZE_LOC
3168 END SUBROUTINE MUMPS_MPI_PACK_SIZE_LR
3169 SUBROUTINE MUMPS_MPI_PACK_SIZE_LRB(LRB, SIZE_OUT, COMM, IERR )
3171 INTEGER, intent(out) :: SIZE_OUT, IERR
3172 INTEGER, intent(in) :: COMM
3173 TYPE (LRB_TYPE), intent(in) :: LRB
3174 INTEGER :: SIZE_LOC, IERR_MPI
3178 CALL MPI_PACK_SIZE( 4,
3179 & MPI_INTEGER, COMM, SIZE_LOC, IERR_MPI )
3180 SIZE_OUT = SIZE_OUT + SIZE_LOC
3181 IF ( LRB%ISLR ) THEN
3182.GT.
IF (LRB%K 0) THEN
3183 CALL MPI_PACK_SIZE( LRB%M * LRB%K,
3184 & MPI_DOUBLE_COMPLEX, COMM, SIZE_LOC, IERR_MPI )
3185 SIZE_OUT = SIZE_OUT + SIZE_LOC
3186 CALL MPI_PACK_SIZE( LRB%K * LRB%N,
3187 & MPI_DOUBLE_COMPLEX, COMM, SIZE_LOC, IERR_MPI )
3188 SIZE_OUT = SIZE_OUT + SIZE_LOC
3191 CALL MPI_PACK_SIZE( LRB%M * LRB%N,
3192 & MPI_DOUBLE_COMPLEX, COMM, SIZE_LOC, IERR_MPI )
3193 SIZE_OUT = SIZE_OUT + SIZE_LOC
3196 END SUBROUTINE MUMPS_MPI_PACK_SIZE_LRB
3197 SUBROUTINE ZMUMPS_MPI_PACK_LR( BLR_LorU, BUF, LBUF, POSITION,
3200 INTEGER, intent(out) :: IERR
3201 INTEGER, intent(in) :: COMM, LBUF
3202 INTEGER, intent(inout) :: POSITION
3203 INTEGER, intent(inout) :: BUF(:)
3204 TYPE (LRB_TYPE), DIMENSION(:), intent(in) :: BLR_LorU
3209 CALL MPI_PACK( size(BLR_LorU), 1, MPI_INTEGER,
3210 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3211 DO I = 1, size(BLR_LorU)
3212 CALL ZMUMPS_MPI_PACK_LRB(BLR_LorU(I), BUF, LBUF, POSITION,
3217 END SUBROUTINE ZMUMPS_MPI_PACK_LR
3218 SUBROUTINE ZMUMPS_MPI_PACK_LRB( LRB, BUF, LBUF, POSITION,
3222 INTEGER, intent(out) :: IERR
3223 INTEGER, intent(in) :: COMM, LBUF
3224 INTEGER, intent(inout) :: POSITION
3225 INTEGER, intent(inout) :: BUF(:)
3226 TYPE (LRB_TYPE), intent(in) :: LRB
3236 CALL MPI_PACK( ISLR_INT, 1, MPI_INTEGER,
3237 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3238 CALL MPI_PACK( LRB%K,
3240 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3241 CALL MPI_PACK( LRB%M,
3243 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3244 CALL MPI_PACK( LRB%N,
3246 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3248.GT.
IF (LRB%K 0) THEN
3249 CALL MPI_PACK( LRB%Q(1,1),
3250 & LRB%M*LRB%K, MPI_DOUBLE_COMPLEX,
3251 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3252 CALL MPI_PACK( LRB%R(1,1),
3253 & LRB%N*LRB%K, MPI_DOUBLE_COMPLEX,
3254 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3257 CALL MPI_PACK( LRB%Q(1,1), LRB%M*LRB%N
3258 & ,MPI_DOUBLE_COMPLEX,
3259 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3262 END SUBROUTINE ZMUMPS_MPI_PACK_LRB
3263 SUBROUTINE ZMUMPS_MPI_UNPACK_LRB(
3264 & BUFR, LBUFR, LBUFR_BYTES, POSITION,
3266 & COMM, IFLAG, IERROR
3268 USE ZMUMPS_LR_CORE, ONLY : ALLOC_LRB
3271 INTEGER, INTENT(IN) :: LBUFR
3272 INTEGER, INTENT(IN) :: LBUFR_BYTES
3273 INTEGER, INTENT(IN) :: BUFR(LBUFR)
3274 INTEGER, INTENT(INOUT) :: POSITION
3275 INTEGER, INTENT(IN) :: COMM
3276 INTEGER, INTENT(INOUT) :: IFLAG, IERROR
3277 TYPE (LRB_TYPE), INTENT(OUT) :: LRB
3278 INTEGER(8) :: KEEP8(150)
3284 INCLUDE 'mumps_tags.h
'
3285 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3286 & ISLR_INT, 1, MPI_INTEGER, COMM, IERR_MPI )
3287 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3289 & MPI_INTEGER, COMM, IERR_MPI )
3290 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3292 & MPI_INTEGER, COMM, IERR_MPI )
3293 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3295 & MPI_INTEGER, COMM, IERR_MPI )
3296.eq.
IF (ISLR_INT 1) THEN
3301 CALL ALLOC_LRB( LRB, K, M, N, ISLR,
3302 & IFLAG, IERROR, KEEP8 )
3303.LT.
IF (IFLAG0) RETURN
3306 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3307 & LRB%Q(1,1), M*K, MPI_DOUBLE_COMPLEX,
3309 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3310 & LRB%R(1,1), N*K, MPI_DOUBLE_COMPLEX,
3314 CALL MPI_UNPACK( BUFR, LBUFR_BYTES, POSITION,
3315 & LRB%Q(1,1), M*N, MPI_DOUBLE_COMPLEX,
3319 END SUBROUTINE ZMUMPS_MPI_UNPACK_LRB
3320 SUBROUTINE MUMPS_MPI_PACK_SCALE_LR
3321 & ( BLR, BUF, LBUF, POSITION,
3323 & A , LA, POSELTD, LD_DIAG,
3324 & IPIV, NPIV, MAXI_CLUSTER,
3327 INTEGER, intent(out) :: IERR
3328 INTEGER, intent(in) :: COMM, LBUF
3329 INTEGER, intent(inout) :: POSITION
3330 INTEGER, intent(inout) :: BUF(:)
3331 TYPE (LRB_TYPE), DIMENSION(:), intent(in) :: BLR
3332 INTEGER(8), intent(in) :: LA, POSELTD
3333 INTEGER, intent(in) :: LD_DIAG, NPIV
3334 INTEGER, intent(in) :: IPIV(NPIV), MAXI_CLUSTER
3335 COMPLEX(kind=8), intent(inout) :: A(LA)
3337 INTEGER I, ISLR_INT, J, ALLOCOK
3338 COMPLEX(kind=8), ALLOCATABLE,DIMENSION(:,:) :: SCALED
3339 COMPLEX(kind=8), ALLOCATABLE,DIMENSION(:) :: BLOCK
3340 COMPLEX(kind=8) :: PIV1, PIV2, OFFDIAG
3343 CALL MPI_PACK( size(BLR), 1, MPI_INTEGER,
3344 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3345 allocate(BLOCK(MAXI_CLUSTER), STAT=ALLOCOK )
3346.GT.
IF ( ALLOCOK 0 ) THEN
3351 allocate(SCALED(MAXI_CLUSTER,2), STAT=ALLOCOK )
3352.GT.
IF ( ALLOCOK 0 ) THEN
3358 IF (BLR(I)%ISLR) THEN
3363 CALL MPI_PACK( ISLR_INT, 1, MPI_INTEGER,
3364 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3365 CALL MPI_PACK( BLR(I)%K,
3367 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3368 CALL MPI_PACK( BLR(I)%M,
3370 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3371 CALL MPI_PACK( BLR(I)%N,
3373 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3374 IF (BLR(I)%ISLR) THEN
3375.GT.
IF (BLR(I)%K 0) THEN
3376 CALL MPI_PACK( BLR(I)%Q(1,1), BLR(I)%M*BLR(I)%K,
3377 & MPI_DOUBLE_COMPLEX,
3378 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3380 DO WHILE (J <= BLR(I)%N)
3381 IF (IPIV(J) > 0) THEN
3382 SCALED(1:BLR(I)%K,1) = A(POSELTD+LD_DIAG*(J-1)+J-1)
3383 & * BLR(I)%R(1:BLR(I)%K,J)
3385 CALL MPI_PACK( SCALED(1,1), BLR(I)%K,
3386 & MPI_DOUBLE_COMPLEX,
3387 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3389 PIV1 = A(POSELTD+LD_DIAG*(J-1)+J-1)
3390 PIV2 = A(POSELTD+LD_DIAG*J+J)
3391 OFFDIAG = A(POSELTD+LD_DIAG*(J-1)+J)
3392 BLOCK(1:BLR(I)%K) = BLR(I)%R(1:BLR(I)%K,J)
3393 SCALED(1:BLR(I)%K,1) = PIV1 * BLR(I)%R(1:BLR(I)%K,J)
3394 & + OFFDIAG * BLR(I)%R(1:BLR(I)%K,J+1)
3395 CALL MPI_PACK( SCALED(1,1), BLR(I)%K,
3396 & MPI_DOUBLE_COMPLEX,
3397 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3398 SCALED(1:BLR(I)%K,2) = OFFDIAG * BLOCK(1:BLR(I)%K)
3399 & + PIV2 * BLR(I)%R(1:BLR(I)%K,J+1)
3401 CALL MPI_PACK( SCALED(1,2), BLR(I)%K,
3402 & MPI_DOUBLE_COMPLEX,
3403 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3409 DO WHILE (J <= BLR(I)%N)
3410 IF (IPIV(J) > 0) THEN
3411 SCALED(1:BLR(I)%M,1) = A(POSELTD+LD_DIAG*(J-1)+J-1)
3412 & * BLR(I)%Q(1:BLR(I)%M,J)
3413 CALL MPI_PACK( SCALED(1,1), BLR(I)%M,
3414 & MPI_DOUBLE_COMPLEX,
3415 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3418 PIV1 = A(POSELTD+LD_DIAG*(J-1)+J-1)
3419 PIV2 = A(POSELTD+LD_DIAG*J+J)
3420 OFFDIAG = A(POSELTD+LD_DIAG*(J-1)+J)
3421 BLOCK(1:BLR(I)%M) = BLR(I)%Q(1:BLR(I)%M,J)
3422 SCALED(1:BLR(I)%M,1) = PIV1 * BLR(I)%Q(1:BLR(I)%M,J)
3423 & + OFFDIAG * BLR(I)%Q(1:BLR(I)%M,J+1)
3424 CALL MPI_PACK( SCALED(1,1), BLR(I)%M,
3425 & MPI_DOUBLE_COMPLEX,
3426 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3427 SCALED(1:BLR(I)%M,2) = OFFDIAG * BLOCK(1:BLR(I)%M)
3428 & + PIV2 * BLR(I)%Q(1:BLR(I)%M,J+1)
3429 CALL MPI_PACK( SCALED(1,2), BLR(I)%M,
3430 & MPI_DOUBLE_COMPLEX,
3431 & BUF(1), LBUF, POSITION, COMM, IERR_MPI )
3438 IF (allocated(BLOCK)) deallocate(BLOCK)
3439 IF (allocated(SCALED)) deallocate(SCALED)
3441 END SUBROUTINE MUMPS_MPI_PACK_SCALE_LR
3442 END MODULE ZMUMPS_BUF
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_test(ireq, flag, status, ierr)
subroutine mpi_pack(inbuf, incnt, datatype, outbuf, outcnt, position, comm, ierr)
subroutine mpi_request_free(ireq, ierr)
subroutine mpi_pack_size(incnt, datatype, comm, size, ierr)
subroutine mpi_cancel(ireq, ierr)
subroutine, public zmumps_buf_send_contrib_type3(n, ison, nbcol_son, nbrow_son, indcol_son, indrow_son, ld_son, val_son, tag, subset_row, subset_col, nsubset_row, nsubset_col, nsuprow, nsupcol, nprow, npcol, mblock, rg2l_row, rg2l_col, nblock, pdest, comm, ierr, tab, tabsize, transp, size_pack, n_already_sent, keep, bbpcbp)
subroutine, public zmumps_blr_pack_cb_lrb(cb_lrb, nb_row_shift, nb_col_shift, nb_blr_cols, panel2send, panel_beg_offset, buf, lbuf, position, comm, ierr)
subroutine, public zmumps_buf_alloc_cb(size, ierr)
subroutine, public zmumps_buf_send_desc_bande(inode, nbprocfils, nlig, ilig, ncol, icol, nass, nslaves_hdr, list_slaves, nslaves, estim_nfs4father_atson, dest, ibc_source, nfront, comm, keep, ierr, lrstatus)
subroutine, public zmumps_buf_init(intsize, realsize)
subroutine, public zmumps_buf_send_fils(what, comm, nprocs, father_node, inode, ncb, keep, myid, remote, ierr)
subroutine, public zmumps_buf_send_master2slave(nrhs, inode, ifath, eff_cb_size, ld_cb, ld_piv, npiv, jbdeb, jbfin, cb, sol, dest, comm, keep, ierr)
subroutine buf_deall(buf, ierr)
type(zmumps_comm_buffer_type), save buf_cb
subroutine zmumps_buf_empty(b, flag)
subroutine, public zmumps_buf_all_empty(check_comm_nodes, check_comm_load, flag)
subroutine, public zmumps_buf_broadcast(what, comm, nprocs, future_niv2, load, upd_load, myid, keep, ierr)
subroutine, public zmumps_buf_max_array_minsize(nfs4father, ierr)
subroutine, public zmumps_mpi_pack_lrb(lrb, buf, lbuf, position, comm, ierr)
subroutine, public zmumps_buf_try_free_cb()
subroutine, public zmumps_buf_send_1int(i, dest, tag, comm, keep, ierr)
integer, save, public buf_lmax_array
double precision, dimension(:), allocatable, target, save, public buf_max_array
subroutine, public zmumps_buf_send_blfac_slave(inode, npiv, fpere, iposk, jposk, uip21k, ncolu, ndest, pdest, comm, keep, lr_activated, blr_ls, ipanel, a, la, posblocfacto, ld_blocfacto, ipiv, maxi_cluster, ierr)
type(zmumps_comm_buffer_type), save buf_small
subroutine, public zmumps_buf_send_blocfacto(inode, nfront, ncol, npiv, fpere, lastbl, ipiv, val, pdest, ndest, keep, nb_bloc_fac, nslaves_tot, width, comm, nelim, npartsass, current_blr_panel, lr_activated, blr_loru ierr)
subroutine, public zmumps_buf_send_maitre2(nbrows_already_sent, ipere, ison, nrow, irow, ncol, icol, val, lda, nelim, type_son, nslaves, slaves, dest, comm, ierr, slavef, keep, keep8, iniv2, tab_pos_in_pere)
type(zmumps_comm_buffer_type), save buf_load
subroutine, public zmumps_buf_send_maplig(inode, nfront, nass1, nfs4father, ison, myid, nslaves, slaves_pere, trow, ncbson, comm, ierr, dest, ndest, slavef, keep, keep8, step, n, istep_to_iniv2, tab_pos_in_per)
integer, save size_rbuf_bytes
subroutine, public zmumps_buf_send_contrib_type2(nbrows_already_sent, desc_in_lu, ipere, nfront_pere, nass_pere, nfs4father, nslaves_pere, ison, nbrow, lmap, maprow, perm, iw_cbson, a_cbson, la_cbson, islave, pdest, pdest_master, comm, ierr, keep, keep8, step, n, slavef, istep_to_iniv2, tab_pos_in_pere, packed_cb, keep253_loc, nvschur, son_niv, myid, npiv_check)
subroutine buf_adjust(buf, size)
subroutine, public zmumps_mpi_unpack_lrb(bufr, lbufr, lbufr_bytes, position, lrb, keep8, comm, iflag, ierror)
subroutine, public zmumps_buf_send_cb(nbrows_already_sent, inode, fpere, nfront, lcont, nass, npiv, iwrow, iwcol, a, packed_cb, dest, tag, comm, keep, ierr)
subroutine, public zmumps_buf_send_root2son(ison, nelim_root, dest, comm, keep, ierr)
subroutine mumps_mpi_pack_scale_lr(blr, buf, lbuf, position, comm, a, la, poseltd, ld_diag, ipiv, npiv, maxi_cluster, ierr)
subroutine, public zmumps_buf_deall_max_array()
subroutine, public zmumps_buf_send_vcb(nrhs_b, node1, node2, ncb, ldw, long, iw, w, jbdeb, jbfin, rhscomp, nrhs, lrhscomp, iposinrhscomp, npiv, keep, dest, tag, comm, ierr)
subroutine, public zmumps_buf_test()
subroutine, public zmumps_buf_alloc_small_buf(size, ierr)
subroutine, public zmumps_buf_send_rtnelind(ison, nelim, nelim_row, nelim_col, nslaves, slaves, dest, comm, keep, ierr)
subroutine, public zmumps_buf_send_backvec(nrhs, inode, w, lw, ld_w, dest, msgtag, jbdeb, jbfin, keep, comm, ierr)
subroutine zmumps_buf_size_available(b, size_av)
subroutine, public zmumps_buf_alloc_load_buffer(size, ierr)
subroutine, public zmumps_buf_dist_irecv_size(zmumps_lbufr_bytes)
subroutine, public zmumps_buf_send_not_mstr(comm, myid, nprocs, max_surf_master, keep, ierr)
subroutine, public zmumps_buf_deall_load_buffer(ierr)
subroutine buf_alloc(buf, size, ierr)
subroutine buf_look(b, ipos, ireq, msg_size, ierr, ndest, pdest, test_only)
subroutine, public zmumps_buf_send_root2slave(tot_root_size, tot_cont2recv, dest, comm, keep, ierr)
subroutine, public zmumps_buf_ini_myid(myid)
subroutine, public zmumps_buf_deall_small_buf(ierr)
subroutine zmumps_buf_try_free(b)
subroutine, public zmumps_buf_bcast_array(bdc_mem, comm, myid, nprocs, future_niv2, nslaves, list_slaves, inode, mem_increment, flops_increment, cb_band, what, keep, ierr)
subroutine, public zmumps_buf_send_update_load(bdc_sbtr, bdc_mem, bdc_md, comm, nprocs, load, mem, sbtr_cur, lu_usage, future_niv2, myid, keep, ierr)
subroutine, public zmumps_buf_deall_cb(ierr)