40 1 IPARI ,INTLIST ,NBINTC ,ISLEN7 ,IRLEN7 ,
41 2 IRLEN7T ,ISLEN7T ,IRLEN20 ,ISLEN20,IRLEN20T,
42 3 ISLEN20T,INTBUF_TAB,H3D_DATA )
55 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
56#include "implicit_f.inc"
71 INTEGER ,
INTENT(IN) ::
72 . NBINTC,ISLEN7, IRLEN7,IRLEN7T, ISLEN7T,
73 . IRLEN20, ISLEN20, IRLEN20T, ISLEN20T,
74 . ipari(npari,ninter), intlist(nbintc)
76 TYPE(intbuf_struct_),
INTENT(IN) :: INTBUF_TAB(NINTER)
77 TYPE(H3D_DATABASE),
INTENT(IN) :: H3D_DATA
82 INTEGER P, L, ADD, , NB, LEN, SIZ, LOC_PROC, II,
83 . NIN, IDEB, N, MSGTYP, IERROR, NI, NOD, I,
84 . NTY, IALLOCS, IALLOCR, MSGOFF,INTERFRIC,
86 . status(mpi_status_size),debut(ninter),
87 . adds(nspmd+1), addr(nspmd+1)
88 . req_si(nspmd),req_ri(nspmd),intsort(nbintc)
92 my_real ,
DIMENSION(:),
ALLOCATABLE :: bbufs, bbufr
93 LOGICAL :: IS_EFRIC_COM_NEEDED
103 intsort(1:nbintc) = 0
105 is_efric_com_needed = .false.
109 dist = intbuf_tab(nin)%VARIABLES(5)
110 IF(nty==7.OR.nty==24)
THEN
112 interfric = h3d_data%N_CSE_FRIC_INTER(nin)
113 IF(h3d_data%N_SCAL_CSE_FRIC > 0)
THEN
116 is_efric_com_needed = .true.
117 ELSEIF(interfric > 0)
THEN
120 is_efric_com_needed = .true.
127 IF(is_efric_com_needed)
THEN
129 iallocs = len*irlen7 + len*irlen7t
132 +
ALLOCATE(bbufs(iallocs+nbintc*nspmd),stat=ierror)
134 CALL ancmsg(msgid=20,anmode=aninfo)
137 iallocr = len*islen7 + len*islen7t
140 +
ALLOCATE(bbufr(iallocr+nbintc*nspmd),stat=ierror)
142 CALL ancmsg(msgid=20,anmode=aninfo)
157 IF(intsort(ii) > 0 )
THEN
167 . bbufr(add),siz,real ,it_spmd(p),msgtyp,
168 . spmd_comm_world,req_ri(p),ierror )
172 addr(nspmd+1) = addr(nspmd)+siz
186 interfric = h3d_data%N_CSE_FRIC_INTER(nin)
187 IF(intsort(ii) > 0)
THEN
193 bbufs(l+1) =
nsvfi(nin)%P(ideb+n)
195 bbufs(l+2) =
efricfi(nin)%P(ideb+n)
200 IF(h3d_data%N_SCAL_CSE_FRIC>0)
THEN
201 bbufs(l+3) =
efricgfi(nin)%P(ideb+n)
209 bbufs(ll) = (l-ll)/len
210 debut(nin) = debut(nin) + nb
218 . bbufs(add),siz,real ,it_spmd(p),msgtyp,
219 . spmd_comm_world,req_si(p),ierror )
223 adds(nspmd+1)=adds(nspmd)+siz
228 IF(addr(p+1)-addr(p)>0)
THEN
229 CALL mpi_wait(req_ri(p),status,ierror)
233 IF(
nsnsi(nin)%P(p)>0)
THEN
234 interfric = h3d_data%N_CSE_FRIC_INTER(nin)
235 IF(intsort(ii) > 0)
THEN
239 n = nint(bbufr(l+len*(i-1)))
240 nod = intbuf_tab(nin)%NSV(n)
242 IF(interfric>0) efric(interfric,nod)= efric(interfric,nod)+ bbufr(l+len*(i-1)+1)
243 IF(h3d_data%N_SCAL_CSE_FRIC>0) efricg(nod)= efricg(nod)+ bbufr(l+len*(i-1)+2)
261 IF(adds(p+1)-adds(p)>0)
THEN
262 CALL mpi_wait(req_si(p),status,ierror)
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)