Télécharger hbmhill.eso

Retour à la liste

Numérotation des lignes :

hbmhill
  1. C HBMHILL SOURCE BP208322 20/09/18 21:16:44 10718
  2.  
  3. SUBROUTINE HBMHILL(NT,NHBM,NDDL,OMEG,Q1,RX,XM,XASM,dv0,dv1,ZINIT,
  4. & LHILL,ZSTABN,CPOSRE,FLAG,ZSTAB)
  5.  
  6. *=======================================================================
  7. * Calcul de stabilite
  8. *=======================================================================
  9. * On utilise la methode de Hill (domaine frequentiel) pour une solution
  10. * periodique (Q1,OMEG) des equations d'equilibre dynamique R(X,w) = 0.
  11. *
  12. * (Rx + µ*D1 + µ**2*D2)*Phi = 0
  13. * µ : valeurs propres
  14. * Phi: vecteurs propres
  15. * ==> 2*n*(2*H+1) paires (µ,Phi) pour H harmoniques et n ddl, dont 2*n
  16. * correspondent aux exposants de Floquet.
  17. * Dans cette sous-routine, on utilise une procedure simplifiee pour
  18. * la caracterisation des bifurcations.
  19. * -----------
  20. * Entrees
  21. * -----------
  22. * OMEG : frequence du cycle
  23. * NT,NHBM,NDDL : taille du systeme, # d'harmoniques, # de DDL
  24. * XM,XASM : matrices de masse, amortissement
  25. * RX : matrice Jacobienne
  26. * dv0,dv1 : variations dans le parametre de continuation
  27. * aux pas precedent et actuel, respectivement
  28. * CPOSRE : indicateur de bifurcation au pas precedent
  29. * ZSTAB : stabilite du pas precedent (0 si initialisation)
  30. * -----------
  31. * Sorties
  32. * -----------
  33. * CPOSRE : indicateurs de bifurcation au pas actuel
  34. * FLAG : caracterise le type de bifurcation
  35. * ZSTABN=ZSTAB : stabilite de la solution (Q1,OMEG)
  36. *=======================================================================
  37.  
  38. IMPLICIT INTEGER(I-N)
  39. IMPLICIT REAL*8(A-H,O-Z)
  40.  
  41. INTEGER NT,NHBM,NDDL,INFO,INDEIG(2*NT),INDM,I,J,CPOSRE,CPOSREN
  42. REAL*8 OMEG,RX(NT,NT),XM(NDDL,1),XASM(NDDL,1)
  43. REAL*8 Rw(NT),MATJ(NT+1,NT+1),t0(NT+1),Q1(NT)
  44. REAL*8 EXPIM(2*NT),EXPRE(2*NT)
  45. REAL*8 VR(2*NT,2*NT),VL(2*NT,2*NT),WORK(8*NT),BB
  46. REAL*8 DEL1(NT,NT),DEL2(NT),Mi,Ci,JJ(2*NT,2*NT)
  47. REAL*8 LHILL(2,2*NDDL)
  48. cbp REAL*8 XPI,mumx(2*NDDL),ZR(2*NDDL),ZI(2*NDDL),dv0,dv1
  49. REAL*8 mumx(2*NDDL),ZIINDM,dv0,dv1
  50. CHARACTER*8 FLAG
  51. LOGICAL ZSTABN,ZSTAB,ZINIT
  52.  
  53. REAL*8 ZERO,ONE,XTOL,DEUXPI
  54. PARAMETER (ZERO=0.D0,ONE=1.D0,XTOL=1.D-8,
  55. & DEUXPI=6.28318530717958648)
  56.  
  57.  
  58. *-----------------------------------------------------------------------
  59. * 1. Construction de la matrice de Hill
  60. DO I = 1,NT
  61. DO J = 1,NT
  62. DEL1(I,J)=ZERO
  63. ENDDO
  64. ENDDO
  65. * DEL2
  66. DO I=1,2*NHBM+1
  67. DO J=1,NDDL
  68. DEL2(NDDL*(I-1)+J) = ONE/XM(J,1)
  69. ENDDO
  70. ENDDO
  71. * DEL1
  72. DO I=1,NDDL
  73. DEL1(I,I) = XASM(I,1)
  74. ENDDO
  75. DO J = 2,2*NHBM,2
  76. DO I=1,NDDL
  77. Ci = XASM(I,1)
  78. Mi = XM(I,1)
  79. BB = OMEG*J*Mi
  80. DEL1(NDDL*(1+(J-2))+I,NDDL*(1+(J-2))+I) = Ci
  81. DEL1(NDDL*(1+(J-2))+I,NDDL*(1+(J-1))+I) = BB
  82. DEL1(NDDL*(1+(J-1))+I,NDDL*(1+(J-2))+I) = -BB
  83. DEL1(NDDL*(1+(J-1))+I,NDDL*(1+(J-1))+I) = Ci
  84. ENDDO
  85. ENDDO
  86.  
  87. *-----------------------------------------------------------------------
  88. * 2. Assemblage de JJ
  89. *
  90. * JJ = [DEL2\DEL1 DEL2\Rx]
  91. * [ -I 0 ]
  92. *
  93. DO I=1,NT
  94. DO J=1,NT
  95. * JJ_11 = DEL2\DEL1
  96. JJ(I,J) = -DEL1(I,J)*DEL2(J)
  97. * JJ_12 = DEL2\Rx
  98. JJ(I,NT+J) = -RX(I,J)*DEL2(J)
  99. * JJ_21 = [I]
  100. IF (I.EQ.J) THEN
  101. JJ(NT+I,J) = ONE
  102. ELSE
  103. JJ(NT+I,J) = ZERO
  104. ENDIF
  105. * JJ_22 = [0]
  106. JJ(NT+I,NT+J) = ZERO
  107. ENDDO
  108. ENDDO
  109.  
  110. *-----------------------------------------------------------------------
  111. * 3. Calcul des valeurs/vecteurs propres de JJ
  112. CALL DGEEV('N','V',2*NT,JJ,2*NT,EXPRE,EXPIM,VL,1,VR,2*NT,
  113. & WORK,8*NT,INFO)
  114.  
  115. *-----------------------------------------------------------------------
  116. * 4. Tri des valeurs propres
  117. CALL HBMORDO(2*NT,NDDL,OMEG,EXPIM,INDEIG)
  118.  
  119. *-----------------------------------------------------------------------
  120. * 5. Evaluation de stabilite
  121. * On recupere les exposants de Floquet
  122. ZSTABN=.TRUE.
  123. DO I=1,2*NDDL
  124. cbp : TRIVALS a permute les elements de EXPIM, mais pas EXPRE
  125. LHILL(1,I) = EXPRE(INDEIG(I))
  126. LHILL(2,I) = EXPIM(I)
  127. IF (LHILL(1,I).GT.ZERO) THEN
  128. ZSTABN=.FALSE.
  129. ENDIF
  130. * calcul des Multiplicateurs de Floquet --> deplace par bp
  131. ENDDO
  132.  
  133. *-----------------------------------------------------------------------
  134. * 6. Detection des bifurcations
  135. * On utilise comme indicateur le nombre d'exposants de Floquet dont la
  136. * partie reelle est positive.
  137.  
  138. * COMPTAGE -> CPOSREN=?
  139. CPOSREN = 0
  140. DO I = 1,2*NDDL
  141. c IF (LHILL(1,I).LT.ZERO)THEN
  142. IF (LHILL(1,I).GE.ZERO)THEN
  143. CPOSREN = CPOSREN+1
  144. ENDIF
  145. ENDDO
  146.  
  147. FLAG = 'S'
  148. IF (.NOT.ZINIT) THEN
  149. * WRITE(*,*) 'FTEST=',ABS(CPOSREN-CPOSRE)
  150.  
  151. * Bifurcations statiques:
  152. * un seul exposant traverse l'axe imaginaire
  153. IF (ABS(CPOSREN-CPOSRE).EQ.1) THEN
  154.  
  155. IF (dv0*dv1.LT.ZERO) THEN
  156. * Point Limite
  157. FLAG = 'L'
  158. ELSE
  159. * Branchement
  160. FLAG = 'B'
  161. ENDIF
  162.  
  163. * Bifurcations dynamiques:
  164. * une paire d'exposants traversent l'axe imaginaire
  165. ELSEIF (ABS(CPOSREN-CPOSRE).EQ.2) THEN
  166.  
  167. c * Multiplicateurs de Floquet
  168. c DO I=1,2*NDDL
  169. c cbp ZR(I) = EXP(DEUXPI*LHILL(1,I)/OMEG)*COS(DEUXPI*LHILL(2,I)/OMEG)
  170. c cbp ZI(I) = EXP(DEUXPI*LHILL(1,I)/OMEG)*SIN(DEUXPI*LHILL(2,I)/OMEG)
  171. c mumx(I) = EXP(2.D0*XPI*LHILL(1,I)/OMEG)
  172. c ENDDO
  173. c INDM = MAXLOC(mumx,2*NDDL)
  174. cbp: ci-dessus, remplace par (car EXP est une fonction croissante) :
  175. INDM=1
  176. XINDM=LHILL(1,INDM)
  177. DO I=1,2*NDDL
  178. IF(LHILL(1,I).GT.XINDM) THEN
  179. INDM=I
  180. XINDM=LHILL(1,I)
  181. ENDIF
  182. ENDDO
  183. cbp: calcul de INDM douteux si ce n'est pas la 1ere instabilite -> a verifier + tard
  184. ZIINDM = EXP(DEUXPI*LHILL(1,INDM)/OMEG)
  185. & * SIN(DEUXPI*LHILL(2,INDM)/OMEG)
  186. cbp IF (ABS(ZI(INDM)).LT.1.E-8) THEN
  187. IF (ABS(ZIINDM).LT.XTOL) THEN
  188. * Doublement de periode
  189. FLAG = 'P'
  190. ELSE
  191. * Neimark-Sacker (Hopf secondaire)
  192. FLAG = 'N'
  193. END IF
  194.  
  195. ELSE
  196. c cas non traite
  197. ENDIF
  198.  
  199. ENDIF
  200.  
  201. *-----------------------------------------------------------------------
  202. * 7. enregistrement pour le pas suivant
  203. CPOSRE = CPOSREN
  204. ZSTAB = ZSTABN
  205.  
  206. END
  207.  
  208.  
  209.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales