Télécharger floquet.procedur

Retour à la liste

Numérotation des lignes :

  1. * FLOQUET PROCEDUR BP208322 16/09/01 21:15:03 9010
  2. *
  3. *=======================================================
  4. *
  5. * FLOQUET
  6. * ANALyse de la stabilite : calcul des exposants de Floquet
  7. * (= valeurs propres du determinant de Hill)
  8. * appelé par CONTINU
  9. * CREATION : BP 30/07/2015 (recopie des travaux de these de Lihan Xie)
  10. *
  11. *=======================================================
  12. *
  13. DEBP FLOQUET TAB1;
  14.  
  15. * MESS '~~~~~ CALCUL DES EXPOSANTS DE FLOQUET ~~~~~';
  16.  
  17.  
  18. nhbm = TAB1 . 'N_HARMONIQUE';
  19. WTAB = TAB1 . 'WTABLE';
  20. SI (EXIS WTAB 'TIME0'); TIME0 = WTAB . 'TIME0'; FINSI;
  21. * sinon TIME0 est passsé par transitivité depuis continu !!!
  22. wHz0 = IPOL TAB1 . 'FREQUENCE' TIME0;
  23.  
  24.  
  25. * RECUPERATION DES MATRICES DEJA CONSTRUITES ***************************
  26.  
  27. * KTOT = (K + KNL) + (wHz0 * ATOT) ET (wHz0**2 * MTOT);
  28. KTOT = WTAB . 'RAIDEUR' ;
  29. ATOT = TAB1 . 'AMORTISSEMENT_HBM' ;
  30. MTOT = TAB1 . 'MASSE_HBM';
  31. ATOT1 = TAB1 . 'AMORTISSEMENT_HBM_1' ;
  32. MTOT1 = TAB1 . 'MASSE_HBM_1';
  33. MTOT2 = TAB1 . 'MASSE_HBM_2';
  34.  
  35. * * matrices specifiques machines tournantes
  36. * OMEG0 = (2.*PI) * wHz0;
  37. * GTOT = OMEG0 * (TAB1 . 'CORIOLIS_HBM');
  38. * KCTOT = OMEG0**2 * (TAB1 . 'CENTRIFUGE_HBM');
  39. * GTOT1 = OMEG0 * (TAB1 . 'CORIOLIS_HBM_1');
  40.  
  41.  
  42. * CONSTRUCTION DE : *****************************
  43.  
  44. * - DELTA0
  45. DELTA0 = KTOT ;
  46.  
  47. * - DELTA1
  48. DELTA1 = ATOT1 ET (wHz0 * MTOT1);
  49.  
  50. * - DELTA2
  51. DELTA2 = MTOT2;
  52.  
  53. DELTA0 = CHAN DELTA0 'TYPE' 'RIGIDITE';
  54. DELTA1 = CHAN DELTA1 'TYPE' 'AMORTISS';
  55. DELTA2 = CHAN DELTA2 'TYPE' 'MASSE';
  56.  
  57.  
  58.  
  59. * CALCUL DES VALEURS PROPRES *******************************************
  60.  
  61. *bp, 2016-06-13 : on pourrait ne sortir que les 2 NDDL premieres v.p.
  62. BAS_J = VIBC DELTA2 DELTA0 DELTA1 ;
  63. MBAS_J = BAS_J . 'MODES';
  64. nmodC = (DIME MBAS_J) - 2;
  65.  
  66.  
  67. * ON RECUPERE LES VALEURS PROPRES DANS 2 LISTREELS *********************
  68. * + LES DEFORMEE MODALES (normees) DANS 2 LISTCHPO
  69.  
  70. * l = lR + i lI = 2*pi * i (wR + i wI)
  71. j = 0;
  72. lrprog = prog;
  73. liprog = prog;
  74. sq_R = suit;
  75. sq_I = suit;
  76. tcomp = TAB1 . 'COMPOSANTES';
  77. mophys = tcomp . 'DEPLACEMENT';
  78. mocomp = tcomp . 'DEPLACEMENT_HBM';
  79. REPE BMODC nmodC; j = j + 1;
  80. lrprog = lrprog et (-2.*pi * MBAS_J . j . 'FREQUENCE_IMAGINAIRE');
  81. liprog = liprog et ( 2.*pi * MBAS_J . j . 'FREQUENCE_REELLE');
  82. q_R = MBAS_J . j . 'DEFORMEE_MODALE_REELLE';
  83. q_I = MBAS_J . j . 'DEFORMEE_MODALE_IMAGINAIRE';
  84. xq2 = (XTX q_R) + (XTX q_I);
  85. q_R = q_R * (1./(xq2**0.5));
  86. q_I = q_I * (1./(xq2**0.5));
  87. sq_R = sq_R et q_R;
  88. sq_I = sq_I et q_I;
  89. FIN BMODC ;
  90.  
  91. * Calcul du cout = distance ente 2 modes complexes + distance entre lambda
  92. FLORDO = FAUX;
  93.  
  94. * * Calcul de la distance ente 2 modes complexes
  95. * SI (EXIS WTAB 'PHI_R');
  96. * Coutphi = prog;
  97. * REPE BPHI nmodC;
  98. * p_R = EXTR WTAB . 'PHI_R' &BPHI;
  99. * p_I = EXTR WTAB . 'PHI_I' &BPHI;
  100. * REPE BPHJ nmodC;
  101. * q_R = EXTR sq_R &BPHJ;
  102. * q_I = EXTR sq_I &BPHJ;
  103. * xpq_R = (XTY p_R q_R mocomp mocomp)
  104. * + (XTY p_I q_I mocomp mocomp);
  105. * xpq_I = (XTY p_R q_I mocomp mocomp)
  106. * - (XTY p_I q_R mocomp mocomp);
  107. * * mess 'i,j='&BPHI &BPHJ '--> x='xpq_R xpq_I;
  108. * xpq2 = ((xpq_R**2) + (xpq_I**2))**0.5;
  109. * Coutphi = Coutphi et xpq2;
  110. * FIN BPHJ;
  111. * FIN BPHI;
  112. * Coutphi = 1. - Coutphi;
  113. * FLORDO=VRAI;
  114. * * * on ordonne pour minimiser le cout
  115. * * lpermu = lect 1 pas 1 nmodC;
  116. * * Xcout lrprog liprog lpermu
  117. * * = ORDO 'COUT' Coutphi lrprog liprog lpermu;
  118. * SINON;
  119. * Coutphi=0.;
  120. * FINSI;
  121.  
  122. * on cree la distance Dij = |l_i - l_j|^2 / lref^2
  123. SI (EXIS WTAB 'LAMBDA_R');
  124. lrp = WTAB . 'LAMBDA_R';
  125. lip = WTAB . 'LAMBDA_I';
  126. * si on peut (pas de point limite),
  127. * on fait une extrapolation prediction lineaire
  128. si (exis WTAB 'LAMBDA_R-1');
  129. DTM1 = WTAB . 'TIME0-1' - WTAB . 'TIME0-2' ;
  130. DTM0 = WTAB . 'TIME0' - WTAB . 'TIME0-1' ;
  131. si (((ABS DTM1) > 1.E-6) et ((DTM1*DTM0) > 0.));
  132. DLR1 = lrp - WTAB . 'LAMBDA_R-1';
  133. DLI1 = lip - WTAB . 'LAMBDA_I-1';
  134. lrp = lrp + (DLR1 * (DTM0/DTM1));
  135. lip = lip + (DLI1 * (DTM0/DTM1));
  136. finsi;
  137. finsi;
  138. * lref2 = (somm ((lrprog**2) + (liprog**2))) / nmodC;
  139. Dprog = prog;
  140. * --> boucle sur les lignes
  141. repe b_i nmodC;
  142. xr2 = (lrprog - (extr lrp &b_i))**2;
  143. xi2 = (liprog - (extr lip &b_i))**2;
  144. lref2 = (lrprog**2) + (liprog**2)
  145. + ((extr lrp &b_i)**2) + ((extr lip &b_i)**2);
  146. Dprog = Dprog et ((xr2 + xi2) / lref2);
  147. fin b_i;
  148. FLORDO=VRAI;
  149. * * on ordonne pour minimiser le cout
  150. * Xcout lrprog liprog = ORDO 'COUT' Dprog lrprog liprog;
  151. SINON;
  152. Dprog = 0.;
  153. FINSI;
  154.  
  155. * Coutot = Coutphi + Dprog;
  156. Coutot = Dprog;
  157.  
  158. SI FLORDO;
  159. * on ordonne pour minimiser le cout
  160. lpermu = lect 1 pas 1 nmodC;
  161. Xcout lrprog liprog lpermu
  162. = ORDO 'COUT' Coutot lrprog liprog lpermu;
  163. SINON;
  164. * on ordonne selon reel croissant et |imag| croissant (pour centrer)
  165. lrprog2 liprog2 = ORDO 'DECROISSANT' lrprog liprog;
  166. toto liprog lrprog = ORDO 'CROISSANT' (ABS liprog2) liprog2 lrprog2;
  167. * * imedian pour methode de LAZARUS & THOMAS
  168. * lrprog2 liprog2 imedian2 = ORDO 'DECROISSANT' lrprog liprog imedian;
  169. * toto liprog lrprog = ORDO 'CROISSANT' imedian2 liprog2 lrprog2;
  170. FINSI;
  171. * * on n'oublie pas d'ordonner les listchpo
  172. * sq_R0 = COPI sq_R;
  173. * sq_I0 = COPI sq_I;
  174. * REPE BPHI nmodC;
  175. * REMP sq_R (EXTR lpermu &BPHI) (EXTR sq_R0 &BPHI);
  176. * REMP sq_I (EXTR lpermu &BPHI) (EXTR sq_I0 &BPHI);
  177. * FIN BPHI;
  178.  
  179. * on stocke pour prochain pas
  180. SI (EXIS WTAB 'LAMBDA_R');
  181. WTAB . 'LAMBDA_R-1' = WTAB . 'LAMBDA_R';
  182. WTAB . 'LAMBDA_I-1' = WTAB . 'LAMBDA_I';
  183. WTAB . 'TIME0-2' = WTAB . 'TIME0-1';
  184. FINSI;
  185. WTAB . 'LAMBDA_R' = lrprog;
  186. WTAB . 'LAMBDA_I' = liprog;
  187. WTAB . 'TIME0-1' = TIME0;
  188. * WTAB . 'PHI_R' = sq_R;
  189. * WTAB . 'PHI_I' = sq_I;
  190.  
  191.  
  192.  
  193. * on ne conserve ainsi que les (2*nddls) valeurs centrées autour de 0
  194. si (faux);
  195. NDDL = (nmodC / 2) / (2*nhbm + 1);
  196. lprem = lect 1 pas 1 (2 * NDDL);
  197. liprog = EXTR liprog lprem;
  198. lrprog = EXTR lrprog lprem;
  199. finsi;
  200.  
  201.  
  202. FINP lrprog liprog;
  203.  
  204.  

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