Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2016:04_07

Commit 2016-04-07

Implémentation d'une nouvelle structure pour les super-éléments. Maintenant, la phase de création est complètement découplée de la phase d'utilisation du super-élément (SE).

Avant, ces deux étapes étaient réalisées dans un même calcul Metafor. Cela nous permettra, notamment, de pouvoir construire des super-éléments à vitesse variable.

Nouvelle structure

Création d'un super-élément

Le jeu de données, dans lequel le super-élément est créé, est écrit sous la forme d'un fichier execfile.

  1. D'abord, on créé deux objets Metafor, l'un étant associé au domaine FEM (interaction FieldApplicator), l'autre au domaine SE (interaction GuyanSuperElementInteraction ou CraigBamptonSuperElementInteraction selon le type choisi).
  2. D'une part, on construit le modèle FEM, et on récupère le FieldApplicator associé au futur super-élément.
  3. D'autre part, on construit le modèle SE :
    • On créé l'interaction Guyan/CraigBamptonSuperElementInteraction.
    • On fixe le superElemBuiltFlag à False.
    • On associe le FieldApplicator à la Guyan/CraigBamptonSuperElementInteraction afin de construire les matrices k et m du modèle FEM sur lesquelles le calcul des matrices réduites K et M est basé.
    • On définit les noeuds Retenus parmi les noeuds du modèle FEM ⇒ les DDLs associés sont fixés à zéro dans le modèle FEM afin d'obtenir la répartition DDLs Retenus/DDLs Condensés des matrices k et m du modèle FEM.
    • On définit le nombre de modes propres dans le cas Craig-Bampton.
    • On créé des groupes de noeuds Retenus qui serviront à l'utilisation du super-élément.
    • On créé des groupes de noeuds Condensés pour lesquels on souhaite extraire des données à l'utilisation du super-élément (voir point suivant).
    • On construit les Guyan/CraigBamptonSuperElementValueExtractor associés, à partir desquels on lance la sauvegarde des valeurs des modes statiques de liaison (et des modes propres dans le cas Craig-Bampton) au(x) DDL(s) considéré(s).
L'extraction de données en un noeud condensé doit être prévue à l'avance, i.e. avant la construction du super-élément.

Le super-élément ainsi construit est sauvegardé dans le sous-dossier <currentWorkDirectory>/Creation au travers des fichiers de sortie suivants :

  • step_SE.gz → fichier binaire qui contient toutes les données du super-élément construit :
    • Nombre de noeuds
    • Nombre de DDLs
    • Matrice réduite K
    • Matrice réduite M
    • Nombre de modes statiques de liaisons (= nombre de DDLs Retenus)
    • Modes statiques de liaisons
  • retainedNodesFile.txt → fichier qui contient la liste des noeuds retenus et leurs coordonnées.
  • groupsSENodesFile.txt → fichier qui contient la liste des groupes de noeuds Retenus (uniquement) pouvant être utiles lors de l'utilisation du super-élément.
  • modesValues_Group_<No>_<Nature>_<Variant>.txt → fichier utilisé à l'étape d'utilisation du super-élément pour l'extraction de données en des noeuds condensés. Il contient la valeur des modes statiques de liaison et des modes propres (dans le cas Craig-Bampton) pour la composante (<Nature>,<Variant>) de chaque noeud appartenant au groupe n°<No> (e.g., modesValues_Group_3_TX_RE.txt).

Utilisation du super-élément créé

Le jeu de données, dans lequel on utilise le super-élément, est écrit sous la forme d'un fichier load()-meta().

  1. On importe le super-élément stocké dans le sous-dossier <currentWorkDirectory>/Creation via un SuperElementImporter (dans le même esprit que BaconImporter) :
    • Création des groupes de noeuds retenus précédemment stockés.
    • Création de la cellule élémentaire associée au super-élément via :
       mesh.define(UserNo, CELL_SE_VOLUME, SEVolume, vecSuperElementPoints)

      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.

  2. On crée l'interaction Guyan/CraigBamptonSuperElementInteraction (le type d'interaction est récupéré à partir du jeu de données de création du super-élément ⇒ à modifier si l'on veut utiliser un super-élément créé par un autre code que Metafor…)
  3. On fixe le superElemBuiltFlag à True.
  4. On définit le nombre de modes propres dans le cas Craig-Bampton (idem, nombre récupéré à partir du jeu de données de création du super-élément).
  5. On associe le volume géométrique SEVolume (resp. la side géométrique SESide), créé(e) lors de l'importation du super-élément, à l'interaction.
  6. On applique les conditions aux limites via les groupes de noeuds Retenus.
  7. On définit le type d'intégration et tous les paramètres classiques de calcul.
  8. On ajoute les extracteurs au ValuesManager : l'extraction de données en un noeud Retenu se fait via un DbNodalValueExtractor, et l'extraction de données en un noeud Condensé se fait via un Guyan/CraigBamptonSuperElementValueExtractorUse, les valeurs des modes étant stockées dans les fichiers modesValues_Group_<No>_<Nature>_<Variant>.txt.
Afin de nous repérer dans les UserNo des noeuds Retenus à l'utilisation du super-élément, ceux-ci sont définis comme étant le DBNo des noeuds du maillage FEM. Attention, un décalage d'indice peut être utilisé dans le cas où le maillage, qui contient le super-élément, contient également des éléments finis classiques.

Implémentation

  • Ajout de deux nouveaux types de cellules élémentaires : CELL_SE_SIDE (2D), CELL_SE_VOLUME (3D)
  • Ajout de deux nouveaux IDs : SESIDE_ID (2D), SEVOLUME_ID (3D)
  • Par conséquent, ajout de deux nouveaux builders :
    • SuperElemSideBuilder (2D) défini uniquement par un PointSet et une Side (pas de Curve, pas de Wire, etc.),
    • SuperElemVolumeBuilder (3D) défini uniquement par un PointSet et un Volume (pas de Curve, pas de Wire, pas de Side, etc.)
  • Ajout de deux nouveaux ValueExtractors utilisables à l'étape d'utilisation du super-élément : GuyanSuperElementValueExtractorUse et CraigBamptonSuperElementValueExtractorUse
  • Ajout de deux opérateurs operator« et operator» dans les classes Matrix et Vector pour la sauvegarde (resp. le chargement) des matrices réduites et des modes statiques de liaison dans une archive via OutArchive (resp. à partir d'une archive InArchive)
  • Modification du fichier battery.py afin que tous les cas-tests des modules mtSuperElement.tests et abrawal.banc18ER.battery puissent fonctionner (fichiers execfile).
  • Implémentation d'une fonction writeTSC() dans SuperElement relative à l'étape de création du super-élément (temps de construction du SE, nb de noeuds, nb de ddls).
  • Nettoyage des memory leaks (il en reste encore un peu)
Il y aura des choses à modifier lorsque la SuperElementInteraction pourra contenir plusieurs super-éléments (par ex. pour les ValueExtractor : calcul de la valeur du déplacement Ux d'un noeud condensé interne appartenant à un seul super-élément).

Cas-tests mtSuperElement

  • Utilisation systématique des éléments EAS pour les cas-tests de mtSuperElement
    • Sauf pour defoCentrCBSESRIPR, defoCentrGSESRIPR, Beam2DTri, et Beam3DTetra.
    • Avant les super-éléments construits dans les cas-tests de la batterie étaient des éléments STD :
      ⇒ je me suis assurée que les résultats obtenus avec des éléments STD dans la nouvelle structure donnaient les mêmes résultats que ceux de l'ancienne structure.
  • Problème au niveau de la destruction lorsqu'on utilise un DSSolver pour tous les cas-tests avec super-élément de Craig-Bampton :
    ⇒ pas de problème avec le SkyLineSolver, j'ai donc laissé ce solver pour l'instant. Le problème est lié à la destruction de l'objet freqAnalysis, et en particulier à celle de mechanicalMatrices, et des matrices de type StrMatrixBase qui la définissent (utilisation de getClone() ou pas ?).
    ⇒ Première correction : ajouts de incRef() et decRef() dans FrequencyAnalysisMethod, GuyanSuperElement, et SolverManager car la classe LinearSolver dérive de RefCounted.
    A régler définitivement pour mon prochain commit.
  • Une toute petite différence sur les résultats des cas-tests defoCentrCBSESRIPR et defoCentrGBSESRIPR entre l'ancienne et la nouvelle structure est observée ⇒ à vérifier.

Cas-tests abrawal

  • Les fichiers de base banc18ER.py, bladeCasingCheck.py, et bladeCentrifugeLoad.py ont été conservés dans un premier temps ⇒ la migration de tous les cas-tests abrawal vers la nouvelle structure (pas seulement ceux de la batterie) n'est pas terminée.
  • Les nouveaux fichiers banc18ER_1.py, bladeCasingCheck_1.py, et bladeCentrifugeLoad_1.py vont être mergés par la suite.
  • Une toute petite différence sur les résultats du cas-test bladeCentrifugeLoadBSECraig entre l'ancienne et la nouvelle structure est observée ⇒ à vérifier.

Fichiers ajoutés/supprimés

Added: oo_meta\mtSuperElement\src\GuyanSuperElementValueExtractorUse.h
Added: oo_meta\mtSuperElement\src\GuyanSuperElementValueExtractorUse.cpp
Added: oo_meta\mtSuperElement\src\CraigBamptonSuperElementValueExtractorUse.h
Added: oo_meta\mtSuperElement\src\CraigBamptonSuperElementValueExtractorUse.cpp
Added: oo_meta\mtGeo\mtGeoSuperElemSideBuilder.h
Added: oo_meta\mtGeo\mtGeoSuperElemSideBuilder.cpp
Added: oo_meta\mtGeo\mtGeoSuperElemVolumeBuilder.h
Added: oo_meta\mtGeo\mtGeoSuperElemVolumeBuilder.cpp
Added: oo_meta\mtGeo\mtGeoSESide.h
Added: oo_meta\mtGeo\mtGeoSESide.cpp
Added: oo_meta\mtGeo\mtGeoSEVolume.h
Added: oo_meta\mtGeo\mtGeoSEVolume.cpp

Cas-tests supprimés

Deleted : mtSuperElement\tests\Beam2D.py
Deleted : mtSuperElement\tests\Beam2DComp.py
Deleted : mtSuperElement\tests\Beam2DCompFX.py
Deleted : mtSuperElement\tests\Beam2DCompFY.py
Deleted : mtSuperElement\tests\Beam2DCompTX.py
Deleted : mtSuperElement\tests\Beam2DCompTX_FX.py
Deleted : mtSuperElement\tests\Beam2DCompTX_FY.py
Deleted : mtSuperElement\tests\Beam2DCompTY.py
Deleted : mtSuperElement\tests\Beam2DCompTY_FX.py
Deleted : mtSuperElement\tests\Beam2DCompTY_FY.py
Deleted : mtSuperElement\tests\Beam2DCompX.py
Deleted : mtSuperElement\tests\Beam2DFrequencyAnalysis.py
Deleted : mtSuperElement\tests\Beam2DFrequencyAnalysisFree.py
Deleted : mtSuperElement\tests\Beam2DTri.py
Deleted : mtSuperElement\tests\Beam2DGuyanDynamic.py
Deleted : mtSuperElement\tests\Beam2DGuyanStatic.py

Deleted : mtSuperElement\tests\Beam3D.py
Deleted : mtSuperElement\tests\Beam3DComp.py
Deleted : mtSuperElement\tests\Beam3DCompFX.py
Deleted : mtSuperElement\tests\Beam3DCompFY.py
Deleted : mtSuperElement\tests\Beam3DCompFYAmp.py
Deleted : mtSuperElement\tests\Beam3DCompTX.py
Deleted : mtSuperElement\tests\Beam3DCompTX_FY.py
Deleted : mtSuperElement\tests\Beam3DCompTY.py
Deleted : mtSuperElement\tests\Beam3DCompTY_FX.py
Deleted : mtSuperElement\tests\Beam3DCompX.py
Deleted : mtSuperElement\tests\Beam3DFrequencyAnalysis.py
Deleted : mtSuperElement\tests\Beam3DFrequencyAnalysisFree.py
Deleted : mtSuperElement\tests\Beam3DTetra.py
Deleted : mtSuperElement\tests\defoCentrCBSESRIPR.py
Deleted : mtSuperElement\tests\defoCentrGSESRIPR.py

---------------------------------------------------------------------

Deleted : abrawal\banc18ER\battery\bladeCasingEngagementFSEGuyan.py
Deleted : abrawal\banc18ER\battery\bladeCentrifugeLoadBSECraig.py

Deleted : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSECraig.py
Deleted : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSEGuyan.py

Deleted : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\coarseMeshEasBSECraig.py
Deleted : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSECraig.py
Deleted : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSEGuyan.py
Deleted : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSECraig.py
Deleted : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSEGuyan.py

Deleted : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSECraig.py
Deleted : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSEGuyan.py

Cas-tests ajoutés

Added : mtSuperElement\tests\Beam2D_1.py
Added : mtSuperElement\tests\Beam2D_2.py
Added : mtSuperElement\tests\Beam2DComp_1.py
Added : mtSuperElement\tests\Beam2DComp_2.py
Added : mtSuperElement\tests\Beam2DCompFX_1.py
Added : mtSuperElement\tests\Beam2DCompFX_2.py
Added : mtSuperElement\tests\Beam2DCompFY_1.py
Added : mtSuperElement\tests\Beam2DCompFY_2.py
Added : mtSuperElement\tests\Beam2DCompTX_1.py
Added : mtSuperElement\tests\Beam2DCompTX_2.py
Added : mtSuperElement\tests\Beam2DCompTX_FX_1.py
Added : mtSuperElement\tests\Beam2DCompTX_FX_2.py
Added : mtSuperElement\tests\Beam2DCompTX_FY_1.py
Added : mtSuperElement\tests\Beam2DCompTX_FY_2.py
Added : mtSuperElement\tests\Beam2DCompTY_1.py
Added : mtSuperElement\tests\Beam2DCompTY_2.py
Added : mtSuperElement\tests\Beam2DCompTY_FX_1.py
Added : mtSuperElement\tests\Beam2DCompTY_FX_2.py
Added : mtSuperElement\tests\Beam2DCompTY_FY_1.py
Added : mtSuperElement\tests\Beam2DCompTY_FY_2.py
Added : mtSuperElement\tests\Beam2DCompX_1.py
Added : mtSuperElement\tests\Beam2DCompX_2.py
Added : mtSuperElement\tests\Beam2DFrequencyAnalysis_1.py
Added : mtSuperElement\tests\Beam2DFrequencyAnalysis_2.py
Added : mtSuperElement\tests\Beam2DFrequencyAnalysisFree_1.py
Added : mtSuperElement\tests\Beam2DFrequencyAnalysisFree_2.py
Added : mtSuperElement\tests\Beam2DTri_1.py
Added : mtSuperElement\tests\Beam2DTri_2.py
Added : mtSuperElement\tests\Beam2DGuyan_1.py
Added : mtSuperElement\tests\Beam2DGuyan_2.py
Added : mtSuperElement\tests\Beam2DGuyanStatic_1.py
Added : mtSuperElement\tests\Beam2DGuyanStatic_2.py

Added : mtSuperElement\tests\Beam3D_1.py
Added : mtSuperElement\tests\Beam3D_2.py
Added : mtSuperElement\tests\Beam3DComp_1.py
Added : mtSuperElement\tests\Beam3DComp_2.py
Added : mtSuperElement\tests\Beam3DCompFX_1.py
Added : mtSuperElement\tests\Beam3DCompFX_2.py
Added : mtSuperElement\tests\Beam3DCompFY_1.py
Added : mtSuperElement\tests\Beam3DCompFY_2.py
Added : mtSuperElement\tests\Beam3DCompFYAmp_1.py
Added : mtSuperElement\tests\Beam3DCompFYAmp_2.py
Added : mtSuperElement\tests\Beam3DCompTX_1.py
Added : mtSuperElement\tests\Beam3DCompTX_2.py
Added : mtSuperElement\tests\Beam3DCompTX_FY_1.py
Added : mtSuperElement\tests\Beam3DCompTX_FY_2.py
Added : mtSuperElement\tests\Beam3DCompTY_1.py
Added : mtSuperElement\tests\Beam3DCompTY_2.py
Added : mtSuperElement\tests\Beam3DCompTY_FX_1.py
Added : mtSuperElement\tests\Beam3DCompTY_FX_2.py
Added : mtSuperElement\tests\Beam3DCompX_1.py
Added : mtSuperElement\tests\Beam3DCompX_2.py
Added : mtSuperElement\tests\Beam3DFrequencyAnalysis_1.py
Added : mtSuperElement\tests\Beam3DFrequencyAnalysis_2.py
Added : mtSuperElement\tests\Beam3DFrequencyAnalysisFree_1.py
Added : mtSuperElement\tests\Beam3DFrequencyAnalysisFree_2.py
Added : mtSuperElement\tests\Beam3DTetra_1.py
Added : mtSuperElement\tests\Beam3DTetra_2.py
Added : mtSuperElement\tests\defoCentrCBSESRIPR_1.py
Added : mtSuperElement\tests\defoCentrCBSESRIPR_2.py
Added : mtSuperElement\tests\defoCentrGSESRIPR_1.py
Added : mtSuperElement\tests\defoCentrGSESRIPR_2.py

Added : mtSuperElement\tests\tools\superElementNew.py
Added : mtSuperElement\tests\tools\loadings.py
Added : mtSuperElement\tests\tools\Beam.py

---------------------------------------------------------------------

Added : abrawal\banc18ER\battery\bladeCasingEngagementFSEGuyan_1.py
Added : abrawal\banc18ER\battery\bladeCasingEngagementFSEGuyan_2.py
Added : abrawal\banc18ER\battery\bladeCentrifugeLoadBSECraig_1.py
Added : abrawal\banc18ER\battery\bladeCentrifugeLoadBSECraig_2.py

Added : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSECraig_1.py
Added : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSECraig_2.py
Added : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSEGuyan_1.py
Added : abrawal\banc18ER\bladeCasingEngagement\refRefAnalysis\refBAm01FSEGuyan_2.py

Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\coarseMeshEasBSECraig_1.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\coarseMeshEasBSECraig_2.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSECraig_1.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSECraig_2.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSEGuyan_1.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshEasFSEGuyan_2.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSECraig_1.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSECraig_2.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSEGuyan_1.py
Added : abrawal\banc18ER\bladeCentrifugeLoad\RefBlade\refMeshSriFSEGuyan_2.py

Added : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSECraig_1.py
Added : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSECraig_2.py
Added : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSEGuyan_1.py
Added : abrawal\banc18ER\casingRotAnalysis\RefBlade\Ref2600EasVE5P300Mu035FSEGuyan_2.py

Added : abrawal\banc18ER\tools\banc18ER_1.py
Added : abrawal\banc18ER\tools\banc18ER_2.py
Added : abrawal\banc18ER\tools\bladeCasingCheck_1.py
Added : abrawal\banc18ER\tools\bladeCasingCheck_2.py
Added : abrawal\banc18ER\tools\bladeCentrifugeLoad_1.py
Added : abrawal\banc18ER\tools\bladeCentrifugeLoad_2.py
Added : abrawal\banc18ER\tools\superElementNew.py

Claire Hennuyer 2016/04/07

commit/2016/04_07.txt · Last modified: 2018/05/04 15:46 by boman