32 . IXS ,IXS10 ,IXC ,IXTG ,CLAUSE ,
33 . KNOD2ELS ,NOD2ELS ,KNOD2ELC ,NOD2ELC ,KNOD2ELTG,
34 . NOD2ELTG ,NSEG ,IEXT ,BUFTMPSURF,IPARTS ,
45#include "implicit_f.inc
"
50 INTEGER IEXT,NSEG,IAD_SURF
51 INTEGER IXS(NIXS,*),IXS10(6,*),IXC(NIXC,*),IXTG(NIXTG,*),
52 . KNOD2ELS(*),NOD2ELS(*),KNOD2ELC(*),NOD2ELC(*),
53 . KNOD2ELTG(*),NOD2ELTG(*),BUFTMPSURF(*),IPARTS(*)
54 CHARACTER(LEN=NCHARFIELD) :: KEYSET
60 INTEGER N,J,K,JS,KS,II,JJ,K1,K2,LL,FACE(4),FC10(3),NN,KK,I1,
61 . NI(4),NS(4),MI(4),MS(4),NMIN,MMIN,NF,MF,IPERM,N1,N2,I
62 INTEGER FACES(4,6),PWR(7),
63 . FACES10(3,6),NNS,ISHEL,ISEG,NB_SOLID,IND
64 INTEGER, DIMENSION(:), ALLOCATABLE:: SOLID_TAG,PART_TAG
65 INTEGER, DIMENSION(:), ALLOCATABLE :: NODTAG
66 INTEGER, DIMENSION(:), ALLOCATABLE :: FASTAG
81 DATA PWR/1,2,4,8,16,32,64/
83 CALL MY_ALLOC(SOLID_TAG,NUMELS)
84 CALL MY_ALLOC(PART_TAG,NPART)
85 CALL MY_ALLOC(NODTAG,NUMNOD)
86 CALL MY_ALLOC(FASTAG,NUMELS)
91 DO I=1, CLAUSE%NB_PART
92 PART_TAG(CLAUSE%PART(I))=1
95 DO I=1, CLAUSE%NB_SOLID
96 SOLID_TAG(CLAUSE%SOLID(I))=1
103 NB_SOLID = CLAUSE%NB_SOLID
105 JS = CLAUSE%SOLID(IND)
106 IF (SOLID_TAG(JS)==0) CYCLE !case of tagged elems
109 NS(II)=IXS(FACES(II,JJ)+1,JS)
116 IF(NS(K2)==NS(K1))NS(K2)=0
133 NMIN=MIN(NMIN,NS(II))
136.AND.
IF(NMIN==NS(IPERM)
137 . NS(MOD(IPERM,NF)+1)/=NS(IPERM))THEN
139 NI(II)=NS(MOD(II+IPERM-2,NF)+1)
147 DO K=KNOD2ELS(NI(1))+1,KNOD2ELS(NI(1)+1)
149.OR.
IF (KS==JS KS > NUMELS8+NUMELS10) CYCLE
150.AND.
IF (KEYSET == 'SOLID' SOLID_TAG(KS)==0) CYCLE
151.AND.
IF (KEYSET == 'PART' PART_TAG(IPARTS(KS))==0) CYCLE
157 NODTAG(IXS(II+1,KS))=1
166 MS(II)=IXS(FACES(II,KK)+1,KS)
173 IF(MS(K2)==MS(K1))MS(K2)=0
190 MMIN=MIN(MMIN,MS(II))
193.AND.
IF(MMIN==MS(IPERM)
194 . MS(MOD(IPERM,MF)+1)/=MS(IPERM))THEN
196 MI(II)=MS(MOD(II+IPERM-2,MF)+1)
201.AND.
IF(MI(1)==NI(1)MI(NF)==NI(2))THEN
203 FASTAG(JS)=FASTAG(JS)+PWR(JJ)
211 END DO ! DO IND=1,NB_SOLID
212 END IF ! IF(IEXT==1)THEN
223 NB_SOLID = CLAUSE%NB_SOLID
225 JS = CLAUSE%SOLID(IND)
226 IF (SOLID_TAG(JS)==0) CYCLE
228 IF (JS > NUMELS8) CYCLE ! HEXA8 ONLY
232 IF(MOD(LL,PWR(JJ+1))/PWR(JJ)/=0)CYCLE
260 DO K=KNOD2ELTG(FACE(1))+1,KNOD2ELTG(FACE(1)+1)
265 IF(FACE(I) == IXTG(J+1,KS)) ISHEL = ISHEL + 1
271 !print*,'Surf from solid ...',KS,PART_TAG(IPARTG(KS))
272.OR.
IF(KS == 0 ISHEL == 3)THEN
274 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FACE(3) ,FACE(3) ,JS ,
275 . BUFTMPSURF ,IAD_SURF ,1)
280 DO K=KNOD2ELC(FACE(1))+1,KNOD2ELC(FACE(1)+1)
285 IF(FACE(I) == IXC(J+1,KS)) ISHEL = ISHEL + 1
291.OR.
IF(KS == 0 ISHEL == 4)THEN
293 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FACE(3) ,FACE(4) ,JS ,
294 . BUFTMPSURF ,IAD_SURF ,1)
299 END DO ! DO IND=1,NB_SOLID
310 NB_SOLID = CLAUSE%NB_SOLID
312 JS = CLAUSE%SOLID(IND)
313 IF (SOLID_TAG(JS)==0) CYCLE
315 J = JS - NUMELS8 ! TETRA10 ONLY
316 IF (J <= 0) CYCLE ! TETRA10 ONLY
320 IF(MOD(LL,PWR(JJ+1))/PWR(JJ) /= 0)CYCLE
325 FACE(K1)=IXS(FACES(K1,JJ)+1,JS)
329 IF(FACE(K2) == FACE(K1)) FACE(K2)=0
334 IF(FACE(K1) /= 0)THEN
342 FC10(1)=IXS10(FACES10(1,JJ),J)
343 FC10(2)=IXS10(FACES10(2,JJ),J)
344 FC10(3)=IXS10(FACES10(3,JJ),J)
345 IF(FC10(1) /= 0)NNS=NNS+1
346 IF(FC10(2) /= 0)NNS=NNS+1
347 IF(FC10(3) /= 0)NNS=NNS+1
352 CALL SURF_SEGMENT(FACE(1) ,FC10(1) ,FC10(3) ,FC10(3) ,JS ,
353 . BUFTMPSURF ,IAD_SURF ,1)
354 CALL SURF_SEGMENT(FACE(2) ,FC10(2) ,FC10(1) ,FC10(1) ,JS ,
355 . BUFTMPSURF ,IAD_SURF ,1)
356 CALL SURF_SEGMENT(FACE(3) ,FC10(3) ,FC10(2) ,FC10(2) ,JS ,
357 . BUFTMPSURF ,IAD_SURF ,1)
358 CALL SURF_SEGMENT(FC10(1) ,FC10(2) ,FC10(3) ,FC10(3) ,JS ,
359 . BUFTMPSURF ,IAD_SURF ,1)
360 ELSEIF (NNS == 3) THEN
363 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FC10(2) ,FC10(3) ,JS ,
364 . BUFTMPSURF ,IAD_SURF ,1)
365 CALL SURF_SEGMENT(FACE(3) ,FC10(3) ,FC10(2) ,FC10(2) ,JS ,
366 . BUFTMPSURF ,IAD_SURF ,1)
367 ELSEIF(FC10(2) == 0)THEN
368 CALL SURF_SEGMENT(FACE(2) ,FACE(3) ,FC10(3) ,FC10(1) ,JS ,
369 . BUFTMPSURF ,IAD_SURF ,1)
370 CALL SURF_SEGMENT(FACE(1) ,FC10(1) ,FC10(3) ,FC10(3) ,JS ,
371 . BUFTMPSURF ,IAD_SURF ,1)
372 ELSEIF(FC10(3) == 0)THEN
373 CALL SURF_SEGMENT(FACE(3) ,FACE(1) ,FC10(1) ,FC10(2) ,JS ,
374 . BUFTMPSURF ,IAD_SURF ,1)
375 CALL SURF_SEGMENT(FACE(2) ,FC10(2) ,FC10(1) ,FC10(1) ,JS ,
376 . BUFTMPSURF ,IAD_SURF ,1)
378 ELSEIF (NNS == 2) THEN
381 CALL SURF_SEGMENT(FACE(3) ,FACE(1) ,FC10(1) ,FC10(1) ,JS ,
382 . BUFTMPSURF ,IAD_SURF ,1)
383 CALL SURF_SEGMENT(FACE(2) ,FACE(3) ,FC10(1) ,FC10(1) ,JS ,
384 . BUFTMPSURF ,IAD_SURF ,1)
385 ELSEIF(FC10(2) /= 0)THEN
386 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FC10(2) ,FC10(2) ,JS ,
387 . BUFTMPSURF ,IAD_SURF ,1)
388 CALL SURF_SEGMENT(FACE(3) ,FACE(1) ,FC10(2) ,FC10(2) ,JS ,
389 . BUFTMPSURF ,IAD_SURF ,1)
390 ELSEIF(FC10(3) /= 0)THEN
391 CALL SURF_SEGMENT(FACE(2) ,FACE(3) ,FC10(3) ,FC10(3) ,JS ,
392 . BUFTMPSURF ,IAD_SURF ,1)
393 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FC10(3) ,FC10(3) ,JS ,
394 . BUFTMPSURF ,IAD_SURF ,1)
396 ELSEIF (NNS == 1) THEN
398 CALL SURF_SEGMENT(FACE(1) ,FACE(2) ,FACE(3) ,FACE(3) ,JS ,
399 . BUFTMPSURF ,IAD_SURF ,1)
404 END DO ! DO IND=1,NB_SOLID
subroutine solid_surface_buffer(ixs, ixs10, ixc, ixtg, clause, knod2els, nod2els, knod2elc, nod2elc, knod2eltg, nod2eltg, nseg, iext, buftmpsurf, iparts, iad_surf, keyset)