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