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 :
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.fillCorrectedImplicitDynamicTangentMatrix()
implémentée dans la classe SuperElement
.
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.
MRR
mentionnée ci-dessus, a également été corrigée.extract()
qui impactait fortement les résultats obtenus en un noeud condensé.Original : locel[j+nbContraintModes] Correction : locel[j+nbContraintModes+1]
freeConstrainedMass
n'est pas symétrique ⇒ correction freeConstrainedMass = new StrMatrixBase(false, …)
dans la fonction fillFreeConstrainedMatrices()
.generateEigenResFiles()
dans la classe FrequencyAnalysisMethod
:mtFrequencyAnalysis.tests.matlab.matlabPostPro
(cf. fichier matlabEigenvalues.txt).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.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 :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
).MNN
= matrice identité de taille N, etKNN
= diag(ω1², …, ωN²).(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.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 :µ = -1e6
.SkyLineMatrix
, l'espace mémoire réservé aux éléments diagonaux est alloué 2 fois, dans situ
et dans sitl
).
mtFrequencyAnalysis
:generateEigenResFiles()
dans le cas-test de base beam3DFreeSri.py
beam3DFreeSriShift.py
, beam3DFreeSriDssShift.py
, beam3DFreeEasShift.py
, et beam3DFreeEasDssShift.py
.mtSuperElement
: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.Beam2DFreqAnalysisFree.py
et Beam3DFreqAnalysisFree.py
→ Analyse fréquentielle d'une poutre Libre/Libre modélisée avec un super-élément de Craig-Bampton.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.toolbox
: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.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
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