devfb4
C DEVFB4 SOURCE BP208322 20/09/18 21:15:29 10718 & NPLB,IND,IND1,INDM1,NPA,NPAM1,IND2,PDT,PDTS2, & FEXPSM,NPC1,I,IERRD,iannul) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Op{rateur DYNE : algorithme de Fu - de Vogelaere * * ________________________________________________ * * * * Calcul des forces de choc sur base B pour les liaisons * * de type PROFIL_PROFIL_... * * * * Param}tres: * * * * e ITYP type de la liaison. * * es FTOTB Forces ext{rieures totalis{es sur la base B. * * e XPTB Tableau des d{placements des points * * e IPALB Renseigne sur la liaison. * * e IPLIB Tableau contenant les num{ros "DYNE" de la liaison. * * e XPALB Tableau contenant les param}tres de la liaison. * * es XVALB Tableau contenant les variables internes de liaisons. * * e NLIAB Nombre de liaisons sur la base B. * * e NPLB Nombre total de points intervenant dans les liaisons. * * e IND Indice du pas. * * e I num{ro de la liaison. * * es IERRD num{ro d'erreur. * * * * * * Auteur, date de cr{ation: * * * * Lionel VIVAN : le 1 f{vrier 1990 * * * *--------------------------------------------------------------------* * INTEGER IPALB(NLIAB,*),IPLIB(NLIAB,*) REAL*8 XPALB(NLIAB,*),XPTB(NPLB,2,*),FTOTB(NPLB,*) REAL*8 XVALB(NLIAB,4,*),XFOR(3),FEXPSM(NPLB,NPC1,2,*) LOGICAL LPETPP * * --- choc {l{mentaire PROFIL_PROFIL_INTERIEUR * --- choc {l{mentaire PROFIL_PROFIL_EXTERIEUR * IF (ITYP.EQ.31 .OR. ITYP.EQ.32) THEN NPOI = IPLIB(I,1) IDIM = IPALB(I,3) NOMBN1 = IPALB(I,4) NOMBN2 = IPALB(I,5) XRAID = XPALB(I,1) XSECT = XPALB(I,2) XEXPO = XPALB(I,3) ID1 = 3 ID2 = ID1 + IDIM ID3 = ID1 + 2*IDIM ID4 = ID1 + 3*IDIM ID5 = ID1 + 4*IDIM ID6 = ID1 + 5*IDIM ID7 = ID6 + IDIM*NOMBN1 ID8 = ID7 + IDIM*NOMBN2 IP1 = 5 IP2 = IP1 + NOMBN1 IP3 = IP2 IP4 = IP1 + NOMBN1 + NOMBN1*NOMBN2 SOMFN = ZERO * * Recherche du nombre de point qui ont travers{ le maillage fixe, * donc s'il y a eu choc. IPOIN = 0 ITIN = ID7 DO 10 IN = 1,NOMBN2 IP5 = IP4 + NOMBN1*(IN - 1) * D{placement du point IN du profil mobile dans le plan des profils XN1 = ZERO YN1 = ZERO DO 12 ID = 1,IDIM XXX = XPALB(I,ITIN+ID) + XPTB(NPOI,1,ID) & - XPALB(I,ID2+ID) XN1 = XN1 + ( XXX * XPALB(I,ID3+ID) ) YN1 = YN1 + ( XXX * XPALB(I,ID4+ID) ) 12 CONTINUE * end do * On boucle sur le nombre d'{l{ment du profil fixe pour savoir si * le point IN @ travers{ le profil fixe NUME1 = ID6 NUME2 = ID6 + IDIM ICOEF = ID8 DO 14 IE = 1,NOMBN1 IPALB(I,IP5+IE) = 0 IPOSI = IPALB(I,IP3+IE) ICAS = IPALB(I,IP1+IE) XAIJ = XPALB(I,ICOEF+1) XBIJ = XPALB(I,ICOEF+2) IF (ICAS.EQ.1) THEN IF (XN1.GT.XAIJ) THEN IPOS2 = 1 ELSE IF (XN1.LT.XAIJ) THEN IPOS2 = -1 ELSE IPOS2 = 0 ENDIF ELSE IF (ICAS.EQ.2) THEN IF (YN1.GT.XBIJ) THEN IPOS2 = 1 ELSE IF (YN1.LT.XBIJ) THEN IPOS2 = -1 ELSE IPOS2 = 0 ENDIF ELSE RES = ( XAIJ * XN1 ) + XBIJ IF (YN1.GT.RES) THEN IPOS2 = 1 ELSE IF (YN1.LT.RES) THEN IPOS2 = -1 ELSE IPOS2 = 0 ENDIF ENDIF IF (IPOSI.NE.IPOS2) THEN * Le point IN a travers{ le maillage fixe, * quel {l{ment a {t{ travers{ par ce point ? IF (IE.EQ.NOMBN1) NUME2 = ID6 XE1 = ZERO YE1 = ZERO XE2 = ZERO YE2 = ZERO DO 16 ID = 1,IDIM XXX = XPALB(I,NUME1+ID) - XPALB(I,ID2+ID) YYY = XPALB(I,NUME2+ID) - XPALB(I,ID2+ID) XE1 = XE1 + ( XXX * XPALB(I,ID3+ID) ) YE1 = YE1 + ( XXX * XPALB(I,ID4+ID) ) XE2 = XE2 + ( YYY * XPALB(I,ID3+ID) ) YE2 = YE2 + ( YYY * XPALB(I,ID4+ID) ) 16 CONTINUE * end do IF (XE2.GT.XE1) THEN IF (XE1.LE.XN1 .AND. XN1.LT.XE2) THEN IPOIN = IPOIN + 1 IPALB(I,IP5+IE) = 1 GOTO 18 ENDIF ELSE IF (XE2.LT.XN1 .AND. XN1.LE.XE1) THEN IPOIN = IPOIN + 1 IPALB(I,IP5+IE) = 1 GOTO 18 ENDIF ENDIF IF (YE2.GT.YE1) THEN IF (YE1.LE.YN1 .AND. YN1.LT.YE2) THEN IPOIN = IPOIN + 1 IPALB(I,IP5+IE) = 1 GOTO 18 ENDIF ELSE IF (YE2.LT.YN1 .AND. YN1.LE.YE1) THEN IPOIN = IPOIN + 1 IPALB(I,IP5+IE) = 1 GOTO 18 ENDIF ENDIF ENDIF NUME1 = NUME2 NUME2 = NUME2 + IDIM ICOEF = ICOEF + 2 14 CONTINUE * end do 18 CONTINUE IP3 = IP3 + NOMBN1 ITIN = ITIN + IDIM 10 CONTINUE * end do * * Si le nombre de points ayant travers{s le profil fixe est {gale * au nombre de points du maillage mobile, alors on imprime une * erreur et on arrete le calcul. IF (IPOIN.EQ.NOMBN2) THEN IERRD = 1 RETURN ENDIF * * s'il y a eu choc, * il y a IPOIN qui ont travers{ le maillage fixe * IF (IPOIN.NE.0) THEN * * Il y a eu choc : * - recherche du premier point qui a travers{ le maillage fixe, d'o: * d{termination du point P, intersection maillage fixe-mobile * - recherche du dernier point qui a travers{ le maillage fixe, d'o: * d{termination du point PP, intersection maillage fixe-mobile * - @ partir des points P et PP, d{termination de la normale de choc * - calcul de l'aire de choc, @ partir du point P, des points du * maillage fixe, du point PP et des points du maillage mobile qui * n'ont pas travers{ le maillage fixe * - calcul de la force de choc. * ICOMP = 0 20 CONTINUE * On boucle sur les points du profil mobile LPETPP = .FALSE. DO 24 IE1 = 1,NOMBN1 IETAT = IPALB(I,IP5+IE1) * On regarde si le point IN2 a travers{ un {l{ment du profil fixe IF (IETAT.EQ.1) THEN ICOMP = ICOMP + 1 * Si on traite le premier point, on cherche les points en partant du * dernier DO 26 INN2 = NOMBN2,1,-1 IP6 = IP4 + NOMBN1*(INN2 - 1) DO 28 IEE1 = 1,NOMBN1 IETA2 = IPALB(I,IP6+IEE1) IF (IETA2.EQ.1) THEN ICOMP = ICOMP + 1 IEEE1 = IEE1 GOTO 26 ENDIF 28 CONTINUE * end do * Le point INN2 n'a pas travers{ le maillage fixe * Le point (INN2-1) et la point INN2 forment le segment de droite * pour d{finir le point d'intersection P avec l'{l{ment IEEE1 IF (INN2.EQ.NOMBN2) THEN IPOIN1 = NOMBN2 IPOIN2 = 1 IELEM1 = IE1 ELSE IPOIN1 = INN2 IPOIN2 = INN2 + 1 IELEM1 = IEEE1 ENDIF GOTO 30 26 CONTINUE * end do 30 CONTINUE ELSE IPOIN2 = IN2 IELEM1 = IE1 ENDIF * D{termination du point P * Le point IPOIN1 n'a pas travers{ le maillage fixe * Le point IPOIN2 a travers{ le maillage fixe par l'{l{ment IELEM1 & NLIAB,NPLB,I,NPOI,IND,ID1,IP1,XP,YP) * * Recherche du point PP, on regarde les points suivant IPOIN3 = IN2 IPOIN4 = 1 IELEM2 = IE1 GOTO 32 ENDIF IEEE1 = IE1 DO 34 INN2 = IN22,NOMBN2 IP7 = IP4 + NOMBN1*(INN2 - 1) DO 36 IEE1 = 1,NOMBN1 IETA2 = IPALB(I,IP7+IEE1) IF (IETA2.EQ.1) THEN ICOMP = ICOMP + 1 IEEE1 = IEE1 IF (INN2.EQ.NOMBN2) THEN IPOIN3 = INN2 IPOIN4 = 1 IELEM2 = IEE1 ENDIF GOTO 34 ENDIF 36 CONTINUE * end do * Le point INN2 n'a pas travers{ le maillage fixe * Le point (INN2-1) et la point INN2 forment le segment de droite * pour d{finir le point d'intersection P avec l'{l{ment IEEE1 IPOIN3 = INN2 - 1 IPOIN4 = INN2 IELEM2 = IEEE1 GOTO 32 34 CONTINUE * end do 32 CONTINUE * D{termination du point PP * Le point IPOIN3 a travers{ le maillage fixe par l'{l{ment IELEM2 * Le point IPOIN4 n'a pas travers{ le maillage fixe & NLIAB,NPLB,I,NPOI,IND,ID1,IP1,XPP,YPP) LPETPP = .TRUE. GOTO 40 ENDIF 24 CONTINUE * end do 40 CONTINUE * IF ( LPETPP ) THEN * On a d{termin{ les points P et PP, calcul de la normale XNORM1 = ( XP + XPP ) * 0.5D0 YNORM1 = ( YP + YPP ) * 0.5D0 XXX = XP - XPP YYY = YP - YPP IPT3 = ID7 + IDIM*(IPOIN3-1) XN4 = ZERO YN4 = ZERO DO 42 ID = 1,IDIM XXX = XPALB(I,IPT3+ID) + XPTB(NPOI,1,ID) & - XPALB(I,ID2+ID) XN4 = XN4 + ( XXX * XPALB(I,ID3+ID) ) YN4 = YN4 + ( XXX * XPALB(I,ID4+ID) ) 42 CONTINUE * END DO IF (ABS(YYY).LT.PRECIS) THEN YNN = YN4 - YNORM1 XNORM = ZERO YNORM = YNN / ABS(YNN) ELSE IF (ABS(XXX).LT.PRECIS) THEN XNN = XN4 - XNORM1 XNORM = XNN / ABS(XNN) YNORM = ZERO ELSE * le premier vecteur est P-PP * la normale de choc sera le produit vectoriel P_PP, N XPPP = XPP - XP YPPP = YPP - YP PS = SQRT( XPPP*XPPP + YPPP*YPPP ) XNORM = YPPP * XPALB(I,ID5+3) / PS YNORM = -XPPP * XPALB(I,ID5+3) / PS ENDIF * Calcul de l'aire & XPALB,IPALB,XPTB,NLIAB,NPLB,I,NPOI,ID1,IP1,IND,SOMAIR) AIRE = XSECT - SOMAIR * Calcul de la force de choc * Liaison conditionnelle IF (iannul.EQ.0) THEN FN = -XRAID * ( AIRE ** XEXPO ) ELSE FN = 0 ENDIF SOMFN = SOMFN + FN * On revient dans le repere global XFOR1 = FN * XNORM XFOR2 = FN * YNORM DO 38 ID = 1,IDIM XXX = XFOR1*XPALB(I,ID3+ID) + XFOR2*XPALB(I,ID4+ID) FTOTB(NPOI,ID) = FTOTB(NPOI,ID) + XXX 38 CONTINUE * end do IN2 = INN2 ENDIF IF (ICOMP.EQ.IPOIN) GOTO 22 GOTO 20 22 CONTINUE ENDIF DO 100 ID = 1,IDIM XVALB(I,IND,3+ID) = XPTB(NPOI,1,ID) 100 CONTINUE * end do XVALB(I,IND,1) = SOMFN * * --- choc ........... * * ELSE IF (ITYP.EQ. ) THEN * ....... * ....... * ENDIF * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales