40 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
41#include "implicit_f.inc"
51 INTEGER ISKYI_SMS(LSKYI_SMS,*), FR_SMS(NSPMD+1)
56 INTEGER N,NN, P, Q, PP, kk
57 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: I2SORT
58 INTEGER LP(NSPMD+1), NP(NSPMD+1)
59 my_real,
DIMENSION(:),
ALLOCATABLE :: m2sort
63 CALL my_alloc( i2sort,nisky_sms,3)
64 CALL my_alloc(m2sort,nisky_sms)
67 i2sort(n,1)= iskyi_sms(n,1)
68 i2sort(n,2)= iskyi_sms(n,2)
69 i2sort(n,3)= iskyi_sms(n,3)
70 m2sort(n) = mskyi_sms(n)
94 iskyi_sms(nn,1)=i2sort(n,1)
95 iskyi_sms(nn,2)=i2sort(n,2)
96 iskyi_sms(nn,3)=i2sort(n,3)
97 mskyi_sms(nn) =m2sort(n)
115 * IAD_I2M, FR_I2M, NB_FRI2M, FR_LOC_I2M)
119 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
120#include "implicit_f.inc"
124#include "com01_c.inc"
125#include "com04_c.inc"
129 INTEGER IAD_ELEM(2,*),FR_ELEM(*),FR_LOC(*),NB_FR,
130 * iad_i2m(*),fr_i2m(*),nb_fri2m, fr_loc_i2m(*)
135 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAG
137 ALLOCATE(tag(numnod))
141 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
157 DO j=iad_i2m(1),iad_i2m
166 fr_loc_i2m(nb_fri2m)=j
187 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
188#include "implicit_f.inc"
196#include "com01_c.inc"
201 INTEGER FR_SMS(NSPMD+1), (NSPMD+1)
206 INTEGER MSGTYP,I,LOC_PROC,IERROR,
208 . status(mpi_status_size),
209 . iad_send(nspmd+1),iad_recv(nspmd+1),
210 . req_r(nspmd),req_s(nspmd)
211 INTEGER,
DIMENSION(:),
ALLOCATABLE:: BUFFER_SEND
212 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFFER_RECV
220 ALLOCATE(buffer_recv(nspmd),buffer_send(nspmd))
222 IF(i == loc_proc)
THEN
225 buffer_send(i) = fr_sms(i+1)-fr_sms(i)
232 CALL mpi_alltoall(buffer_send,siz,mpi_integer,buffer_recv,siz,mpi_integer,spmd_comm_world,ierror)
236 fr_rms(i+1) = buffer_recv(i)
241 fr_rms(i+1)=fr_rms(i)+fr_rms(i+1)
244 DEALLOCATE(buffer_send,buffer_recv)
256!||--- calls -----------------------------------------------------
259!||====================================================================
261 1 ISKYI_SMS,FR_SMS,FR_RMS,LIST_SMS,LIST_RMS,
262 2 NPBY ,TAGSLV_RBY_SMS)
266 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
267#include "implicit_f.inc"
275#include "com01_c.inc"
276#include "param_c.inc"
282 INTEGER ISKYI_SMS(LSKYI_SMS,*), FR_SMS(NSPMD+1),
283 . FR_RMS(NSPMD+1), LIST_SMS(*), LIST_RMS(*),
284 . NPBY(NNPBY,*), TAGSLV_RBY_SMS(*)
289 INTEGER MSGTYP,I,LOC_PROC,IERROR,
291 . STATUS(MPI_STATUS_SIZE),
292 . req_r(nspmd),req_s(nspmd),
293 . sbuf(
max(2*fr_sms(nspmd+1),fr_rms(nspmd+1))),
294 . rbuf(
max(2*fr_rms(nspmd+1),fr_sms(nspmd+1)))
306 siz = 2*(fr_rms(i+1)-fr_rms(i))
311 s rbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
312 g spmd_comm_world,req_r(i),ierror)
321#include "vectorize.inc"
322 DO j=fr_sms(i),fr_sms(i+1)-1
323 sbuf(l ) = iskyi_sms(j,1)
325 sbuf(l ) = tagslv_rby_sms(iskyi_sms(j,2))
327 list_sms(m)= iskyi_sms(j,2)
331 l = l + 2*(fr_sms(i+1)-fr_sms(i))
338 IF(i/=loc_proc.AND.fr_sms(i+1)-fr_sms(i)>0)
THEN
340 siz = 2*(fr_sms(i+1)-fr_sms(i))
344 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
345 g spmd_comm_world,req_s(i),ierror)
350 IF(fr_rms(i+1)-fr_rms(i)>0)
THEN
351 CALL mpi_wait(req_r(i),status,ierror)
354 DO j=fr_rms(i),fr_rms(i+1)-1
357 IF(tag/=0.AND.tag==tagslv_rby_sms(list_rms(j)))
THEN
367 IF(i/=loc_proc.AND.fr_sms(i+1)-fr_sms(i)>0)
THEN
368 CALL mpi_wait(req_s(i),status,ierror)
375 siz = fr_sms(i+1)-fr_sms(i)
376 IF(i/=loc_proc.AND.siz>0)
THEN
380 s rbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
381 g spmd_comm_world,req_r(i),ierror)
390 IF(fr_rms(i+1)-fr_rms(i)>0)
THEN
391#include "vectorize.inc"
392 DO j=fr_rms(i),fr_rms(i+1)-1
394 sbuf(l ) = list_rms(j)
401 IF(fr_rms(i+1)-fr_rms(i)>0)
THEN
403 siz = fr_rms(i+1)-fr_rms(i)
407 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
408 g spmd_comm_world,req_s(i),ierror)
414 IF(i/=loc_proc.AND.fr_sms(i+1)-fr_sms(i)>0)
THEN
415 CALL mpi_wait(req_r(i),status,ierror)
418 DO j=fr_sms(i),fr_sms(i+1)-1
430 IF(fr_rms(i+1)-fr_rms(i)>0)
THEN
431 CALL mpi_wait(req_s(i),status,ierror)
450 1 ISKYI_SMS,FR_SMS,FR_RMS,LIST_RMS,MSKYI_SMS,
455 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
456#include
"implicit_f.inc"
464#include "com01_c.inc"
470 INTEGER ISKYI_SMS(LSKYI_SMS,*), FR_SMS(NSPMD+1),
471 . FR_RMS(NSPMD+1), LIST_RMS(*)
473 . MSKYI_SMS(*), MIJ_SMS(*)
478 INTEGER MSGTYP,I,LOC_PROC,IERROR,
480 . STATUS(MPI_STATUS_SIZE),
481 . REQ_R(NSPMD),REQ_S(NSPMD)
483 . sbuf(fr_sms(nspmd+1))
492 siz = fr_rms(i+1)-fr_rms(i)
497 s mij_sms(l),siz,real,it_spmd(i),msgtyp,
498 g spmd_comm_world,req_r(i),ierror)
505#include "vectorize.inc"
506 DO j=fr_sms(i),fr_sms(i+1)-1
507 sbuf(l ) = mskyi_sms(j)
511 l = l + fr_sms(i+1)-fr_sms
518 IF(i/=loc_proc.AND.fr_sms(i+1)-fr_sms(i)>0)
THEN
520 siz = fr_sms(i+1)-fr_sms(i)
524 s sbuf(l),siz,real,it_spmd(i),msgtyp,
525 g spmd_comm_world,req_s(i),ierror)
530 IF(fr_rms(i+1)-fr_rms(i)>0)
THEN
531 CALL mpi_wait(req_r(i),status,ierror)
536 IF(i/=loc_proc.AND.fr_sms(i+1)-fr_sms(i)>0)
THEN
537 CALL mpi_wait(req_s(i),status,ierror)
558 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
559#include "implicit_f.inc"
567#include "com01_c.inc"
578 INTEGER MSGTYP,I,LOC_PROC,IERROR,
579 . SIZ,STATUS(MPI_STATUS_SIZE)
580 DOUBLE PRECISION SBUF(2)
592 s sbuf,siz,mpi_double_precision,it_spmd(i),msgtyp,
593 g spmd_comm_world,status,ierror)
604 s sbuf,siz,mpi_double_precision,it_spmd(1),msgtyp,
605 g spmd_comm_world,ierror)
615!||--- uses -----------------------------------------------------
622 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
623#include "implicit_f.inc"
631#include "com01_c.inc"
642 INTEGER MSGTYP,I,LOC_PROC,IERROR,
643 . SIZ,STATUS(MPI_STATUS_SIZE)
644 DOUBLE PRECISION SBUF(2)
656 s sbuf,siz,mpi_double_precision,it_spmd(i),msgtyp,
657 g spmd_comm_world,status,ierror)
658 IF(sbuf(1) > lmax)
THEN
668 s sbuf,siz,mpi_double_precision,it_spmd(1),msgtyp,
669 g spmd_comm_world,ierror)
684 1 FR_SMS ,FR_RMS,LIST_SMS,LIST_RMS,IAD_ELEM,
685 2 FR_ELEM,NNDFT0,NNDFT1,ISORTND)
689 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
690#include "implicit_f.inc"
698#include "com01_c.inc"
699#include "com04_c.inc"
704 INTEGER FR_SMS(NSPMD+1), FR_RMS(NSPMD+1),
705 . LIST_SMS(*), LIST_RMS(*), IAD_ELEM(2,*), FR_ELEM(*),
706 . NNDFT0,NNDFT1,ISORTND(*)
711 INTEGER MSGTYP,I,LOC_PROC,IERROR,
713 . ITAG(NUMNOD),NNDFT(NSPMD),MNDFT(NSPMD),KSORT,
714 . STATUS(MPI_STATUS_SIZE),
715 . REQ_R(NSPMD),REQ_S(NSPMD),
716 . SBUF(MAX(2*FR_SMS(NSPMD+1),FR_RMS(NSPMD+1))),
717 . RBUF(MAX(2*FR_RMS(NSPMD+1),FR_SMS(NSPMD+1)))
728 DO j=iad_elem(1,1),iad_elem(1,ispmd+1)-1
737 DO j=iad_elem(1,ispmd+1),iad_elem(1,nspmd+1)-1
749 DO j=iad_elem(1,1),iad_elem(1,nspmd+1)-1
754 DO j=iad_elem(1,1),iad_elem(1,ispmd+1)-1
759 DO j=iad_elem(1,ispmd+1),iad_elem(1,nspmd+1)-1
782 1 FR_SMS ,FR_RMS,LIST_SMS,LIST_RMS,IAD_ELEM,
783 2 FR_ELEM,NNZM ,IADK ,KADM )
787 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
788#include "implicit_f.inc"
796#include "com01_c.inc"
801 INTEGER FR_SMS(NSPMD+1), FR_RMS(NSPMD+1),
802 . LIST_SMS(*), LIST_RMS(*), IAD_ELEM(2,*), FR_ELEM(*),
808 INTEGER MSGTYP,I,LOC_PROC,,
810 . nnzp(nspmd),mnzp(nspmd),
811 . status(mpi_status_size),
813 . sbuf(iad_elem(1,nspmd+1)-iad_elem(1,1)),
814 . rbuf(iad_elem(1,nspmd+1)-iad_elem(1,1))
833 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
835 nnzp(p) = nnzp(p) + iadk(nod+1)-iadk(nod)
841 s nnzp(p),siz,mpi_integer,it_spmd(p),msgtyp,
842 g spmd_comm_world,ierror)
845 s mnzp(p),siz,mpi_integer,it_spmd(p),msgtyp,
846 g spmd_comm_world,status,ierror)
864 siz = iad_elem(1,p+1)-iad_elem(1,p)
868 . rbuf(l),siz,mpi_integer,it_spmd(p),msgtyp,
869 . spmd_comm_world,req_r(p),ierror )
871 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
873 sbuf(j)=iadk(nod+1)-iadk(nod)
878 . sbuf(l),siz,mpi_integer,it_spmd(p),msgtyp,
879 . spmd_comm_world,req_s(p),ierror )
887 siz = iad_elem(1,p+1)-iad_elem(1,p)
889 CALL mpi_wait(req_r(p),status,ierror)
890 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
892 kadm(nod)=kadm(nod)+rbuf(l)
899 IF(iad_elem(1,p+1)-iad_elem(1,p)/=0)
THEN
900 CALL mpi_wait(req_s(p),status,ierror)
919!||====================================================================
921 1 FR_SMS ,FR_RMS,LIST_SMS,LIST_RMS,IAD_ELEM,
922 2 FR_ELEM,IADK ,JDIK ,LT_K ,KADM ,
923 3 JDIM ,LT_M ,INVND )
931 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
932#include "implicit_f.inc"
940#include "com01_c.inc"
941#include "com04_c.inc"
946 INTEGER FR_SMS(NSPMD+1), FR_RMS(NSPMD+1),
947 . LIST_SMS(*), LIST_RMS(*), IAD_ELEM(2,*), FR_ELEM(*),
948 . IADK(*), JDIK(*), KADM(*), JDIM(*), INVND(*)
955 INTEGER MSGTYP,,LOC_PROC,IERROR,
956 . SIZ,J,K,L,M,N,NOD,,LL,
957 . SIZS(NSPMD),SIZR(NSPMD),
958 . status(mpi_status_size),
959 . req_r(nspmd), req_s(nspmd), req_s2(nspmd),
962 .
DIMENSION(:),
ALLOCATABLE :: sbuf, rbuf
963 INTEGER MSGOFF,MSGOFF2
981 DO j=iad_elem(1,p), iad_elem(1,p
983 itag(nod)=j-iad_elem(1,p)+1
988 . sizr(p),1,mpi_integer,it_spmd(p),msgtyp,
989 . spmd_comm_world,req_r(p),ierror )
991 IF(iad_elem(1,p+1)-iad_elem(1,p)/=0)
THEN
992 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
994 DO k=iadk(nod),iadk(nod+1)-1
996 IF(itag(m)/=0.AND.itag(m)<itag(nod))
THEN
997 sizs(p) = sizs(p) + 3
1004 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
1011 . sizs(p),1,mpi_integer,it_spmd(p),msgtyp,
1012 . spmd_comm_world,req_s(p),ierror )
1018 ALLOCATE(sbuf(siz),stat=ierror)
1020 CALL ancmsg(msgid=19,anmode=aninfo,
1028 CALL mpi_wait(req_r(p),status,ierror)
1033 ALLOCATE(rbuf(siz),stat=ierror)
1035 CALL ancmsg(msgid=19,anmode=aninfo,
1043 CALL mpi_wait(req_r(p),status,ierror)
1046 CALL mpi_irecv(rbuf(l),sizr(p),real ,it_spmd(p),
1047 . msgtyp,spmd_comm_world,req_r(p),ierror)
1058 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
1060 itag(nod)=j-iad_elem(1,p)+1
1063 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
1065 DO k=iadk(nod),iadk(nod+1)-1
1067 IF(itag(m)/=0.AND.itag(m)<itag(nod))
THEN
1068 sbuf(ll ) = itag(nod)
1069 sbuf(ll+1) = itag(m)
1070 sbuf(ll+2) = lt_k(k)
1077 CALL mpi_isend(sbuf(l),sizs(p),real ,it_spmd(p),
1078 . msgtyp,spmd_comm_world,req_s2(p),ierror)
1082 DO j=iad_elem(1,p), iad_elem(1,p+1)-1
1093 CALL mpi_wait(req_r(p),status,ierror)
1096 n = fr_elem(iad_elem(1,p) + n - 1)
1099 m = fr_elem(iad_elem(1,p) + m - 1)
1102 lt_m(kadm(n))=rbuf(l+2)
1111 CALL mpi_wait(req_s(p),status,ierror)
1114 CALL mpi_wait(req_s2(p),status,ierror)
1124!||--- calls -----------------------------------------------------
1129 1 A ,IAD_ELEM ,FR_ELEM,SIZE,LENR )
1133 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1134#include "implicit_f.inc"
1142#include "com01_c.inc"
1143#include "task_c.inc"
1147 INTEGER IAD_ELEM(2,*),FR_ELEM(*), SIZE, LENR
1154 INTEGER ,I,NOD,LOC_PROC,IERROR,MSGOFF,
1156 . STATUS(MPI_STATUS_SIZE),
1157 . IAD_SEND(NSPMD+1),IAD_RECV(NSPMD+1),
1158 . REQ_R(NSPMD),REQ_S(NSPMD)
1167 loc_proc = ispmd + 1
1171 siz = size*(iad_elem(1,i+1)-iad_elem(1,i))
1175 s rbuf(l),siz,real,it_spmd(i),msgtyp,
1176 g spmd_comm_world,req_r(i),ierror)
1185#include "vectorize.inc"
1186 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
1189 sbuf(l+1) = a(2,nod)
1190 sbuf(l+2) = a(3,nod)
1203 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
1205 siz = iad_send(i+1)-iad_send(i)
1208 s sbuf(l),siz,real,it_spmd(i),msgtyp,
1209 g spmd_comm_world,req_s(i),ierror)
1218 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
1220 CALL mpi_wait(req_r(i),status,ierror)
1222#include "vectorize.inc"
1223 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
1225 a(1,nod) = a(1,nod) + rbuf(l)
1226 a(2,nod) = a(2,nod) + rbuf(l+1)
1227 a(3,nod) = a(3,nod) + rbuf(l+2)
1237 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
1238 CALL mpi_wait(req_s(i),status,ierror)
1255 1 NODNX_SMS,FR_M ,IAD_M ,LCOMM )
1259 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1260#include "implicit_f.inc"
1268#include "com01_c.inc"
1269#include "task_c.inc"
1273 INTEGER LCOMM, FR_M(*), IAD_M(*), NODNX_SMS(*)
1278 INTEGER MSGTYP,LOC_PROC,NOD,I,J,L,IDEB,IAD,LEN,
1279 . NBINDEX,INDEX,MSGOFF,SIZ,IERROR,K,
1280 . STATUS(MPI_STATUS_SIZE),ISIZE6,
1281 . REQ_S(NSPMD),REQ_R(NSPMD),INDEXI(NSPMD)
1283 INTEGER SBUF(LCOMM), RBUF(LCOMM)
1287 loc_proc = ispmd + 1
1292 siz = iad_m(i+1)-iad_m(i)
1298 s rbuf(ideb),siz,mpi_integer,it_spmd(i),msgtyp,
1299 g spmd_comm_world,req_r(l),ierror)
1308 len = iad_m(i+1) - iad_m(i)
1310#include "vectorize.inc"
1313 sbuf(ideb) = nodnx_sms(nod)
1321 siz = iad_m(i+1)-iad_m(i)
1324 s sbuf(ideb),siz,mpi_integer,it_spmd(i),msgtyp,
1325 g spmd_comm_world,req_s(l),ierror)
1330 CALL mpi_waitany(nbindex,req_r,index,status,ierror)
1332 ideb = 1+(iad_m(i)-1)
1333 len = iad_m(i+1)-iad_m(i)
1335#include "vectorize.inc"
1338 nodnx_sms(nod)=nodnx_sms(nod)+rbuf(j)
1344 CALL mpi_waitany(nbindex,req_s,index,status,ierror)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_alltoall(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, comm, ierr)
subroutine mpi_waitany(cnt, array_of_requests, index, status, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
subroutine spmd_list_sms(iskyi_sms, fr_sms, fr_rms, list_sms, list_rms, npby, tagslv_rby_sms)
subroutine spmd_glob_lmax(lmax, imax)
subroutine spmd_nndft_sms(fr_sms, fr_rms, list_sms, list_rms, iad_elem, fr_elem, nndft0, nndft1, isortnd)
subroutine spmd_sort_sms(iskyi_sms, mskyi_sms, fr_sms)
subroutine spmd_exch_awork(a, iad_elem, fr_elem, size, lenr)
subroutine spmd_glob_lmin(lmin, imin)
subroutine spmd_exch_rbe3_nodnx(nodnx_sms, fr_m, iad_m, lcomm)
subroutine spmd_nnz_sms(fr_sms, fr_rms, list_sms, list_rms, iad_elem, fr_elem, nnzm, iadk, kadm)
subroutine spmd_nlist_sms(fr_sms, fr_rms)
subroutine spmd_exchm_sms(fr_sms, fr_rms, list_sms, list_rms, iad_elem, fr_elem, iadk, jdik, lt_k, kadm, jdim, lt_m, invnd)
subroutine ams_prepare_poff_assembly(iad_elem, fr_elem, nb_fr, fr_loc, iad_i2m, fr_i2m, nb_fri2m, fr_loc_i2m)
subroutine spmd_mij_sms(iskyi_sms, fr_sms, fr_rms, list_rms, mskyi_sms, mij_sms)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)