32 SUBROUTINE ssurftag(IXS ,IPARTS ,NSEG0 ,IGRSURF ,TAGBUF,
33 . NSEG ,KNOD2ELS,NOD2ELS ,IEXT ,FLAG ,
34 . IXS10 ,IXS16 ,IXS20 ,IFRE ,KEY ,
35 . KNOD2ELC,NOD2ELC ,KNOD2ELTG,NOD2ELTG,
36 . IXC ,IXTG ,IPARTC ,IPARTTG ,NINDX,
37 . NINDX_SOL, NINDX_SOL10, INDX, INDX_SOL, INDX_SOL10,
45 use element_mod ,
only : nixs,nixc,nixtg
49#include "implicit_f.inc"
54 INTEGER IXS(NIXS,*),IPARTS(*),TAGBUF(*),
55 . KNOD2ELS(*),NOD2ELS(*),
56 . IXS10(6,*),IXS16(8,*),IXS20(12,*),
57 . KNOD2ELC(*),NOD2ELC(*),KNOD2ELTG(*),NOD2ELTG(*),
58 . IXC(NIXC,*),IXTG(NIXTG,*),IPARTC(*),IPARTTG(*)
59 INTEGER IEXT,NSEG,FLAG,IFRE,NSEG0
60 CHARACTER(LEN=NCHARKEY) :: KEY
61 INTEGER :: NINDX, NINDX_SOL, NINDX_SOL10
62 INTEGER,
DIMENSION(*) :: INDX,INDX_SOL, INDX_SOL10
63 TYPE(PART_TYPE),
DIMENSION(*) :: SURF_ELM
65 TYPE (SURF_) :: IGRSURF
93 INTEGER N,J,K,JS,KS,II,JJ,K1,K2,LL,FACE(4),FC10(3),NN,KK,I1,
94 . NI(4),NS(4),MI(4),MS(4),NMIN,MMIN,NF,MF,IPERM,N1,N2,I
95 INTEGER FACES(4,6),PWR(7),
96 . FACES10(3,6),NNS,ISHEL,ISEG
97 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NODTAG,FASTAG
102 INTEGER :: NUM_PART,NUM_ELM
103 INTEGER :: ID_PART,JS_PART, JS_ELM
116 DATA pwr/1,2,4,8,16,32,64/
118 ALLOCATE(nodtag(numnod),fastag(numels))
125 DO js=1,numels8+numels10
126 IF(key(1:6)==
'GRBRIC')
THEN
127 IF (tagbuf(js)==0) cycle
129 IF (tagbuf(iparts(js))==0) cycle
133 ns(ii)=ixs(faces(ii,jj)+1,js)
139 IF(ns(k2)==ns(k1))ns(k2)=0
155 nmin=
min(nmin,ns(ii))
158 IF(nmin==ns(iperm).AND.
159 . ns(mod(iperm,nf)+1)/=ns(iperm))
THEN
161 ni(ii)=ns(mod(ii+iperm-2,nf)+1)
168 DO k=knod2els(ni(1))+1,knod2els(ni(1)+1)
170 IF(ks==js .OR. ks > numels8+numels10)cycle
171 IF (key(1:6)==
'GRBRIC'.AND.tagbuf(ks)==0.AND.ifre==0)cycle
172 IF (key(1:6)/=
'GRBRIC'.AND.tagbuf(iparts(ks))==0)cycle
177 nodtag(ixs(ii+1,ks))=1
186 ms(ii)=ixs(faces(ii,kk)+1,ks)
192 IF(ms(k2)==ms(k1))ms(k2)=0
208 mmin=
min(mmin,ms(ii))
211 IF(mmin==ms(iperm).AND.
212 . ms(mod(iperm,mf)+1)/=ms(iperm))
THEN
214 mi(ii)=ms(mod(ii+iperm-2,mf)+1)
219 IF(mi(1)==ni(1).AND.mi(nf)==ni(2))
THEN
221 fastag(js)=fastag(js)+pwr(jj)
232 IF(key(1:6)/=
'GRBRIC')
THEN
240 DO js_part=1,num_part
242 id_part = indx(js_part)
243 num_elm = surf_elm(id_part)%NSOL
247 js = surf_elm(id_part)%SOL_PART( js_elm )
249 js = indx_sol( js_elm )
258 IF(mod(ll,pwr(jj+1))/pwr(jj)/=0)cycle
283 IF(flag == 0 .and. nn == 3)
THEN
286 DO k=knod2eltg(face(1))+1,knod2eltg(face(1)+1)
291 IF(face(i) == ixtg(j+1,ks)) ishel = ishel + 1
299 ELSEIF (iabs(tagbuf(iparttg(ks))) /= 1)
THEN
302 ELSEIF(flag == 0 .and. nn == 4)
THEN
305 DO k=knod2elc(face(1))+1,knod2elc(face(1)+1)
310 IF(face(i) == ixc(j+1,ks)) ishel = ishel + 1
318 ELSEIF (iabs(tagbuf(ipartc(ks))) /= 1)
THEN
324 DO k=knod2eltg(face(1))+1,knod2eltg(face(1)+1)
329 IF(face(i) == ixtg(j+1,ks)) ishel = ishel + 1
338 CALL ssurf10(face(1),face(2),face(3),face(3),js,
339 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
340 ELSEIF (iabs(tagbuf(iparttg(ks))) /= 1)
THEN
343 CALL ssurf10(face(1),face(2),face(3),face(3),js,
344 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
349 DO k=knod2elc(face(1))+1,knod2elc(face(1)+1)
354 IF(face(i) == ixc(j+1,ks)) ishel = ishel + 1
363 CALL ssurf10(face(1),face(2),face(3),face(4),js,
364 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
365 ELSEIF (iabs(tagbuf(ipartc(ks))) /= 1 )
THEN
368 CALL ssurf10(face(1),face(2),face(3),face(4),js,
369 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
378 IF(key(1:6)/=
'GRBRIC')
THEN
384 num_elm = nindx_sol10
387 DO js_part=1,num_part
389 id_part = indx(js_part)
390 num_elm = surf_elm(id_part)%NSOL10
395 js = surf_elm(id_part)%SOL10_PART( js_elm )
397 js = indx_sol10( js_elm )
407 IF(mod(ll,pwr(jj+1))/pwr(jj) /= 0)cycle
411 face(k1)=ixs(faces(k1,jj)+1,js)
415 IF(face(k2) == face(k1)) face(k2)=0
420 IF(face(k1) /= 0)
THEN
429 fc10(2)=ixs10(faces10(2,jj),j)
430 fc10(3)=ixs10(faces10(3,jj),j)
431 IF(fc10(1) /= 0)nns=nns+1
432 IF(fc10(2) /= 0)nns=nns+1
433 IF(fc10(3) /= 0)nns=nns+1
436 IF (flag == 1 .and. nns == 4)
THEN
439 CALL ssurf10(face(1),fc10(1),fc10(3),fc10(3),js,
440 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
442 CALL ssurf10(face(2),fc10(2),fc10(1),fc10(1),js,
443 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
445 CALL ssurf10(face(3),fc10(3),fc10(2),fc10(2),js,
446 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
448 CALL ssurf10(fc10(1),fc10(2),fc10(3),fc10(3),js,
449 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
450 ELSEIF (flag == 1 .and. nns == 3)
THEN
454 CALL ssurf10(face(1),face(2),fc10(2),fc10(3),js,
455 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
457 CALL ssurf10(face(3),fc10(3),fc10(2),fc10(2),js,
458 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
459 ELSEIF(fc10(2) == 0)
THEN
461 CALL ssurf10(face(2),face(3),fc10(3),fc10(1),js,
462 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
464 CALL ssurf10(face(1),fc10(1),fc10(3),fc10(3),js,
465 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
466 ELSEIF(fc10(3) == 0)
THEN
468 CALL ssurf10(face(3),face(1),fc10(1),fc10(2),js,
469 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
471 CALL ssurf10(face(2),fc10(2),fc10(1),fc10(1),js,
472 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
474 ELSEIF (flag == 1 .and. nns == 2)
THEN
478 CALL ssurf10(face(3),face(1),fc10(1),fc10(1),js,
479 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
481 CALL ssurf10(face(2),face(3),fc10(1),fc10(1),js,
482 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
483 ELSEIF(fc10(2) /= 0)
THEN
485 CALL ssurf10(face(1),face(2),fc10(2),fc10(2),js,
486 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
488 CALL ssurf10(face(3),face(1),fc10(2),fc10(2),js,
489 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
490 ELSEIF(fc10(3) /= 0)
THEN
492 CALL ssurf10(face(2),face(3),fc10(3),fc10(3),js,
493 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
495 CALL ssurf10(face(1),face(2),fc10(3),fc10(3),js,
496 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
498 ELSEIF (flag == 1 .and. nns == 1)
THEN
501 CALL ssurf10(face(1),face(2),face(3),face(3),js,
502 . nseg0 ,iseg ,igrsurf%NODES,igrsurf%ELTYP,igrsurf%ELEM)
511 DEALLOCATE(nodtag,fastag)