41
42 USE nodal_arrays_mod
43
44
45
46#include "implicit_f.inc"
47#include "comlock.inc"
48
49
50
51#include "task_c.inc"
52#include "com01_c.inc"
53#include "com04_c.inc"
54#include "param_c.inc"
55#include "tabsiz_c.inc"
56
57
58
59 INTEGER ITASK, NINDG
60 INTEGER, INTENT(IN) :: NPRESLOAD
61 INTEGER IB(NIBCLD,*), ITAG(*),
62 . IXS(NIXS,*),(NIXQ,*),IXC(NIXC,*), IXT(NIXT,*), IXP(NIXP,*),
63 . IXR(NIXR,*), IXTG(NIXTG,*),IPARG(NPARG,*), ITAGL(*), ITAB(*),
64 . CNEL(0:*), ADDCNEL(0:*), TAGEL(*), IBUFS(*) , NINDEX(*)
65 INTEGER, INTENT(INOUT) :: LOADP_TAGDEL(NPRESLOAD)
66 INTEGER, INTENT(IN) :: LLOADP(SLLOADP), ILOADP(SIZLOADP,NLOADP)
67 INTEGER, DIMENSION(2,NSPMD+1), INTENT(in) :: IAD_ELEM
69 . geo(npropg,*)
70 TYPE(nodal_arrays_), intent(in) :: NODES
71
72
73
74 INTEGER I, J, NMNF, NMNL, NRTF, NRTL, N1, N2, N3, N4,
75 . NN, II, IX, K, , N, , IRECV(NSPMD),
76 . OFC, OFQ, OFT, OFP ,OFR ,OFTG, OFUR,NCONLDF ,
77 . NCONLDL,NL ,ICOMP ,IDBS ,IDB , IERR, NIND2 ,
78 . NINDPLOAD ,NUMPRESLOAD, JJ, IAD, NPRES, NP
79
80 INTEGER, DIMENSION(:,:), ALLOCATABLE :: NINDL
81
82 ofq=numels
83 ofc=ofq+numelq
84 oft=ofc+numelc
85 ofp=oft+numelt
86 ofr=ofp+numelp
87 oftg=ofr+numelr
88 ofur=oftg+numeltg
89
90 ALLOCATE(nindl(2,nconld+npresload))
91
93
94 nconldf = 1 + itask*nconld / nthread
95 nconldl = (itask+1)*nconld / nthread
96
97 nind = 0
98
99
100
101
102 DO nl=nconldf,nconldl
103 IF( ib(7,
nl) == 1 )
THEN
108 IF(n3 == 0) n3 = n2
109 IF(n4 == 0) n4 = n3
110 IF(itag(n1) == 0.OR.itag(n2) == 0.OR.
111 + itag(n3) == 0.OR.itag(n4) == 0) THEN
113 ELSEIF(itag(numnod+n1)>=1.AND.itag(numnod+n2)>=1.AND.
114 + itag(numnod+n3)>=1.AND.itag(numnod+n4)>=1) THEN
115 nind = nind + 1
117 ENDIF
118 ENDIF
119 ENDDO
120
121 nindpload = nind
122
123 numpresload = 0
124
125 DO np=1,nloadp_hyd
126
127 npres = iloadp(1,np)
128 iad = iloadp(4,np)
129
130 DO n=1, npres/4
131
132 n1 = lloadp(iad+4*(n-1))
133 n2 = lloadp(iad+4*(n-1)+1)
134 n3 = lloadp(iad+4*(n-1)+2)
135 n4 = lloadp(iad+4*(n-1)+3)
136 numpresload = numpresload + 1
137
138 IF(n3 == 0) n3 = n2
139 IF(n4 == 0) n4 = n3
140 IF(itag(n1) == 0.OR.itag(n2) == 0.OR.
141 + itag(n3) == 0.OR.itag(n4) == 0) THEN
142 loadp_tagdel(numpresload) = 1
143 ELSEIF(itag(numnod+n1)>=1.AND.itag(numnod+n2)>=1.AND.
144 + itag(numnod+n3)>=1.AND.itag(numnod+n4)>=1) THEN
145 nind = nind + 1
146 nindl(1,nind) = iad+4*(n-1)
147 nindl(2,nind) = numpresload
148 ENDIF
149 ENDDO
150 ENDDO
151
152
153
154
155 DO n = 1, nind
156 i = nindl(1,n)
157 IF(n <= nindpload) THEN
158 n1 = ib(1,i)
159 n2 = ib(2,i)
160 n3 = ib(3,i)
161 n4 = ib(4,i)
162 ELSE
163 n1 = lloadp(i)
164 n2 = lloadp(i+1)
165 n3 = lloadp(i+2)
166 n4 = lloadp(i+3)
167 ENDIF
168 IF(n3 == 0) n3 = n2
169 IF(n4 == 0) n4 = n3
170
171 DO j = addcnel(n1),addcnel(n1+1)-1
172 ii = cnel(j)
173 IF(tagel(ii) > 0) THEN
174 itagl(n1) = 0
175 itagl(n2) = 0
176 itagl(n3) = 0
177 itagl(n4) = 0
178 IF(ii<=ofq) THEN
179 DO k = 2, 9
180 ix = ixs(k,ii)
181 itagl(ix) = 1
182 END DO
183 ELSEIF(ii > ofq.AND.ii<=ofc) THEN
184 ii = ii - ofq
185 DO k=2,5
186 ix = ixq(k,ii)
187 itagl(ix)=1
188 END DO
189 ELSEIF(ii > ofc.AND.ii<=oft) THEN
190 ii = ii - ofc
191 DO k=2,5
192 ix = ixc(k,ii)
193 itagl(ix)=1
194 END DO
195 ELSEIF(ii > oftg.AND.ii<=ofur)THEN
196 ii = ii - oftg
197 DO k=2,4
198 ix = ixtg(k,ii)
199 itagl(ix) = 1
200 END DO
201 ELSEIF(ii > oft.AND.ii<=ofp)THEN
202 ii = ii - oft
203 DO k=2,3
204 ix = ixt(k,ii)
205 itagl(ix) = 1
206 ENDDO
207 ELSEIF(ii > ofp.AND.ii<=ofr)THEN
208 ii = ii - ofp
209 DO k=2,3
210 ix = ixp(k,ii)
211 itagl(ix) = 1
212 ENDDO
213 ELSEIF(ii > ofr.AND.ii<=oftg)THEN
214 ii = ii - ofr
215 DO k=2,3
216 ix = ixr(k,ii)
217 itagl(ix) = 1
218 ENDDO
219 IF(nint(geo(12,ixr(1,ii))) == 12) THEN
220 ix = ixr(4,ii)
221 itagl(ix) = 1
222 ENDIF
223 END IF
224
225 IF(itagl(n1)+itagl(n2)+itagl(n3)+itagl(n4) == 4)THEN
226 GOTO 400
227 END IF
228 END IF
229 END DO
230
231 IF(nspmd == 1) THEN
232 IF(n <= nindpload) THEN
233 ib(8,i) = 1
234 ELSE
235 jj = nindl(2,n)
236 loadp_tagdel(jj) = 1
237 ENDIF
238
239 ELSE
240
241#include "lockon.inc"
242 nindg = nindg + 1
243 nind2 = nindg
244
245 IF(n <= nindpload) THEN
246 nindex(nind2) = i
247 ELSE
248 jj = nindl(2,n)
249 nindex(nind2) = -jj
250 ENDIF
251 ibufs(4*(nind2-1)+1 ) = itab(n1)
252 ibufs(4*(nind2-1)+2 ) = itab(n2)
253 ibufs(4*(nind2-1)+3 ) = itab(n3)
254 ibufs(4*(nind2-1)+4 ) = itab(n4)
255
256#include "lockoff.inc"
257
258 END IF
259
260 400 CONTINUE
261
262 END DO
263
264
266
267
268
269
270 IF(nspmd > 1) THEN
271
272
273
274
275
276
277
280 1 ibufs ,4*nindg ,ixs ,ixc ,ixtg ,
281 2 ixq ,iparg ,itagl ,nodes,tagel ,
282 3 irsize ,irecv ,cnel ,addcnel,ofc ,
283 4 oft ,oftg ,ofur ,ofr ,ofp ,
284 5 ofq ,nindg ,ixp ,ixr ,ixt ,
285 6 geo ,iad_elem)
286
287
288
289
290 DO j = 1, nindg
291 nn = ibufs(j)
292 IF(nn == 0) THEN
293 i = nindex(j)
294
295 IF(i > 0) THEN
296 ib(8,i) = 1
297 ELSE
298 loadp_tagdel(-i) = 1
299 ENDIF
300 END IF
301 END DO
302
303
304
305 ENDIF
306
307
308 DEALLOCATE(nindl)
309
310 RETURN
subroutine spmd_exchseg_idel(bufs, lbufs, ixs, ixc, ixtg, ixq, iparg, itagl, nodes, tagel, irsize, irecv, cnel, addcnel, ofc, oft, oftg, ofur, ofr, ofp, ofq, lindex, ixp, ixr, ixt, geo, iad_elem)
subroutine spmd_init_idel(nindex, irsize, irecv, iad_elem)
character *2 function nl()