332
333
334
336 USE format_mod , ONLY : fmw_4i
337
338
339
340#include "implicit_f.inc"
341
342
343
344#include "com04_c.inc"
345#include "units_c.inc"
346#include "scr03_c.inc"
347
348
349
350 INTEGER IALLO,NSEG0,NLIN0,NLIN,NACTIF,IEDGE,NSME,NB,ISU,LIN
351 INTEGER IXLINE(2,*),ITAB(*),MSVE(*),
352 . LNTAG(*) ,TAGB(*),ISLINE(2,*),SURF_NODES(NSEG0,4),
353 . SLIN_NODES(NLIN0,2)
355
356
357
358 INTEGER I,J,K,L,NLMAX,STAT,LL,I1,I2,I3,I4,I5,I1M,I2M,NL,IS
359 INTEGER NEXTK(4),IWORK(70000),NLL
360 my_real nx,ny,nz,mx,my,mz,aaa,d1x,d1y,d1z,d2x,d2y,d2z
361 INTEGER, DIMENSION(:,:), ALLOCATABLE :: LINEIX,LINEIX2,IXWORK
362 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX,TAG
363 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xlineix
364
365 INTEGER BITSET
367
368 DATA nextk/2,3,4,1/
369
370 nlmax = 0
371 IF(isu /= 0) nlmax = 4*nseg0
372
373 ALLOCATE (lineix(2,nlmax) ,stat=stat)
374 ALLOCATE (lineix2(2,nlmax) ,stat=stat)
375 ALLOCATE (xlineix(3,nlmax) ,stat=stat)
376 ALLOCATE (index(2*nlmax) ,stat=stat)
377 ALLOCATE (tag(numnod) ,stat=stat)
378 ALLOCATE (ixwork(5,nlmax) ,stat=stat)
379
380 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
381 . msgtype=msgerror,
382 . c1='LINEIX')
383
384
385
386
387 IF(isu /= 0)THEN
388 is = 0
389 ll = 0
390 DO j=1,nseg0
391 is = is+1
392 i1=surf_nodes(j,1)
393 i2=surf_nodes(j,2)
394 i3=surf_nodes(j,3)
395 i4=surf_nodes(j,4)
396 d1x = x(1,i3) - x(1,i1)
397 d1y = x(2,i3) - x(2,i1)
398 d1z = x(3,i3) - x(3,i1)
399 d2x = x(1,i4) - x(1,i2)
400 d2y = x(2,i4) - x(2,i2)
401 d2z = x(3,i4) - x(3,i2)
402 nx = d1y * d2z - d1z * d2y
403 ny = d1z * d2x - d1x * d2z
404 nz = d1x * d2y - d1y * d2x
405 aaa = one/
max(sqrt(nx*nx+ny*ny+nz*nz),em20)
406 nx = nx * aaa
407 ny = ny * aaa
408 nz = nz * aaa
409 DO k=1,4
410 i1=surf_nodes(j,k)
411 i2=surf_nodes(j,nextk(k))
412 ll = ll+1
413 IF(i2 > i1)THEN
414 lineix(1,ll) = i1
415 lineix(2,ll) = i2
416 lineix2(1,ll) = j
417 lineix2(2,ll) = k
418 ELSE
419
420
421 lineix(1,ll) = i2
422 lineix(2,ll) = i1
423 lineix2(1,ll) = j
424 lineix2(2,ll) = -k
425 ENDIF
426 xlineix(1,ll) = nx
427 xlineix(2,ll) = ny
428 xlineix(3,ll) = nz
429 ENDDO
430 ENDDO
431
432 CALL my_orders(0,iwork,lineix,index,ll,2)
433
434
435
436
437
438 i1m = lineix(1,index(1))
439 i2m = lineix(2,index(1))
443 ixwork(3,
nl)=lineix2(1,index(1))
444 ixwork(4,
nl)=lineix2(2,index(1))
446 mx = xlineix(1,index(1))
447 my = xlineix(2,index(1))
448 mz = xlineix(3,index(1))
449 DO l=2,ll
450 i1 = lineix(1,index(l))
451 i2 = lineix(2,index(l))
452 nx = xlineix(1,index(l))
453 ny = xlineix(2,index(l))
454 nz = xlineix(3,index(l))
455 IF(i2 /= i2m .or. i1 /= i1m)THEN
459 ixwork(3,
nl)=lineix2(1,index(l))
460 ixwork(4,
nl)=lineix2(2,index(l))
462 ELSE
464 aaa = nx*mx + ny * my + nz * mz
465 IF (aaa < edg_cos) ixwork(5,
nl) = -1
466 ENDIF
467 i1m = i1
468 i2m = i2
469 mx = nx
470 my = ny
471 mz = nz
472 ENDDO
473
474
475
476
479 IF(iedge == 1)THEN
480
481 DO l=1,ll
482 IF(ixwork(5,l) == 1)THEN
489 ixwork(1,
nl)=ixwork(1,l)
490 ixwork(2,
nl)=ixwork(2,l)
491 ixwork(3,
nl)=ixwork(3,l)
492 ixwork(4,
nl)=ixwork(4,l)
494 ixwork(1,l)=i1
495 ixwork(2,l)=i2
496 ixwork(3,l)=i3
497 ixwork(4,l)=i4
498 ixwork(5,l)=i5
499 ENDIF
500 ENDDO
501 ELSEIF(iedge == 2)THEN
502
503 DO l=1,ll
505 ixwork(5,l)=1
506 ENDDO
507 ELSEIF(iedge == 3)THEN
508
509
510 DO l=1,ll
511 IF(iabs(ixwork(5,l)) == 1)THEN
517 i5=iabs(ixwork(5,
nl))
518 ixwork(1,
nl)=ixwork(1,l)
519 ixwork(2,
nl)=ixwork(2,l)
520 ixwork(3,
nl)=ixwork(3,l)
521 ixwork(4,
nl)=ixwork(4,l)
523 ixwork(1,l)=i1
524 ixwork(2,l)=i2
525 ixwork(3,l)=i3
526 ixwork(4,l)=i4
527 ixwork(5,l)=i5
528 ENDIF
529 ENDDO
530 ENDIF
531
532 ELSE
533
534 ll = 0
536 ENDIF
537
538
539
540 nll = ll
541 nlin = ll
543 IF(lin /= 0) THEN
544 nlin = nlin + nlin0
545 nactif = nactif + nlin0
546 ENDIF
547
548
549
550 nsme = 0
551 DO i=1,numnod
552 tag(i) = 0
553 ENDDO
554 DO ll=1,nll
555 tag(ixwork(1,ll)) = 1
556 tag(ixwork(2,ll)) = 1
557 ENDDO
558 IF(lin /= 0)THEN
559 DO j=1,nlin0
560 tag(slin_nodes(j,1)) = 1
561 tag(slin_nodes(j,2)) = 1
562 lntag(slin_nodes(j,1)) = 1
563 lntag(slin_nodes(j,2)) = 1
564 ENDDO
565 ENDIF
566 DO i=1,numnod
567 IF(tag(i) == 1) THEN
568 nsme = nsme + 1
569 tagb(i) =
bitset(tagb(i),nb)
570 ENDIF
571 ENDDO
572
573
574
575 IF(iallo == 2)THEN
576 l = 0
577 IF(lin /= 0)THEN
578 DO j=1,nlin0
579 l = l+1
580 ixline(1,l) = slin_nodes(j,1)
581 ixline(2,l) = slin_nodes(j,2)
582 isline(1,l) = 0
583 isline(2,l) = 0
584 ENDDO
585 ENDIF
586
587 DO ll=1,nll
588 IF(ixwork(5,ll) == 1)THEN
589 l = l+1
590 ixline(1,l) = ixwork(1,ll)
591 ixline(2,l) = ixwork(2,ll)
592 isline(1,l) = ixwork(3,ll)
593 isline(2,l) = ixwork(4,ll)
594 ENDIF
595 ENDDO
596
597
598 DO ll=1,nll
599 IF(ixwork(5,ll) /= 1)THEN
600 l = l+1
601 ixline(1,l) = ixwork(1,ll)
602 ixline(2,l) = ixwork(2,ll)
603 isline(1,l) = ixwork(3,ll)
604 isline(2,l) = ixwork(4,ll)
605 ENDIF
606 ENDDO
607
608 IF(ipri >= 1) THEN
609 WRITE(iout,'(/,A,/)')' ACTIV SEGMENTS USED FOR EDGE'
610 k=1
611 DO i=1,nactif
612 WRITE(iout,fmt=fmw_4i)(itab(ixline(k,i)),k=1,2)
613 ENDDO
614 ENDIF
615
616
617 l = 0
618 DO i=1,numnod
619 IF(tag(i) == 1)THEN
620 tag(i) = 0
621 l = l+1
622 msve(l) = i
623 ENDIF
624 ENDDO
625 ENDIF
626
627 DEALLOCATE (index)
628 DEALLOCATE (tag)
629 DEALLOCATE (ixwork)
630 DEALLOCATE (lineix)
631 DEALLOCATE (lineix2)
632 DEALLOCATE (xlineix)
633
634 RETURN
character *2 function nl()