34
35
36
38
39
40
41 USE spmd_comm_world_mod, ONLY : spmd_comm_world
42#include "implicit_f.inc"
43
44
45
46#include "spmd.inc"
47
48
49
50#include "task_c.inc"
51
52
53
54 INTEGER NELCUT, NBF, NESCT, NERWL, NESRG, NESMD1, FVPBUF(*)
55
56
57
58#ifdef MPI
59 INTEGER FVIAD, I, PMAIN, J, K, KK, N, NN, ITAG, MSGOFF,MSGOFF2,
60 . NPOLH_ANIM, IERR, STAT(MPI_STATUS_SIZE), IAD, IADP
61
62 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAGT, IBUF
63
64 DATA msgoff/7043/
65 DATA msgoff2/7044/
66
67 iadp=0
68 fviad=nelcut+nbf+nesct+nerwl+nesrg+nesmd1
71 IF (ispmd==0) THEN
72 IF (ispmd==pmain-1) THEN
73 ALLOCATE(itagt(
fvdata(i)%NNTR))
75 itagt(j)=0
76 ENDDO
77
78 DO j=1,
fvdata(i)%NPOLH_ANIM
79 DO k=
fvdata(i)%IFVPADR_ANIM(j),
80 .
fvdata(i)%IFVPADR_ANIM(j+1)-1
81 kk=
fvdata(i)%IFVPOLH_ANIM(k)
82 DO n=
fvdata(i)%IFVTADR_ANIM(kk),
83 .
fvdata(i)%IFVTADR_ANIM(kk+1)-1
84 nn=
fvdata(i)%IFVPOLY_ANIM(n)
85 IF (itagt(nn)==0) THEN
86 fviad=fviad+1
87 itagt(nn)=1
88 ENDIF
89 ENDDO
90 ENDDO
91 fvpbuf(iadp+j)=fviad
92 ENDDO
93 iadp=iadp+
fvdata(i)%NPOLH_ANIM
94
95 DEALLOCATE(itagt)
96 ELSE
97 itag=msgoff
98 CALL mpi_recv(npolh_anim, 1, mpi_integer,
99 . it_spmd(pmain), itag, spmd_comm_world,
100 . stat, ierr)
101
102 ALLOCATE(ibuf(npolh_anim))
103 itag=msgoff2
104 CALL mpi_recv(ibuf, npolh_anim, mpi_integer,
105 . it_spmd(pmain), itag, spmd_comm_world,
106 . stat, ierr)
107
108 DO j=1,npolh_anim
109 fvpbuf(iadp+j)=fviad+ibuf(j)
110 ENDDO
111 fviad=fviad+ibuf(npolh_anim)
112 iadp=iadp+npolh_anim
113 DEALLOCATE(ibuf)
114 ENDIF
115 ELSE
116 IF (ispmd==pmain-1) THEN
117 itag=msgoff
119 . it_spmd(1), itag, spmd_comm_world,
120 . ierr)
121
122 ALLOCATE(ibuf(
fvdata(i)%NPOLH_ANIM),
124 iad=0
125
127 itagt(j)=0
128 ENDDO
129
130 DO j=1,
fvdata(i)%NPOLH_ANIM
131 DO k=
fvdata(i)%IFVPADR_ANIM(j),
132 .
fvdata(i)%IFVPADR_ANIM(j+1)-1
133 kk=
fvdata(i)%IFVPOLH_ANIM(k)
134 DO n=
fvdata(i)%IFVTADR_ANIM(kk),
135 .
fvdata(i)%IFVTADR_ANIM(kk+1)-1
136 nn=
fvdata(i)%IFVPOLY_ANIM(n)
137 IF (itagt(nn)==0) THEN
138 iad=iad+1
139 itagt(nn)=1
140 ENDIF
141 ENDDO
142 ENDDO
143 ibuf(j)=iad
144 ENDDO
145 itag=msgoff2
147 . it_spmd(1), itag, spmd_comm_world,
148 . ierr)
149
150 DEALLOCATE(ibuf, itagt)
151 ENDIF
152 ENDIF
153 ENDDO
154
155#endif
156 RETURN
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
type(fvbag_spmd), dimension(:), allocatable fvspmd
type(fvbag_data), dimension(:), allocatable fvdata