Table of Contents
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.
- D'abord, on créé deux objets
Metafor
, l'un étant associé au domaine FEM (interactionFieldApplicator
), l'autre au domaine SE (interactionGuyanSuperElementInteraction
ouCraigBamptonSuperElementInteraction
selon le type choisi). - D'une part, on construit le modèle FEM, et on récupère le
FieldApplicator
associé au futur super-élément. - D'autre part, on construit le modèle SE :
- On créé l'interaction
Guyan/CraigBamptonSuperElementInteraction
. - On fixe le
superElemBuiltFlag
àFalse
. - On associe le
FieldApplicator
à laGuyan/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).
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().
- On importe le super-élément stocké dans le sous-dossier <currentWorkDirectory>/Creation via un
SuperElementImporter
(dans le même esprit queBaconImporter
) :- 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)
où
SEVolume
correspond au volume géométrique sur lequel va reposer la cellule élémentaire, etvecSuperElementPoints
correspond au vecteur des points topologiques de la cellule i.e. les noeuds retenus.
- 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…) - On fixe le
superElemBuiltFlag
àTrue
. - 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).
- On associe le volume géométrique
SEVolume
(resp. la side géométriqueSESide
), créé(e) lors de l'importation du super-élément, à l'interaction. - On applique les conditions aux limites via les groupes de noeuds Retenus.
- On définit le type d'intégration et tous les paramètres classiques de calcul.
- 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 unGuyan/CraigBamptonSuperElementValueExtractorUse
, les valeurs des modes étant stockées dans les fichiers modesValues_Group_<No>_<Nature>_<Variant>.txt.
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
etCraigBamptonSuperElementValueExtractorUse
- Ajout de deux opérateurs
operator«
etoperator»
dans les classesMatrix
etVector
pour la sauvegarde (resp. le chargement) des matrices réduites et des modes statiques de liaison dans une archive viaOutArchive
(resp. à partir d'une archiveInArchive
)
- Modification du fichier
battery.py
afin que tous les cas-tests des modulesmtSuperElement.tests
etabrawal.banc18ER.battery
puissent fonctionner (fichiers execfile). - Implémentation d'une fonction
writeTSC()
dansSuperElement
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)
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
, etBeam3DTetra
. - 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'objetfreqAnalysis
, et en particulier à celle demechanicalMatrices
, et des matrices de type StrMatrixBase qui la définissent (utilisation de getClone() ou pas ?).
⇒ Première correction : ajouts de incRef() et decRef() dansFrequencyAnalysisMethod
,GuyanSuperElement
, etSolverManager
car la classeLinearSolver
dérive deRefCounted
.
⇒ A régler définitivement pour mon prochain commit.
- Une toute petite différence sur les résultats des cas-tests
defoCentrCBSESRIPR
etdefoCentrGBSESRIPR
entre l'ancienne et la nouvelle structure est observée ⇒ à vérifier.
Cas-tests abrawal
- Les fichiers de base
banc18ER.py
,bladeCasingCheck.py
, etbladeCentrifugeLoad.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
, etbladeCentrifugeLoad_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