34 2 IN,IAD_ELEM ,FR_ELEM, SIZE,
35 3 SBUF_SIZE,RBUF_SIZE,WF,WF2,DD_R2R,
36 4 DD_R2R_ELEM,WEIGHT,FLAG,NLOC_DMG)
44 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
45#include "implicit_f.inc"
60#include "tabsiz_c.inc"
64 INTEGER,
INTENT(IN) :: IAD_ELEM(2,NSPMD+1),FR_ELEM(SFR_ELEM),
65 . SIZE,DD_R2R(NSPMD+1,SDD_R2R),DD_R2R_ELEM(SDD_R2R_ELEM),
66 . FLAG,WEIGHT(NUMNOD),SBUF_SIZE,RBUF_SIZE
67 my_real,
INTENT(IN) :: V(3,NUMNOD),VR(3,NUMNOD)
68 my_real,
INTENT(INOUT) :: wf,wf2,a(3,numnod),ar(3,numnod),
69 . ms(numnod),in(iroddl*numnod)
75 INTEGER MSGTYP,I,NOD,LOC_PROC,IERROR,
77 . STATUS(MPI_STATUS_SIZE),
78 . IAD_SEND(NSPMD+1),IAD_RECV(NSPMD+1),
79 . req_r(nspmd),req_s(nspmd),offset,msgoff,nn,
80 . offset_s_nl,offset_r_nl
82 . rbuf(rbuf_size),sbuf(sbuf_size),
83 . df1,df2,df3,df4,df5,df6
85 INTEGER,
POINTER,
DIMENSION(:) :: IDXI,POSI
86 my_real,
POINTER,
DIMENSION(:) :: FNL
94 fnl => nloc_dmg%FNL(1:nloc_dmg%L_NLOC,1)
95 idxi => nloc_dmg%IDXI(1:numnod)
96 posi => nloc_dmg%POSI(1:nloc_dmg%NNOD+1)
99 offset = dd_r2r(nspmd+1,1)-1
100 offset_s_nl = offset + dd_r2r(nspmd+1,2)-1
101 offset_r_nl = offset_s_nl + dd_r2r(nspmd+1,3)-1
108 siz = size*(dd_r2r(i+1,2)-dd_r2r(i,2))+dd_r2r(i+1,4)-dd_r2r(i,4)
112 s rbuf(l),siz,real,it_spmd(i),msgtyp,
113 g spmd_comm_world,req_r(i),ierror)
124#include "vectorize.inc"
125 DO j=dd_r2r(i,1),dd_r2r(i+1,1)-1
130 sbuf(l+3) = ar(1,nod)
131 sbuf(l+4) = ar(2,nod)
132 sbuf(l+5) = ar(3,nod)
141#include "vectorize.inc"
142 DO j=dd_r2r(i,1),dd_r2r(i+1,1)-1
154#include "vectorize.inc"
155 DO j=dd_r2r(i,3),dd_r2r(i+1,3)-1
156 nod = dd_r2r_elem(offset_s_nl + j)
171 IF(dd_r2r(i+1,1)-dd_r2r(i,1)>0)
THEN
173 siz = iad_send(i+1)-iad_send(i)
176 s sbuf(l),siz,real,it_spmd(i),msgtyp,
177 g spmd_comm_world,req_s(i),ierror)
186 nb_nod = dd_r2r(i+1,2)-dd_r2r(i,2)
188 CALL mpi_wait(req_r(i),status,ierror)
192#include "vectorize.inc"
193 DO j=dd_r2r(i,2),dd_r2r(i+1,2)-1
194 nod = dd_r2r_elem(offset+j)
195 IF(weight(nod)==1)
THEN
196 df1 = rbuf(l)-a(1,nod)
197 df2 = rbuf(l+1)-a(2,nod)
198 df3 = rbuf(l+2)-a(3,nod)
199 df4 = rbuf(l+3)-ar(1,nod)
200 df5 = rbuf(l+4)-ar(2,nod)
201 df6 = rbuf(l+5)-ar(3,nod)
215 IF(weight(nod)==1)
THEN
216 wf = wf + (df1*v(1,nod)+df2*v(2,nod)+
218 wf2= wf2+ (df1*a(1,nod)+df2*a(2,nod)+
219 . df3*a(3,nod))/(two*ms(nod))
220 wf = wf + (df4*vr(1,nod)+df5*vr(2,nod)+
222 wf2= wf2+ (df4*ar(1,nod)+df5*ar(2,nod)+
223 . df6*ar(3,nod))/(two*in(nod))
227#include "vectorize.inc"
228 DO j=dd_r2r(i,2),dd_r2r(i+1,2)-1
229 nod = dd_r2r_elem(offset+j)
230 IF(weight(nod)==1)
THEN
231 df1 = rbuf(l)-a(1,nod)
232 df2 = rbuf(l+1)-a(2,nod)
233 df3 = rbuf(l+2)-a(3,nod)
243 IF(weight(nod)==1)
THEN
244 wf = wf + (df1*v(1,nod)+df2*v(2,nod)+
246 wf2= wf2+ (df1*a(1,nod)+df2*a(2,nod)+
247 . df3*a(3,nod))/(two*ms(nod))
252#include "vectorize.inc"
253 DO j=dd_r2r(i,4),dd_r2r(i+1,4)-1
254 nod = dd_r2r_elem(offset_r_nl + j)
267 IF(dd_r2r(i+1,1)-dd_r2r(i,1)>0)
THEN
268 CALL mpi_wait(req_s(i),status,ierror)