39 1 IPARI ,INTLIST ,NBINTC ,FNCONT ,
40 2 FTCONT ,ISLEN7 ,IRLEN7 ,IRLEN7T ,ISLEN7T,
41 3 IRLEN20 ,ISLEN20,IRLEN20T,ISLEN20T,INTBUF_TAB,
42 4 N_CSE_FRIC_INTER, N_SCAL_CSE_EFRIC )
54 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
55#include "implicit_f.inc"
71 INTEGER NBINTC,ISLEN7, IRLEN7,, ISLEN7T,
72 . IRLEN20, ISLEN20, IRLEN20T, ISLEN20T,
73 . IPARI(NPARI,*), INTLIST(*)
74 INTEGER ,
INTENT(IN) :: N_SCAL_CSE_EFRIC,N_CSE_FRIC_INTER(NINTER)
76 . fncont(3,*), ftcont(3,*)
77 TYPE(intbuf_struct_) INTBUF_TAB(*)
82 INTEGER P, L, ADD, LL, NB, LEN, SIZ, KFI, LOC_PROC, MULTIMP, II,
83 . NIN, IDEB, N, MSGTYP, IERROR, NI, NOD, I,
84 . NTY, IALLOCS, IALLOCR, MSGOFF,INTERFRIC,LF,
85 . STATUS(MPI_STATUS_SIZE),DEBUT(),
86 . adds(nspmd+1), addr(nspmd+1),
87 . req_si(nspmd),req_ri(nspmd)
90 my_real ,
DIMENSION(:),
ALLOCATABLE :: BBUFS, BBUFR
98 IF(n_scal_cse_efric > 0) len = len +1
106 iallocs = len*(irlen7+
irlen25) + len*(irlen7t+
irlen25t) + len*irlen20 + len*irlen20t
109 +
ALLOCATE(bbufs(iallocs+nbintc*nspmd),stat=ierror)
111 CALL ancmsg(msgid=20,anmode=aninfo)
114 iallocr = len*(islen7+
islen25) + len*(islen7t+
islen25t) + len*islen20 + len*islen20t
117 +
ALLOCATE(bbufr(iallocr+nbintc*nspmd),stat=ierror)
119 CALL ancmsg(msgid=20,anmode=aninfo)
137 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==22.OR.
138 . nty==23.OR.nty==24.OR.nty==25)
THEN
145 assert(add + siz -1 <= iallocr+nbintc*nspmd)
149 . bbufr(add),siz,real ,it_spmd(p),msgtyp,
150 . spmd_comm_world,req_ri(p),ierror )
154 addr(nspmd+1) = addr(nspmd)+siz
170 interfric = n_cse_fric_inter(nin)
171 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==22.OR.
172 . nty==23.OR.nty==24.OR.nty==25)
THEN
177 IF(
nsvfi(nin)%P(ideb+n)<0)
THEN
179 bbufs(l+1) = -
nsvfi(nin)%P(ideb+n)
180 bbufs(l+2) =
fnconti(nin)%P(1,ideb+n)
181 bbufs(l+3) =
fnconti(nin)%P(2,ideb+n)
182 bbufs(l+4) =
fnconti(nin)%P(3,ideb+n)
183 bbufs(l+5) =
ftconti(nin)%P(1,ideb+n)
184 bbufs(l+6) =
ftconti(nin)%P(2,ideb+n)
185 bbufs(l+7) =
ftconti(nin)%P(3,ideb+n)
188 bbufs(l+lf+1) =
efricfi(nin)%P(ideb+n)
195 IF(n_scal_cse_efric>0)
THEN
196 bbufs(l+lf+1) =
efricgfi(nin)%P(ideb+n)
199 fnconti(nin)%P(1,ideb+n) = zero
200 fnconti(nin)%P(2,ideb+n) = zero
201 fnconti(nin)%P(3,ideb+n) = zero
202 ftconti(nin)%P(1,ideb+n) = zero
203 ftconti(nin)%P(2,ideb+n) = zero
204 ftconti(nin)%P(3,ideb+n) = zero
206 ELSEIF(interfric > 0.OR.n_scal_cse_efric>0)
THEN
208 bbufs(l+1) =
nsvfi(nin)%P(ideb+n)
224 IF(n_scal_cse_efric>0)
THEN
225 bbufs(l+lf+1) =
efricgfi(nin)%P(ideb+n)
231 bbufs(ll) = (l-ll)/len
232 debut(nin) = debut(nin) + nb
239 assert(add + siz -1 <= iallocs+nbintc*nspmd)
241 . bbufs(add),siz,real ,it_spmd(p),msgtyp,
242 . spmd_comm_world,req_si(p),ierror )
246 adds(nspmd+1)=adds(nspmd)+siz
254 IF(addr(p+1)-addr(p)>0)
THEN
255 CALL mpi_wait(req_ri(p),status,ierror)
259 IF(
nsnsi(nin)%P(p)>0)
THEN
261 interfric = n_cse_fric_inter(nin)
262 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==22.OR.
263 . nty==23.OR.nty==24.OR.nty==25)
THEN
267 n = nint(bbufr(l+len*(i-1)))
268 nod = intbuf_tab(nin)%NSV(n)
273 fncont(1,nod) = fncont(1,nod) + bbufr(l+len*(i-1)+1)
274 fncont(2,nod) = fncont(2,nod) + bbufr(l+len*(i-1)+2)
275 fncont(3,nod) = fncont(3,nod) + bbufr(l+len*(i-1)+3)
276 ftcont(1,nod) = ftcont(1,nod) + bbufr(l+len*(i-1)+4)
277 ftcont(2,nod) = ftcont(2,nod) + bbufr(l+len*(i-1)+5)
278 ftcont(3,nod) = ftcont(3,nod) + bbufr(l+len*(i-1)+6)
281 efric(interfric,nod)= efric(interfric,nod)+ bbufr(l+len*(i-1)+lf+1)
287 efricg(nod)= efricg(nod)+ bbufr(l+len
305 IF(adds(p+1)-adds(p)>0)
THEN
306 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)