Améliorations de la structure des super-éléments dans Metafor.
L'objectif est de pouvoir appliquer une précontrainte sur le modèle FEM à partir duquel le super-élément est ensuite construit. Le cas de la construction d'un super-élément à une vitesse donnée non nulle nous intéresse tout particulièrement dans le cadre du projet Abrawal.
Les étapes de création et d'utilisation ont donc été modifiées par rapport à ce qui a été initialement proposé au commit précédent (Commit du 07 Avril 2016).
Typiquement, le jeu de données dans lequel le super-élément est créé consiste en un calcul de mise en rotation centrifuge du modèle FEM classique. Lorsque la vitesse cible est atteinte, i.e. à la fin du calcul, la création du super-élément est lancée via une fonction objective. Notons que la construction d'un super-élément à vitesse nulle (i.e., n'ayant subit aucune précontrainte) peut être lancée directement dans le fichier de création .py, ou via une fonction objective également.
Pour l'instant, 1 calcul = construction d'un (ou plusieurs) super-élément(s) à 1 vitesse donnée, cependant cela est possible en créant un PythonValueExtractor
.
La précontrainte du modèle et la création d'un super-élément se déroulent de la manière suivante :
FieldApplicator
pour les éléments constituant le pied.Pour rendre possible la création d'un super-élément sur un modèle précontraint, il a fallu :
belongingToSuperElem
dans la classe DofFlags
, en plus du flag fixed
:belongingToSuperElem = true
(DDLs associés aux noeuds rouges sur la Fig. 1). De cette manière, il est possible de récupérer les blocs des matrices k et m du modèle FEM associés à ces DDLs uniquement nécessaires au calcul des matrices réduites du SE.false
par défaut, et est fixé à true
grâce à la commande setSuperElementNodes
belonginToSuperElem = false
(DDLs associés aux noeuds noirs sur la Fig. 1) n'ont pas d'intérêt.BelongingToSEDofsSet
, écrite de manière similaire à FixationSet
, qui permet de gérer les flags belongingToSuperElem
des DDLs du modèle.
MechanicalMatrices
, permettant ainsi d'écrire les matrices k et m associées au modèle FEM sous la forme de 16 blocs :
belongingToSE = true
), les DDLs Retenus sont donc identifiés en imposant fixed = true
grâce à la fonction setRetainedNodes
(DDLs associés aux noeuds bleus dans la Fig. 2). Il est donc possible de récupérer les différents blocs kRR, mRR, kRC, mRC, etc. pour le calcul des matrices de rigidité et de masse réduites du SE.
forcesComputation
.updateInter
dans StrMatrixBase
, et generalForceInter
dans StrVector
ont du être implémentées afin de calculer correctement les différentes matrices et vecteurs intervenant dans MechanicalMatrices.update
et generalForce
, parcourent toutes les interactions.MechanicalMatrices
, et donc cette nouvelle décomposition en 4 partitions, est également utilisée lors d'un calcul d'analyse fréquentielle sur un modèle FEM classique. Un flag booléen thereIsBelongingToSEDofs
, dont la valeur est fixée en fonction du nombre de DDLs dont belonginToSuperElem = true, a donc été mis en place afin de différencier ces deux cas.La création proprement dite du SE, dans l'état précontraint, se décompose en plusieurs étapes :
Guyan/CraigBamptonSuperElementInteraction
n°<no>, qui ne sera pas ajoutée à l'interactionSet du domain.setNumberOfEigenValues
setDomain
.superElemBuiltFlag
à False
→ setSuperElemBuiltFlag
Guyan/CraigBamptonSuperElementInteraction
. Le but est de calculer correctement les différents blocs des matrices k et m du modèle FEM, sur lesquelles le calcul des matrices réduites K et M est basé → addInteraction
puis setSuperElementNodes
setRetainedNodes
superElement<no>.py
qui sera exécuté lors de l'importation du super-élément → createPyFileForSuperElemUse
superElement<no>.py
→ groupsNodesToSave
Guyan/CraigBamptonSuperElement
→ generateElements()
computeSuperElement()
belongingToSuperElem
à false
dans le cas où un autre super-élément est construit dans le même calcul → clearSuperElementNodes()
superElement<no>.py
→ lancée via la construction des Guyan/CraigBamptonSuperElementValueExtractor
⇒ Doit être fait après computeSuperElement() car le super-élément créé doit avoir été ajouté à l'elementSet de l'interaction.Le super-élément ainsi construit est sauvegardé dans le sous-dossier <currentWorkDirectory>/Creation au travers des deux fichiers de sortie suivants :
SuperElementImporter
, dans le même esprit que BaconImporter
pour l'importation de maillages provenant de Samcef.setIndex
→ mise en place d'un index dans l'objectif de pouvoir importer plusieurs fois le même super-élément (i.e., à partir du même fichier de sauvegarde) puis d'appliquer une transformation géométrique différente à chaque super-élément importé (ex : construction d'un modèle de roue aubagée complète à partir d'un seul super-élément pâle créé, importation et rotation du super-élément en fonction de la position de l'aube).readGroupsNodes
→ sauvegarde des groupes de nœuds Retenus.execute
→ sauvegarde des positions et des UserNo des nœuds Retenus.modesValuesGroup<No><Nature><Variant>
→ sauvegarde des valeurs des modes statiques de liaison et des modes propres (dans le cas Craig-Bampton) pour la composante (<Nature>,<Variant>) de chaque nœud appartenant au groupe n°<No>.Les différentes étapes à réaliser dans le jeu de données pour utiliser le super-élément précédemment créé sont les suivantes :
SuperElementImporter
:defineSE
implémentée dans la classe mtGeoPointSet
.mesh.define(UserNo, CELL_SE_VOLUME, SEVolume, vecSuperElementPoints)
où SEVolume
correspond au volume géométrique sur lequel va reposer la cellule élémentaire, et vecSuperElementPoints
correspond au vecteur des points topologiques de la cellule, i.e. les noeuds retenus.
Guyan/CraigBamptonSuperElementInteraction
, qui sera ajoutée à l'interactionSet du domaine cette fois-ci. Notons que le UserNo associé doit correspondre au même numéro qu'à la création, i.e. le numéro du fichier de sauvegarde, afin de pouvoir charger le SE.superElemBuiltFlag
à True
, cette fois-ciprp = ElementProperties(Guyan) ou ElementProperties(CraigBampton)
.
SEVolume
ou SESide
), créé lors de l'importation du super-élément, à l'interaction via un push
.DbNodalValueExtractor
, etmodesValuesGroup<No><Nature><Variant>
dans lesquelles un extracteur Guyan/CraigBamptonSuperElementValueExtractorUse
est créé et est ajouté au valuesManager.Beam3DFreqAnalysisCBCB
, Beam3DFreqAnalysisGCB
, Beam3DFreqAnalysisCBFem
, etc. Toutes les combinaisons possibles ont été testées et ajoutées à la batterie.Beam3DFYAmp
qui teste le super-élément de Craig-Bampton pour des grandes amplitudes de vibration a été repassé en SRI, car il a beaucoup de mal à converger en EAS (3557 step en EAS au lieu de 800 en SRI), et prend beaucoup de temps pour la batterie.
Modification des cas-tests bladeCasingEngagementFSEGuyan
et bladeCentrifugeLoadBSECraig
de la batterie :
…_1.py
correspond à la mise en rotation centrifuge du modèle FEM complet via un shéma quasi-statique puis à la création d'un super-élément pâle (dans le cas FSEGuyan) ou pied (dans le cas BSECraig) lorsque la vitesse a été atteinte.…_2.py
ont été mis en FAILED volontairement car des modifications doivent encore être faites.'initialBalancing
et les propriétés OMEGA
.Added: oo_meta\mtFEMBase\BelongingToSEDofsSet.h Added: oo_meta\mtFEMBase\BelongingToSEDofsSet.cpp
Renamed: mtSuperElement\tests\Beam2DCompTX_FX_1.py -> Beam2DCompTXFX_1.py Renamed: mtSuperElement\tests\Beam2DCompTX_FX_2.py -> Beam2DCompTXFX_2.py Renamed: mtSuperElement\tests\Beam2DCompTX_FY_1.py -> Beam2DCompTXFY_1.py Renamed: mtSuperElement\tests\Beam2DCompTX_FY_2.py -> Beam2DCompTXFY_2.py Renamed: mtSuperElement\tests\Beam2DCompTY_FX_1.py -> Beam2DCompTYFX_1.py Renamed: mtSuperElement\tests\Beam2DCompTY_FX_2.py -> Beam2DCompTYFX_2.py Renamed: mtSuperElement\tests\Beam2DCompTY_FY_1.py -> Beam2DCompTYFY_1.py Renamed: mtSuperElement\tests\Beam2DCompTY_FY_2.py -> Beam2DCompTYFY_2.py Renamed: mtSuperElement\tests\Beam3DCompTX_FY_1.py -> Beam3DCompTXFY_1.py Renamed: mtSuperElement\tests\Beam3DCompTX_FY_2.py -> Beam3DCompTXFY_2.py Renamed: mtSuperElement\tests\Beam3DCompTY_FX_1.py -> Beam3DCompTYFX_1.py Renamed: mtSuperElement\tests\Beam3DCompTY_FX_2.py -> Beam3DCompTYFX_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBCB_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBCB_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBFem_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBFem_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBG_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisCBG_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisFemCB_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisFemCB_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisFemG_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisFemG_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGCB_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGCB_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGFem_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGFem_2.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGG_1.py Added: mtSuperElement\tests\Beam3DFreqAnalysisGG_2.py Added: oo_meta/mtSuperElement/tests/tools/postObjectiveFunctions.py Added: oo_meta/mtSuperElement/tests/tools/utilities.py Added: oo_nda/abrawal/banc18ER/tools/bladeCentrifugeLoadBuildSE.py
— Claire Hennuyer 2016/06/13