Télécharger ordovibc.procedur

Retour à la liste

Numérotation des lignes :

  1. * ORDOVIBC PROCEDUR BP208322 21/09/06 21:15:06 11096
  2. *
  3. * ======================== DEBUT DOCUMENTATION ========================
  4. * .. _procedur_ordovibc:
  5. *
  6. * ordovibc
  7. * --------
  8. *
  9. * **Description**
  10. *
  11. * Crée des listreels des frequences réelles {wr} et imaginaires {wi}
  12. * d'une base modale complexe TbasC2 obtenue avec VIBC
  13. * et ordonne les modes complexes :
  14. *
  15. * - selon {wr} croissant si TbasC1 n'est pas fourni
  16. * - selon l'ordre des modes de TbasC1 de manière à minimiser
  17. * les produits scalaires complexes <\psi1,\psi2> + <w1,w2>
  18. *
  19. * **Appel**
  20. *
  21. * .. code-block:: none
  22. *
  23. * ORDOVIBC TbasC2 (TbasC1);
  24.  
  25. * **Arguments**
  26. *
  27. * Détail des indices de sortie de la table TbasC2 : ::
  28. *
  29. * TbasC2
  30. * . 'MODES' = table des modes |non ordonnée (E)
  31. * |ordonnée (S)
  32. * . 'LISTE_FREQUENCES_REELLES' = listreel des {wR} ordonnées (S)
  33. * . 'LISTE_FREQUENCES_IMAGINAIRES' = listreel des {wI} ordonnées (S)
  34. *
  35. * **Auteur**
  36. *
  37. * Benoit Prabel, 2021
  38. *
  39. ************************************************************************
  40.  
  41.  
  42. DEBP ORDOVIBC TbasC2*'TABLE' TbasC1/'TABLE';
  43.  
  44.  
  45. ************************************************************************
  46. * RECUPERATION DES INPUT
  47. ************************************************************************
  48.  
  49. * BASE A ORDONNER
  50. * ---------------
  51. TmodC2 = TbasC2 . 'MODES';
  52. NmodC2 = DIME TmodC2;
  53. * Extraction des frequences
  54. prfR2 = PROG ;
  55. prfI2 = PROG ;
  56. REPE BmodC2 NmodC2 ;
  57. SI (NON (EXIS TmodC2 &BmodC2));
  58. NmodC2 = &BmodC2 - 1;
  59. TbasC2 . 'NOMBRE_MODES' = NmodC2;
  60. QUIT BmodC2;
  61. FINSI;
  62. prfR2 = prfR2 ET (TmodC2 . &BmodC2 .'FREQUENCE_REELLE') ;
  63. prfI2 = prfI2 ET (TmodC2 . &BmodC2 .'FREQUENCE_IMAGINAIRE') ;
  64. FIN BmodC2 ;
  65. * liste
  66. numodC2 = LECT 1 'PAS' 1 NmodC2;
  67.  
  68. * BASE DE REFERENCE (OPTIONNELLE)
  69. * -----------------
  70. IF_C1 = EXIS TbasC1;
  71. SI (IF_C1);
  72. TmodC1 = TbasC1 . 'MODES';
  73. NmodC1 = TbasC1 . 'NOMBRE_MODES';
  74. prfR1 = TbasC1 . 'LISTE_FREQUENCES_REELLES' ;
  75. prfI1 = TbasC1 . 'LISTE_FREQUENCES_IMAGINAIRES';
  76. SI (NmodC1 NEG NmodC2); ERRE 'Nombre de modes incorrects'; FINSI;
  77. mocomp = MOTS 'ALFA';
  78. FINSI;
  79.  
  80.  
  81. ************************************************************************
  82. * TRI
  83. ************************************************************************
  84.  
  85. * TRI SELON wR CROISSANT
  86. * ----------------------
  87. SI (NON IF_C1);
  88.  
  89. prfR2 prfI2 numodC2 = ORDO prfR2 prfI2 numodC2;
  90.  
  91.  
  92. * TRI SELON TbasC1
  93. * ----------------
  94. SINON;
  95.  
  96. prCout = prog;
  97. * boucle sur les modes du pas precedent --------------------
  98. REPE B1 NmodC1;
  99. DEFR1 = TmodC1 . &B1 . 'DEFORMEE_MODALE_REELLE';
  100. DEFI1 = TmodC1 . &B1 . 'DEFORMEE_MODALE_IMAGINAIRE';
  101. frqR1 = TmodC1 . &B1 . 'FREQUENCE_REELLE';
  102. frqI1 = TmodC1 . &B1 . 'FREQUENCE_IMAGINAIRE';
  103. * boucle sur les modes du pas actuel ----------------
  104. REPE B2 NmodC2;
  105. DEFR2 = TmodC2 . &B2 . 'DEFORMEE_MODALE_REELLE';
  106. DEFI2 = TmodC2 . &B2 . 'DEFORMEE_MODALE_IMAGINAIRE';
  107. frqR2 = TmodC2 . &B2 . 'FREQUENCE_REELLE';
  108. frqI2 = TmodC2 . &B2 . 'FREQUENCE_IMAGINAIRE';
  109. * ecart en frequence^2
  110. dfrq12 = ((frqR2 - frqR1)**2) + ((frqI2 - frqI1)**2);
  111. ref12 = ((frqR2**2) + (frqI2**2)) + ((frqR1**2) + (frqI1**2));
  112. * produit scalaire des vecteurs propres
  113. cos12 = (XTY DEFR2 DEFR1 mocomp mocomp)
  114. + (XTY DEFI2 DEFI1 mocomp mocomp);
  115. sin12 = (XTY DEFI2 DEFR1 mocomp mocomp)
  116. - (XTY DEFR2 DEFI1 mocomp mocomp);
  117. modul12 = (cos12**2) + (sin12**2);
  118. xCout12 = (abs (1. - modul12)) + (0.5*dfrq12 / ref12);
  119. prCout = prCout et xCout12;
  120. FIN B2;
  121. * fin de boucle sur les modes du pas actuel ---------
  122. FIN B1;
  123. * fin de boucle sur les modes du pas precedent -------------
  124.  
  125. * recherche dela permutation qui minimise le cout (cad les distances)
  126. xCoutTot numodC2 prfR2 prfI2
  127. = ORDO numodC2 prfR2 prfI2 'COUT' prCout ;
  128.  
  129.  
  130. FINSI;
  131.  
  132.  
  133. ************************************************************************
  134. * ECRITURE DES RESULTATS
  135. ************************************************************************
  136.  
  137. * PERMUTATION
  138. * -----------
  139. TmodC2o = COPI TmodC2;
  140. REPE BmodC2 NmodC2 ;
  141. TmodC2o . &BmodC2 = TmodC2 . (EXTR numodC2 &BmodC2);
  142. FIN BmodC2 ;
  143.  
  144. * STOCKAGE
  145. * --------
  146. TbasC2 . 'MODES' = TmodC2o;
  147. TbasC2 . 'LISTE_FREQUENCES_REELLES' = prfR2 ;
  148. TbasC2 . 'LISTE_FREQUENCES_IMAGINAIRES' = prfI2 ;
  149.  
  150.  
  151. FINP;
  152.  
  153.  
  154.  
  155.  

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