===== 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 (interaction ''FieldApplicator''), l'autre au domaine SE (interaction ''GuyanSuperElementInteraction'' ou ''CraigBamptonSuperElementInteraction'' 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'' à 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 **/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___.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 (,) de chaque noeud appartenant au groupe n° (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 **/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)
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.
- 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étrique ''SESide''), 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 un ''Guyan/CraigBamptonSuperElementValueExtractorUse'', les valeurs des modes étant stockées dans les fichiers **modesValues_Group___.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@ulg.ac.be|Claire Hennuyer]] 2016/04/07 //