41
42
43
44 USE elbufdef_mod
47 USE my_alloc_mod
48
49
50
51 USE spmd_comm_world_mod, ONLY : spmd_comm_world
52#include "implicit_f.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58
59
60#include "spmd.inc"
61
62
63
64#include "param_c.inc"
65#include "com01_c.inc"
66#include "com04_c.inc"
67#include "scr02_c.inc"
68#include "scr17_c.inc"
69#include "scr18_c.inc"
70#include "sms_c.inc"
71#include "sphcom.inc"
72#include "tabsiz_c.inc"
73#include "task_c.inc"
74#include "vect01_c.inc"
75
76
77
78 INTEGER IXR(NIXR,*), ITAB(*),
79 . IGEO(NPROPGI,*),IPM(NPROPMI,*),IPARG(NPARG,*)
80 INTEGER, DIMENSION(SIPART), TARGET :: IPART
81
83 . geo(npropg,*),pm(npropm,*),uparam(*),ms(*),in(*)
84
85 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
86 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
87 TYPE (GROUP_) ,DIMENSION(NGRPART) :: IGRPART
88
89
90
91 INTEGER I,N,N1,N2,IPID,IMAT,IADBUF,IEQUI,IP,IERR,IERROR,
92 . K1,K11,K12,K13,K14,
93 . IOK,IDTGRX,NG
94 INTEGER I15ATH,I15A,I15B,I15C,I15D,I15E,I15F,I15G,I15H,I15I,I15J,I15K
95
97 . xkm, xcm, xkr, xcr, xin(mvsiz)
98 TYPE(G_BUFEL_) ,POINTER :: GBUF
99 INTEGER, DIMENSION(:), POINTER :: IPARTR
100 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGN
101 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGR
102 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGPRT_SMS
103
104 CALL my_alloc(tagn,numnod)
105 CALL my_alloc(tagr,numelr)
106 CALL my_alloc(tagprt_sms,npart)
107
108
109
110
111 i15ath=1+lipart1*(npart+nthpart)
112 i15a=i15ath+2*9*(npart+nthpart)
113 i15b=i15a+numels
114 i15c=i15b+numelq
115 i15d=i15c+numelc
116 i15e=i15d+numelt
117 i15f=i15e+numelp
118 i15g=i15f+numelr
119 i15h=i15g+0
120 i15i=i15h+numeltg
121 i15j=i15i+numelx
122 i15k=i15j+numsph
123
124 ipartr => ipart(i15f:i15g-1)
125
126 IF(nodadt/=0)THEN
127 IF(idtgr(11)==0)THEN
128 tagn(1:numnod)=1
129 ELSE
130 tagn(1:numnod)=0
131 iok = 0
132 DO n=1,ngrnod
133 IF (iabs(idtgr(11))==igrnod(n)%ID) THEN
134 idtgrx= n
135 iok = 1
136 ENDIF
137 ENDDO
138 IF (iok == 0) THEN
139 CALL ancmsg(msgid=237,anmode=aninfo,
140 . i1=iabs(idtgr(11)))
142 ENDIF
143 DO n=1,igrnod(idtgrx)%NENTITY
144 tagn(igrnod(idtgrx)%ENTITY(n)) = 1
145 ENDDO
146 ENDIF
147 ELSE
148 tagn(1:numnod)=0
149 ENDIF
150
151 tagr(1:numelr)=0
152 IF(idtmins==2)THEN
153
154 IF(idtgrs==0)THEN
155 DO ip=1,npart
156 tagprt_sms(ip)=1
157 END DO
158 ELSE
159 DO ip=1,npart
160 tagprt_sms(ip)=0
161 END DO
162 IF(idtgrs < 0)THEN
163 DO n=1,ngrpart
164 IF (igrpart(n)%ID==-idtgrs) THEN
165 idtgrx=n
166 GO TO 120
167 END IF
168 END DO
169 CALL ancmsg(msgid=21,anmode=aninfo_blind,
170 . i1=-idtgrs)
172 120 CONTINUE
173 END IF
174
175 DO i=1,igrpart(idtgrx)%NENTITY
176 ip=igrpart(idtgrx)%ENTITY(i)
177 tagprt_sms(ip)=1
178 END DO
179 END IF
180
181 IF (isms_selec==1) THEN
182
183 DO i=1,numelr
184 tagr(i)=1
185 END DO
186 ELSEIF (isms_selec==2) THEN
187
188 DO i=1,numelr
189 IF(tagprt_sms(ipartr(i))==0)THEN
190 tagr(i)=0
191 ELSE
192 tagr(i)=1
193 END IF
194 END DO
195 ELSEIF (isms_selec==3) THEN
196
197 DO ng = 1, ngroup
198 ity =iparg(5,ng)
199 IF(ity==6)THEN
200 nft =iparg(3,ng)
201 lft =1
202 llt =iparg(2,ng)
203 gbuf => elbuf_tab(ng)%GBUF
204 DO i=lft,llt
205 IF(gbuf%ISMS(i)==0)THEN
206 tagr(nft+i)=0
207 ELSE
208 tagr(nft+i)=1
209 END IF
210 END DO
211 END IF
212 END DO
213 ELSEIF (isms_selec==4) THEN
214
215 DO ng = 1, ngroup
216 ity =iparg(5,ng)
217 IF(ity==6)THEN
218 nft =iparg(3,ng)
219 lft =1
220 llt =iparg(2,ng)
221 gbuf => elbuf_tab(ng)%GBUF
222 DO i=lft,llt
223 IF(gbuf%ISMS(i)==0.AND.tagprt_sms(ipartr(nft+i))==0)THEN
224 tagr(nft+i)=0
225 ELSE
226 tagr(nft+i)=1
227 END IF
228 END DO
229 END IF
230 END DO
231 END IF
232 END IF
233
234 ierr=0
235 DO ng = 1, ngroup
236 ity =iparg(5,ng)
237 IF(ity==6)THEN
238 nft =iparg(3,ng)
239 lft =1
240 llt =iparg(2,ng)
241 gbuf => elbuf_tab(ng)%GBUF
242
243 ipid = ixr(1,nft+1)
244 igtyp= igeo(11,ipid)
245
246 IF(igtyp==23)THEN
247
248 imat = ixr(5,nft+1)
249 iadbuf = ipm(7,imat) - 1
250 mtn = ipm(2,imat)
251
252 k1 = 4
253 k11 = 64
254 k12 = k11 + 6
255 k13 = k12 + 6
256 k14 = k13 + 6
257
258 IF(mtn == 108) THEN
259 iequi = uparam(iadbuf+2)
260 xkm=
max(uparam(iadbuf + k11 + 1)*uparam(iadbuf + k1 + 1),
261 . uparam(iadbuf + k11 + 2)*uparam(iadbuf + k1 + 2),
262 . uparam(iadbuf + k11 + 3)*uparam(iadbuf + k1 + 3))
263 xcm=
max(uparam(iadbuf + k12 + 1),uparam(iadbuf + k12 + 2),uparam(iadbuf + k12 + 3))
264 xkr=
max(uparam(iadbuf + k11 + 4)*uparam(iadbuf + k1 + 4),
265 . uparam(iadbuf + k11 + 5)*uparam(iadbuf + k1 + 5),
266 . uparam(iadbuf + k11 + 6)*uparam(iadbuf + k1 + 6))
267 xcr=
max(uparam(iadbuf + k12 + 4),uparam(iadbuf + k12 + 5),uparam(iadbuf + k12 + 6))
268 DO i=lft,llt
269 n1 =ixr(2,nft+i)
270 n2 =ixr(3,nft+i)
271 IF(gbuf%MASS(i)==zero)THEN
272 IF(xkm/=zero.OR.xcm/=zero)THEN
273 IF(nodadt==0.AND.idtmins/=2)THEN
274 ierr=1
275 ELSEIF(.NOT.((nodadt/=0 .AND.tagn(n1)/=0 .AND. tagn(n2)/=0).OR.
276 . (idtmins==2.AND.tagr(i)/=0)))THEN
277 ierr=1
278 END IF
279 END IF
280 END IF
281 xin(i)= geo(2,ipid)
282 IF(xin(i)==zero)THEN
283 IF(xkr/=zero.OR.xcr/=zero.OR.(iequi/=0.AND.(xkm/=zero.OR.xcm/=zero)))THEN
284 IF(nodadt==0.AND.idtmins/=2)THEN
285 ierr=1
286 ELSEIF(.NOT.((nodadt/=0 .AND.tagn(n1)/=0 .AND. tagn(n2)/=0).OR.
287 . (idtmins==2.AND.tagr(i)/=0)))THEN
288 ierr=1
289 END IF
290 END IF
291 END IF
292 END DO
293 END IF
294 END IF
295 END IF
296 END DO
297
298 IF(nspmd > 0)THEN
299#ifdef MPI
300 CALL mpi_allreduce(mpi_in_place,ierr,1,mpi_integer,mpi_max,spmd_comm_world,ierror)
301#endif
302 END IF
303 IF(ierr/=0)THEN
304 nodadt =1
305 idtgr(11)=0
306 IF(ispmd==0)THEN
307 CALL ancmsg(msgid=286,anmode=aninfo_blind_1)
308 END IF
309 END IF
310
311 DEALLOCATE(tagn)
312 DEALLOCATE(tagr)
313 DEALLOCATE(tagprt_sms)
314
315 RETURN
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
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)