59 SUBROUTINE lecsec42(IXS ,IXQ ,IXC ,IXT ,IXP ,IXR ,
60 2 IXTG ,X0 ,ITAB ,ITABM1 ,
62 4 IPARI ,IXS10 ,IXS20 ,IXS16 ,UNITAB ,
63 5 ISKN ,XFRAME,ISOLNOD,NOM_SECT,RTRANS,
64 6 LSUBMODEL,NOM_OPT,IGRBRIC,IGRQUAD,IGRSH4N,
65 7 IGRTRUSS,IGRBEAM,IGRSPRING,IGRSH3N,SEATBELT_SHELL_TO_SPRING,
79 use element_mod ,
only : nixs,nixq,nixc,nixp,nixt,nixr,nixtg
83#include "implicit_f.inc"
87#include "analyse_name.inc"
100 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
101 INTEGER IXC(NIXC,NUMELC), IXTG(NIXTG,NUMELTG), ITAB(NUMNOD),
102 . ITABM1(*),IXS(NIXS,NUMELS), IXQ(NIXQ,NUMELQ), IXT(NIXT,NUMELT),
103 . IXP(NIXP,NUMELP), IXR(NIXR,NUMELR), IPARI(NPARI,NINTER),
104 . IXS10(6,*),IXS20(12,*),IXS16(8,*),ISKN(LISKN,*),
105 . ISOLNOD(*),NOM_SECT(*)
106 INTEGER NOM_OPT(LNOPT1,*)
108 my_real x0(3,*),secbuf(*),xframe(nxframe,numfram+1), rtrans(ntransf,nrtrans)
109 INTEGER,
INTENT(IN):: NB_SEATBELT_SHELLS
110 INTEGER,
INTENT(IN)::SEATBELT_SHELL_TO_SPRING(NUMELC,2)
112 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
113 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
114 TYPE (GROUP_) ,
DIMENSION(NGRQUAD) :: IGRQUAD
115 TYPE (GROUP_) ,
DIMENSION(NGRSHEL) :: IGRSH4N
116 TYPE (GROUP_) ,
DIMENSION(NGRTRUS) :: IGRTRUSS
117 TYPE () ,
DIMENSION(NGRBEAM) :: IGRBEAM
118 TYPE (GROUP_) ,
DIMENSION(NGRSPRI) :: IGRSPRING
119 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
123 INTEGER ,
DIMENSION(NSECT) :: SECTIDS
124 INTEGER K1, I, J, L, KK, K2, K,LREC,
125 . nnod, nbinter,k0,k3,k4,k5,k6,k7,k8,k9,kr0,
126 . nsegq,nsegs,nsegc,nsegt,nsegp,nsegr,nsegtg,
id,
127 . igu,igs,igus,iguq,iguc,igut,igup,igur,igutg,ifram,
132 INTEGER L0,ISTYP,SUB_ID,ILEN
133 my_real DELTAT,ALPHA,FAC_T,A,B,C,D,E,F,R,MAXDT
134 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGNODES
135 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGNDOUBL
136 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGELEMS
137 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NODTAG
140 CHARACTER(LEN=NCHARTITLE) :: TITR
141 CHARACTER(LEN=NCHARLINE) ::CHAR8
142 CHARACTER(LEN=NCHARFIELD) :: KEY2
143 my_real bid, xm, ym, zm, x1, y1, z1, x2, y2, z2,
norm
144 my_real x3, y3, z3, n3, pnor1, pnor2, pnorm1, det, det1, det2, det3
145 LOGICAL :: IS_AVAILABLE
147 integer :: max_extension
151 INTEGER USR2SYS,NODGRNR5,ELEGROR,ELEGROR_SEATBELT,GRSIZE_ELE_TRANS,GRSIZE_ELE
152 EXTERNAL usr2sys,nodgrnr5,elegror,elegror_seatbelt,grsize_ele_trans,grsize_ele
155 DATA mess/
'SECTION DEFINITION '/
160 ALLOCATE(tagnodes( numnod*2+npart))
161 ALLOCATE(tagndoubl(numnod))
162 ALLOCATE(tagelems(1+numelc+numels+numelt+numelq+numelp+numelr+numeltg))
163 ALLOCATE(nodtag(numnod))
230 CALL hm_option_read_key(lsubmodel, option_id=
id, option_titr=titr, unit_id=uid, submodel_id=sub_id, keyword2=key2)
233 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1, i),ltitr)
235 CALL hm_get_intv(
'Axis_Origin_Node_N1',
nstrf(k0+3), is_available, lsubmodel)
242 IF ((
nstrf(k0) == 1).OR.(
nstrf(k0) == 2))
THEN
243 CALL ancmsg(msgid=1743, msgtype=msgwarning, anmode=aninfo_blind_1, i1=
id, c1=titr)
244 ELSEIF ((
nstrf(k0) == 100).OR.(
nstrf(k0) == 101))
THEN
245 CALL ancmsg(msgid=1744, msgtype=msgwarning, anmode=aninfo_blind_1, i1
258 IF(key2(1:5) ==
'PARAL')
THEN
260 ELSEIF(key2(1:6) ==
'CIRCLE')
THEN
264 CALL hm_get_intv(
'Grnod_ID', igu, is_available, lsubmodel)
265 CALL hm_get_intv(
'System_Id', nfram, is_available, lsubmodel)
270 IF (unitab%UNIT_ID(j) == uid)
THEN
271 fac_t = unitab%FAC_T(j)
276 IF (uid /= 0.AND.iflagunit == 0)
THEN
277 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
278 . i2=uid,i1=
id,c1=
'SECTION',
285 CALL hm_get_floatv(
'detltaT', deltat, is_available, lsubmodel
286 CALL hm_get_floatv(
'alpha', alpha, is_available, lsubmodel, unitab)
288 IF(igu == 0 .AND. nfram == 0 .AND. istyp == 0)
THEN
289 CALL ancmsg(msgid=507, msgtype=msgwarning, anmode=aninfo_blind_1, i1=
id, c1=titr)
293 nom_sect((i-1)*
ncharline+j) = ichar(char8(j:j))
297 CALL hm_get_intv(
'grbrick_id', igus, is_available, lsubmodel)
298 CALL hm_get_intv(
'grshel_id', iguc, is_available, lsubmodel)
299 CALL hm_get_intv(
'grtrus_id', igut, is_available, lsubmodel)
300 CALL hm_get_intv(
'grbeam_id', igup, is_available, lsubmodel)
301 CALL hm_get_intv(
'grsprg_id', igur, is_available, lsubmodel)
302 CALL hm_get_intv(
'grtria_id', igutg, is_available, lsubmodel)
303 CALL hm_get_intv(
'Niter', nbinter, is_available, lsubmodel)
304 CALL hm_get_intv(
'Iframe', ifram, is_available, lsubmodel)
306 IF (nbinter < 0 .OR. nbinter > 10)
THEN
307 CALL ancmsg(msgid=124,anmode=aninfo,msgtype=msgerror,i1=
id,c1=titr)
310 IF((igus == 0).AND.(iguq == 0).AND.(iguc == 0).AND.(igut == 0).
311 . and.(igup == 0).AND.(igur == 0).AND.(igutg == 0).AND.
312 . (nbinter == 0))
THEN
314 . msgtype=msgwarning,
315 . anmode=aninfo_blind_1,
320 call extend_array(
nstrf,
SIZE(
nstrf),k1-1+nbinter)
326 CALL hm_get_floatv(
'XTail', xm, is_available, lsubmodel, unitab)
327 CALL hm_get_floatv(
'YTail', ym, is_available, lsubmodel, unitab)
328 CALL hm_get_floatv(
'ZTail', zm, is_available, lsubmodel, unitab)
329 IF(sub_id /= 0)
CALL subrotpoint(xm,ym,zm,rtrans,sub_id,lsubmodel)
331 CALL hm_get_floatv(
'cnode1_x', x1, is_available, lsubmodel, unitab)
332 CALL hm_get_floatv(
'cnode1_y', y1, is_available, lsubmodel, unitab)
333 CALL hm_get_floatv(
'cnode1_z', z1, is_available, lsubmodel, unitab)
334 IF(sub_id /= 0)
CALL subrotpoint(x1,y1,z1,rtrans,sub_id,lsubmodel)
336 CALL hm_get_floatv(
'cnode2_x', x2, is_available, lsubmodel, unitab)
337 CALL hm_get_floatv(
'cnode2_y', y2, is_available, lsubmodel, unitab)
338 CALL hm_get_floatv(
'cnode2_z', z2, is_available, lsubmodel, unitab)
339 IF(sub_id /= 0)
CALL subrotpoint(x2,y2,z2,rtrans,sub_id,lsubmodel)
343 a = ((y1-ym)*(z2-zm))-((y2-ym)*(z1-zm))
344 b = ((x2-xm)*(z1-zm))-((x1-xm)*(z2-zm))
345 c = ((x1-xm)*(y2-ym))-((x2-xm)*(y1-ym))
350 ELSEIF (istyp == 2)
THEN
351 CALL hm_get_floatv(
'XTail', xm, is_available, lsubmodel, unitab)
352 CALL hm_get_floatv(
'YTail', ym, is_available, lsubmodel, unitab)
353 CALL hm_get_floatv(
'ZTail', zm, is_available, lsubmodel, unitab)
354 IF(sub_id /= 0)
CALL subrotpoint(xm,ym,zm,rtrans,sub_id,lsubmodel)
356 CALL hm_get_floatv(
'Normal_x', a, is_available, lsubmodel, unitab)
357 CALL hm_get_floatv(
'Normal_y', b, is_available, lsubmodel, unitab)
358 CALL hm_get_floatv(
'Normal_z', c, is_available, lsubmodel, unitab)
359 IF(sub_id /= 0)
CALL subrotvect(a,b,c,rtrans,sub_id,lsubmodel)
361 CALL hm_get_floatv(
'Radius', r, is_available, lsubmodel, unitab)
372 WRITE (iout,2900)i,
id,trim(titr),
nstrf(k0),char8(1:ilen),deltat,alpha,ifram,nbinter
373 WRITE (iout,
'(10I10)')(
nstrf(k1-1+j),j=1,
max(0,
min(10,nbinter)))
376 IF(
nstrf(k1-1+j) == ipari(15,l))
THEN
377 ipari(28,l) = ipari(28,l) + 1
387 IF (istyp >= 1 .OR. nfram > 0)
THEN
391 jj=(numskw+1)+nsubmod+
min(iun,nspcond)*numsph+k+1
392 IF(nfram == iskn(4,jj))
THEN
400 IF (
nstrf(k0+3) == 0 )
THEN
401 IF (iskn(1,jj) /= 0)
THEN
402 nstrf(k0+3) = itab(iskn(1,jj))
404 CALL ancmsg(msgid=742, msgtype=msgerror, anmode=aninfo,
411 IF (
nstrf(k0+4) == 0 )
THEN
412 IF (iskn(2,jj) /= 0)
THEN
413 nstrf(k0+4) = itab(iskn(2,jj))
415 CALL ancmsg(msgid=742, msgtype=msgerror, anmode=aninfo,
422 IF (
nstrf(k0+5) == 0 )
THEN
424 nstrf(k0+5) = itab(iskn(3,jj))
439 max_extension = 22 * grsize_ele(igus,igrbric,ngrbric)
440 call extend_array(
nstrf,
size(
nstrf),k0 + max_extension)
442 2 b,c,d,e,f,ixs,ixs10,ixs16,ixs20,
443 3 nixs,nnod,
nstrf,nbinter,k1,
444 4 cpt,nodtag,isolnod,tagelems,
445 5 x1,y1,z1,x2,y2,z2,r)
448 max_extension = 6 * grsize_ele(iguq,igrquad,ngrquad)
449 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
450 CALL sec_nodes(iguq,istyp,ngrquad,igrquad,x0,a,
451 2 b,c,d,e,f,ixq,nixq,nnod,
nstrf,
452 3 nbinter,k1,4,cpt,nodtag,tagelems(1+numels),
453 4 x1,y1,z1,x2,y2,z2,r)
456 max_extension = 6 * grsize_ele(iguc,igrsh4n,ngrshel)
457 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
458 CALL sec_nodes(iguc,istyp,ngrshel,igrsh4n,x0,a,
459 2 b,c,d,e,f,ixc,nixc,nnod,
nstrf,
460 3 nbinter,k1,4,cpt,nodtag,tagelems(1+numels
462 4 x1,y1,z1,x2,y2,z2,r)
465 max_extension = 4 * grsize_ele(igut,igrtruss,ngrtrus)
466 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
467 CALL sec_nodes(igut,istyp,ngrtrus,igrtruss,x0,a,
468 2 b,c,d,e,f,ixt,nixt,nnod,
nstrf,
469 3 nbinter,k1,2,cpt,nodtag,tagelems(1+numels
471 4 x1,y1,z1,x2,y2,z2,r)
475 max_extension = 4 * grsize_ele(igup,igrbeam,ngrbeam)
476 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
477 CALL sec_nodes(igup,istyp,ngrbeam,igrbeam,x0,a,
478 2 b,c,d,e,f,ixp,nixp,nnod,
nstrf,
479 3 nbinter,k1,2,cpt,nodtag,tagelems(1+numels
480 . +numelq+numelc+numelt),
481 4 x1,y1,z1,x2,y2,z2,r)
484 max_extension = 4 * grsize_ele(igur,igrspring,ngrspri)
485 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
486 CALL sec_nodes(igur,istyp,ngrspri,igrspring,x0,a,
487 2 b,c,d,e,f,ixr,nixr,nnod,
nstrf,
488 3 nbinter,k1,2,cpt,nodtag
489 . +numelq+numelc+numelt+numelp),
490 4 x1,y1,z1,x2,y2,z2,r)
493 max_extension = 6 * grsize_ele(igutg,igrsh3n,ngrsh3n)
494 call extend_array(
nstrf,
size(
nstrf),cpt + max_extension)
495 CALL sec_nodes(igutg,istyp,ngrsh3n,igrsh3n,x0,a,
496 2 b,c,d,e,f,ixtg,nixtg,nnod,
nstrf,
497 3 nbinter,k1,3,cpt,nodtag,tagelems(1+numels
498 . +numelq+numelc+numelt+numelp+numelr),
499 4 x1,y1,z1,x2,y2,z2,r)
503 call extend_array(
nstrf,
size(
nstrf),k2+numnod)
504 IF (nfram == 0 .AND. istyp == 0)
THEN
505 nnod=nodgrnr5(igu,igs,
nstrf(k2),igrnod,itabm1,mess)
508 WRITE (iout,3000)nnod
509 WRITE (iout,
'(10I10)')(itab(
nstrf(k2+j-1)),j=1,nnod)
512 . msgtype=msgwarning,
513 . anmode=aninfo_blind_1,
519 call extend_array(
nstrf,
SIZE(
nstrf),k3+2* grsize_ele(igus,igrbric,ngrbric))
520 nsegs=elegror(igus,igrbric,ngrbric,
'BRIC',
521 .
nstrf(k3),2,mess,nfram,tagelems,istyp,
524 call extend_array(
nstrf,
SIZE(
nstrf),k4+2* grsize_ele(iguq,igrquad,ngrquad))
525 nsegq=elegror(iguq,igrquad,ngrquad,
'QUAD',
526 .
nstrf(k4),2,mess,nfram,tagelems(1+numels),istyp,
529 call extend_array(
nstrf,
SIZE(
nstrf),k5+2* grsize_ele(iguc,igrsh4n,ngrshel))
530 nsegc=elegror(iguc,igrsh4n,ngrshel,
'SHEL',
531 .
nstrf(k5),2,mess,nfram,tagelems(1+numels
535 call extend_array(
nstrf,
SIZE(
nstrf),k6+2* grsize_ele(igut,igrtruss,ngrtrus))
536 nsegt=elegror(igut,igrtruss,ngrtrus,
'TRUS',
537 .
nstrf(k6),2,mess,nfram,tagelems(1+numels
538 . +numelq+numelc),istyp,
541 call extend_array(
nstrf,
SIZE(
nstrf),k7+2* grsize_ele(igup,igrbeam,ngrbeam))
542 nsegp=elegror(igup,igrbeam,ngrbeam,
'BEAM',
543 .
nstrf(k7),2,mess,nfram,tagelems(1+numels
544 . +numelq+numelc+numelt),istyp,
547 call extend_array(
nstrf,
SIZE(
nstrf),k8+2* grsize_ele(igur,igrspring,ngrspri))
548 nsegr=elegror(igur,igrspring,ngrspri,
'SPRI',
549 .
nstrf(k8),2,mess,nfram,tagelems(1+numels
550 . +numelq+numelc+numelt+numelp),istyp,
553 IF (nb_seatbelt_shells /=0)
THEN
554 snstrf1 = grsize_ele_trans(iguc,igrsh4n,ngrshel,seatbelt_shell_to_spring)
555 call extend_array(
nstrf,
SIZE(
nstrf),k8+2*nsegr+2*snstrf1)
556 nsegr=nsegr+elegror_seatbelt(iguc,igrsh4n,ngrshel,
557 .
nstrf(k8),2,snstrf1,nfram,tagelems(1+numels
559 . seatbelt_shell_to_spring)
563 call extend_array(
nstrf,
SIZE(
nstrf),k9+2* grsize_ele(igutg,igrsh3n,ngrsh3n))
564 nsegtg=elegror(igutg,igrsh3n,ngrsh3n,
'SH3N',
565 .
nstrf(k9),2,mess,nfram,tagelems(1+numels
566 . +numelq+numelc+numelt+numelp+numelr),istyp,
569 IF(nsegs+nsegq+nsegc+nsegt+nsegp+nsegr+nsegtg==0)
THEN
570 CALL ancmsg(msgid=1813, msgtype=msgwarning, anmode=aninfo,
589 IF (
nstrf(l) /= 0)
THEN
608 pnor1=sqrt(x1*x1+y1*y1+z1*z1)
609 IF (pnor1 < em20)
THEN
610 CALL ancmsg(msgid=508,msgtype=msgerror,anmode=aninfo_blind_1,i1=
id,c1=titr)
613 IF (pnor2 > em20)
THEN
614 pnorm1=one/(pnor1*pnor2)
615 det1=abs((y3*z1-z3*y1)*pnorm1)
616 det2=abs((z3*x1-x3*z1)*pnorm1)
617 det3=abs((x3*y1-y3*x1)*pnorm1)
618 det=
max(det1,det2,det3)
623 CALL ancmsg(msgid=508,msgtype=msgerror,anmode=aninfo_blind_1,i1=
id,c1=titr)
631 WRITE (iout,3300) nsegs
633 .
nstrf(k2),nnod,noprint)
637 WRITE (iout,3400) nsegq
643 WRITE (iout,3100) nsegc
649 WRITE (iout,3500) nsegt
655 WRITE (iout,3600) nsegp
661 WRITE (iout,3700) nsegr
667 WRITE (iout,3200) nsegtg
673 IF(
nstrf(k0) >= 102)
THEN
674 CALL zerore(1,10+30*nnod,secbuf(kr0))
675 ELSEIF(
nstrf(k0) >= 101)
THEN
676 CALL zerore(1,10+24*nnod,secbuf(kr0))
677 ELSEIF(
nstrf(k0) >= 100)
THEN
678 CALL zerore(1,10+12*nnod,secbuf(kr0))
680 CALL zerore(1,10,secbuf(kr0))
684 secbuf(kr0+2) = alpha
688 IF(secbuf(1) == zero)
THEN
691 maxdt=
max(secbuf(1),deltat)
692 IF(abs((secbuf(1)-deltat)/secbuf(1)) > em06 )
THEN
695 . anmode=aninfo_blind_2,
704 ELSEIF(
nstrf(k0) >= 100.AND.
nstrf(k0) <= 200)
THEN
710 IF(
nstrf(k0) == 1)
THEN
712 ELSEIF(
nstrf(k0) == 2)
THEN
717 nstrf(k0+24) = k9+2*nsegtg
718 nstrf(k0+25) = kr0+10
729 CALL udouble(sectids,1,nsect,mess,0,bid)
734 DEALLOCATE(tagndoubl)
740 2900
FORMAT(/
' SECTION',i10,
' ID',i10/
741 +
' ---------------'/
743 +
' TYPE . . . . . . . . . . . . . . .',i10/
744 +
' FILENAME . . . . . . . . . . . . .',a/
745 +
' DELTAT . . . . . . . . . . . . . .',1pg20.13/
746 +
' ALPHA. . . . . . . . . . . . . . .',1pg20.13/
747 +
' FRAME TYPE . . . . . . . . . . . .',i10/
748 +
' NUMBER OF INTERFACES . . . . . . .',i10/
751 +
' NUMBER OF NODES. . . . . . . . . .',i10/
754 +
' NUMBER OF SHELL ELEMENTS . . . . .',i10/
755 +
' SHELL N1 N2 N3 N4')
757 +
' NUMBER OF 3 NODES SHELL ELEMENTS .',i10/
760 +
' NUMBER OF BRICK ELEMENTS . . . . .',i10/
761 +
' BRICK N1 N2 N3 N4',
764 +
' NUMBER OF QUAD ELEMENTS . . . . .',i10/
765 +
' QUAD N1 N2 N3 N4')
767 +
' NUMBER OF TRUSS ELEMENTS . . . . .',i10/
770 +
' NUMBER OF BEAM ELEMENTS . . . . .',i10/
773 +
' NUMBER OF SPRING ELEMENTS . . . . .',i8/
1047 2 B,C,D,E,F,IX,NIX,NNOD,NSTRF,
1048 3 NBINTER,K1,NBNODES,J,NODTAG,TAGELEMS,
1049 4 X1,Y1,Z1,X2,Y2,Z2,R)
1057#include "implicit_f.inc"
1061#include "com04_c.inc"
1065 INTEGER IGU1,ISTYP,NGRELE,NIX,NNOD,NBINTER,K1,NBNODES,J
1066 INTEGER IX(NIX,*), NSTRF(*), NODTAG(NUMNOD),TAGELEMS(*)
1067 my_real X0(3,*),A,B,C,D,E,F,X1,Y1,Z1,X2,Y2,Z2,R
1069 TYPE (GROUP_) ,
DIMENSION(NGRELE) :: IGRELE
1073 INTEGER K,L,ISU,IE,TAGELEM1,TAGELEM2,TAGELEM3,NBPROJOK
1075 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGNDOUBL, TAGNODES
1076 my_real POS,PROJX,PROJY,PROJZ,P1,P2
1083 ALLOCATE(tagndoubl(numnod))
1084 ALLOCATE(tagnodes(numnod*2+npart))
1095 IF ( igrele(l)%ID == igu1 )
THEN
1099 DO l=1,igrele(isu)%NENTITY
1100 ie=igrele(isu)%ENTITY(l)
1110 pos = (x0(1,ix(k,ie))-d)*a + (x0(2,ix(k,ie))-e)*b + (x0(3,ix(k,ie))-f)*c
1111 IF (istyp == 1)
THEN
1112 projx = x0(1,ix(k,ie))-pos*a
1113 projy = x0(2,ix(k,ie))-pos*b
1114 projz = x0(3,ix(k,ie))-pos*c
1119 IF ( (x2-d) /= zero .AND. (y1-e)-(x1-d)*(y2-e) /= zero)
THEN
1120 p1 = (projy-projx*(y2-e)/(x2-d))/ ((y1-e)-(x1-d)*(y2-e)/(x2-d))
1121 ELSEIF( (y2-e) /= zero .AND. (z1-f)-(y1-e)*(z2-f) /= zero)
THEN
1122 p1 = (projz-projy*(z2-f)/(y2-e))/ ((z1-f)-(y1-e)*(z2-f)/(y2-e))
1123 ELSEIF( (z2-f) /= zero .AND. (x1-d)-(z1-f)*(x2-d) /= zero)
THEN
1124 p1 = (projx-projz*(x2-d)/(z2-f))/ ((x1-d)-(z1-f)*(x2-d)/(z2-f))
1126 IF ( (x1-d) /= zero .AND. (y2-e)-(x2-d)*(y1-e) /= zero)
THEN
1127 p2 = (projy-projx*(y1-e)/(x1-d))/ ((y2-e)-(x2-d)*(y1-e)/(x1-d))
1128 ELSEIF ( (y1-e) /= zero .AND. (z2-f)-(y2-e)*(z1-f) /= zero)
THEN
1129 p2 = (projz-projy*(z1-f)/(y1-e))/ ((z2-f)-(y2-e)*(z1-f)/(y1-e))
1130 ELSEIF ( (z1-f) /= zero .AND. (x2-d)-(z2-f)*(x1-d) /= zero)
THEN
1131 p2 = (projx-projz*(x1-d)/(z1-f))/ ((x2-d)-(z2-f)*(x1-d)/(z1-f))
1134 IF((x2-d)== zero .AND. (x1-d)/= zero) p1 = projx / (x1-d)
1135 IF((x1-d)== zero .AND. (x2-d)/= zero) p2 = projx / (x2-d)
1136 IF((y2-e)== zero .AND. (y1-e)/= zero) p1 = projy / (y1-e)
1137 IF((y1-e)== zero .AND. (y2-e)/= zero) p2 = projy / (y2-e)
1138 IF((z2-f)== zero .AND. (z1-f)/= zero) p1 = projz / (z1-f)
1139 IF((z1-f)== zero .AND. (z2-f)/= zero) p2 = projz / (z2-f)
1141 IF( p1 <= 1 .AND. p1 >= 0 .AND. p2 <= 1 .AND. p2 >= 0) nbprojok = nbprojok + 1
1143 ELSEIF (istyp == 2)
THEN
1144 projx = x0(1,ix(k,ie))-pos*a
1145 projy = x0(2,ix(k,ie))-pos*b
1146 projz = x0(3,ix(k,ie))-pos*c
1150 p1 = sqrt(projx**2+projy**2+projz**2)
1151 IF( p1 <= r) nbprojok = nbprojok + 1
1154 IF ( pos < zero)
THEN
1155 tagnodes(ix(k,ie))= -1
1156 tagndoubl(ix(k,ie)) = tagndoubl(ix(k,ie)) + 1
1158 ELSEIF ( pos == zero)
THEN
1159 tagnodes(ix(k,ie))= 0
1160 tagndoubl(ix(k,ie)) = tagndoubl(ix(k,ie)) + 1
1163 tagnodes(ix(k,ie))= 1
1164 tagndoubl(ix(k,ie)) = tagndoubl(ix(k,ie)) + 1
1168 IF ( (istyp == 0 .OR. nbprojok >= 1) .AND.
1169 . ( tagelem1+tagelem3 /= 1
1170 . .OR. ( tagelem2 == 1 .AND. tagelem3 == 1 )))
1174 DO l=1,igrele(isu)%NENTITY
1175 ie=igrele(isu)%ENTITY(l)
1177 IF (tagelems(ie) == 1)
THEN
1179 IF ( tagndoubl(ix(k,ie)) >= 1
1180 . .AND. tagnodes(ix(k,ie)) > 0
1181 . .AND. nodtag(ix(k,ie)) == 0)
THEN
1182 nstrf(k1+nbinter+j-1) = ix(k,ie)
1183 tagndoubl(ix(k,ie)) = 0
1184 nodtag(ix(k,ie)) = 1
1193 DEALLOCATE(tagndoubl)
1194 DEALLOCATE(tagnodes)
1206 2 B,C,D,E,F,IXS,IXS10,IXS16,IXS20,
1207 3 NIX,NNOD,NSTRF,NBINTER,K1,
1208 4 J,NODTAG,ISOLNOD,TAGELEMS,
1209 5 X1,Y1,Z1,X2,Y2,Z2,R)
1217#include "implicit_f.inc"
1221#include "com04_c.inc"
1225 INTEGER IGU1,ISTYP,NIX,NNOD,NBINTER,K1,J
1226 INTEGER IXS(NIX,NUMELS), NSTRF(*),
1227 . NODTAG(NUMNOD), IXS10(6,*),IXS16(8,*),IXS20(12,*),
1228 . ISOLNOD(*),TAGELEMS(*)
1229 my_real x0(3,*),a,b,c,d,e,f,x1,y1,z1,x2,y2,z2,r
1231 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
1235 INTEGER K,L,ISU,IE,TAGELEM1,TAGELEM2,TAGELEM3, NBNODES,NBPROJOK,OFFSET
1236 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGNDOUBL,TAGNODES
1237 my_real POS,PROJX,PROJY,PROJZ,P1,P2
1244 ALLOCATE( tagndoubl(numnod),tagnodes(numnod*2+npart) )
1249 IF ( igrbric(l)%ID == igu1 )
THEN
1253 DO l=1,igrbric(isu)%NENTITY
1254 ie=igrbric(isu)%ENTITY(l)
1256 nbnodes = isolnod(ie)
1257 IF (nbnodes == 4 .OR. nbnodes == 6) nbnodes = 8
1264 IF (nbnodes == 10 .AND. k > 5)
THEN
1266 pos = (x0(1,ixs10(k-5,ie-offset))-d)*a +
1267 . (x0(2,ixs10(k-5,ie-offset))-e)*b +
1268 . (x0(3,ixs10(k-5,ie-offset))-f)*c
1269 IF (istyp >= 1)
THEN
1270 projx = x0(1,ixs10(k-5,ie-offset))-pos*a
1271 projy = x0(2,ixs10(k-5,ie-offset))-pos*b
1272 projz = x0(3,ixs10(k-5,ie-offset))-pos*c
1274 ELSEIF (nbnodes == 16 .AND. k > 9)
THEN
1275 offset = numels8+numels10+numels20
1276 pos = (x0(1,ixs16(k-9,ie-offset))-d)*a +
1277 . (x0(2,ixs16(k-9,ie-offset))-e)*b +
1278 . (x0(3,ixs16(k-9,ie-offset))-f)*c
1279 IF (istyp >= 1)
THEN
1280 projx = x0(1,ixs16(k-9,ie-offset))-pos*a
1281 projy = x0(2,ixs16(k-9,ie-offset))-pos*b
1282 projz = x0(3,ixs16(k-9,ie-offset))-pos*c
1284 ELSEIF (nbnodes == 20 .AND. k > 9)
THEN
1285 offset = numels8+numels10
1286 pos = (x0(1,ixs20(k-9,ie-offset))-d)*a +
1287 . (x0(2,ixs20(k-9,ie-offset))-e)*b +
1288 . (x0(3,ixs20(k-9,ie-offset))-f)*c
1289 IF (istyp >= 1)
THEN
1290 projx = x0(1,ixs20(k-9,ie-offset))-pos*a
1291 projy = x0(2,ixs20(k-9,ie-offset))-pos*b
1292 projz = x0(3,ixs20(k-9,ie-offset))-pos*c
1295 pos = (x0(1,ixs(k,ie))-d)*a +
1296 . (x0(2,ixs(k,ie))-e)*b +
1297 . (x0(3,ixs(k,ie))-f)*c
1298 IF (istyp >= 1)
THEN
1299 projx = x0(1,ixs(k,ie))-pos*a
1300 projy = x0(2,ixs(k,ie))-pos*b
1301 projz = x0(3,ixs(k,ie))-pos*c
1304 IF (istyp == 1)
THEN
1309 IF ( (x2-d) /= zero .AND.
1310 . (y1-e)-(x1-d)*(y2-e) /= zero)
THEN
1311 p1 = (projy-projx*(y2-e)/(x2-d))/
1312 . ((y1-e)-(x1-d)*(y2-e)/(x2-d))
1313 ELSEIF( (y2-e) /= zero .AND.
1314 . (z1-f)-(y1-e)*(z2-f) /= zero)
THEN
1315 p1 = (projz-projy*(z2-f)/(y2-e))/
1316 . ((z1-f)-(y1-e)*(z2-f)/(y2-e))
1317 ELSEIF( (z2-f) /= zero .AND.
1318 . (x1-d)-(z1-f)*(x2-d) /= zero)
THEN
1319 p1 = (projx-projz*(x2-d)/(z2-f))/
1320 . ((x1-d)-(z1-f)*(x2-d)/(z2-f))
1322 IF ( (x1-d) /= zero .AND.
1323 . (y2-e)-(x2-d)*(y1-e) /= zero)
THEN
1324 p2 = (projy-projx*(y1-e)/(x1-d))/
1325 . ((y2-e)-(x2-d)*(y1-e)/(x1-d))
1326 ELSEIF ( (y1-e) /= zero .AND.
1327 . (z2-f)-(y2-e)*(z1-f) /= zero)
THEN
1328 p2 = (projz-projy*(z1-f)/(y1-e))/
1329 . ((z2-f)-(y2-e)*(z1-f)/(y1-e))
1330 ELSEIF ( (z1-f) /= zero .AND.
1331 . (x2-d)-(z2-f)*(x1-d) /= zero)
THEN
1332 p2 = (projx-projz*(x1-d)/(z1-f))/
1333 . ((x2-d)-(z2-f)*(x1-d)/(z1-f))
1336 IF((x2-d)== zero .AND. (x1-d)/= zero) p1 = projx / (x1-d)
1337 IF((x1-d)== zero .AND. (x2-d)/= zero) p2 = projx / (x2-d)
1338 IF((y2-e)== zero .AND. (y1-e)/= zero) p1 = projy / (y1-e)
1339 IF((y1-e)== zero .AND. (y2-e)/= zero) p2 = projy / (y2-e)
1340 IF((z2-f)== zero .AND. (z1-f)/= zero) p1 = projz / (z1-f)
1341 IF((z1-f)== zero .AND. (z2-f)/= zero) p2 = projz / (z2-f)
1342 IF( p1 <= 1 .AND. p1 >= 0 .AND. p2 <= 1 .AND. p2 >= 0)nbprojok = nbprojok + 1
1344 ELSEIF (istyp == 2)
THEN
1348 p1 = sqrt(projx**2+projy**2+projz**2)
1349 IF( p1 <= r) nbprojok = nbprojok + 1
1351 IF ( pos < zero)
THEN
1352 IF (nbnodes == 10 .AND. k>5)
THEN
1354 tagnodes(ixs10(k-5,ie-offset))= -1
1355 tagndoubl(ixs10(k-5,ie-offset)) = tagndoubl(ixs10(k-5,ie-offset)) + 1
1356 ELSEIF (nbnodes == 16 .AND. k>9)
THEN
1357 offset = numels8+numels10+numels20
1358 tagnodes(ixs16(k-9,ie-offset))= -1
1359 tagndoubl(ixs16(k-9,ie-offset)) = tagndoubl(ixs16(k-9,ie-offset)) + 1
1360 ELSEIF (nbnodes == 20 .AND. k>9)
THEN
1361 offset = numels8+numels10
1362 tagnodes(ixs20(k-9,ie-offset))= -1
1363 tagndoubl(ixs20(k-9,ie-offset)) = tagndoubl(ixs20(k-9,ie-offset)) + 1
1365 tagnodes(ixs(k,ie))= -1
1366 tagndoubl(ixs(k,ie)) = tagndoubl(ixs(k,ie)) + 1
1369 ELSEIF ( pos == zero)
THEN
1370 IF(nbnodes == 10 .AND. k>5)
THEN
1372 tagnodes(ixs10(k-5,ie-offset))= 0
1373 tagndoubl(ixs10(k-5,ie-offset)) = tagndoubl(ixs10(k-5,ie-offset)) + 1
1374 ELSEIF (nbnodes == 16 .AND. k>9)
THEN
1375 offset = numels8+numels10+numels20
1376 tagnodes(ixs16(k-9,ie-offset))= 0
1377 tagndoubl(ixs16(k-9,ie-offset)) = tagndoubl(ixs16(k-9,ie-offset)) + 1
1378 ELSEIF (nbnodes == 20 .AND. k>9)
THEN
1379 offset = numels8+numels10
1380 tagnodes(ixs20(k-9,ie-offset))= 0
1381 tagndoubl(ixs20(k-9,ie-offset)) = tagndoubl(ixs20(k-9,ie-offset)) + 1
1383 tagnodes(ixs(k,ie))= 0
1384 tagndoubl(ixs(k,ie)) = tagndoubl(ixs(k,ie)) + 1
1388 IF (nbnodes == 10 .AND. k>5)
THEN
1390 tagnodes(ixs10(k-5,ie-offset))= 1
1391 tagndoubl(ixs10(k-5,ie-offset)) = tagndoubl(ixs10(k-5,ie-offset)) + 1
1392 ELSEIF (nbnodes == 16 .AND. k>9)
THEN
1393 offset = numels8+numels10+numels20
1394 tagnodes(ixs16(k-9,ie-offset))= 1
1395 tagndoubl(ixs16(k-9,ie-offset)) = tagndoubl(ixs16(k-9,ie-offset)) + 1
1396 ELSEIF (nbnodes == 20 .AND. k>9)
THEN
1397 offset = numels8+numels10
1398 tagnodes(ixs20(k-9,ie-offset))= 1
1399 tagndoubl(ixs20(k-9,ie-offset)) = tagndoubl(ixs20(k-9,ie-offset)) + 1
1401 tagnodes(ixs(k,ie))= 1
1402 tagndoubl(ixs(k,ie)) = tagndoubl(ixs(k,ie)) + 1
1407 IF ( (istyp == 0 .OR. nbprojok >= 1) .AND.
1408 . ( tagelem1+tagelem3 /= 1
1409 . .OR. ( tagelem2 == 1 .AND. tagelem3 == 1 )))
1414 DO l=1,igrbric(isu)%NENTITY
1415 ie=igrbric(isu)%ENTITY(l)
1417 nbnodes = isolnod(ie)
1418 IF (nbnodes == 4 .OR. nbnodes == 6) nbnodes = 8
1419 IF (tagelems(ie) == 1)
THEN
1421 IF (nbnodes == 10 .AND. k > 5)
THEN
1423 IF ( tagndoubl(ixs10(k-5,ie-offset)) >= 1
1424 . .AND. tagnodes(ixs10(k-5,ie-offset)) > 0
1425 . .AND. nodtag(ixs10(k-5,ie-offset)) == 0)
THEN
1426 nstrf(k1+nbinter+j-1) = ixs10(k-5,ie-offset)
1427 tagndoubl(ixs10(k-5,ie-offset)) = 0
1428 nodtag(ixs10(k-5,ie-offset)) = 1
1432 ELSEIF (nbnodes == 16 .AND. k > 9)
THEN
1433 offset = numels8+numels10+numels20
1434 IF ( tagndoubl(ixs16(k-9,ie-offset)) >= 1
1435 . .AND. tagnodes(ixs16(k-9,ie-offset)) > 0
1436 . .AND. nodtag(ixs16(k-9,ie-offset)) == 0)
THEN
1437 nstrf(k1+nbinter+j-1) = ixs16(k-9,ie-offset)
1438 tagndoubl(ixs16(k-9,ie-offset)) = 0
1439 nodtag(ixs16(k-9,ie-offset)) = 1
1443 ELSEIF (nbnodes == 20 .AND. k > 9)
THEN
1444 offset = numels8+numels10
1445 IF ( tagndoubl(ixs20(k-9,ie-offset)) >= 1
1446 . .AND. tagnodes(ixs20(k-9,ie-offset)) > 0
1447 . .AND. nodtag(ixs20(k-9,ie-offset)) == 0)
THEN
1448 nstrf(k1+nbinter+j-1) = ixs20(k-9,ie-offset)
1449 tagndoubl(ixs20(k-9,ie-offset)) = 0
1450 nodtag(ixs20(k-9,ie-offset)) = 1
1455 IF ( tagndoubl(ixs(k,ie)) >= 1
1456 . .AND. tagnodes(ixs(k,ie)) > 0
1457 . .AND. nodtag(ixs(k,ie)) == 0)
THEN
1458 nstrf(k1+nbinter+j-1) = ixs(k,ie)
1459 tagndoubl(ixs(k,ie)) = 0
1460 nodtag(ixs(k,ie)) = 1
1471 DEALLOCATE( tagndoubl,tagnodes )