dyne31
C DYNE31 SOURCE BP208322 20/09/18 21:16:24 10718 & NPLB,I,NPOI,IND,ID1,IP1,XPP,YPP) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Op{rateur DYNE : algorithme de Fu - de Vogelaere * * ________________________________________________ * * * * Calcul le point d'intersection * * * * Param}tres: * * * * e IPOIN1 point du profil mobile * * e IPOIN2 point du profil mobile * * e IELEM1 {l{ment du profil fixe * * e NLIAB nombre total de liaisons * * e NPOI point support * * s XPP 1}re coordonn{e du point d'intersection * * s YPP 2}me coordonn{e du point d'intersection * * * * * * Auteur, date de cr{ation: * * * * Lionel VIVAN, le 1 f{vrier 1991. * * * *--------------------------------------------------------------------* * INTEGER IPALB(NLIAB,*) REAL*8 XPTB(NPLB,2,*),XPALB(NLIAB,*) * III = 0 XPP = ZERO YPP = ZERO ICOMP = 1 IDIM = IPALB(I,3) NOMBN1 = IPALB(I,4) NOMBN2 = IPALB(I,5) ID2 = ID1 + IDIM ID3 = ID1 + 2*IDIM ID4 = ID1 + 3*IDIM ID6 = ID1 + 5*IDIM ID7 = ID1 + 5*IDIM + IDIM*NOMBN1 ID8 = ID7 + IDIM*NOMBN2 * calcul des coordonn{es dans le plan d{fini par les profils IPN1 = ID7 + IDIM*(IPOIN1-1) IPN2 = ID7 + IDIM*(IPOIN2-1) X1 = ZERO Y1 = ZERO X2 = ZERO Y2 = ZERO DO 8 ID = 1,IDIM XX1 = XPTB(NPOI,1,ID) + XPALB(I,IPN1+ID) - XPALB(I,ID2+ID) XX2 = XPTB(NPOI,1,ID) + XPALB(I,IPN2+ID) - XPALB(I,ID2+ID) X1 = X1 + ( XX1 * XPALB(I,ID3+ID) ) Y1 = Y1 + ( XX1 * XPALB(I,ID4+ID) ) X2 = X2 + ( XX2 * XPALB(I,ID3+ID) ) Y2 = Y2 + ( XX2 * XPALB(I,ID4+ID) ) 8 CONTINUE * end do XXX = X2 - X1 YYY = Y2 - Y1 IE = IELEM1 20 CONTINUE IEL1 = ID6 + IDIM*(IE-1) IEL2 = ID6 + IDIM*IE IF (IE.EQ.NOMBN1) IEL2 = ID6 XE1 = ZERO YE1 = ZERO XE2 = ZERO YE2 = ZERO DO 10 ID = 1,IDIM XX1 = XPALB(I,IEL1+ID) - XPALB(I,ID2+ID) XX2 = XPALB(I,IEL2+ID) - XPALB(I,ID2+ID) XE1 = XE1 + ( XX1 * XPALB(I,ID3+ID) ) YE1 = YE1 + ( XX1 * XPALB(I,ID4+ID) ) XE2 = XE2 + ( XX2 * XPALB(I,ID3+ID) ) YE2 = YE2 + ( XX2 * XPALB(I,ID4+ID) ) 10 CONTINUE * end do IEL3 = ID8 + 2*(IE - 1) ICAS = IPALB(I,IP1+IE) XAIJ = XPALB(I,IEL3+1) XBIJ = XPALB(I,IEL3+2) * * La droite cr{{e par l'{l{ment du profil fixe est verticale * IF (ICAS.EQ.1) THEN XPP = XAIJ IF (ABS(YYY).LT.PRECIS) THEN * La droite cr{{e par les points IPOIN1 et IPOIN2 est horizontale YPP = Y1 GOTO 30 ELSE IF (ABS(XXX).LT.PRECIS) THEN * La droite cr{{e par les points IPOIN1 et IPOIN2 est verticale * alors on va chercher l'{l{ment du profil fixe suivant GOTO 12 ELSE * La droite cr{{e par les points IPOIN1 et IPOIN2 est quelconque AL2 = YYY / XXX BL2 = ( X2*Y1 - Y2*X1 ) / XXX YPP = ( AL2 * XPP ) + BL2 * V{rification des coordonn{es du point d'intersection IF (YE1.LE.YE2) THEN IF (YE1.LE.YPP .AND. YPP.LE.YE2) GOTO 30 GOTO 12 ELSE IF (YE2.LE.YPP .AND. YPP.LE.YE1) GOTO 30 GOTO 12 ENDIF ENDIF * * La droite cr{{e par l'{l{ment du profil fixe est horizontale * ELSE IF (ICAS.EQ.2) THEN YPP = XBIJ IF (ABS(XXX).LT.PRECIS) THEN * La droite cr{{e par les points IPOIN1 et IPOIN2 est verticale XPP = X1 GOTO 30 ELSE IF (ABS(YYY).LT.PRECIS) THEN * La droite cr{{e par les points IPOIN1 et IPOIN2 est horizontale * alors on va chercher l'{l{ment du profil fixe suivant GOTO 12 ELSE * La droite cr{{e par les points IPOIN1 et IPOIN2 est quelconque AL2 = YYY / XXX BL2 = ( X2*Y1 - Y2*X1 ) / XXX XPP = ( YPP - BL2 ) / AL2 * V{rification des coordonn{es du point d'intersection IF (XE1.LE.XE2) THEN IF (XE1.LE.XPP .AND. XPP.LE.XE2) GOTO 30 GOTO 12 ELSE IF (XE2.LE.XPP .AND. XPP.LE.XE1) GOTO 30 GOTO 12 ENDIF ENDIF * * La droite cr{{e par un {l{ment du profil fixe est quelconque * ELSE IF (ABS(XXX).LT.PRECIS) THEN * La droite cr{{e par les points IPOIN1 et IPOIN2 est verticale XPP = X1 YPP = ( XAIJ * XPP ) + XBIJ * V{rification des coordonn{es du point d'intersection IF (YE1.LE.YE2) THEN IF (YE1.LE.YPP .AND. YPP.LE.YE2) GOTO 30 GOTO 12 ELSE IF (YE2.LE.YPP .AND. YPP.LE.YE1) GOTO 30 GOTO 12 ENDIF ELSE * La droite cr{{e par les points IPOIN1 et IPOIN2 est quelconque AL2 = YYY / XXX BL2 = ( X2*Y1 - Y2*X1 ) / XXX XPP = ( XBIJ - BL2 ) / ( AL2 - XAIJ ) YPP = ( AL2 * XPP ) + BL2 * V{rification des coordonn{es du point d'intersection IF (XE1.LE.XE2 .AND. YE1.LE.YE2) THEN IF (XE1.LE.XPP .AND. XPP.LE.XE2 .AND. & YE1.LE.YPP .AND. YPP.LE.YE2) GOTO 30 GOTO 12 ELSE IF (XE1.LE.XE2 .AND. YE2.LE.YE1) THEN IF (XE1.LE.XPP .AND. XPP.LE.XE2 .AND. & YE2.LE.YPP .AND. YPP.LE.YE1) GOTO 30 GOTO 12 ELSE IF (XE2.LE.XE1 .AND. YE2.LE.YE1) THEN IF (XE2.LE.XPP .AND. XPP.LE.XE1 .AND. & YE2.LE.YPP .AND. YPP.LE.YE1) GOTO 30 GOTO 12 ELSE IF (XE2.LE.XPP .AND. XPP.LE.XE1 .AND. & YE1.LE.YPP .AND. YPP.LE.YE2) GOTO 30 GOTO 12 ENDIF ENDIF ENDIF 12 CONTINUE IF (ICOMP.EQ.NOMBN1) RETURN IF (III.EQ.1) THEN * on regarde l'{l{ment pr{c{dent IE = IELEM1 - ICOMP IF (IE.LE.0) IE = IE + NOMBN1 III = -1 ICOMP = ICOMP + 1 GOTO 20 ELSE * on regarde l'{l{ment suivant IE = IELEM1 + ICOMP IF (IE.GE.(NOMBN1+1)) IE = IE - NOMBN1 III = 1 GOTO 20 ENDIF 30 CONTINUE IELEM1 = IE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales