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