32 . IXS ,IXS10 ,IXC ,IXTG ,CLAUSE ,
33 . KNOD2ELS ,NOD2ELS ,KNOD2ELC ,NOD2ELC ,KNOD2ELTG,
34 . NOD2ELTG ,NSEG ,IEXT ,BUFTMPSURF,IPARTS ,
42 use element_mod ,
only : nixs,nixc,nixtg
46#include "implicit_f.inc"
51 INTEGER IEXT,NSEG,IAD_SURF
52 INTEGER IXS(NIXS,*),IXS10(6,*),IXC(NIXC,*),IXTG(NIXTG,*),
53 . KNOD2ELS(*),NOD2ELS(*),KNOD2ELC(*),NOD2ELC(*),
54 . KNOD2ELTG(*),NOD2ELTG(*),BUFTMPSURF(*),IPARTS(*)
55 CHARACTER(LEN=NCHARFIELD) :: KEYSET
61 INTEGER J,K,JS,KS,II,JJ,K1,K2,LL,FACE(4),FC10(3),NN,KK,I1,
62 . NI(4),NS(4),MI(4),MS(4),NMIN,MMIN,NF,MF,IPERM,N1,N2,I
63 INTEGER FACES(4,6),PWR(7),
64 . FACES10(3,6),NNS,ISHEL,,IND
65 INTEGER,
DIMENSION(:),
ALLOCATABLE:: SOLID_TAG,PART_TAG
66 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NODTAG
67 INTEGER,
DIMENSION(:),
ALLOCATABLE :: FASTAG
82 DATA pwr/1,2,4,8,16,32,64/
84 CALL my_alloc(solid_tag,numels)
85 CALL my_alloc(part_tag,npart)
86 CALL my_alloc(nodtag,numnod)
87 CALL my_alloc(fastag,numels)
92 DO i=1, clause%NB_PART
93 part_tag(clause%PART(i))=1
96 DO i=1, clause%NB_SOLID
97 solid_tag(clause%SOLID(i))=1
104 nb_solid = clause%NB_SOLID
106 js = clause%SOLID(ind)
107 IF (solid_tag(js)==0) cycle
110 ns(ii)=ixs(faces(ii,jj)+1,js)
117 IF(ns(k2)==ns(k1))ns(k2)=0
134 nmin=
min(nmin,ns(ii))
137 IF(nmin==ns(iperm).AND.
138 . ns(mod(iperm,nf)+1)/=ns(iperm))
THEN
140 ni(ii)=ns(mod(ii+iperm-2,nf)+1)
148 DO k=knod2els(ni(1))+1,knod2els(ni(1)+1)
150 IF (ks==js .OR. ks > numels8+numels10) cycle
151 IF (keyset ==
'SOLID' .AND. solid_tag(ks)==0) cycle
152 IF (keyset ==
'PART' .AND. part_tag(iparts(ks))==0) cycle
158 nodtag(ixs(ii+1,ks))=1
167 ms(ii)=ixs(faces(ii,kk)+1,ks)
174 IF(ms(k2)==ms(k1))ms(k2)=0
191 mmin=
min(mmin,ms(ii))
194 IF(mmin==ms(iperm).AND.
195 . ms(mod(iperm,mf)+1)/=ms(iperm))
THEN
197 mi(ii)=ms(mod(ii+iperm-2,mf)+1)
202 IF(mi(1)==ni(1).AND.mi(nf)==ni(2))
THEN
204 fastag(js)=fastag(js)+pwr(jj)
224 nb_solid = clause%NB_SOLID
226 js = clause%SOLID(ind)
227 IF (solid_tag(js)==0) cycle
229 IF (js > numels8) cycle
233 IF(mod(ll,pwr(jj+1))/pwr(jj)/=0)cycle
261 DO k=knod2eltg(face(1))+1,knod2eltg(face(1)+1)
266 IF(face(i) == ixtg(j+1,ks)) ishel = ishel + 1
273 IF(ks == 0 .OR. ishel == 3)
THEN
276 . buftmpsurf ,iad_surf ,1)
281 DO k=knod2elc(face(1))+1,knod2elc(face(1)+1)
286 IF(face(i) == ixc(j+1,ks)) ishel = ishel + 1
292 IF(ks == 0 .OR. ishel == 4)
THEN
295 . buftmpsurf ,iad_surf ,1)
311 nb_solid = clause%NB_SOLID
313 js = clause%SOLID(ind)
314 IF (solid_tag(js)==0) cycle
321 IF(mod(ll,pwr(jj+1))/pwr(jj) /= 0)cycle
326 face(k1)=ixs(faces(k1,jj)+1,js)
330 IF(face(k2) == face(k1)) face(k2)=0
335 IF(face(k1) /= 0)
THEN
343 fc10(1)=ixs10(faces10(1,jj),j)
344 fc10(2)=ixs10(faces10(2,jj),j)
345 fc10(3)=ixs10(faces10(3,jj),j)
346 IF(fc10(1) /= 0)nns=nns+1
347 IF(fc10(2) /= 0)nns=nns+1
348 IF(fc10(3) /= 0)nns=nns+1
353 CALL surf_segment(face(1) ,fc10(1) ,fc10(3) ,fc10(3) ,js ,
354 . buftmpsurf ,iad_surf ,1)
355 CALL surf_segment(face(2) ,fc10(2) ,fc10(1) ,fc10(1) ,js ,
356 . buftmpsurf ,iad_surf ,1)
357 CALL surf_segment(face(3) ,fc10(3) ,fc10(2) ,fc10(2) ,js ,
358 . buftmpsurf ,iad_surf ,1)
359 CALL surf_segment(fc10(1) ,fc10(2) ,fc10(3) ,fc10(3) ,js ,
360 . buftmpsurf ,iad_surf ,1)
361 ELSEIF (nns == 3)
THEN
364 CALL surf_segment(face(1) ,face(2) ,fc10(2) ,fc10(3) ,js ,
365 . buftmpsurf ,iad_surf ,1)
366 CALL surf_segment(face(3) ,fc10(3) ,fc10(2) ,fc10(2) ,js ,
367 . buftmpsurf ,iad_surf ,1)
368 ELSEIF(fc10(2) == 0)
THEN
369 CALL surf_segment(face(2) ,face(3) ,fc10(3) ,fc10(1) ,js ,
370 . buftmpsurf ,iad_surf ,1)
371 CALL surf_segment(face(1) ,fc10(1) ,fc10(3) ,fc10(3) ,js ,
372 . buftmpsurf ,iad_surf ,1)
373 ELSEIF(fc10(3) == 0)
THEN
374 CALL surf_segment(face(3) ,face(1) ,fc10(1) ,fc10(2) ,js ,
375 . buftmpsurf ,iad_surf ,1)
376 CALL surf_segment(face(2) ,fc10(2) ,fc10(1) ,fc10(1) ,js ,
377 . buftmpsurf ,iad_surf ,1)
379 ELSEIF (nns == 2)
THEN
382 CALL surf_segment(face(3) ,face(1) ,fc10(1) ,fc10(1) ,js ,
383 . buftmpsurf ,iad_surf ,1)
384 CALL surf_segment(face(2) ,face(3) ,fc10(1) ,fc10(1) ,js ,
385 . buftmpsurf ,iad_surf ,1)
386 ELSEIF(fc10(2) /= 0)
THEN
387 CALL surf_segment(face(1) ,face(2) ,fc10(2) ,fc10(2) ,js ,
388 . buftmpsurf ,iad_surf ,1)
389 CALL surf_segment(face(3) ,face(1) ,fc10(2) ,fc10(2) ,js ,
390 . buftmpsurf ,iad_surf ,1)
391 ELSEIF(fc10(3) /= 0)
THEN
392 CALL surf_segment(face(2) ,face(3) ,fc10(3) ,fc10(3) ,js ,
393 . buftmpsurf ,iad_surf ,1)
394 CALL surf_segment(face(1) ,face(2) ,fc10(3) ,fc10(3) ,js ,
395 . buftmpsurf ,iad_surf ,1)
397 ELSEIF (nns == 1)
THEN
399 CALL surf_segment(face(1) ,face(2) ,face(3) ,face(3) ,js ,
400 . buftmpsurf ,iad_surf ,1)