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) ::
100 INTEGER,
INTENT(IN) :: MYID, NUMPROCS, M, N,
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
226 IF((ir.GE.1).AND.(ir.LE.m).AND.
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 IF((iind.GE.1).AND.(iind.LE.isz).AND.
598 & (iind2.GE.1).AND.(iind2.LE.osz))
THEN
599 pind = ipartvec(iind)
600 IF(pind .NE. myid)
THEN
603 IF(iwrk(iind).EQ.0)
THEN
605 sndsz(pind+1) = sndsz(pind+1)+1
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)
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 IF((iind.GE.1).AND.(iind.LE.isz).AND.
693 & (iind2.GE.1).AND.(iind2.LE.osz) )
THEN
695 IF(ipid.NE.myid)
THEN
696 IF(iwrk(iind).EQ.0)
THEN
697 iwhereto = osndrcvia(ipid+1)-1
698 osndrcvia(ipid+1) = osndrcvia(ipid+1)-1
699 osndrcvja(iwhereto) = iind
712 isndrcvia(i) = offs + rcvsz(i-1)
713 IF(rcvsz(i-1) > 0)
THEN
717 offs = offs + rcvsz(i-1)
722 offs = isndrcvia(ipid)
723 itmp = isndrcvia(ipid+1) - isndrcvia(ipid)
724 CALL mpi_irecv(isndrcvja(offs), itmp, mpi_integer
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)
744 & ISNDRCVNUM, INGHBPRCS,
745 & ISNDRCVVOL, ISNDRCVIA, ISNDRCVJA, ISNDRCVA,
746 & OSNDRCVNUM, ONGHBPRCS,
747 & OSNDRCVVOL, OSNDRCVIA, OSNDRCVJA, OSNDRCVA,
752 INTEGER MYID, NUMPROCS, , ITAGCOMM
753 INTEGER ISNDRCVNUM,OSNDRCVNUM, ISNDRCVVOL, OSNDRCVVOL
754 DOUBLE PRECISION (IDSZ)
755 INTEGER INGHBPRCS(ISNDRCVNUM), ONGHBPRCS()
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)
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)
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)
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()
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)
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)
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)
931 & IRN_loc, JCN_loc, NZ_loc,
936 INTEGER,
INTENT(IN) :: MYID, NUMPROCS, COMM
938 INTEGER,
INTENT(IN) :: ISZ, IWSZ
939 INTEGER,
INTENT(IN) :: IRN_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 IF(numprocs.NE.1)
THEN
971#if defined(WORKAROUNDINTELILP64MPI2INTEGER)
983 IF((ir.GE.1).AND.(ir.LE.isz).AND.
984 & (ic.GE.1).AND.(ic.LE.isz))
THEN
985 iwrk(2*ir-1) = iwrk(2*ir-1) + 1
986 iwrk(2*ic-1) = iwrk(2*ic-1) + 1
990 & mpi_2integer, op, comm, ierror)
992 ipartvec(i) = iwrk(2*i+2*isz)
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(), 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,
1035 INTEGER,
INTENT(OUT) :: OSNDRCVNUM, OSNDRCVVOL
1038 INTEGER,
INTENT(OUT) :: IWRK(IWRKSZ)
1043 INTEGER , IIND2, PIND
1059 IF((iind.GE.1).AND.(iind.LE.isz).AND.(iind2.GE.1)
1060 & .AND.(iind2.LE.isz))
THEN
1061 pind = ipartvec(iind)
1062 IF(pind .NE. myid)
THEN
1065 IF(iwrk(iind).EQ.0)
THEN
1067 sndsz(pind+1) = sndsz(pind+1)+1
1071 pind = ipartvec(iind)
1072 IF(pind .NE. myid)
THEN
1073 IF(iwrk(iind).EQ.0)
THEN
1075 sndsz(pind+1) = sndsz(pind+1)+1
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)
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 IF(partvec(i).EQ.myid)
THEN
1126 inummyr = inummyr + 1
1132 IF((ir.GE.1).AND.(ir.LE.n).AND.
1133 & ((ic.GE.1).AND.(ic.LE.n)))
THEN
1134 IF(iwrk(ir) .EQ. 0)
THEN
1136 inummyr = inummyr + 1
1139 IF((ir.GE.1).AND.(ir.LE.n).AND.
1140 & ((ic.GE.1).AND.(ic.LE.n)))
THEN
1141 IF(iwrk(ic).EQ.0)
THEN
1143 inummyr = inummyr + 1
1157 DOUBLE PRECISION d(n)
1159 DOUBLE PRECISION eps
1163 INTEGER glores, myresr, myres
1168 & mpi_sum, comm, ierr)
1173 & IRN_loc, JCN_loc, NZ_loc,
1175 & MYROWINDICES, INUMMYR,
1178 INTEGER MYID, NUMPROCS, N
1179 INTEGER(8) :: NZ_loc
1181 INTEGER IRN_loc(NZ_loc), JCN_loc(NZ_loc)
1183 INTEGER MYROWINDICES()
1187 INTEGER I, IR, IC, ITMP, MAXMN
1196 IF(partvec(i).EQ.myid) iwrk(i)=1
1201 IF((ir.GE.1).AND.(ir.LE.n).AND.
1202 & ((ic.GE.1).AND.(ic.LE.n)))
THEN
1203 IF(iwrk(ir) .EQ. 0) iwrk(ir)= 1
1205 IF((ir.GE.1).AND.(ir.LE.n).AND.
1206 & ((ic.GE.1).AND.(ic.LE.n)))
THEN
1207 IF(iwrk(ic) .EQ.0) iwrk(ic)=1
1213 IF(iwrk(i).EQ.1)
THEN
1214 myrowindices(itmp) = i
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)
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 IF((iind.GE.1).AND.(iind.LE.isz).AND.(iind2.GE.1)
1280 & .AND.(iind2.LE.isz))
THEN
1282 IF(ipid.NE.myid)
THEN
1283 IF(iwrk(iind).EQ.0)
THEN
1284 iwhereto = osndrcvia(ipid+1)-1
1285 osndrcvia(ipid+1) = osndrcvia(ipid+1)-1
1286 osndrcvja(iwhereto) = iind
1292 IF(ipid.NE.myid)
THEN
1293 IF(iwrk(iind).EQ.0)
THEN
1295 osndrcvia(ipid+1) = osndrcvia(ipid+1)-1
1296 osndrcvja(iwhereto) = iind
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)
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)
subroutine mpi_waitall(cnt, array_of_requests, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine mpi_alltoall(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, comm, ierr)
subroutine mpi_barrier(comm, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, 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_numvolsndrcvsym(myid, numprocs, isz, ipartvec, nz_loc, indx, oindx, isndrcvnum, isndrcvvol, osndrcvnum, osndrcvvol, iwrk, iwrksz, sndsz, rcvsz, comm)
subroutine zmumps_fillmyrowcolindicessym(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, partvec, n, myrowindices, inummyr, iwrk, iwsz)
subroutine zmumps_setupcommssym(myid, numprocs, isz, ipartvec, nz_loc, indx, oindx, isndrcvnum, isndvol, inghbprcs, isndrcvia, isndrcvja, osndrcvnum, osndvol, onghbprcs, osndrcvia, osndrcvja, sndsz, rcvsz, iwrk, istatus, requests, itagcomm, comm)
subroutine zmumps_updatescale(d, tmpd, dsz, indx, indxsz)
subroutine zmumps_createpartvecsym(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, ipartvec, isz, iwrk, iwsz)
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)
subroutine zmumps_findnummyrowcolsym(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, partvec, n, inummyr, iwrk, iwsz)
integer function zmumps_chkconvglo(dr, m, indxr, indxrsz, dc, n, indxc, indxcsz, eps, comm)
subroutine zmumps_upscale1(d, tmpd, dsz)
subroutine zmumps_docomm1n(myid, numprocs, tmpd, idsz, itagcomm, isndrcvnum, inghbprcs, isndrcvvol, isndrcvia, isndrcvja, isndrcva, osndrcvnum, onghbprcs, osndrcvvol, osndrcvia, osndrcvja, osndrcva, istatus, requests, comm)
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)
subroutine zmumps_setupcomms(myid, numprocs, isz, ipartvec, nz_loc, indx, osz, oindx, isndrcvnum, isndvol, inghbprcs, isndrcvia, isndrcvja, osndrcvnum, osndvol, onghbprcs, osndrcvia, osndrcvja, sndsz, rcvsz, iwrk, istatus, requests, itagcomm, comm)
double precision function zmumps_errscaloc(d, tmpd, dsz, indx, indxsz)
subroutine zmumps_initreallst(d, dsz, indx, indxsz, val)
subroutine zmumps_docomminf(myid, numprocs, tmpd, idsz, itagcomm, isndrcvnum, inghbprcs, isndrcvvol, isndrcvia, isndrcvja, isndrcva, osndrcvnum, onghbprcs, osndrcvvol, osndrcvia, osndrcvja, osndrcva, istatus, requests, comm)
integer function zmumps_chkconvglosym(d, n, indxr, indxrsz, eps, comm)
subroutine zmumps_findnummyrowcol(myid, numprocs, comm, irn_loc, jcn_loc, nz_loc, rowpartvec, colpartvec, m, n, inummyr, inummyc, iwrk, iwsz)