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)
164 DO j=1,igrsurf(isu2)%NSEG
166 tag(igrsurf(isu2)%NODES(j,k)) = 2
167 lntag(igrsurf(isu2)%NODES(j,k)) = 1
172 DO j=1,igrsurf(isu1)%NSEG
174 i=igrsurf(isu1)%NODES(j,k)
177 ELSEIF(tag(i) == 2)
THEN
188 DO j=1,igrsurf(isu2)%NSEG
190 i=igrsurf(isu2)%NODES(j,k)
191 IF(tag(i) == 2 .and. isym == 1)
THEN
193 IF(iallo == 2)msr(nmn) = i
194 tagb(i) = bitset(tagb(i),4)
196 IF(tag(i) == 2 .or. tag(i) == 3)
THEN
200 IF(iallo == 2)nsv(nsn) = i
201 tagb(i) = bitset(tagb(i),1)
210 DO j=1,igrsurf(isu1)%NSEG
212 i=igrsurf(isu1)%NODES(j,k)
214 . (isym == 1 .or. (isym == 0 .and. isu2 == 0)))
THEN
217 IF(iallo == 2)nsv(nsn) = i
218 tagb(i) = bitset(tagb(i),0)
220 IF(tag(i) == 1 .or. tag(i) == -3)
THEN
223 IF(iallo == 2)msr(nmn) = i
224 tagb(i) = bitset(tagb(i),3)
233 DO j=1,igrnod(nod1)%NENTITY
234 i = igrnod(nod1)%ENTITY(j)
239 IF(iallo == 2) nsv(nsn) = i
240 tagb(i) = bitset(tagb(i),2)
245 IF(iallo == 2 .and. ipri >= 1)
THEN
246 WRITE(iout,
'(/,A,/)')
' NODES USED FOR SURFACE DEFINITION'
247 WRITE(iout,fmt=fmw_10i)(itab(nsv(i)),i=1,nsn)
253 CALL i20edge1(iallo ,igrsurf(isu1)%NSEG ,igrslin(
max(1,line1))%NSEG ,nlinm ,nlinma ,
255 3 igrsurf(isu1)%NODES,igrslin(
max(1,line1))%NODES ,itab ,
256 4 islinm ,x ,edg_cos ,lntag ,
257 5 tagb ,5 ,isu1 ,line1 )
258 CALL i20edge1(iallo ,igrsurf(isu2)%NSEG ,igrslin(
max(1,line2))%NSEG ,nlins ,nlinsa ,
259 2 ixlins ,nsve ,nsne ,iedge ,
260 3 igrsurf(isu2)%NODES,igrslin(
max(1,line2))%NODES ,itab ,
261 4 islins ,x ,edg_cos ,lntag ,
262 5 tagb ,6 ,isu2 ,line2 )
269 CALL i20bord(igrsurf(isu1)%NSEG ,igrsurf(isu1)%NODES, tagb,isu1)
271 IF(isu2 /= 0 .and. isu2 /= isu1)
THEN
272 CALL i20bord(igrsurf(isu2)%NSEG ,igrsurf(isu2)%NODES, tagb,isu2)
284 ELSEIF(iallo == 2)
THEN
327 SUBROUTINE i20edge1(IALLO ,NSEG0 ,NLIN0 ,NLIN ,NACTIF ,
328 2 IXLINE ,MSVE ,NSME ,IEDGE ,
329 3 SURF_NODES,SLIN_NODES,ITAB ,
330 4 ISLINE ,X ,EDG_COS ,LNTAG ,
331 5 TAGB ,NB ,ISU ,LIN )
336 USE format_mod ,
ONLY : fmw_4i
340#include "implicit_f.inc"
344#include "com04_c.inc"
345#include "units_c.inc"
346#include "scr03_c.inc"
350 INTEGER IALLO,NSEG0,NLIN0,NLIN,NACTIF,IEDGE,,NB,ISU,LIN
351 INTEGER IXLINE(2,*),ITAB(*),MSVE(*),
352 . LNTAG(*) ,TAGB(*),ISLINE(2,*),SURF_NODES(NSEG0,4),
353 . SLIN_NODES(NLIN0,2)
354 my_real X(3,*),EDG_COS
358 INTEGER I,J,K,L,,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
371 IF(isu /= 0) nlmax = 4*nseg0
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)
380 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
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)
411 i2=surf_nodes(j,nextk(k))
432 CALL my_orders(0,iwork,lineix,index,ll,2)
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))
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))
464 aaa = nx*mx + ny * my + nz * mz
465 IF (aaa < edg_cos) ixwork(5,nl) = -1
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)
501 ELSEIF(iedge == 2)
THEN
507 ELSEIF(iedge == 3)
THEN
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)
545 nactif = nactif + nlin0
555 tag(ixwork(1,ll)) = 1
556 tag(ixwork(2,ll)) = 1
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
569 tagb(i) = bitset(tagb(i),nb)
580 ixline(1,l) = slin_nodes(j,1)
581 ixline(2,l) = slin_nodes(j,2)
588 IF(ixwork(5,ll) == 1)
THEN
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)
599 IF(ixwork(5,ll) /= 1)
THEN
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)
609 WRITE(iout,
'(/,A,/)')
' ACTIV SEGMENTS USED FOR EDGE'
612 WRITE(iout,fmt=fmw_4i)(itab(ixline(k,i)),k=1,2)
648 SUBROUTINE i20bord(NSEG ,SURF_NODES ,TAGB,ISU)
656#include "implicit_f.inc"
660 INTEGER IALLO,NSEG,SURF_NODES(NSEG,4),ISU
665 INTEGER I,J,,L,NLMAX,STAT,LL,I1,I2,I3,I4,I5,I1M,I2M,IS,BORD,BOLD
666 INTEGER NEXTK(4),IWORK(70000),NL
667 INTEGER,
DIMENSION(:,:),
ALLOCATABLE ::
669 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
680 IF(isu /= 0)nlmax = 4*nseg
682 ALLOCATE (lineix(2,nlmax) ,stat=stat)
683 ALLOCATE (index(2*nlmax) ,stat=stat)
685 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
703 i2=surf_nodes(j,nextk(k))
717 CALL my_orders(0,iwork,lineix,index,ll,2)
722 i1m = lineix(1,index(1))
723 i2m = lineix(2,index(1))
727 i1 = lineix(1,index(l))
728 i2 = lineix(2,index(l))
732 ELSEIF(bold == 0)
THEN
735 ELSEIF(i2 == i2m .and. i1 == i1m)
THEN
742 tagb(i1m) = bitset(tagb(i1m),7)
743 tagb(i2m) = bitset(tagb(i2m),7)
751 tagb(i1) = bitset(tagb(i1),7)
752 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)