42 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
43#include "implicit_f.inc"
52#include "com_xfem1.inc"
57 INTEGER IAD_ELEM(2,*),FR_ELEM(*),INOD_CRK(*),ITAB(*)
63 INTEGER MSGTYP,I,J,L1,L2,ILEV,ILAY,IXEL,IAD,KK,IL,IENR,EN0,ENR,
64 . nenr,siz,len1,len2,lenr,nnodx,nn,nsx,nct,nc,count,
65 . loc_proc,ierror,msgtyp1,msgtyp2,msgoff1,msgoff2
66 INTEGER STATUS(MPI_STATUS_SIZE),NODXSAV(NSPMD),
67 . req_r1(nspmd),req_r2(nspmd),req_s1(nspmd),req_s2(nspmd),
68 . iad_send1(nspmd+1),iad_send2(nspmd+1),
69 . iad_recv1(nspmd+1),iad_recv2(nspmd+1),nbsend
70 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: RBUFI,SBUFI
71 my_real,
DIMENSION(:,:),
ALLOCATABLE :: rbufr,sbufr
80 lenr = iad_elem(1,nspmd+1) - iad_elem(1,1)
81 lenr = lenr * nxlaymax * nenr
82 ALLOCATE(rbufi(3,lenr))
83 ALLOCATE(sbufi(3,lenr))
84 ALLOCATE(rbufr(9,lenr))
85 ALLOCATE(sbufr(9,lenr))
93 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
94 IF (inod_crk(fr_elem(j)) > 0)
THEN
109 nbsend = iad_elem(1,i+1)-iad_elem(1,i)
113 siz = nbsend*nenr*nxlaymax
118 s rbufi(1,l1),len1,mpi_integer,it_spmd(i),msgtyp1,
119 g spmd_comm_world,req_r1(i),ierror)
125 s rbufr(1,l2),len2,real,it_spmd(i),msgtyp2,
126 g spmd_comm_world,req_r2(i),ierror)
143 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
153 IF (iad > 0) enr =
crklvset(ilev)%ENR0(1,iad)
154 IF (enr > 0 .and. ilev > 0 .and. count > 0)
THEN
159 sbufr(1,l2) =
crkavx(ilev)%X(1,iad)
160 sbufr(2,l2) =
crkavx(ilev)%X(2,iad)
161 sbufr(3,l2) =
crkavx(ilev)%X(3,iad)
162 sbufr(4,l2) =
crkavx(ilev)%V(1,iad)
163 sbufr(5,l2) =
crkavx(ilev)%V(2,iad)
164 sbufr(6,l2) =
crkavx(ilev)%V(3,iad)
165 sbufr(7,l2) =
crkavx(ilev)%VR(1,iad)
166 sbufr(8,l2) =
crkavx(ilev)%VR(2,iad)
167 sbufr(9,l2) =
crkavx(ilev)%VR(3,iad)
180 l1 = l1+nenr*nxlaymax
181 l2 = l2+nenr*nxlaymax
190 IF( iad_send1(i+1)-iad_send1(i) > 0)
THEN
194 siz = iad_send1(i+1)-iad_send1(i)
197 s sbufi(1,l1),len1,mpi_integer,it_spmd(i),msgtyp1,
198 g spmd_comm_world,req_s1(i),ierror)
201 siz = iad_send2(i+1)-iad_send2(i)
205 s sbufr(1,l2),len2,real,it_spmd(i),msgtyp2,
206 g spmd_comm_world,req_s2(i),ierror)
214 IF(iad_recv1(i+1)-iad_recv1(i) > 0)
THEN
215 CALL mpi_wait(req_r1(i),status,ierror)
216 CALL mpi_wait(req_r2(i),status,ierror)
220 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
240 IF (en0 <= 0 .and. enr > 0 .and. count > 0 .and. il > 0 .and. iad > 0 .and.
241 . ilev > 0 .and. kk > 0)
THEN
246 crkavx(ilev)%X(1,kk) = rbufr(1,l2)
247 crkavx(ilev)%X(2,kk) = rbufr(2,l2)
248 crkavx(ilev)%X(3,kk) = rbufr(3,l2)
249 crkavx(ilev)%V(1,kk) = rbufr(4,l2)
250 crkavx(ilev)%V(2,kk) = rbufr(5,l2)
251 crkavx(ilev)%V(3,kk) = rbufr(6,l2)
252 crkavx(ilev)%VR(1,kk) = rbufr(7,l2)
253 crkavx(ilev)%VR(2,kk) = rbufr(8,l2)
254 crkavx(ilev)%VR(3,kk) = rbufr(9,l2)
265 l1 = l1+nenr*nxlaymax
266 l2 = l2+nenr*nxlaymax
273 IF (iad_send1(i+1)-iad_send1(i) > 0)
THEN
274 CALL mpi_wait(req_s1(i),status,ierror)
279 IF (iad_send2(i+1)-iad_send2(i) > 0)
THEN
280 CALL mpi_wait(req_s2(i),status,ierror)
309 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
310#include "implicit_f.inc"
318#include "com01_c.inc"
319#include "com_xfem1.inc"
324 INTEGER IAD_ELEM(2,*),FR_ELEM(*),INOD_CRK(*),ITAB(*)
329 INTEGER I,J,L,ILAY,IAD,,KK,IL,EN1,IENR,ENR,SIZ,
330 . len,lenr,nnodx,nn,nsx,nct
331 . loc_proc,ierror,msgtyp
332 . enrl,enrr,flags,flagr,nenr
333 INTEGER STATUS(MPI_STATUS_SIZE),NODXSAV(NSPMD),
334 . req_r(nspmd),req_s(nspmd),iad_send(nspmd+1),iad_recv(nspmd+1)
335 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: RBUF,
343 lenr = iad_elem(1,nspmd+1) - iad_elem(1,1)
344 lenr = lenr * nxlaymax * nenr
345 ALLOCATE(rbuf(3,lenr))
346 ALLOCATE(sbuf(3,lenr))
352 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
353 IF (inod_crk(fr_elem(j)) > 0)
THEN
367 siz = nnodx*nenr*nxlaymax
373 s rbuf(1,l),len,mpi_integer,it_spmd(i),msgtyp,
374 g spmd_comm_world,req_r(i),ierror)
386 IF (nodxsav(i) > 0)
THEN
387 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
391#include "vectorize.inc"
397 IF (iad > 0 .and. ilev > 0 .and. enrl == ienr)
THEN
416 IF (nodxsav(i) > 0)
THEN
418 siz = iad_send(i+1)-iad_send(i)
422 s sbuf(1,l),len,mpi_integer,it_spmd(i),msgtyp,
423 g spmd_comm_world,req_s(i),ierror)
430 IF (nodxsav(i) > 0)
THEN
431 CALL mpi_wait(req_r(i),status,ierror)
434 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
458 siz = iad_send(i+1)-iad_send(i)
460 CALL mpi_wait(req_s(i),status,ierror
490 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
491#include "implicit_f.inc"
499#include "com01_c.inc"
500#include "com04_c.inc"
505 INTEGER IAD_ELEM(2,*),FR_ELEM(*),SIZE,LENR,INOD_CRK(*),FLAG,
511 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR,MSGOFF,
512 . SIZ,J,L,NB_NOD,NNOD,IENR,ENR,SIZN,
513 . status(mpi_status_size),
514 . iad_send(nspmd+1),iad_recv(nspmd+1),
515 . req_r(nspmd),req_s(nspmd)
516 INTEGER RBUF(SIZE*LENR),SBUF(SIZE*LENR)
525 siz = size*(iad_elem(1,i+1)-iad_elem(1,i))
529 s rbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
530 g spmd_comm_world,req_r(i),ierror)
538#include "vectorize.inc"
539 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
546 sbuf(l+ienr-1) = enrtag(nod,ienr)
547 ELSE IF(flag == 2)
THEN
560 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
562 siz = iad_send(i+1)-iad_send(i)
565 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
566 g spmd_comm_world,req_s(i),ierror)
572 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
574 CALL mpi_wait(req_r(i),status,ierror)
576#include "vectorize.inc"
577 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
582 enr = enrtag(nod,ienr)
583 enrtag(nod,ienr) =
max(enr,rbuf(l+ienr-1))
596 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
597 CALL mpi_wait(req_s(i),status,ierror)
624 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
625#include "implicit_f.inc"
633#include
"com01_c.inc"
634#include "com_xfem1.inc"
639 INTEGER IAD_EDGE(*),FR_EDGE(*),
640 . SIZE,LSDRC,FR_NBEDGE(*),FLAG
641 TYPE () ,
DIMENSION(*) :: CRKEDGE
646 INTEGER I,II,J,JJ,L0,L,CC,MSGTYP,LOC_PROC,IERROR,
647 . INDEX,SIZ,NBIRECV,IAD_RECV(NSPMD+1),
648 . STATUS(MPI_STATUS_SIZE),REQ_R(NSPMD),
649 . req_s(nspmd),irindex(nspmd),ied,icut,
650 . iboundedge,nxlay,ilay,en10,en20,msgoff
651 INTEGER RBUF(SIZE*LSDRC),
657 nxlay = int(nlevmax/nxel)
662 IF(iad_edge(i+1)-iad_edge(i) > 0)
THEN
663 siz = size*fr_nbedge(i)
665 nbirecv = nbirecv + 1
668 . rbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
669 . spmd_comm_world,req_r(nbirecv),ierror)
680 IF (iad_edge(i+1) > iad_edge(i))
THEN
682#include "vectorize.inc"
683 DO j=iad_edge(i),iad_edge(i+1)-1
691 sbuf(l+ilay-1) = crkedge(ilay)%IBORDEDGE(ied)
696 siz = (iad_edge(i+1)-iad_edge(i))*
SIZE
698 CALL mpi_isend(sbuf(l0),siz,mpi_integer,it_spmd(i),msgtyp,
699 . spmd_comm_world,req_s(i),ierror)
703 ELSE IF (flag == 1)
THEN
706 IF (iad_edge(i+1) > iad_edge(i))
THEN
708#include "vectorize.inc"
709 DO j=iad_edge(i),iad_edge(i+1)-1
717 sbuf(l+ilay-1) = crkedge(ilay)%ICUTEDGE(ied)
722 siz = (iad_edge(i+1)-iad_edge(i))*
SIZE
724 CALL mpi_isend(sbuf(l0),siz,mpi_integer,it_spmd(i),msgtyp,
725 . spmd_comm_world,req_s(i),ierror)
729 ELSE IF (flag == 2)
THEN
732 IF (iad_edge(i+1) > iad_edge(i))
THEN
734#include "vectorize.inc"
735 DO j=iad_edge(i),iad_edge(i+1)-1
743 sbuf(l+ilay-1) = crkedge(ilay)%ICUTEDGE(ied)
748 siz = (iad_edge(i+1)-iad_edge(i))*
SIZE
750 CALL mpi_isend(sbuf(l0),siz,mpi_integer,it_spmd(i),msgtyp,
751 . spmd_comm_world,req_s(i),ierror)
755 ELSE IF (flag == 3)
THEN
758 IF (iad_edge(i+1) > iad_edge(i))
THEN
760#include "vectorize.inc"
761 DO j=iad_edge(i),iad_edge(i+1)-1
766 sbuf(l+ilay-1+nxlay) = 0
767 sbuf(l+ilay-1+nxlay*2) = 0
768 sbuf(l+ilay-1+nxlay*3) = 0
769 sbuf(l+ilay-1+nxlay*4) = 0
770 sbuf(l+ilay-1+nxlay*5) = 0
775 sbuf(l+ilay-1) = crkedge(ilay)%ICUTEDGE(ied)
776 sbuf(l+ilay-1+nxlay) = crkedge(ilay)%EDGEENR(1,ied)
777 sbuf(l+ilay-1+nxlay*2) = crkedge(ilay)%EDGEENR(2,ied)
778 sbuf(l+ilay-1+nxlay*3) = crkedge(ilay)%EDGEICRK(ied)
779 sbuf(l+ilay-1+nxlay*4) = crkedge(ilay)%EDGETIP(1,ied)
780 sbuf(l+ilay-1+nxlay*5) = crkedge(ilay)%EDGETIP(2,ied)
785 siz = (iad_edge(i+1)-iad_edge(i))*
SIZE
787 CALL mpi_isend(sbuf(l0),siz,mpi_integer,it_spmd(i),msgtyp,
788 . spmd_comm_world,req_s(i),ierror)
798 CALL mpi_waitany(nbirecv,req_r,index,status,ierror)
801#include "vectorize.inc"
802 DO j=iad_edge(i),iad_edge(i+1)-1
807 iboundedge = crkedge(ilay)%IBORDEDGE(ied)
808 crkedge(ilay)%IBORDEDGE(ied) =
809 .
max(rbuf(l+ilay-1),iboundedge)
811 ELSE IF (flag == 1)
THEN
813 icut = crkedge(ilay)%ICUTEDGE(ied)
814 IF (icut + rbuf(l+ilay-1) /= 4)
THEN
815 crkedge(ilay)%ICUTEDGE(ied) =
max(rbuf(l+ilay-1),icut)
817 crkedge(ilay)%ICUTEDGE(ied) = 3
820 ELSE IF (flag == 2)
THEN
822 icut = crkedge(ilay)%ICUTEDGE(ied)
823 IF (icut > 0) crkedge(ilay)%ICUTEDGE(ied) =
min(1,icut)
825 ELSE IF (flag == 3)
THEN
827 icut = crkedge(ilay)%ICUTEDGE(ied)
828 en10 = crkedge(ilay)%EDGEENR(1,ied)
829 en20 = crkedge(ilay)%EDGEENR(2,ied)
831 crkedge(ilay)%EDGEENR(1,ied)
832 . =
max(en10,rbuf(l+ilay-1+nxlay))
833 crkedge(ilay)%EDGEENR(2,ied)
834 . =
max(en20,rbuf(l+ilay-1+2*nxlay))
836 crkedge(ilay)%EDGEICRK(ied) =
837 .
max(crkedge(ilay)%EDGEICRK(ied),rbuf(l+ilay-1+3*nxlay))
838 crkedge(ilay)%EDGETIP(1,ied) =
max(
839 . crkedge(ilay)%EDGETIP(1,ied),rbuf(l+ilay-1+4*nxlay))
840 crkedge(ilay)%EDGETIP(2,ied) =
max(
841 . crkedge(ilay)%EDGETIP(2,ied),rbuf(l+ilay-1+5*nxlay))
853 IF(iad_edge(i+1)-iad_edge(i) > 0)
854 .
CALL mpi_wait(req_s(i),status,ierror)
877 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
878#include "implicit_f.inc"
886#include "com01_c.inc"
887#include "com_xfem1.inc"
892 INTEGER IAD_EDGE(*),FR_EDGE(*),
893 . SIZE,LSDRC,FR_NBEDGE(*),FLAG
894 TYPE (XFEM_EDGE_) ,
DIMENSION(*) :: CRKEDGE
899 INTEGER I,II,J,JJ,L0,L,CC,MSGTYP,LOC_PROC,IERROR,
900 . INDEX,SIZ,NBIRECV,IAD_RECV(NSPMD+1),
901 . STATUS(MPI_STATUS_SIZE),REQ_R(NSPMD),
902 . req_s(nspmd),irindex(nspmd),nxlay,ilay,ied,msgoff
904 . rbuf(size*lsdrc+nspmd),sbuf(size*lsdrc+nspmd)
909 nxlay = int(nlevmax/nxel)
914 IF(iad_edge(i+1)-iad_edge(i) > 0)
THEN
915 siz = size*fr_nbedge(i)
917 nbirecv = nbirecv + 1
920 . rbuf(l),siz,real,it_spmd(i),msgtyp,
921 . spmd_comm_world,req_r(nbirecv),ierror)
930 IF(iad_edge(i+1)-iad_edge(i) > 0)
THEN
932#include "vectorize.inc"
933 DO j=iad_edge(i),iad_edge(i+1)-1
937 sbuf(l+ilay-1) = crkedge(ilay)%RATIO(ied)
945 siz = (iad_edge(i+1)-iad_edge(i))*
SIZE
948 . sbuf(l0),siz,real,it_spmd(i),msgtyp,
949 . spmd_comm_world,req_s(i),ierror)
956 CALL mpi_waitany(nbirecv,req_r,index,status,ierror)
959#include "vectorize.inc"
960 DO j=iad_edge(i),iad_edge(i+1)-1
964 IF (crkedge(ilay)%RATIO(ied) == zero)
965 . crkedge(ilay)%RATIO(ied) = rbuf(l+ilay
975 IF(iad_edge(i+1)-iad_edge(i) > 0)
976 .
CALL mpi_wait(req_s(i),status,ierror)
992 . IAD_ELEM,FR_ELEM,FR_NBCC1,LENS1 ,LENR1 ,
993 . IADSDP_CRK,IADRCP_CRK,ISENDP_CRK,IRECVP_CRK)
999 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1000#include "implicit_f.inc"
1008#include "com01_c.inc"
1009#include "com_xfem1.inc"
1010#include "task_c.inc"
1014 INTEGER LENS1,LENR1,IAD_ELEM(2,*),FR_ELEM(*),FR_NBCC1(2,*),
1015 . IADSDP_CRK(*),IADRCP_CRK(*),ISENDP_CRK(*),IRECVP_CRK(*)
1020 INTEGER I,J,II,L,L0,CC,IPT,SIZ,INDEX,LOC_PROC,IERROR,
1021 . NB_NOD,NBIRECV,MSGTYP,MSGOFF,
1022 . IAD_RECV(NSPMD+1),STATUS(MPI_STATUS_SIZE),
1023 . REQ_R(NSPMD),REQ_S(NSPMD)
1025 my_real rbuf(9*nlevmax*lenr1),sbuf(9*nlevmax*lens1)
1028 loc_proc = ispmd + 1
1034 IF (iad_elem(1,i+1) - iad_elem(1,i) > 0)
THEN
1035 siz = 9*nlevmax*fr_nbcc1(2,i)
1038 s rbuf(l),siz,real,it_spmd(i),msgtyp,
1039 g spmd_comm_world,req_r(i),ierror)
1047 IF (iad_elem(1,i+1)-iad_elem(1,i) > 0)
THEN
1050 DO j=iadsdp_crk(i),iadsdp_crk(i+1)-1
1053 sbuf(l ) =
crkavx(ipt)%X(1,cc)
1054 sbuf(l+1) =
crkavx(ipt)%X(2,cc)
1055 sbuf(l+2) =
crkavx(ipt)%X(3,cc)
1056 sbuf(l+3) =
crkavx(ipt)%V(1,cc)
1057 sbuf(l+4) =
crkavx(ipt)%V(2,cc)
1058 sbuf(l+5) =
crkavx(ipt)%V(3,cc)
1059 sbuf(l+6) =
crkavx(ipt)%VR(1,cc)
1060 sbuf(l+7) =
crkavx(ipt)%VR(2,cc)
1061 sbuf(l+8) =
crkavx(ipt)%VR(3,cc)
1069 siz = (iadsdp_crk(i+1)-iadsdp_crk(i))*nlevmax*9
1072 s sbuf(l0),siz,real,it_spmd(i),msgtyp,
1073 g spmd_comm_world,req_s(i),ierror)
1081 IF (iad_elem(1,i+1)-iad_elem(1,i) > 0)
THEN
1083 CALL mpi_wait(req_r(i),status,ierror)
1084 nb_nod = iad_elem(1,i+1)-iad_elem(1,i)
1087 DO j=iadrcp_crk(i),iadrcp_crk(i+1)-1
1090 crkavx(ipt)%X(1,cc) = rbuf(l)
1091 crkavx(ipt)%X(2,cc) = rbuf(l+1)
1092 crkavx(ipt)%X(3,cc) = rbuf(l+2)
1093 crkavx(ipt)%V(1,cc) = rbuf(l+3)
1094 crkavx(ipt)%V(2,cc) = rbuf(l+4)
1095 crkavx(ipt)%V(3,cc) = rbuf(l+5)
1096 crkavx(ipt)%VR(1,cc) = rbuf(l+6)
1097 crkavx(ipt)%VR(2,cc) = rbuf(l+7)
1098 crkavx(ipt)%VR(3,cc) = rbuf(l+8)
1109 IF (iad_elem(1,i+1) - iad_elem(1,i) > 0)
1110 .
CALL mpi_wait(req_s(i),status,ierror)
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"
1152 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1154 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1156 DATA MSGOFF/225/,MSGOFF2/226/
1158 loc_proc = ispmd + 1
1160 IF (ispmd == 0)
THEN
1163 CALL mpi_irecv(rbuf(i),siz,mpi_integer,it_spmd(i),msgtyp,
1164 . spmd_comm_world,req_r(i-1),ierror)
1168 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1170 int =
max(int,rbuf(i))
1175 CALL mpi_send(int,siz,mpi_integer,it_spmd(i),
1176 . msgtyp,spmd_comm_world,ierror)
1180 CALL mpi_send(int,siz,mpi_integer,it_spmd(1),
1181 . msgtyp,spmd_comm_world,ierror)
1184 CALL mpi_recv(int,siz,mpi_integer,it_spmd(1),msgtyp,
1185 . spmd_comm_world,status,ierror)