15 & IRN_loc, JCN_loc, NZ_loc,
21 INTEGER,
INTENT(IN) :: MYID, NUMPROCS, COMM
22 INTEGER(8),
INTENT(IN) :: NZ_loc
23 INTEGER,
INTENT(IN) :: IWSZ
24 INTEGER,
INTENT(IN) :: ISZ, OSZ
25 INTEGER,
INTENT(IN) :: IRN_loc(NZ_loc), JCN_loc(NZ_loc)
29 INTEGER,
INTENT(OUT) :: IPARTVEC(ISZ)
37#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
38 INTEGER(4),
INTENT(OUT) :: IWRK(IWSZ)
40 INTEGER,
INTENT(OUT) :: IWRK(IWSZ)
50 IF(numprocs.NE.1)
THEN
56#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
69 IF((ir.GE.1).AND.(ir.LE.isz).AND.
70 & (ic.GE.1).AND.(ic.LE.osz))
THEN
71 iwrk(2*ir-1) = iwrk(2*ir-1) + 1
75 & mpi_2integer, op, comm, ierror)
77 ipartvec(i) = iwrk(2*i+2*isz)
93 & IRN_loc, JCN_loc, NZ_loc,
94 & ROWPARTVEC, COLPARTVEC, M, N,
99 INTEGER(8),
INTENT(IN) :: NZ_loc
100 INTEGER,
INTENT(IN) :: MYID, NUMPROCS, M, N, IWSZ
101 INTEGER,
INTENT(IN) :: IRN_loc(NZ_loc), JCN_loc(NZ_loc)
104 INTEGER,
INTENT(IN) :: ROWPARTVEC(M)
105 INTEGER,
INTENT(IN) :: COLPARTVEC(N)
106 INTEGER,
INTENT(IN) :: COMM
113 INTEGER INUMMYR, INUMMYC
132 IF(rowpartvec(i).EQ.myid)
THEN
134 inummyr = inummyr + 1
140 IF((ir.GE.1).AND.(ir.LE.m).AND.
141 & ((ic.GE.1).AND.(ic.LE.n)) )
THEN
142 IF(iwrk(ir) .EQ. 0)
THEN
144 inummyr = inummyr + 1
151 IF(colpartvec(i).EQ.myid)
THEN
153 inummyc = inummyc + 1
159 IF((ir.GE.1).AND.(ir.LE.m).AND.
160 & ((ic.GE.1).AND.(ic.LE.n)) )
THEN
161 IF(iwrk(ic) .EQ. 0)
THEN
163 inummyc = inummyc + 1
171 & IRN_loc, JCN_loc, NZ_loc,
172 & ROWPARTVEC, COLPARTVEC, M, N,
173 & MYROWINDICES, INUMMYR,
174 & MYCOLINDICES, INUMMYC,
178 INTEGER MYID, NUMPROCS, M, N
179 INTEGER INUMMYR, INUMMYC, IWSZ
180 INTEGER IRN_loc(NZ_loc), JCN_loc(NZ_loc)
181 INTEGER ROWPARTVEC(M)
182 INTEGER COLPARTVEC(N)
183 INTEGER MYROWINDICES(INUMMYR)
184 INTEGER MYCOLINDICES(INUMMYC)
188 INTEGER I, IR, IC, ITMP, MAXMN
192 IF(n > maxmn) maxmn = n
198 IF(rowpartvec(i).EQ.myid) iwrk(i)=1
203 IF((ir.GE.1).AND.(ir.LE.m).AND.
204 & ((ic.GE.1).AND.(ic.LE.n)) )
THEN
205 IF(iwrk(ir) .EQ. 0) iwrk(ir)= 1
211 IF(iwrk(i).EQ.1)
THEN
212 myrowindices(itmp) = i
221 IF(colpartvec(i).EQ.myid) iwrk(i)= 1
227 & ((ic.GE.1).AND.(ic.LE.n)) )
THEN
228 IF(iwrk(ic) .EQ. 0) iwrk(ic)= 1
234 IF(iwrk(i).EQ.1)
THEN
235 mycolindices(itmp) = i
249 DOUBLE PRECISION d(dsz)
254 DOUBLE PRECISION rone
255 PARAMETER(rone=1.0d0)
259 IF (.NOT.( (d(iid).LE.(rone+eps)).AND.
260 & ((rone-eps).LE.d(iid)) ))
THEN
269 DOUBLE PRECISION d(dsz)
273 DOUBLE PRECISION rone
274 parameter(rone=1.0d0)
277 IF (.NOT.( (d(i).LE.(rone+eps)).AND.
278 & ((rone-eps).LE.d(i)) ))
THEN
288 & DC, N, INDXC, INDXCSZ, EPS, COMM)
291 INTEGER m, n, indxrsz, indxcsz
292 DOUBLE PRECISION dr(m), dc(n)
293 INTEGER indxr(indxrsz), indxc(indxcsz)
298 INTEGER glores, myresr, myresc, myres
302 myres = myresr + myresc
304 & mpi_sum, comm, ierr)
317 DOUBLE PRECISION d(dsz)
318 DOUBLE PRECISION tmpd(dsz)
321 DOUBLE PRECISION rone
322 parameter(rone=1.0d0)
324 DOUBLE PRECISION errmax
329 IF(abs(rone-tmpd(iind)).GT.errmax)
THEN
330 errmax = abs(rone-tmpd(iind))
339 DOUBLE PRECISION d(dsz)
340 DOUBLE PRECISION tmpd(dsz)
342 DOUBLE PRECISION rone
343 parameter(rone=1.0d0)
345 DOUBLE PRECISION errmax1
349 IF(abs(rone-tmpd(i)).GT.errmax1)
THEN
350 errmax1 = abs(rone-tmpd(i))
363 DOUBLE PRECISION D(DSZ)
364 DOUBLE PRECISION TMPD(DSZ)
369 DOUBLE PRECISION RZERO
370 parameter(rzero=0.0d0)
373 IF (tmpd(iind).NE.rzero) d(iind) = d(iind)/sqrt(tmpd(iind))
380 DOUBLE PRECISION D(DSZ)
381 DOUBLE PRECISION TMPD(DSZ)
385 DOUBLE PRECISION RZERO
386 parameter(rzero=0.0d0)
388 IF (tmpd(i) .NE. rzero) d(i) = d(i)/sqrt(tmpd(i))
398 DOUBLE PRECISION D(DSZ)
415 DOUBLE PRECISION D(DSZ)
421 d(iind) = 1.0d0/d(iind)
431 DOUBLE PRECISION D(DSZ)
446 DOUBLE PRECISION TMPD(TMPSZ)
450 DOUBLE PRECISION DZERO
451 parameter(dzero=0.0d0)
453 tmpd(indx(i)) = dzero
472#if defined(WORKAROUNDINTELILP64MPI2INTEGER) || defined(WORKAROUNDILP64MPICUSTOMREDUCE)
474 INTEGER(4) :: INV(2*LEN)
475 INTEGER(4) :: INOUTV(2*LEN)
479 INTEGER :: INV(2*LEN)
480 INTEGER :: INOUTV(2*LEN)
484#if defined(WORKAROUNDINTELILP64MPI2INTEGER) || defined(WORKAROUNDILP64MPICUSTOMREDUCE)
485 INTEGER(4) DIN, DINOUT, PIN, PINOUT
487 INTEGER DIN, DINOUT, PIN, PINOUT
495 IF (dinout < din)
THEN
498 ELSE IF (dinout == din)
THEN
501 IF ((mod(dinout,2).EQ.0).AND.(pin<pinout))
THEN
503 ELSE IF ((mod(dinout,2).EQ.1).AND.(pin>pinout))
THEN
517#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
537 & NZ_loc, INDX, OSZ, OINDX,ISNDRCVNUM,ISNDRCVVOL,
538 & OSNDRCVNUM,OSNDRCVVOL,
539 & IWRK,IWRKSZ, SNDSZ, RCVSZ, COMM)
541 INTEGER(8),
INTENT(IN) :: NZ_loc
542 INTEGER,
INTENT(IN) :: IWRKSZ
543 INTEGER,
INTENT(IN) :: MYID, NUMPROCS, ISZ, OSZ
544 INTEGER,
INTENT(IN) :: COMM
546 INTEGER,
INTENT(IN) :: INDX(NZ_loc)
547 INTEGER,
INTENT(IN) :: OINDX(NZ_loc)
550 INTEGER,
INTENT(IN) :: IPARTVEC(ISZ)
557 INTEGER,
INTENT(OUT) :: SNDSZ(NUMPROCS)
558 INTEGER,
INTENT(OUT) :: RCVSZ(NUMPROCS)
572 INTEGER,
INTENT(OUT) :: ISNDRCVNUM, OSNDRCVNUM
573 INTEGER,
INTENT(OUT) :: ISNDRCVVOL, OSNDRCVVOL
581 INTEGER IIND, IIND2, PIND
597.GE..AND..LE..AND.
IF((IIND1)(IINDISZ)
598.GE..AND..LE.
& (IIND21)(IIND2OSZ))THEN
599 PIND = IPARTVEC(IIND)
600.NE.
IF(PIND MYID) THEN
603.EQ.
IF(IWRK(IIND)0) THEN
605 SNDSZ(PIND+1) = SNDSZ(PIND+1)+1
612 CALL MPI_ALLTOALL(SNDSZ, 1, MPI_INTEGER,
613 & RCVSZ, 1, MPI_INTEGER, COMM, IERROR)
622 IF(SNDSZ(I) > 0) OSNDRCVNUM = OSNDRCVNUM + 1
623 OSNDRCVVOL = OSNDRCVVOL + SNDSZ(I)
624 IF(RCVSZ(I) > 0) ISNDRCVNUM = ISNDRCVNUM + 1
625 ISNDRCVVOL = ISNDRCVVOL + RCVSZ(I)
628 END SUBROUTINE ZMUMPS_NUMVOLSNDRCV
632 SUBROUTINE ZMUMPS_SETUPCOMMS(MYID, NUMPROCS, ISZ, IPARTVEC,
633 & NZ_loc, INDX, OSZ, OINDX,
634 & ISNDRCVNUM, ISNDVOL, INGHBPRCS, ISNDRCVIA, ISNDRCVJA,
635 & OSNDRCVNUM, OSNDVOL, ONGHBPRCS, OSNDRCVIA, OSNDRCVJA,
636 & SNDSZ, RCVSZ, IWRK,
642 INTEGER ISNDVOL, OSNDVOL
643 INTEGER MYID, NUMPROCS, ISZ, OSZ
646 INTEGER OINDX(NZ_loc)
648 INTEGER IPARTVEC(ISZ)
650 INTEGER :: ISNDRCVNUM
651 INTEGER INGHBPRCS(ISNDRCVNUM)
652 INTEGER ISNDRCVIA(NUMPROCS+1)
653 INTEGER ISNDRCVJA(ISNDVOL)
655 INTEGER ONGHBPRCS(OSNDRCVNUM)
656 INTEGER OSNDRCVIA(NUMPROCS+1)
657 INTEGER OSNDRCVJA(OSNDVOL)
658 INTEGER SNDSZ(NUMPROCS)
659 INTEGER RCVSZ(NUMPROCS)
661 INTEGER ISTATUS(MPI_STATUS_SIZE, ISNDRCVNUM)
662 INTEGER REQUESTS(ISNDRCVNUM)
663 INTEGER ITAGCOMM, COMM
665 INTEGER I, IIND, IIND2, IPID, OFFS
666 INTEGER IWHERETO, POFFS, ITMP, IERROR
677 OSNDRCVIA(I) = OFFS + SNDSZ(I)
678 IF(SNDSZ(I) > 0) THEN
682 OFFS = OFFS + SNDSZ(I)
684 OSNDRCVIA(NUMPROCS+1) = OFFS
692.GE..AND..LE..AND.
IF((IIND1)(IINDISZ)
693.GE..AND..LE.
& (IIND21)(IIND2OSZ) ) THEN
695.NE.
IF(IPIDMYID) THEN
696.EQ.
IF(IWRK(IIND)0) THEN
697 IWHERETO = OSNDRCVIA(IPID+1)-1
698 OSNDRCVIA(IPID+1) = OSNDRCVIA(IPID+1)-1
699 OSNDRCVJA(IWHERETO) = IIND
707 CALL MPI_BARRIER(COMM,IERROR)
712 ISNDRCVIA(I) = OFFS + RCVSZ(I-1)
713 IF(RCVSZ(I-1) > 0) THEN
717 OFFS = OFFS + RCVSZ(I-1)
719 CALL MPI_BARRIER(COMM,IERROR)
722 OFFS = ISNDRCVIA(IPID)
723 ITMP = ISNDRCVIA(IPID+1) - ISNDRCVIA(IPID)
724 CALL MPI_IRECV(ISNDRCVJA(OFFS), ITMP, MPI_INTEGER,IPID-1,
725 & ITAGCOMM, COMM, REQUESTS(I),IERROR)
729 OFFS = OSNDRCVIA(IPID)
730 ITMP = OSNDRCVIA(IPID+1)-OSNDRCVIA(IPID)
731 CALL MPI_SEND(OSNDRCVJA(OFFS), ITMP, MPI_INTEGER, IPID-1,
732 & ITAGCOMM, COMM,IERROR)
734 IF(ISNDRCVNUM > 0) THEN
735 CALL MPI_WAITALL(ISNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
737 CALL MPI_BARRIER(COMM,IERROR)
739 END SUBROUTINE ZMUMPS_SETUPCOMMS
743 SUBROUTINE ZMUMPS_DOCOMMINF(MYID, NUMPROCS,TMPD, IDSZ, ITAGCOMM,
744 & ISNDRCVNUM, INGHBPRCS,
745 & ISNDRCVVOL, ISNDRCVIA, ISNDRCVJA, ISNDRCVA,
746 & OSNDRCVNUM, ONGHBPRCS,
747 & OSNDRCVVOL, OSNDRCVIA, OSNDRCVJA, OSNDRCVA,
752 INTEGER MYID, NUMPROCS, IDSZ, ITAGCOMM
753 INTEGER ISNDRCVNUM,OSNDRCVNUM, ISNDRCVVOL, OSNDRCVVOL
754 DOUBLE PRECISION TMPD(IDSZ)
755 INTEGER INGHBPRCS(ISNDRCVNUM), ONGHBPRCS(OSNDRCVNUM)
756 INTEGER ISNDRCVIA(NUMPROCS+1), ISNDRCVJA(ISNDRCVVOL)
757 DOUBLE PRECISION ISNDRCVA(ISNDRCVVOL)
758 INTEGER OSNDRCVIA(NUMPROCS+1), OSNDRCVJA(OSNDRCVVOL)
759 DOUBLE PRECISION OSNDRCVA(OSNDRCVVOL)
760 INTEGER ISTATUS(MPI_STATUS_SIZE, max(ISNDRCVNUM,OSNDRCVNUM))
761 INTEGER REQUESTS(max(ISNDRCVNUM,OSNDRCVNUM))
764 INTEGER I, PID, OFFS, SZ, J, JS, JE, IID
767 OFFS = ISNDRCVIA(PID)
768 SZ = ISNDRCVIA(PID+1) - ISNDRCVIA(PID)
769 CALL MPI_IRECV(ISNDRCVA(OFFS), SZ,
770 & MPI_DOUBLE_PRECISION, PID-1,
771 & ITAGCOMM,COMM,REQUESTS(I), IERROR)
775 OFFS = OSNDRCVIA(PID)
776 SZ = OSNDRCVIA(PID+1) - OSNDRCVIA(PID)
778 JE = OSNDRCVIA(PID+1) - 1
781 OSNDRCVA(J) = TMPD(IID)
783 CALL MPI_SEND(OSNDRCVA(OFFS), SZ, MPI_DOUBLE_PRECISION, PID-1,
784 & ITAGCOMM, COMM, IERROR)
786 IF(ISNDRCVNUM > 0) THEN
787 CALL MPI_WAITALL(ISNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
793 JE = ISNDRCVIA(PID+1)-1
796 IF(TMPD(IID) < ISNDRCVA(J)) TMPD(IID)= ISNDRCVA(J)
802 OFFS = OSNDRCVIA(PID)
803 SZ = OSNDRCVIA(PID+1) - OSNDRCVIA(PID)
804 CALL MPI_IRECV(OSNDRCVA(OFFS), SZ,
805 & MPI_DOUBLE_PRECISION, PID-1,
806 & ITAGCOMM+1,COMM,REQUESTS(I), IERROR)
810 OFFS = ISNDRCVIA(PID)
811 SZ = ISNDRCVIA(PID+1)-ISNDRCVIA(PID)
813 JE = ISNDRCVIA(PID+1) -1
816 ISNDRCVA(J) = TMPD(IID)
818 CALL MPI_SEND(ISNDRCVA(OFFS), SZ, MPI_DOUBLE_PRECISION, PID-1,
819 & ITAGCOMM+1, COMM, IERROR)
821 IF(OSNDRCVNUM > 0) THEN
822 CALL MPI_WAITALL(OSNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
827 JE = OSNDRCVIA(PID+1) - 1
830 TMPD(IID)=OSNDRCVA(J)
834 END SUBROUTINE ZMUMPS_DOCOMMINF
838 SUBROUTINE ZMUMPS_DOCOMM1N(MYID, NUMPROCS,TMPD, IDSZ, ITAGCOMM,
839 & ISNDRCVNUM, INGHBPRCS,
840 & ISNDRCVVOL, ISNDRCVIA, ISNDRCVJA, ISNDRCVA,
841 & OSNDRCVNUM, ONGHBPRCS,
842 & OSNDRCVVOL, OSNDRCVIA, OSNDRCVJA, OSNDRCVA,
847 INTEGER MYID, NUMPROCS, IDSZ, ITAGCOMM
848 INTEGER ISNDRCVNUM,OSNDRCVNUM, ISNDRCVVOL, OSNDRCVVOL
849 DOUBLE PRECISION TMPD(IDSZ)
850 INTEGER INGHBPRCS(ISNDRCVNUM), ONGHBPRCS(OSNDRCVNUM)
851 INTEGER ISNDRCVIA(NUMPROCS+1), ISNDRCVJA(ISNDRCVVOL)
852 DOUBLE PRECISION ISNDRCVA(ISNDRCVVOL)
853 INTEGER OSNDRCVIA(NUMPROCS+1), OSNDRCVJA(OSNDRCVVOL)
854 DOUBLE PRECISION OSNDRCVA(OSNDRCVVOL)
855 INTEGER ISTATUS(MPI_STATUS_SIZE, max(ISNDRCVNUM,OSNDRCVNUM))
856 INTEGER REQUESTS(max(ISNDRCVNUM,OSNDRCVNUM))
859 INTEGER I, PID, OFFS, SZ, J, JS, JE, IID
862 OFFS = ISNDRCVIA(PID)
863 SZ = ISNDRCVIA(PID+1) - ISNDRCVIA(PID)
864 CALL MPI_IRECV(ISNDRCVA(OFFS), SZ,
865 & MPI_DOUBLE_PRECISION, PID-1,
866 & ITAGCOMM,COMM,REQUESTS(I), IERROR)
870 OFFS = OSNDRCVIA(PID)
871 SZ = OSNDRCVIA(PID+1) - OSNDRCVIA(PID)
873 JE = OSNDRCVIA(PID+1) - 1
876 OSNDRCVA(J) = TMPD(IID)
878 CALL MPI_SEND(OSNDRCVA(OFFS), SZ, MPI_DOUBLE_PRECISION, PID-1,
879 & ITAGCOMM, COMM, IERROR)
881 IF(ISNDRCVNUM > 0) THEN
882 CALL MPI_WAITALL(ISNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
888 JE = ISNDRCVIA(PID+1)-1
891 TMPD(IID) = TMPD(IID)+ ISNDRCVA(J)
897 OFFS = OSNDRCVIA(PID)
898 SZ = OSNDRCVIA(PID+1) - OSNDRCVIA(PID)
899 CALL MPI_IRECV(OSNDRCVA(OFFS), SZ,
900 & MPI_DOUBLE_PRECISION, PID-1,
901 & ITAGCOMM+1,COMM,REQUESTS(I), IERROR)
905 OFFS = ISNDRCVIA(PID)
906 SZ = ISNDRCVIA(PID+1)-ISNDRCVIA(PID)
908 JE = ISNDRCVIA(PID+1) -1
911 ISNDRCVA(J) = TMPD(IID)
913 CALL MPI_SEND(ISNDRCVA(OFFS), SZ, MPI_DOUBLE_PRECISION, PID-1,
914 & ITAGCOMM+1, COMM, IERROR)
916 IF(OSNDRCVNUM > 0) THEN
917 CALL MPI_WAITALL(OSNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
922 JE = OSNDRCVIA(PID+1) - 1
925 TMPD(IID)=OSNDRCVA(J)
929 END SUBROUTINE ZMUMPS_DOCOMM1N
930 SUBROUTINE ZMUMPS_CREATEPARTVECSYM(MYID, NUMPROCS, COMM,
931 & IRN_loc, JCN_loc, NZ_loc,
935 EXTERNAL ZMUMPS_BUREDUCE
936 INTEGER, INTENT(IN) :: MYID, NUMPROCS, COMM
938 INTEGER, INTENT(IN) :: ISZ, IWSZ
939 INTEGER, INTENT(IN) :: IRN_loc(NZ_loc), JCN_loc(NZ_loc)
944 INTEGER, INTENT(OUT) :: IPARTVEC(ISZ)
952#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
953 INTEGER(4), INTENT(OUT) :: IWRK(IWSZ)
955 INTEGER, INTENT(OUT) :: IWRK(IWSZ)
965.NE.
IF(NUMPROCS1) THEN
969 CALL MPI_OP_CREATE(ZMUMPS_BUREDUCE, .TRUE., OP, IERROR)
971#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
972 CALL ZMUMPS_IBUINIT(IWRK, 4*ISZ, int(ISZ,4))
974 CALL ZMUMPS_IBUINIT(IWRK, 4*ISZ, ISZ)
983.GE..AND..LE..AND.
IF((IR1)(IRISZ)
984.GE..AND..LE.
& (IC1)(ICISZ)) THEN
985 IWRK(2*IR-1) = IWRK(2*IR-1) + 1
986 IWRK(2*IC-1) = IWRK(2*IC-1) + 1
989 CALL MPI_ALLREDUCE(IWRK(1), IWRK(1+2*ISZ), ISZ,
990 & MPI_2INTEGER, OP, COMM, IERROR)
992 IPARTVEC(I) = IWRK(2*I+2*ISZ)
995 CALL MPI_OP_FREE(OP, IERROR)
1002 END SUBROUTINE ZMUMPS_CREATEPARTVECSYM
1003 SUBROUTINE ZMUMPS_NUMVOLSNDRCVSYM(MYID, NUMPROCS, ISZ, IPARTVEC,
1004 & NZ_loc, INDX,OINDX,ISNDRCVNUM,ISNDRCVVOL,OSNDRCVNUM,OSNDRCVVOL,
1005 & IWRK,IWRKSZ, SNDSZ, RCVSZ, COMM)
1007 INTEGER(8), INTENT(IN) :: NZ_loc
1008 INTEGER, INTENT(IN) :: IWRKSZ
1009 INTEGER, INTENT(IN) :: MYID, NUMPROCS, ISZ
1010 INTEGER, INTENT(IN) :: INDX(NZ_loc), OINDX(NZ_loc)
1011 INTEGER, INTENT(IN) :: IPARTVEC(ISZ)
1012 INTEGER, INTENT(IN) :: COMM
1019 INTEGER :: SNDSZ(NUMPROCS)
1020 INTEGER :: RCVSZ(NUMPROCS)
1034 INTEGER, INTENT(OUT) :: ISNDRCVNUM, ISNDRCVVOL
1035 INTEGER, INTENT(OUT) :: OSNDRCVNUM, OSNDRCVVOL
1038 INTEGER, INTENT(OUT) :: IWRK(IWRKSZ)
1043 INTEGER IIND, IIND2, PIND
1059.GE..AND..LE..AND..GE.
IF((IIND1)(IINDISZ)(IIND21)
1060.AND..LE.
& (IIND2ISZ)) THEN
1061 PIND = IPARTVEC(IIND)
1062.NE.
IF(PIND MYID) THEN
1065.EQ.
IF(IWRK(IIND)0) THEN
1067 SNDSZ(PIND+1) = SNDSZ(PIND+1)+1
1071 PIND = IPARTVEC(IIND)
1072.NE.
IF(PIND MYID) THEN
1073.EQ.
IF(IWRK(IIND)0) THEN
1075 SNDSZ(PIND+1) = SNDSZ(PIND+1)+1
1082 CALL MPI_ALLTOALL(SNDSZ, 1, MPI_INTEGER,
1083 & RCVSZ, 1, MPI_INTEGER, COMM, IERROR)
1092 IF(SNDSZ(I) > 0) OSNDRCVNUM = OSNDRCVNUM + 1
1093 OSNDRCVVOL = OSNDRCVVOL + SNDSZ(I)
1094 IF(RCVSZ(I) > 0) ISNDRCVNUM = ISNDRCVNUM + 1
1095 ISNDRCVVOL = ISNDRCVVOL + RCVSZ(I)
1098 END SUBROUTINE ZMUMPS_NUMVOLSNDRCVSYM
1099 SUBROUTINE ZMUMPS_FINDNUMMYROWCOLSYM(MYID, NUMPROCS, COMM,
1100 & IRN_loc, JCN_loc, NZ_loc,
1105 INTEGER MYID, NUMPROCS, N
1106 INTEGER(8) :: NZ_loc
1107 INTEGER IRN_loc(NZ_loc), JCN_loc(NZ_loc)
1124.EQ.
IF(PARTVEC(I)MYID) THEN
1126 INUMMYR = INUMMYR + 1
1132.GE..AND..LE..AND.
IF((IR1)(IRN)
1133.GE..AND..LE.
& ((IC1)(ICN))) THEN
1134.EQ.
IF(IWRK(IR) 0) THEN
1136 INUMMYR = INUMMYR + 1
1139.GE..AND..LE..AND.
IF((IR1)(IRN)
1140.GE..AND..LE.
& ((IC1)(ICN))) THEN
1141.EQ.
IF(IWRK(IC)0) THEN
1143 INUMMYR = INUMMYR + 1
1151 END SUBROUTINE ZMUMPS_FINDNUMMYROWCOLSYM
1152 INTEGER FUNCTION ZMUMPS_CHKCONVGLOSYM(D, N, INDXR, INDXRSZ,
1157 DOUBLE PRECISION D(N)
1158 INTEGER INDXR(INDXRSZ)
1159 DOUBLE PRECISION EPS
1161 EXTERNAL ZMUMPS_CHK1LOC
1162 INTEGER ZMUMPS_CHK1LOC
1163 INTEGER GLORES, MYRESR, MYRES
1165 MYRESR = ZMUMPS_CHK1LOC(D, N, INDXR, INDXRSZ, EPS)
1167 CALL MPI_ALLREDUCE(MYRES, GLORES, 1, MPI_INTEGER,
1168 & MPI_SUM, COMM, IERR)
1169 ZMUMPS_CHKCONVGLOSYM = GLORES
1171 END FUNCTION ZMUMPS_CHKCONVGLOSYM
1172 SUBROUTINE ZMUMPS_FILLMYROWCOLINDICESSYM(MYID, NUMPROCS,COMM,
1173 & IRN_loc, JCN_loc, NZ_loc,
1175 & MYROWINDICES, INUMMYR,
1178 INTEGER MYID, NUMPROCS, N
1179 INTEGER(8) :: NZ_loc
1180 INTEGER INUMMYR, IWSZ
1181 INTEGER IRN_loc(NZ_loc), JCN_loc(NZ_loc)
1183 INTEGER MYROWINDICES(INUMMYR)
1187 INTEGER I, IR, IC, ITMP, MAXMN
1196.EQ.
IF(PARTVEC(I)MYID) IWRK(I)=1
1201.GE..AND..LE..AND.
IF((IR1)(IRN)
1202.GE..AND..LE.
& ((IC1)(ICN))) THEN
1203.EQ.
IF(IWRK(IR) 0) IWRK(IR)= 1
1205.GE..AND..LE..AND.
IF((IR1)(IRN)
1206.GE..AND..LE.
& ((IC1)(ICN))) THEN
1207.EQ.
IF(IWRK(IC) 0) IWRK(IC)=1
1213.EQ.
IF(IWRK(I)1) THEN
1214 MYROWINDICES(ITMP) = I
1223 END SUBROUTINE ZMUMPS_FILLMYROWCOLINDICESSYM
1224 SUBROUTINE ZMUMPS_SETUPCOMMSSYM(MYID, NUMPROCS, ISZ, IPARTVEC,
1225 & NZ_loc, INDX, OINDX,
1226 & ISNDRCVNUM, ISNDVOL, INGHBPRCS, ISNDRCVIA, ISNDRCVJA,
1227 & OSNDRCVNUM, OSNDVOL, ONGHBPRCS, OSNDRCVIA, OSNDRCVJA,
1228 & SNDSZ, RCVSZ, IWRK,
1229 & ISTATUS, REQUESTS,
1233 INTEGER MYID, NUMPROCS, ISZ, ISNDVOL, OSNDVOL
1234 INTEGER(8) :: NZ_loc
1236 INTEGER INDX(NZ_loc), OINDX(NZ_loc)
1238 INTEGER IPARTVEC(ISZ)
1240 INTEGER ISNDRCVNUM, INGHBPRCS(ISNDRCVNUM)
1241 INTEGER ISNDRCVIA(NUMPROCS+1)
1242 INTEGER ISNDRCVJA(ISNDVOL)
1243 INTEGER OSNDRCVNUM, ONGHBPRCS(OSNDRCVNUM)
1244 INTEGER OSNDRCVIA(NUMPROCS+1)
1245 INTEGER OSNDRCVJA(OSNDVOL)
1246 INTEGER SNDSZ(NUMPROCS)
1247 INTEGER RCVSZ(NUMPROCS)
1249 INTEGER ISTATUS(MPI_STATUS_SIZE, ISNDRCVNUM)
1250 INTEGER REQUESTS(ISNDRCVNUM)
1251 INTEGER ITAGCOMM, COMM
1253 INTEGER I, IIND,IIND2,IPID,OFFS,IWHERETO,POFFS, ITMP, IERROR
1264 OSNDRCVIA(I) = OFFS + SNDSZ(I)
1265 IF(SNDSZ(I) > 0) THEN
1269 OFFS = OFFS + SNDSZ(I)
1271 OSNDRCVIA(NUMPROCS+1) = OFFS
1279.GE..AND..LE..AND..GE.
IF((IIND1)(IINDISZ)(IIND21)
1280.AND..LE.
& (IIND2ISZ)) THEN
1282.NE.
IF(IPIDMYID) THEN
1283.EQ.
IF(IWRK(IIND)0) THEN
1284 IWHERETO = OSNDRCVIA(IPID+1)-1
1285 OSNDRCVIA(IPID+1) = OSNDRCVIA(IPID+1)-1
1286 OSNDRCVJA(IWHERETO) = IIND
1292.NE.
IF(IPIDMYID) THEN
1293.EQ.
IF(IWRK(IIND)0) THEN
1294 IWHERETO = OSNDRCVIA(IPID+1)-1
1295 OSNDRCVIA(IPID+1) = OSNDRCVIA(IPID+1)-1
1296 OSNDRCVJA(IWHERETO) = IIND
1304 CALL MPI_BARRIER(COMM,IERROR)
1309 ISNDRCVIA(I) = OFFS + RCVSZ(I-1)
1310 IF(RCVSZ(I-1) > 0) THEN
1311 INGHBPRCS(POFFS)=I-1
1314 OFFS = OFFS + RCVSZ(I-1)
1316 CALL MPI_BARRIER(COMM,IERROR)
1319 OFFS = ISNDRCVIA(IPID)
1320 ITMP = ISNDRCVIA(IPID+1) - ISNDRCVIA(IPID)
1321 CALL MPI_IRECV(ISNDRCVJA(OFFS), ITMP, MPI_INTEGER,IPID-1,
1322 & ITAGCOMM, COMM, REQUESTS(I),IERROR)
1326 OFFS = OSNDRCVIA(IPID)
1327 ITMP = OSNDRCVIA(IPID+1)-OSNDRCVIA(IPID)
1328 CALL MPI_SEND(OSNDRCVJA(OFFS), ITMP, MPI_INTEGER, IPID-1,
1329 & ITAGCOMM, COMM,IERROR)
1331 IF(ISNDRCVNUM > 0) THEN
1332 CALL MPI_WAITALL(ISNDRCVNUM, REQUESTS(1),ISTATUS(1,1),IERROR)
1334 CALL MPI_BARRIER(COMM,IERROR)
1336 END SUBROUTINE ZMUMPS_SETUPCOMMSSYM
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine mpi_op_create(func, commute, op, ierr)
subroutine mpi_op_free(op, ierr)
subroutine zmumps_fillmyrowcolindices(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, rowpartvec, colpartvec, m, n, myrowindices, inummyr, mycolindices, inummyc, iwrk, iwsz)
integer function zmumps_chk1conv(d, dsz, eps)
subroutine zmumps_numvolsndrcv(myid, numprocs, isz, ipartvec, nz_loc, indx, osz, oindx, isndrcvnum, isndrcvvol, osndrcvnum, osndrcvvol, iwrk, iwrksz, sndsz, rcvsz, comm)
subroutine zmumps_zeroout(tmpd, tmpsz, indx, indxsz)
subroutine zmumps_updatescale(d, tmpd, dsz, indx, indxsz)
subroutine zmumps_initreal(d, dsz, val)
subroutine zmumps_invlist(d, dsz, indx, indxsz)
subroutine zmumps_ibuinit(iw, iwsz, ival)
double precision function zmumps_errsca1(d, tmpd, dsz)
integer function zmumps_chkconvglo(dr, m, indxr, indxrsz, dc, n, indxc, indxcsz, eps, comm)
subroutine zmumps_upscale1(d, tmpd, dsz)
subroutine zmumps_bureduce(inv, inoutv, len, dtype)
subroutine zmumps_createpartvec(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, ipartvec, isz, osz, iwrk, iwsz)
integer function zmumps_chk1loc(d, dsz, indx, indxsz, eps)
double precision function zmumps_errscaloc(d, tmpd, dsz, indx, indxsz)
subroutine zmumps_initreallst(d, dsz, indx, indxsz, val)
subroutine zmumps_findnummyrowcol(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, rowpartvec, colpartvec, m, n, inummyr, inummyc, iwrk, iwsz)