===== 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 //