35 SUBROUTINE i20surfi(IALLO ,IPARI ,IGRNOD ,IGRSURF ,
36 2 IGRSLIN ,IRECT ,FRIGAP ,
37 3 NSV ,MSR ,IXLINS ,IXLINM ,
38 4 NSVE ,MSRE ,ITAB ,ISLINS ,
39 5 ISLINM ,NLG ,X ,NBINFLG ,
45 USE format_mod ,
ONLY : fmw_10i, fmw_4i, fmw_5i, fmw_i_3f
49#include "implicit_f.inc"
62 . IRECT(4,*), NSV(*),IXLINS(2,*),
63 . IXLINM(2,*),MSR(*),ITAB(*),NSVE(*),MSRE(*),
64 . ISLINS(2,*),ISLINM(2,*),NLG(*),NBINFLG(*),MBINFLG(*)
67 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
68 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
69 TYPE (SURF_) ,
DIMENSION(NSLIN) :: IGRSLIN
73 INTEGER I,J,K,L,LL,NL,ISU1,ISU2,NOD1,NRTM,NRTS,NSN,NMN,
74 . nlinsa,nlinma,isym,iedge,nsne,nmne,nln,
75 . nlins,nlinm,line1,line2,stat,il,ig
76 INTEGER TAG(NUMNOD),TAGS(NUMNOD),NEXTK(4),IWORK(70000),
77 . LNTAG(NUMNOD),TAGB(NUMNOD)
87 DATA MESS/
'INTERFACE INPUT '/
114 IF(isu1 /= 0) nrtm = igrsurf(isu1)%NSEG
118 IF(isu2 /= 0) nrts = igrsurf(isu2)%NSEG
120 IF(isym == 1) nrtm = nrtm + nrts
128 DO j=1,igrsurf(isu1)%NSEG
131 irect(k,l) = igrsurf(isu1)%NODES(j,k)
133 mbinflg(l) = bitset(mbinflg(l),0)
136 IF(isu2 /= 0 .and. isym == 1)
THEN
137 DO j=1,igrsurf(isu2)%NSEG
140 irect(k,l) = igrsurf(isu2)%NODES(j,k)
142 mbinflg(l) = bitset(mbinflg(l),1)
146 WRITE(iout,
'(/,A,/)')
' SEGMENTS USED FOR SURFACE DEFINITION'
148 WRITE(iout,fmt=fmw_4i)(itab(irect(k,i)),k=1,4)
165 DO j=1,igrsurf(isu2)%NSEG
167 tag(igrsurf(isu2)%NODES(j,k)) = 2
168 lntag(igrsurf(isu2)%NODES(j,k)) = 1
173 DO j=1,igrsurf(isu1)%NSEG
175 i=igrsurf(isu1)%NODES(j,k)
178 ELSEIF(tag(i) == 2)
THEN
189 DO j=1,igrsurf(isu2)%NSEG
191 i=igrsurf(isu2)%NODES(j,k)
192 IF(tag(i) == 2 .and. isym == 1)
THEN
194 IF(iallo == 2)msr(nmn) = i
195 tagb(i) = bitset(tagb(i),4)
197 IF(tag(i) == 2 .or. tag(i) == 3)
THEN
201 IF(iallo == 2)nsv(nsn) = i
202 tagb(i) = bitset(tagb(i),1)
211 DO j=1,igrsurf(isu1)%NSEG
213 i=igrsurf(isu1)%NODES(j,k)
215 . (isym == 1 .or. (isym == 0 .and. isu2 == 0)))
THEN
218 IF(iallo == 2)nsv(nsn) = i
219 tagb(i) = bitset(tagb(i),0)
221 IF(tag(i) == 1 .or. tag(i) == -3)
THEN
224 IF(iallo == 2)msr(nmn) = i
225 tagb(i) = bitset(tagb(i),3)
234 DO j=1,igrnod(nod1)%NENTITY
235 i = igrnod(nod1)%ENTITY(j)
240 IF(iallo == 2) nsv(nsn) = i
241 tagb(i) = bitset(tagb(i),2)
246 IF(iallo == 2 .and. ipri >= 1)
THEN
247 WRITE(iout,
'(/,A,/)')
' NODES USED FOR SURFACE DEFINITION'
248 WRITE(iout,fmt=fmw_10i)(itab(nsv(i)),i=1,nsn)
254 CALL i20edge1(iallo ,igrsurf(isu1)%NSEG ,igrslin(
max(1,line1))%NSEG ,nlinm ,nlinma ,
255 2 ixlinm ,msre ,nmne ,iedge ,
256 3 igrsurf(isu1)%NODES,igrslin(
max
257 4 islinm ,x ,edg_cos ,lntag ,
258 5 tagb ,5 ,isu1 ,line1 )
259 CALL i20edge1(iallo ,igrsurf(isu2)%NSEG ,igrslin(
max(1,line2))%NSEG ,nlins ,nlinsa ,
260 2 ixlins ,nsve ,nsne ,iedge ,
261 3 igrsurf(isu2)%NODES,igrslin(
max(1,line2))%NODES ,itab ,
262 4 islins ,x ,edg_cos ,lntag ,
263 5 tagb ,6 ,isu2 ,line2 )
270 CALL i20bord(igrsurf(isu1)%NSEG ,igrsurf(isu1)%NODES, tagb,isu1)
272 IF(isu2 /= 0 .and. isu2 /= isu1)
THEN
273 CALL i20bord(igrsurf(isu2)%NSEG ,igrsurf(isu2)%NODES, tagb,isu2)
285 ELSEIF(iallo == 2)
THEN
328 SUBROUTINE i20edge1(IALLO ,NSEG0 ,NLIN0 ,NLIN ,NACTIF ,
329 2 IXLINE ,MSVE ,NSME ,IEDGE ,
330 3 SURF_NODES,SLIN_NODES,ITAB ,
331 4 ISLINE ,X ,EDG_COS ,LNTAG ,
332 5 TAGB ,NB ,ISU ,LIN )
337 USE format_mod ,
ONLY : fmw_4i
341#include "implicit_f.inc"
345#include "com04_c.inc"
346#include "units_c.inc"
347#include "scr03_c.inc"
351 INTEGER IALLO,NSEG0,NLIN0,NLIN,NACTIF,IEDGE,NSME,NB,ISU,LIN
352 INTEGER IXLINE(2,*),ITAB(*),MSVE(*),
353 . LNTAG(*) ,TAGB(*),ISLINE(2,*),SURF_NODES(NSEG0,4),
354 . SLIN_NODES(NLIN0,2)
355 my_real X(3,*),EDG_COS
359 INTEGER I,J,K,L,NLMAX,STAT,LL,I1,I2,I3,I4,,I1M,I2M,NL,IS
360 INTEGER NEXTK(4),IWORK(70000),
361 my_real nx,ny,nz,mx,my,mz,aaa,d1x,d1y,d1z,d2x,d2y,d2z
362 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: LINEIX,LINEIX2,IXWORK
363 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX,TAG
364 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xlineix
372 IF(isu /= 0) nlmax = 4*nseg0
374 ALLOCATE (lineix(2,nlmax) ,stat=stat)
375 ALLOCATE (lineix2(2,nlmax) ,stat=stat)
376 ALLOCATE (xlineix(3,nlmax) ,stat=stat)
377 ALLOCATE (index(2*nlmax) ,stat=stat)
378 ALLOCATE (tag(numnod) ,stat=stat)
379 ALLOCATE (ixwork(5,nlmax) ,stat=stat)
381 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
397 d1x = x(1,i3) - x(1,i1)
398 d1y = x(2,i3) - x(2,i1)
399 d1z = x(3,i3) - x(3,i1)
400 d2x = x(1,i4) - x(1,i2)
401 d2y = x(2,i4) - x(2,i2)
402 d2z = x(3,i4) - x(3,i2)
403 nx = d1y * d2z - d1z * d2y
404 ny = d1z * d2x - d1x * d2z
405 nz = d1x * d2y - d1y * d2x
406 aaa = one/
max(sqrt(nx*nx+ny*ny+nz*nz),em20)
412 i2=surf_nodes(j,nextk(k))
433 CALL my_orders(0,iwork,lineix,index,ll,2)
439 i1m = lineix(1,index(1))
440 i2m = lineix(2,index(1))
444 ixwork(3,nl)=lineix2(1,index(1))
445 ixwork(4,nl)=lineix2(2,index(1))
447 mx = xlineix(1,index(1))
448 my = xlineix(2,index(1))
449 mz = xlineix(3,index(1))
451 i1 = lineix(1,index(l))
452 i2 = lineix(2,index(l))
453 nx = xlineix(1,index(l))
454 ny = xlineix(2,index(l))
455 nz = xlineix(3,index(l))
456 IF(i2 /= i2m .or. i1 /= i1m)
THEN
461 ixwork(4,nl)=lineix2(2,index(l))
465 aaa = nx*mx + ny * my
466 IF (aaa < edg_cos) ixwork(5,nl) = -1
483 IF(ixwork(5,l) == 1)
THEN
490 ixwork(1,nl)=ixwork(1,l)
491 ixwork(2,nl)=ixwork(2,l)
492 ixwork(3,nl)=ixwork(3,l)
493 ixwork(4,nl)=ixwork(4,l)
502 ELSEIF(iedge == 2)
THEN
508 ELSEIF(iedge == 3)
THEN
512 IF(iabs(ixwork(5,l)) == 1)
THEN
518 i5=iabs(ixwork(5,nl))
519 ixwork(1,nl)=ixwork(1,l)
520 ixwork(2,nl)=ixwork(2,l)
521 ixwork(3,nl)=ixwork(3,l)
522 ixwork(4,nl)=ixwork(4,l)
546 nactif = nactif + nlin0
556 tag(ixwork(1,ll)) = 1
557 tag(ixwork(2,ll)) = 1
561 tag(slin_nodes(j,1)) = 1
562 tag(slin_nodes(j,2)) = 1
563 lntag(slin_nodes(j,1)) = 1
564 lntag(slin_nodes(j,2)) = 1
570 tagb(i) = bitset(tagb(i),nb)
581 ixline(1,l) = slin_nodes(j,1)
582 ixline(2,l) = slin_nodes(j,2)
589 IF(ixwork(5,ll) == 1)
THEN
591 ixline(1,l) = ixwork(1,ll)
592 ixline(2,l) = ixwork(2,ll)
593 isline(1,l) = ixwork(3,ll)
594 isline(2,l) = ixwork(4,ll)
600 IF(ixwork(5,ll) /= 1)
THEN
602 ixline(1,l) = ixwork(1,ll)
603 ixline(2,l) = ixwork(2,ll)
604 isline(1,l) = ixwork(3,ll)
605 isline(2,l) = ixwork(4,ll)
610 WRITE(iout,
'(/,A,/)')
' ACTIV SEGMENTS USED FOR EDGE'
613 WRITE(iout,fmt=fmw_4i)(itab(ixline(k,i)),k=1,2)
649 SUBROUTINE i20bord(NSEG ,SURF_NODES ,TAGB,ISU)
657#include "implicit_f.inc"
661 INTEGER IALLO,NSEG,SURF_NODES(NSEG,4),ISU
666 INTEGER I,J,K,L,NLMAX,STAT,LL,I1,I2,I3,I4,I5,I1M,I2M,,BORD,BOLD
667 INTEGER NEXTK(4),IWORK(70000),NL
668 INTEGER,
DIMENSION(:,:),
ALLOCATABLE ::
670 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
681 IF(isu /= 0)nlmax = 4*nseg
683 ALLOCATE (lineix(2,nlmax) ,stat=stat)
684 ALLOCATE (index(2*nlmax) ,stat=stat)
686 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
704 i2=surf_nodes(j,nextk(k))
718 CALL my_orders(0,iwork,lineix,index,ll,2)
723 i1m = lineix(1,index(1))
724 i2m = lineix(2,index(1))
728 i1 = lineix(1,index(l))
729 i2 = lineix(2,index(l))
733 ELSEIF(bold == 0)
THEN
736 ELSEIF(i2 == i2m .and. i1 == i1m)
THEN
743 tagb(i1m) = bitset(tagb(i1m),7)
744 tagb(i2m) = bitset(tagb(i2m),7)
752 tagb(i1) = bitset(tagb(i1),7)
753 tagb(i2) = bitset(tagb(i2),7)
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)