Post-traitements des modes propres ================================== .. _RefHeading__2622_1246081310: Visualisation ------------- Les déformées modales calculées par l'une des méthodes décrites précédemment peuvent être exportées dans différents formats afin d'être visualisées dans des plates-formes de calcul mécanique: format MED pour la plate-forme Salomé, format UNV, … L'utilisateur peut ainsi caractériser graphiquement les modes calculés: mode de flexion? mode dans un plan donné? mode local? etc. **Exemple:** impression au format MED. .. code-block:: text modes = CALC_MODES (...) # calcul modal .. code-block:: text IMPR_RESU( FORMAT = 'MED', RESU=_F( RESULTAT = modes ) ) On peut alors ouvrir le fichier créé dans la plateforme Salomé pour visualiser la déformée modale, l'animer, … .. image:: images/10000000000001810000028154051956C36A19F5.png :width: 2.3957in :height: 3.989in .. _RefImage_10000000000001810000028154051956C36A19F5.png: **Figure** 5.1-a **: Visualisation d'un mode dans Salomé (module ParaViS): ici le mode de flexion d'ordre 2 d'une poutre.** Normalisation des modes ----------------------- Les déformées modales sont définies à un facteur multiplicatif près (cf formulation du problème modal au paragraphe :ref:`1 ` ). Par défaut, les modes calculés par l'opérateur CALC_MODES sont normés de manière à ce que la plus grande composante physique soit égale à 1. L'utilisateur peut modifier cette normalisation, soit directement dans l'opérateur CALC_MODES grâce au mot-clé facteur NORM_MODE, soit plus tard grâce à l'opérateur NORM_MODE [:external:ref:`U4.52.11 `]. Dans les deux cas, le code calcule également ou met à jour les paramètres modaux suivants, qui dépendent de la normalisation choisie: FACT_PARTICI_D* , MASS_GENE et RIGI_GENE. Il enrichit également la structure de données avec les paramètres MASS_EFFE_UN_D* et INER_EFFE_UN_D* (qui sont eux indépendants de la normalisation). Ces paramètres (définis au paragraphe :ref:`4 ` ) peuvent être utiles notamment pour éliminer d'une base modale certains modes non désirés (cf paragraphe :ref:`5.3 ` ). **Exemple:** norme par rapport à la masse. 1ère possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), NORM_MODE =_F( NORME = 'MASS_GENE' ) ) 2nde possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), ) .. code-block:: text modes = NORM_MODE( reuse = modes, MODE = modes, NORME = 'MASS_GENE' ) .. _RefNumPara__1931_654154550: Filtrage des modes selon un critère ----------------------------------- Dans la perspective d'un calcul de réponse transitoire par exemple, l'utilisateur peut choisir de conserver dans sa base modale de projection, seulement certains modes jugés importants dans la réponse dynamique ou remplissant un critère donné. Cela peut être fait soit directement dans CALC_MODES avec les mot-clés facteurs FILTRE_MODE et IMPRESSION, soit grâce à l'opérateur EXTR_MODE [:external:ref:`U4.52.12 `]. On peut ainsi filtrer les modes selon différentes options: à partir de leur numéro dans le spectre global, de leur masse généralisée, etc. **Exemple 1:** élimination des modes dont la masse effective unitaire est inférieure à 5%, et affichage dans le fichier RESULTAT du cumul des masses effectives unitaires des modes conservés. 1ère possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), NORM_MODE =_F( NORME = 'MASS_GENE' ), FILTRE_MODE =_F( CRIT_EXTR = 'MASS_EFFE_UN', SEUIL = 0.05 ), IMPRESSION =_F( CRIT_EXTR = 'MASS_EFFE_UN', CUMUL = 'OUI'), ) 2nde possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), NORM_MODE =_F( NORME = 'MASS_GENE' ), ) .. code-block:: text modes_f = EXTR_MODE( FILTRE_MODE =_F( MODE = modes, CRIT_EXTR = 'MASS_EFFE_UN', SEUIL = 0.05 ), IMPRESSION =_F( CRIT_EXTR = 'MASS_EFFE_UN', CUMUL = 'OUI'), ); **Exemple 2:** élimination des modes dont l’inertie effective unitaire en rotation est inférieure à 5%, et affichage dans le fichier RESULTAT du cumul des masses effectives unitaires des modes conservés. 1ère possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), NORM_MODE =_F( NORME = 'MASS_GENE' ), FILTRE_MODE =_F( CRIT_EXTR = 'INER_EFFE_UN', SEUIL = 0.05 ), IMPRESSION =_F( CRIT_EXTR = 'INER_EFFE_UN', CUMUL = 'OUI'), ) 2nde possibilité: .. code-block:: text modes = CALC_MODES( MATR_RIGI = matr_k, MATR_MASS = matr_m, OPTION = 'BANDE', CALC_FREQ =_F( FREQ = (20., 300.) ), NORM_MODE =_F( NORME = 'MASS_GENE' ), ) .. code-block:: text modes_f = EXTR_MODE( FILTRE_MODE =_F( MODE = modes, CRIT_EXTR = 'INER_EFFE_UN', SEUIL = 0.05 ), IMPRESSION =_F( CRIT_EXTR = 'INER_EFFE_UN', CUMUL = 'OUI'), ); **Remarque:** * *L'opérateur* *EXTR_MODE permet de filtrer avec un seuil appliqué sur une ou des directions données (mot-clé* *SEUIL_X par exemple pour la direction DX), ce qui n'est pas possible directement dans* *CALC_MODES actuellement.* Filtrage des modes selon un critère "local" ------------------------------------------- Il est parfois nécessaire de pouvoir filtrer les modes par rapport à un critère calculé sur la base d'une partie du modèle seulement. Pour cela on dispose de l'opérateur POST_MODE. **Exemple :** sélection de modes sur la base d'un critère de masse effective unitaire locale On calcule (de façon approchée) les critères de masses et inerties effectives, unitaires et non unitaires sur la partie du modèle souhaitée : .. code-block:: text table_crit = POST_MODE( MODE=modes, GROUP_MA=("BATIMENT2",), CARA_ELEM=caraelem, MATR_MASS=masse, ) On modifie la table créée par filtrage du critère choisi, ici, masses effectives unitaires locales selon X supérieures à 5% : .. code-block:: text table_crit = CALC_TABLE(reuse=table_crit, TABLE=table_crit, ACTION=_F(OPERATION="FILTRE", NOM_PARA="MASS_EFFE_UN_DX", CRIT_COMP="GT", VALE=0.05), ) On peut ensuite récupérer la liste des modes sélectionnés et construire un objet **mode_meca** ne contenant que ces modes. Récupération de la liste des numéros de modes sélectionnés : .. code-block:: text liste_modes = table_crit.EXTR_TABLE().values()["NUME_MODE"] Extraction des modes sélectionnés : .. code-block:: text EXTR = EXTR_MODE(FILTRE_MODE=_F(MODE=modes, NUME_MODE=liste_modes))