193
194
195
197
198
199
200#include "implicit_f.inc"
201
202
203
204#include "com04_c.inc"
205#include "scr03_c.inc"
206
207
208
209 INTEGER NINT, NEL, I, NOINT,IR,J,NINV
212 INTEGER IRECT(4,*), IXS(NIXS,*), KNOD2ELS(*), NOD2ELS(*),
213 . IXS10(6,*), IXS16(8,*), IXS20(12,*)
214 INTEGER , INTENT(INOUT) :: TAGELEMS(NUMELS),INDEXE(NUMELS)
216 . x(3,*)
217 INTEGER , INTENT(INOUT) :: IELEM_M(2)
218 INTEGER, DIMENSION(NUMELS), INTENT(INOUT) :: ELEM_LINKED_TO_SEGMENT
219 LOGICAL, INTENT(INOUT) :: PRINT_ERROR
220 INTEGER, INTENT(IN) :: NIN25, NTY
221 INTEGER, INTENT(IN) :: FLAG_ELEM_INTER25(NINTER25,NUMELS)
222
223
224
225 INTEGER IY(4), N, JJ, II, K, NN, KK, IC, IAD,
226 . NUSER, NUSERM, NINDEXE, IELS
227 INTEGER :: IJK
228 INTEGER :: ELEM_ID
229
231 . n1, n2, n3, dds
232 my_real :: xx1(4),xx2(4),xx3(4),xs1,ys1,zs1,xc,yc,zc
233
234
235
236
237 nel=0
238 ic=0
239 print_error = .false.
240 IF(numels==0) RETURN
241 IF(irect(1,i)>numnod) RETURN
242
243 nindexe = 0
244 nuserm = -1
245 DO 230 iad=knod2els(irect(1,i))+1,knod2els(irect(1,i)+1)
246 n = nod2els(iad)
247 IF(n <= numels8)THEN
248 DO 210 jj=1,4
249 ii=irect(jj,i)
250 DO k=1,8
251 IF(ixs(k+1,n)==ii) GOTO 210
252 ENDDO
253 GOTO 230
254 210 CONTINUE
255 nuser = ixs(11,n)
256 IF(tagelems(n)==0) THEN
257 ic=ic+1
258 tagelems(n) = 1
259 nindexe = nindexe + 1
260 indexe(nindexe) = n
261 elem_linked_to_segment(ic) = n
262 IF (nuser>nuserm) THEN
263 nel = n
264 nuserm = nuser
265 ENDIF
266 ENDIF
267 ELSEIF(n <= numels8+numels10)THEN
268 DO 220 jj=1,4
269 ii=irect(jj,i)
270 DO k=1,8
271 IF(ixs(k+1,n)==ii) GOTO 220
272 ENDDO
273 DO k=1,6
274 IF(ixs10(k,n-numels8)==ii) GOTO 220
275 ENDDO
276 GOTO 230
277 220 CONTINUE
278 nuser = ixs(11,n)
279 IF(tagelems(n)==0) THEN
280 ic=ic+1
281 tagelems(n) = 1
282 nindexe = nindexe + 1
283 indexe(nindexe) = n
284 elem_linked_to_segment(ic) = n
285 IF (nuser>nuserm) THEN
286 nel = n
287 nuserm = nuser
288 ENDIF
289 ENDIF
290 ELSEIF(n <= numels8+numels10+numels20)THEN
291 DO 222 jj=1,4
292 ii=irect(jj,i)
293 DO k=1,8
294 IF(ixs(k+1,n)==ii) GOTO 222
295 ENDDO
296 DO k=1,12
297 IF(ixs20(k,n-numels8-numels10)==ii) GOTO 222
298 ENDDO
299 GOTO 230
300 222 CONTINUE
301 nuser = ixs(11,n)
302 IF(tagelems(n)==0) THEN
303 ic=ic+1
304 tagelems(n) = 1
305 nindexe = nindexe + 1
306 indexe(nindexe) = n
307 elem_linked_to_segment(ic) = n
308 IF (nuser>nuserm) THEN
309 nel = n
310 nuserm = nuser
311 ENDIF
312 ENDIF
313 ELSEIF(n <= numels8+numels10+numels20+numels16)THEN
314 DO 224 jj=1,4
315 ii=irect(jj,i)
316 DO k=1,8
317 IF(ixs(k+1,n)==ii) GOTO 224
318 ENDDO
319 DO k=1,8
320 IF(ixs16(k,n-numels8-numels10-numels20)==ii) GOTO 224
321 ENDDO
322 GOTO 230
323 224 CONTINUE
324 nuser = ixs(11,n)
325 IF(tagelems(n)==0) THEN
326 ic=ic+1
327 tagelems(n) = 1
328 nindexe = nindexe + 1
329 indexe(nindexe) = n
330 elem_linked_to_segment(ic) = n
331 IF (nuser>nuserm) THEN
332 nel = n
333 nuserm = nuser
334 ENDIF
335 ENDIF
336 ELSE
337 GOTO 230
338 END IF
339 230 CONTINUE
340 DO jj= 1,nindexe
341 n = indexe(jj)
342 tagelems(n) = 0
343 indexe(jj) = 0
344 ENDDO
345
346 IF (nuserm==-1) RETURN
347 IF(ic==1) THEN
348 ielem_m(1) = nel
349 ielem_m(2) = 0
350 ELSEIF(ic==2) THEN
351 ielem_m(1:2) = elem_linked_to_segment(1:2)
352 IF(ielem_m(1)/= nel) THEN
353 iels = ielem_m(1)
354 ielem_m(1) = ielem_m(2)
355 ielem_m(2) = iels
356 ENDIF
357 IF(nty==25) THEN
358 IF(flag_elem_inter25(nin25,ielem_m(1)) ==1.AND.flag_elem_inter25(nin25,ielem_m(2)) ==0) THEN
359 ic = 1
360 ELSEIF(flag_elem_inter25(nin25,ielem_m(1)) ==0.AND.flag_elem_inter25(nin25,ielem_m(2)) ==1) THEN
361 ic = 1
362 nel = ielem_m(2)
363 ielem_m(1) = ielem_m(2)
364 ielem_m(2) = 0
365 ENDIF
366 ENDIF
367
368 ELSE
369 ielem_m(1:2) = elem_linked_to_segment(1:2)
370 print_error = .true.
371 DO ijk=1,ic
372 elem_id = ixs(11,elem_linked_to_segment(ijk))
374 . msgtype=msgwarning,
375 . anmode=aninfo_blind_1,
376 . i1=elem_id ,
377 . prmod=msg_cumu)
378 ENDDO
379 ENDIF
380
381
382
383 xs1=zero
384 ys1=zero
385 zs1=zero
386 DO 100 jj=1,4
387 nn=irect(jj,i)
388 iy(jj)=nn
389 xx1(jj)=x(1,nn)
390 xx2(jj)=x(2,nn)
391 xx3(jj)=x(3,nn)
392 xs1=xs1+fourth*x(1,nn)
393 ys1=ys1+fourth*x(2,nn)
394 100 zs1=zs1+fourth*x(3,nn)
395
397
398 xc=0.
399 yc=0.
400 zc=0.
401 DO 110 k=1,8
402 kk=ixs(k+1,nel)
403 xc=xc+x(1,kk)
404 yc=yc+x(2,kk)
405 zc=zc+x(3,kk)
406 110 CONTINUE
407 xc=xc*one_over_8
408 yc=yc*one_over_8
409 zc=zc*one_over_8
410
411 IF(ir/=0) RETURN
412 IF(ic>=2)RETURN
413 dds=n1*(xc-xs1)+n2*(yc-ys1)+n3*(zc-zs1)
414
415 IF(dds<zero) RETURN
416 IF(iy(3)==iy(4)) THEN
417 irect(1,i)=iy(2)
418 irect(2,i)=iy(1)
419 ELSE
420 DO 120 kk=1,4
421 120 irect(kk,i)=iy(4-kk+1)
422 ENDIF
423
424
425 ninv = ninv + 1
426 IF(ipri>=10.AND.nint>0)
428 . msgtype=msgwarning,
429 . anmode=aninfo_blind_1,
430 . i1=i,
431 . i2=noint,
432 . prmod=msg_cumu)
433 IF(ipri>=10.AND.nint< 0)
435 . msgtype=msgwarning,
436 . anmode=aninfo_blind_1,
437 . i1=i,
438 . i2=noint,
439 . prmod=msg_cumu)
440
441 RETURN
subroutine norma1d(n1, n2, n3, area, xx1, xx2, xx3)