u4.34.04 Opérateur DEFI_LIST_FREQ#
Syntaxe#
Détail de la syntaxe
DEFI_LIST_FREQ(
◇ / VALE = float,
/ DEBUT = float,
◇ / INTERVALLE = _F(
◆ JUSQU_A = float,
◆ / NOMBRE = int,
/ PAS = float,
),
◇ RAFFINEMENT = _F(
◆ LIST_RAFFINE = float,
◇ NB_POINTS = int (défaut: 5),
◇ PAS_MINI = float (défaut: 0.001),
◇ CRITERE = / "RELATIF" (par défaut),
/ "ABSOLU",
/ "LARGEUR_3DB",
# Si: (equal_to("CRITERE", 'RELATIF') or equal_to("CRITERE", 'ABSOLU'))
◇ DISPERSION = float (défaut: 0.01),
# Si: (equal_to("CRITERE", 'LARGEUR_3DB'))
◆ / AMOR_REDUIT = float,
/ LIST_AMOR = listr8,
),
◇ EQUI_MODES = _F(
◇ TYPE_SAISIE = / "LISTE" (par défaut),
/ "MATR_ASSE",
◆ FREQ_MIN = float,
◆ FREQ_MAX = float,
# Si: (equal_to("TYPE_SAISIE", 'LISTE'))
◇ LIST_FREQ = listr8,
# Si: (equal_to("TYPE_SAISIE", 'MATR_ASSE'))
◇ MATR_RIGI = matr_asse_depl_r,
◇ MATR_MASS = matr_asse_depl_r,
◇ NB_MODES = int (défaut: 40),
◇ NB_POINTS_INIT = int (défaut: 10),
◇ NB_POINTS_SUPP = int (défaut: 1),
◇ ITER_MAXI = int (défaut: 20),
◇ TOLERANCE = float (défaut: 0.01),
),
◇ INFO = / 1 (par défaut),
/ 2,
◇ TITRE = text,
)
◆ : obligatoire
◇ : optionnel
⟐ : présent par défaut
& : ensemble
/ : un seul parmi
| : plusieurs choix possibles
Opérandes#
Opérandes VALE, DEBUT, INTERVALLE, JUSQU_A, TITRE, INFO#
Ces mots-clés sont directement utilisés par DEFI_LIST_REEL pour définir la liste initiale des fréquences.
- Remarque
Toutes les valeurs demandées dans la liste de base sont automatiquement dans la liste finale en sortie de DEFI_LIST_FREQ.
Mot clé RAFFINEMENT#
Opérande LIST_RAFFINE#
Liste des fréquences autour desquelles on souhaite raffiner.
Cette liste peut être construite à partir d’une liste Python.
Cet mot-clé est particulièrement intéressant dans le cas d’une analyse harmonique d’une structure (opérateur DYNA_VIBRA), car il permettra de calculer la réponse harmonique autour des fréquences propres de la structure et donc d’en récupérer les extrema locaux. Il est possible de récupérer directement les fréquences propres dans une structure de données de type mode_XXX issue d’un calcul modal réalisé par exemple avec la commande CALC_MODES. Il suffit pour cela d’utiliser la méthode LIST_VARI_ACCES().
Exemple:
modes = CALC_MODES(
MATR_RIGI=matassr,
MATR_MASS=matassm,
OPTION="AJUSTE",
CALC_FREQ=_F(FREQ=(5.0, 10.0, 15.0, 20.0, 24.0, 27.0)),
)
list_freq = modes.LIST_VARI_ACCES()['FREQ']
list_freq est ainsi une liste python contenant la liste des fréquences propres présentes dans le résultat modes.
Opérande PAS_MINI#
Si l’écart entre deux valeurs est inférieur à PAS_MINI alors l’une d’elles est supprimée. Avec cette règle, la valeur supprimée peut être une valeur présente dans la liste initiale (VALE) ou la liste des points de raffinement (LIST_RAFFINE).
Opérande DISPERSION#
DISPERSION est la largeur de l’intervalle entourant chaque fréquence de LIST_RAFFINE où on veut raffiner.
Opérande CRITERE#
La largeur de l’intervalle \(df\) entourant chaque fréquence \(freq_{i}\) de LIST_RAFFINE où on veut raffiner est déterminer à partir de la valeur de DISPERSION et vaut:
Si CRITERE=”RELATIF”:
\(df = disp . freq_{i}\)
Si CRITERE=”ABSOLU”:
\(df = disp\)
Si CRITERE=”LARGEUR_3DB”, on fournit la liste des valeurs d’amortissement avec les mots-clés AMOR_REDUIT ou LIST_AMOR. Il s’agit de la liste des amortissements réduits (\(\eta_{1}\), \(\eta_{2}\), …, \(\eta_{n}\)) correspondants à chaque mode propre du système sous forme de liste de réels.
Nom du concept de type listr8 contenant la liste des amortissements réduits (\(\eta_{1}\), \(\eta_{2}\), …, \(\eta_{n}\)).
- Remarque
Si le nombre d’amortissements réduits donnés est inférieur au nombre de vecteurs de base utilisés dans la base modale, les amortissements des vecteurs supplémentaires sont pris égaux au dernier amortissement de la liste.
Si l’amortissement \(\eta_{i}\) est non nul, la fréquence \(freq_{i}\) utilisée pour calculer la longueur de l’intervalle \(df\) est la fréquence \(freq_{i}\) de LIST_RAFFINE décalée à la fréquence de résonance d’un système forcé, soit \(freq_{i} = freq_{i} \sqrt{(1-2{\eta}_{i}^{2})}\).
La longueur de l’intervalle \(df\) entourant chaque fréquence \(freq_{i}\) où on veut raffiner vaut:
Si \(\eta_{i} \ne 0\) :
\(df = 2{\eta}_{i} freq_{i}\)
Si \(\eta_{i} \ne 0\) :
\(df = 0.01 freq_{i}\)
Opérande NB_POINTS#
NB_POINTS est le nombre de points que l’on veut ajouter autour des fréquences de la liste LIST_RAFFINE.
Les points ajoutés sont uniformément répartis dans l’intervalle \(df\). Donc si NB_POINTS est un nombre impair, les fréquences de LIST_RAFFINE seront dans la liste finale.
Si CRITERE=”LARGEUR_3DB” et NB_POINTS est un nombre pair, on garde la fréquence \(freq_{i}\) de LIST_RAFFINE et on ajoute la fréquence de résonance d’un système forcé tel que \(freq_{i} = freq_{i} \sqrt{(1-2{\eta}_{i}^{2})}\) .
Mot clé EQUI_MODES#
Ce mot-clé concerne le paramétrage d’un algorithme d’équilibrage de bandes de fréquence, en amont d’un calcul modal multi-bandes via l’opérateur CALC_MODES.
Cet algorithme vise à déterminer les extrémités de bandes de fréquences, de manière à ce que ces dernières comportent un nombre de fréquences propres comparable, et limité (i.e., de l’ordre de \(\mathcal{O}(10^{1})\)). Ceci permet notamment d’améliorer la robustesse et la performance d’un calcul modal multi-bandes (voir [R5.01.04]). Pour se faire, l’algorithme précité repose sur une procédure itérative, visant à réaliser plusieurs appels à une procédure de dénombrement de valeurs propres, de manière à « découvrir » suffisamment la répartition des valeurs propres du problème et ainsi proposer un découpage en bandes de fréquences équilibrées.
Lorsque le mot-clé EQUI_MODES est utilisé, l’opérateur DEFI_LIST_FREQ renvoie une liste de réels comportant
les extrémités des bandes de fréquence optimisées. Cette liste peut être ensuite renseignée à l’opérateur
CALC_MODES, via l’opérande FREQ du mot-clé CALC_FREQ avec OPTION = 'BANDE'. L’algorithme précité
prend en compte deux types de données d’entrée:
une liste de réels comportant des fréquences propres calculées au préalable,
des matrices de rigidité et de masse. Dans un tel cas, l’algorithme précité se base sur la procédure de dénombrement de valeurs propres de l’opérateur INFO_MODE.
Opérandes FREQ_MIN et FREQ_MAX#
Les opérandes FREQ_MIN et FREQ_MAX permettent de définir les extrémités de l’intervalle dans lequel la procédure d’équilibrage de bandes de fréquences est réalisée.
Opérande TYPE_SAISIE#
Le mode d’utilisation de l’algorithme d’équilibrage de bandes de fréquence est défini via TYPE_SAISIE.
Le cas TYPE_SAISIE = 'LISTE' correspond à la spécification d’une liste de fréquences propres
pré-calculées. La spécification de matrices de rigidité et de masse assemblées peut être faite en renseignant
TYPE_SAISIE = 'MATR_ASSE'.
Opérande LIST_FREQ#
L’opérande LIST_FREQ permet de spécifier une liste de réels correspondant à des fréquences propres
pré-calculées, dans le cas TYPE_SAISIE = 'LISTE'.
Opérandes MATR_RIGI et MATR_MASS#
Dans le cas de la spécification de matrices assemblées (TYPE_SAISIE = 'MATR_ASSE'),
les matrices de rigidité et de masse sont renseignées via les opérandes MATR_RIGI et MATR_MASS.
Il est important de noter que l’algorithme d’équilibrage de bandes de fréquence n’est implanté
que dans le cas de problèmes aux valeurs propres généralisé standard symétrique réel (voir [R5.01.01]).
De ce fait, seules des matrices assemblées symétriques réelles peuvent être utilisées.
Paramètres de l’algorithme d’équilibrage#
Le mot-clé EQUI_MODES permet également de spécifier des paramètres (optionnels) relatifs à l’algorithme d’équilibrage de bandes de fréquences, à savoir :
NB_MODES, correspondant au nombre de fréquences propres par bande souhaité. Il est par défaut fixé à 40, en se basant sur les préconisations énoncées dans la documentation de référence [R5.01.04].
ITER_MAXI, permettant de fixer le nombre maximal d’itérations de l’algorithme,
NB_POINTS_INIT, permettant de fixer le nombre initial d’intervalles de recherche de fréquences propres utilisés par l’algorithme,
NB_POINTS_SUPP, permettant de définir le nombre d’intervalles de recherche supplémentaires au cours d’une itération de l’algorithme.
TOLERANCE, permettant de définir le critère d’arrêt de l’algorithme. Dans le cas de l’équilibrage de \(B\) bandes de fréquence, ces dernières sont considérées comme étant suffisamment équilibrées si la condition suivante est vérifiée :
\[\max_{1 \le i \le B} \left|\varepsilon_i \right| < \text{TOLERANCE},\]où \(\varepsilon_i\) désigne l’erreur définie comme suit :
\[\varepsilon_i = \frac{N_i - N_b}{N},\]\(N_i\) désignant le nombre de fréquences propres dans la bande \(i\), \(N_b\) le nombre de fréquences propres par bande souhaité (NB_MODES), et \(N\) le nombre total de fréquences propres comprises dans l’intervalle [FREQ_MIN, FREQ_MAX].
Description du résultat et utilisation dans un calcul modal#
Dans le cas où l’algorithme d’équilibrage de bandes de fréquences est utilisé, la structure de
données produite par l’opérateur DEFI_LIST_FREQ est une table (table_sdaster), dont les colonnes
regroupent des informations relatives aux résultats de l’algorithme, à savoir :
NUME_BANDE, correspondant aux numéros de chaque bande de fréquence obtenue,
FREQ_MIN et FREQ_MAX, correspondant respectivement aux extrémités minimale et maximale de chaque bande,
NB_MODES, correspondant au nombre de fréquences propres contenues dans chaque bande,
NB_CIBLE, correspondant au nombre désiré de fréquences propres par bande (i.e. NB_MODES dans EQUI_MODES),
ERR_REL, correspondant à l’erreur relative \(\left|\varepsilon_i\right|\) associée à chaque bande,
NB_ITER, correspondant au nombre d’itérations réalisées,
ITER_MAXI, correspondant au nombre d’itérations maximal autorisé (i.e. ITER_MAXI dans EQUI_MODES).
Cette table peut ensuite être utilisée pour réaliser un calcul modal multi-bandes avec l’opérateur
CALC_MODES, via l’extraction des bandes de fréquence en Python. On donne ci-dessous
un exemple d’utilisation :
table = DEFI_LIST_FREQ(
EQUI_MODES=_F(TYPE_SAISIE="MATR_ASSE",
FREQ_MIN=0.0,
FREQ_MAX=500.0,
MATR_RIGI=matassr,
MATR_MASS=matassm,
),
)
list_freq = [table.EXTR_TABLE().values()["FREQ_MIN"][0]] + table.EXTR_TABLE().values()["FREQ_MAX"]
modes = CALC_MODES(
MATR_RIGI=matassr,
MATR_MASS=matassm,
OPTION="BANDE",
CALC_FREQ=_F(FREQ=list_freq),
)
Exemples#
Imaginons que l’on veuille créer la liste de base : \((1., 3., 5., 10., 15.)\)
Et que l’on veuille raffiner autour de la fréquence \(3.5\) avec le critère “ABSOLU”.
On écrit :
lr = DEFI_LIST_FREQ(
DEBUT=1.0,
INTERVALLE=(_F(JUSQU_A=5.0, NOMBRE=2), _F(JUSQU_A=15.0, PAS=5)),
RAFFINEMENT=(
_F(LIST_RAFFINE=3.5, PAS_MINI=0.001, NB_POINTS=5, CRITERE="ABSOLU", DISPERSION=0.02),
),
)
On obtient alors une liste contenant les valeurs: \((1.0, 3.0, 3.49, 3.495, 3.5, 3.505, 3.51, 5.0, 10.0, 15.0)\)
En utilisant le critère “RELATIF” pour le raffinement, on peut écrire:
lr = DEFI_LIST_FREQ(
VALE=(1.0, 3.0, 5.0, 10.0, 15.0),
RAFFINEMENT=_F(
LIST_RAFFINE=(3.5,), PAS_MINI=0.001, NB_POINTS=6, CRITERE="RELATIF", DISPERSION=0.03
),
)
On obtient alors une liste listr8 contenant les valeurs: \((1., 3., 3.4475, 3.4685, 3.4895, 3.5105, 3.5315, 3.5525, 5., 10., 15.)\)
Le cas-test sdld21b présente d’autres exemples d’utilisation.