commit:2016:07_22
Table of Contents
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èreSuperElementBuilder
- 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
ouGuyanSuperElementInteraction
)
- 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 premierSuperElement“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