Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2015:10_08

Commit 2015-10-08

Super-éléments

:!: :!: La nouvelle répartition des DDLs évoquée dans mon précédent commit (Commit 2015-08-28) n'a finalement pas lieu d'être. :!: :!:

La théorie dit bien que :

  1. Calcul des modes propres à interfaces fixes → analyse fréquentielle du modèle fin où DDLs Retenus = DDLs Fixés.
  2. Calcul des modes statiques de liaison → calcul des déformées de la structure condensée lorsqu'un déplacement unitaire est imposé en un DDL Retenu (les autres DDLs Retenus sont fixés à 0), et ce pour tous les DDLs Retenus.

SuperElement

  • Ajout d'une fonction fillMass() afin de pouvoir récupérer la matrice de masse du super-élément lorsqu'on fait une analyse fréquentielle d'une structure modélisée avec un super-élément.
Notons que l'on n'avait pas besoin de cette fonction pour récupérer la matrice de masse du super-élément lors du calcul de la matrice jacobienne car on la récupérait via la méthode fillCorrectedImplicitDynamicTangentMatrix() implémentée dans la classe SuperElement.

Correction expression de la matrice de masse

  • En redéveloppant à la main le calcul des matrices réduites K et M obtenues avec la méthode de Craig-Bampton, je me suis rendue compte qu'il y a avait une erreur dans l'expression du bloc MRR de la matrice de masse réduite.
  Original   : MRR = mRR + Psi^T . mCC . Psi + 2 * mRC . Psi
  Correction : MRR = mRR + Psi^T . mCC . Psi + (mRC . Psi)^T + mRC . Psi  
  
     MRR  |  MRN
M = ------------- est la matrice de masse du système réduit (super-élément),
     MNR  |  MNN
     
     mRR  |  mRC
m = ------------- est la matrice de masse du système non réduit (modèle fin),
     mCR  |  mCC
     
R = DDL Retenu, C = DDL Condensé, N = DDLs Mode propre à interfaces fixes,

Psi est la matrice des modes statiques de liaison.
  • L'expression de la matrice de masse réduite obtenue avec la méthode de Guyan (condensation statique), qui est identique à la matrice MRR mentionnée ci-dessus, a également été corrigée.

CraigBamptonSuperElementValueExtractor

  • Erreur dans la fonction extract() qui impactait fortement les résultats obtenus en un noeud condensé.
Original   : locel[j+nbContraintModes]
Correction : locel[j+nbContraintModes+1]

Analyse fréquentielle

MechanicalMatrices

  • La matrice freeConstrainedMass n'est pas symétrique ⇒ correction freeConstrainedMass = new StrMatrixBase(false, …) dans la fonction fillFreeConstrainedMatrices().

Fichiers de sortie

  • Génération de deux fichiers grâce à une nouvelle fonction generateEigenResFiles() dans la classe FrequencyAnalysisMethod :
    1. eigenValues.txt qui contient le nb de valeurs propres recherchées et les valeurs propores elles-mêmes. Ces résultats peuvent être comparés aux valeurs propres de référence calculées avec la fonction eigs de Matlab via le module mtFrequencyAnalysis.tests.matlab.matlabPostPro (cf. fichier matlabEigenvalues.txt).
    2. eigenVectors.txt qui contient la liste des vecteurs propres associés. Pour cela, des StrVector sont créés à la volée (i.e., sans clé VariantID, comme par exemple RE) et la fonction StrVectorBase::write() est utilisée. De cette manière, la valeur du déplacement TX, TY, ou TZ est associée à un n° de noeud de la DB, ce qui est utile pour faire des comparaisons.
  • Les noms des fichiers qui contiennent les matrices K et M sont maintenant des arguments dans les fonctions matlabComputeEigenValues(), matlabComputeAllEigenValues() du module mtFrequencyAnalysis.tests.matlab.matlabPostPro ainsi que dans les fonctions Matlab EigenValues() et AllEigenValues(). C'est utile, en particulier, lorsqu'on fait l'analyse fréquentielle du super-élément puisque, dans ce cas, 4 fichiers sont générés :
    • 2 fichiers qui contiennent les modes propres à interfaces fixes de la structure et valeurs propres associées (phase de construction du super-élément),
    • 2 fichiers qui contiennent les valeurs et vecteurs propres résultants de l'analyse fréquentielle du super-élément (phase d'utilisation du super-élément).

Normalisation des modes propres

  • Les vecteurs propres calculés avec la méthode de Lanczos (cf. LanczosFrequencyAnalysisMethod) sont maintenant normalisés par rapport à la masse : ||x|| = (xtMx)½. Notons que cette métrique était déjà utilisée dans la méthode de la puissance (cf. PowerIterationsFrequencyAnalysisMethod).
  • Conséquences sur l'expression des matrices K et M du super-élément (modes propres à interfaces fixes normalisés à la masse) :
    1. MNN = matrice identité de taille N, et
    2. KNN = diag(ω1², …, ωN²).

Modes de corps rigides

  • Technique du spectral shifting : Cette technique permet de réaliser l'analyse fréquentielle d'une structure qui présente des modes de corps rigides (e.g., poutre Libre/Libre). La matrice de rigidité associée étant singulière, elle consiste à résoudre le système (K - μ M) x = (ω²-μ) M x, où μ est un scalaire, au lieu du système initial K x = ω² M x. Ce nouveau système est quant à lui inversible, pour un choix judicieux de la valeur μ. Selon Géradin, μ doit être négatif lorsqu'on est en présence de modes rigides.
  • Valeur du spectral shifting : J'ai réalisé une étude sur la valeur à prendre en compte lorsque la structure analysée présente des modes de corps rigides. L'étude a été réalisée sur le cas-test beam3DFreeSri.py du module mtFrequencyAnalysis (maillage EF fin classique). Ce cas-test consiste en l'analyse fréquentielle d'une poutre 3D Libre/Libre par la méthode de Lanczos. Les résultats obtenus pour chaque valeur de µ testée correspondent aux 10 plus petites fréquences propres du système, et sont comparés à celles calculées avec Matlab. Cette étude a montré que :
    • µ > 0 → les modes de corps rigides ne sont pas prédits
    • µ < 0 → les modes de corps rigides sont correctement prédits (valeurs testées : -10, -100, -1000, -1e4, -1e5, -1e6)
    • Plus µ est petit, plus les valeurs propres calculées sont proches de la référence.
    • Plus µ est petit, plus l'algorithme est stable. En effet, pour une même valeur du shift, les résultats obtenus pour 2 calculs successifs peuvent être très différents si le shift est proche de zéro (par valeur négative). Ce phénomène disparaît pour des petites valeurs de µ.
    • La valeur du spectral shifting choisie pour la suite est µ = -1e6.

Taux de remplissage des matrices

Attention, lorsqu'une analyse fréquentielle est réalisée sur le super-élément, le taux de remplissage des matrices affiché peut être erroné ! En effet, les matrices K et M du super-élément sont des matrices pleines, et des taux de remplissage > à 100% peuvent apparaître (ex : si K est une SkyLineMatrix, l'espace mémoire réservé aux éléments diagonaux est alloué 2 fois, dans situ et dans sitl).

Cas-tests

  • Module mtFrequencyAnalysis :
    1. Ajout d'un generateEigenResFiles() dans le cas-test de base beam3DFreeSri.py
    2. Modification de la valeur du spectral shifting à µ=-1e6 dans les cas-tests : beam3DFreeSriShift.py, beam3DFreeSriDssShift.py, beam3DFreeEasShift.py, et beam3DFreeEasDssShift.py.
  • Module mtSuperElement :
    1. Beam2DFreqAnalysis.py et Beam3DFreqAnalysis.py → Analyse fréquentielle d'une poutre Encastrée/Libre modélisée avec un super-élément de Craig-Bampton.
    2. Beam2DFreqAnalysisFree.py et Beam3DFreqAnalysisFree.py → Analyse fréquentielle d'une poutre Libre/Libre modélisée avec un super-élément de Craig-Bampton.
    3. Beam2DTri.py et Beam3DTetra.py → Calcul des vibrations libres d'une poutre Encastrée/Libre modélisée avec un super-élément de Craig-Bampton construit à partir d'un modèle EF fins triangulaire (ou tétrahédrique) et non quadrangulaire (ou hexahédrique) comme les autres cas-tests.
Analyse fréquentielle du super-élément : l'affichage des modes propres obtenus n'est pas correct pour l'instant.
  • Module toolbox :
    1. Ajout d'une variable tetra dans la fonction createCube() de meshedGeometry3D.py qui vaut 0 par défaut et qui permet la construction d'un cube maillée avec des tétrahèdres s'il vaut 1.

Fichiers ajoutés/modifiés/supprimés

Modified : oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisMethod.h
Modified : oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisMethod.cpp
Modified : oo_meta\mtFrequencyAnalysis\src\LanczosFrequencyAnalysisMethod.cpp
Modified : oo_meta\mtFrequencyAnalysis\src\MechanicalMatrices.h
Modified : oo_meta\mtFrequencyAnalysis\src\MechanicalMatrices.cpp

Modified : oo_meta\mtSuperElement\src\SuperElement.h
Modified : oo_meta\mtSuperElement\src\SuperElement.cpp
Modified : oo_meta\mtSuperElement\src\CraigBamptonSuperElement.cpp
Modified : oo_meta\mtSuperElement\src\CraigBamptonSuperElementValueExtractor.cpp
Modified : oo_meta\mtSuperElement\src\GuyanSuperElement.cpp

Modified : oo_meta\toolbox\meshedGeometry3D.py
Modified : oo_meta\mtMath\CSRMatrix.cpp

Tests ajoutés/supprimés

Added: oo_meta\mtSuperElement\tests\Beam2DFreqAnalysis.py
Added: oo_meta\mtSuperElement\tests\Beam2DFreqAnalysisFree.py
Added: oo_meta\mtSuperElement\tests\Beam3DFreqAnalysis.py
Added: oo_meta\mtSuperElement\tests\Beam3DFreqAnalysisFree.py
Added: oo_meta\mtSuperElement\tests\Beam2DTri.py
Added: oo_meta\mtSuperElement\tests\Beam3DTetra.py

Claire Hennuyer 2015/10/08

commit/2015/10_08.txt · Last modified: 2016/03/30 15:23 (external edit)