Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2016:07_22

Commit 2016-07-25

SuperElement : Nettoyage structure 2

Le gros du présent travail consiste en la séparation des structures de construction et d'utilisation des super-éléments.

La construction passe par de nouvelles classes SuperElementBuilder et l'utilisation via la structure usuelle de Metafor : les Super-Elements dérivent de mtElement, utilisent l'ElementFactory, a ses propriétés élémentaires spécifiques, …

SuperElementBuilder : Build Of

  • Extraction de tous le code de construction des SuperElements vers les classes GuyanSuperElementBuilder, CraigtBamptonSuperElementBuilder, avec la classe mère SuperElementBuilder
  • Le constructeur passe le numéro de SE (identification des fichiers, volumeSE, …) et le domain du modèle FEM
  • La frontière (boundary) peut dorénavant être introduite en plusieurs objets
  • Les extracteurs (DbNodalValueExtractor sur TX|TY|TZ) sont directement définis dans le builder
  • La création du SE & écriture sur disque est fait à travers la fonction computeSuperElement()
  • interface des SEBuilders :
seBuilder = CraigBamptonSuperElementBuilder(no, domain) # no : numéro du SE / domain : du modèle FEM
seBuilder = GuyanSuperElementBuilder(no, domain)        # no : numéro du SE / domain : du modèle FEM
seBuilder.setNbModes(nbModes)                           # nombre de modes à interface fixes (CB only)
seBuilder.addInteraction(inter)                         # ajout des interactions constitutives du SE
seBuilder.addBoundary(boundary)                         # ajout des objets définissant la frontière retenue du SE
seBuilder.addExportedGroup(grp)                         # ajout de groups sauvegardés dans le SE
seBuilder.setSolver(solver)                             # Définition du solver utilisé pour construire le SE (dss par défaut)
seBuilder.setSymmetriseK(_symK)                         # force la symétrisation des matrices de construction du SE
SEBuilder.addValueExtractor(no, DbNodalValueExtractor(gobject, Field1D(TX, RE))) # ajout d'extracteurs de déplacement (Field1D(TX, RE), Field1D(TY, RE), Field1D(TZ, RE)) sur les noeuds condensés
seBuilder.computeSuperElement()                         # appel à la fonction de calcul et de sauvegarde du SE

* Une fonction objective de construction des SE (démontrant l'utilisation des builders) se trouve dans le module mtSuperElement.tools.utilities : SuperElementBuilderObjF * le Builder génère 2 fichiers : superElement“no”.py et SE_“no”.gz dans le répertoire de construction

SuperElementInteraction : Use of

  • L'utilisation d'un SE passe toujours :
    • par la lecture du fichier python de définition topologique du SE (superElement“no”.py).
    • par la configuration d'une interaction (CraigBamptonSuperElementInteraction ou GuyanSuperElementInteraction)
  • Procédure de lecture :
    • Ce dernier copiant aussi le fichier de données (SE_“no”.gz) dans le répertoire d'utilisation.
    • Un exemple de procédure d'importation du module de SE se trouve dans le fichier : oo_meta/mtSuperElement/tools/utilities.py.
def getSuperElementImporter(seNo, domain, buildWDir, seIndex=0):
    seName = 'superElement'+str(seNo)
    #wDirCreate = os.path.split(os.getcwd())[0]+os.sep+'Creation'
    import imp
    (file, pathName, description) = imp.find_module(seName, [buildWDir])    
    seModule = imp.load_module(seName, file, pathName, description)
    #
    sei = seModule.SuperElementImporter(domain, buildWDir, seIndex)
    #sei.execute()
    #sei.importAllGroups()
    #sei.generateAllExtractors(seInter)
    #
    return sei
  • Il est à noter que la procédure décrite ci dessus est plus fiable que l'ajout du buildDir dans le sys.path (auquel cas le premier SuperElement“no”.py trouvé sera chargé (pas nécessairement le bon)
  • l'importation n'est effectuée que à l'execution du SuperElementImporter
  • L'import de tous les groupes se fait via sei.importAllGroups()
  • L'import sélectif des groupes dont on a besoin à travers leur numéro numéro via sei.importGroup“no”()
  • Tous les extracteurs peuvent être construits (après création de la SEInteraction : sei.generateAllExtractors(seInter))
  • De même les extracteurs sur noeuds condensés peuvent être générés au coup par coup à travers le sei (sei.generateExtractor“no”(seInter, fname))
  • ou directement dans le jeux de données qui permet de modifier les numéro d'extracteurs, et nom de fichier (vm.add(newVMNo, SuperElementValueExtractor(seInter, no), 'newName')
  • Attention, actuellement seuls les DBValueExtractors de déplacement sont accessible (pour les extracteurs complexes, genre theta ou dRayon, il faut encore implémenter ce qu'il faut !!!)
  • la génération de l'interaction passe par la définition d'un propelem, d'une interaction et du push du volume (nb : tout ca devrait pouvoir être généré via le sei dans le fichier superelement.py ⇒ todo)
  • Guyan :
    prpSE = ElementProperties(GuyanSuperElement)
    seInter= GuyanSuperElementInteraction(no)
    seInter.addProperty(prpSE)
    seInter.push(volumeSet(p['SEIndex'] + 1))
    interactionSet.add(seInter)
  • CraigtBampton :
    prpSE = ElementProperties(CraigtBamptonSuperElement)
    seInter= CraigtBamptonSuperElementInteraction(no)
    seInter.setNbModes(p['nbNormalModes'])
    seInter.addProperty(prpSE)
    seInter.push(volumeSet(p['SEIndex'] + 1))
    interactionSet.add(seInter)
  • Actuellement, toujours 1 seul element par interaction (pas de push multiples) et il est toujours nécessaire de redéfinir le nombre de modes à interface fixe utilisé pour construire le CBSE

Forces centrifuges sur SE

  • Le calcul des forces centrifuges implémenté par claire au commit précédent n'est actuellement plus en place.
  • Un calcul de transfert de forces externes est implémentée : $F_{Ext} = \alpha^T f_{Ext}$ et est relu comme force externe dans le jeux de donnée d'utilisation (et interfacé à travers le rotation factor pour l'IQSI)
  • Malheureusement, le vecteur de forces externes FEM $f_{Ext}$ ne prend pas encore en compte tous les termes de l'équilibre ⇒ il faut repenser l'ensembles des possibilités !!!

Divers sur SE

  • Grosse augmentation des TSC_LEAKS pour les tests de construction sans pré-contrainte (et donc sans intégration temporelle). L'appel au destructeur de metafor doit être fait…

Divers

  • mtFEMBase/element : ajout de const
  • mtMath::Matrix : resize de la matrix dans l'opérateur de lecture (InArchive &operator»)
  • mtMath::Vector : resize du vector dans l'opérateur de lecture (InArchive &operator»)
  • mtMath::SkyLineMatrix : symetriseAfcAcf(WithSolve &_Acf) → NOT_IMPLEMENTED (le code est buggé ⇒ suppression de mtSuperElement.tests.beamCentrifugeLoad.beam3DEas20000Rpm20ModesSkyLineSymK)
  • sticking : ajout de ${PROJECT_SOURCE_DIR}/mtElements/sticking dans les CMakeLists.txt
  • sticking : Ajout de 2 tests de mise en charge centrifuge

Fichiers ajoutés/supprimés

added : oo_meta\mtSuperElement\tools
added : oo_meta\mtSuperElement\tools\utilities.py
added : oo_meta\mtSuperElement\src\CraigBamptonSuperElementBuilder.h/cpp
added : oo_meta\mtSuperElement\src\GuyanSuperElementBuilder.h/cpp
added : oo_meta\mtSuperElement\src\SuperElementBuilder.h/cpp
added : oo_meta\mtSuperElement\src\SuperElementElShcuts.h/inl
added : oo_meta\mtSuperElement\src\SuperElementValueExtractor.h/cpp
deleted: oo_meta\mtSuperElement\tests\tools\utilities.py
deleted: oo_meta\mtSuperElement\tests\tools\postObjectiveFunctions.py
deleted : oo_meta\mtSuperElement\src\CraigBamptonSuperElementValueExtractor.h/cpp
deleted : oo_meta\mtSuperElement\src\CraigBamptonSuperElementValueExtractorUse.h/cpp
deleted : oo_meta\mtSuperElement\src\GuyanSuperElementValueExtractor.h/cpp
deleted : oo_meta\mtSuperElement\src\GuyanSuperElementValueExtractorUse.h/cpp

Tests ajoutés/supprimés

added : oo_meta\apps\sticking\centrifugeLoad3d.py
added : oo_meta\apps\sticking\centrifugeCyclicLoad3d.py
deleted : oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000Rpm20ModesSkyLineSymK_1.py
deleted : oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000Rpm20ModesSkyLineSymK_2.py

Luc Papeleux 2016/07/25

commit/2016/07_22.txt · Last modified: 2018/05/04 15:55 by boman

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki