Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2016:10_11

Commit 2016-10-11

Amélioration super éléments

Super Elements

Simplification de la syntaxe :

  • le chargement du fichier python définissant le superElement (le SuperElementImporter) se fait au travers la fonction getSuperElementImporter définie dans le module “mtSuperElement.tools.utilities”
  • le chargement du modèle (fonction sei.load()) est inclu à la fonction getSuperElementImporter
  • le SuperElementImporter sait désormais quel type de Super-Elément a été généré (G/CB), le nombre de modes, et la fonction buildInteraction() permet la génération de l'interaction et du propElem

(ces 2 objets restant accessibles (pour ajouter de l'amortissement dans le propelem ou utiliser l'interaction dans un extractor)

    sei = getSuperElementImporter(p['SENo'], domain, p['WDirCreate'], p['SEShiftIndex'])
    sei.buildInteraction()
    sei.importAllGroups()
    if p['dampTI'] == True:
        sei.SEPrp.put(DAMPSTIFF, p['dampK'])
        sei.SEPrp.put(DAMPMASS,  p['dampM'])
        sei.SEPrp.put(DAMPMODAL, p['dampMod'])    

Extracteurs dans les SE :

  • Ajout d'un DbGeoPointValueExtractor permettant d'extraire le déplacement d'un point quelquonque (pour un noeud non retenu, existait déjà le DbNodalValueExtractor).
  • Ajout d'un extracteur d'amplitude modale (CB)
  • construction (le group 4 contenant un noeud non retenu):
    SEBuilder.addValueExtractor( 1, DbNodalValueExtractor(groupset(p['index']+4), Field1D(TX, RE)))
    SEBuilder.addValueExtractor(11, DbGeoPointValueExtractor([pointset(p['index']+11),], geometry.getMesh(), Field1D(TX, RE))) 
  • Utilisation : les numéros 1, 11 sont ceux du SEBuilder
    valuesmanager.add(121, SuperElementValueExtractor(sei.SEInteraction, 1), 'dxJaugeUpSE')
    valuesmanager.add(131, SuperElementValueExtractor(sei.SEInteraction, 11), 'dxJaugeUpGeoPtSE')
    valuesmanager.add(201, ModalAmplitudeCBSEValueExtractor(sei.SEInteraction, 0, sei.getNbModes()), 'modesAmpl')
  • Ajout d'un extracteur de jauge (évolution de la position de 2 GeoPoints) :
    • Lors de la phase de création, Ajout d'un “StrainGaugevalueExtractor”
 
    SEBuilder.addValueExtractor(31, StrainGaugeValueExtractor([pointset(p['index']+11), pointset(p['index']+14)], geometry.getMesh())) 
  • Lors de la phase d'utilisation, ajout d'un StrainGaugeSuperElementValueExtractor (nb : les points ont automatiquement été importés dans le SuperElementImporter (sei)) :
 
    valuesmanager.add(151, StrainGaugeSuperElementValueExtractor(sei.SEInteraction, 31, pointset(p['index']+11), pointset(p['index']+14)), 'sgLongSE') 
  • Ajout d'un EnergySEValueExtractor (spécifique aux SE, les TdFieldsValuesExtractors ne sont pas applicables). Etant donné la linéarité des éléments, il est possible d'extraire l'énergie potentielle :
    valuesmanager.add(161, EnergySEValueExtractor(sei.SEInteraction, THERMODYN_EN_CIN),    'kineticEnergySE')
    valuesmanager.add(162, EnergySEValueExtractor(sei.SEInteraction, THERMODYN_POT_INT),  'PotentialEnergySE')
    valuesmanager.add(163, EnergySEValueExtractor(sei.SEInteraction, THERMODYN_TRAV_FINT), 'fintWorkSE')
    valuesmanager.add(164, EnergySEValueExtractor(sei.SEInteraction, THERMODYN_TRAV_FEXT), 'fextWorkSE')
    valuesmanager.add(165, EnergySEValueExtractor(sei.SEInteraction, THERMODYN_TRAV_FDAMP), 'fdampWorkSE')
Exemple :
  • Poutre encastrée libre (60*10*2)
  • Excitation sinuzoidale à son encastrement selon sa 2ème fréquence propre : 7872Hz ($\phi$ = 2874 - 7872 - 10564 - 12371 - …Hz)
  • Excitation sur 10 cycles
  • Maintiens durant 10 cycles
  • Comparaison d'un SE Craig-Bampton 20 modes % au modèle FEM (40*6*2)
  • Nb : on sort du domaine de déformations linéaires (Limite du modèle SE) d'où les différence entre modèles

  • Mesure de déplacement à l'extrémité libre (noeud retenu des SE). On observe clairement les effets non linéaires géométriques au déplacements X.

  • Mesure de déplacement au noeud (non retenu) le plus proche de 15mm de l'extrémité libre (en peau sup)
  • Comparaison avec un geoPoint (ici, par hasard du maillage superposé au noeud)

  • Strain Gauge : positionnée à 15mm de l'extrémité libre et de 0.1mm de long :
    • Déformation longitudinale
    • Déformation à travers l'épaisseur

  • Extracteur Energétique :
    • Energies

  • Travaux

  • Forces externes à l'encastrement (notons que la composante X SE est identiquement nulle tout le long de la simulation : encore une différence notable entre modèle FEM et SE)

  • Extracteur Amplitudes des modes des SE :

Ajout de l'amortissement dans les SuperElements :

  • Construction (lors de la phase d'utilisation) & utilisation d'une matrice d'amortissement C dans le schéma DampedAlphaGeneralizedTimeIntegration
  • La matrice C peut être construite via la formule de Rayleigh sur base des matrices réduites

$$\boldsymbol{C} = a_m \boldsymbol{M} + a_k \boldsymbol{K}$$

  • Pour Craigt-Bampton une matrice d'amortissement modal (pas d'interaction entre modes ⇒ hypothèse de faible amortissement) peut aussi être construite :

$$ \begin{align} \boldsymbol{C}_{ii} &= 2 a_{\phi} \boldsymbol{M}_{ii} \omega_{i} \\ &= 2 a_{\phi} \sqrt{ \boldsymbol{K}_{ii}} \end{align} $$ étant donné $$\boldsymbol{M}_{ii} = 1 $$ (normalisation des modes propres % M) et $$\omega_{i} = \sqrt{ \boldsymbol{K}_{ii}}$$ par construction du SE

Attention, la construction de la matrice d'amortissement modale doit encore être confirmée via développements ou référence. Ca me semble correct % à ce que j'ai rapidement vu, mais demande vérification!!!

Test DampK = 1.0e-6

  • Amplitude des déplacement et jauges de défo :

  • Energy

  • Work of forces

  • Modal Amplitude

Test DampM = 1.0e3

  • Amplitude des déplacement et jauges de défo :

  • Energy

  • Work of forces

  • Modal Amplitude

Test DampPhi = 0.05 (pas d'amortissement modal en FEM)

  • Amplitude des déplacement et jauges de défo :

  • Energy

  • Work of forces

  • Modal Amplitude

Test DampPhi = 0.005 (pas d'amortissement modal en FEM)

  • Amplitude des déplacement et jauges de défo :

  • Energy

  • Work of forces

  • Modal Amplitude

Testing :

  • mtSuperElement/tests/damping : série de tests vibration de poutre encastrée libre à une fréquence propre du modèle numérique suivit de maintiens montrant par comparaison du modèle FEM au modèle SE
    • basés sur les fichiers
      • mtSuperElement\tests\tools\canteliver2DCreate.py
      • mtSuperElement\tests\tools\canteliver2DCompVibr.py
      • mtSuperElement\tests\tools\canteliver3DCreate.py
      • mtSuperElement\tests\tools\canteliver3DCompVibr.py
    • différents types d'éléments (2D/3D - SRIPR/EAS/TRIANGLE/TETRA)
    • différents types de SE (CB/GUYAN)
    • la prise en compte de paramètre d'amortissement différents
    • les différents extracteurs définis ci dessus
  • mtSuperElement\tests\sticking : test de l'effet centrifuge sur le collage de SE
  • mtSuperElement\tests\beamCentrifugeLoad : Ajout de tests en Guyan

mtWear

  • Dérivation de VirtualObject (pour comptage correcte des leaks) des classes :
    • WearCell
    • WearData
    • WearPoint
    • WearTool
  • Management memoire des objets de mtWear via refCounted
  • Ajout de modèles du banc Blisk dans Abrawal

Nettoyage de forme

  • Ajout des constructeurs qui n'étaient pas explicitement appelés (RefCounted(), VirtualObject(), WithDrawable())
  • Nettoyage de variables non nécessaires des PythonObjectivesFunction / PythonValuesExtractors (principalement des référence vers metafor qui empéchaient la destruction de metafor et donc la désallocation propre de la mémoire ⇒ baisse des memLeaks)
  • Modification nas2py & fichiers .nas (détection du mode de codage)
  • mtMath::Matrix : Ajout des fonctions
    • addWith(Matrix &A, int x1=1, int y1=1, int x2=0, int y2=0);
    • addWith(SymMatrix &A, int x1=1, int y1=1, int x2=0, int y2=0);
  • SfIntegrationPoint : Ajout d'une fonction interpolate de mtMath::Vector :
    • mtMath::Vector interpolate(const std::vector<mtMath::Vector> &nodalValues) const;

Divers

  • Suppression de la classe GeoPtValueExtractor et remplacement dans les cas tests par la classe plus générale Db/IFGeoPointValueExtractor
  • battery.py : nettoyage des outputs “running a parallel module”
  • Copra : Correction des PythonObjectiveFunction pour permettre le nettoyage memoire (-99% des memsLeaks)

Matlab

  • Ajout du code 'extrap' en fin des appels à “interp1” la fonction d'interpolation afin de ne plus générer de “NaN” lorsque l'on sort de l'interval de définition de la fonction à interpoler (utilisé pour rééchantillonner des signaux avant fft).

Fichiers ajoutés/supprimés

Adding: oo_meta\mtSuperElement\src\EnergySEValueExtractor.h/cpp
Adding: oo_meta\mtSuperElement\src\ModalAmplitudeCBSEValueExtractor.h/cpp
Adding: oo_meta\mtSuperElement\src\StrainGaugeSuperElementValueExtractor.h/cpp
Adding: oo_meta\mtSuperElement\src\SuperElementBuilderObjectiveFunction.h/cpp
Deleting: oo_meta\mtFEM\extractors\GeoPtValueExtractor.h/cpp  

Tests ajoutés/supprimés

Adding: oo_meta\mtSuperElement\tests\Beam3DYComp_1.py
Adding: oo_meta\mtSuperElement\tests\Beam3DYComp_2.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000RpmGuyan_1.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000RpmGuyan_2.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000RpmGuyanSymK_1.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DEas20000RpmGuyanSymK_2.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DSri20000RpmGuyan_1.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DSri20000RpmGuyan_2.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DSriPr20000RpmGuyan_1.py
Adding: oo_meta\mtSuperElement\tests\beamCentrifugeLoad\beam3DSriPr20000RpmGuyan_2.py
Adding: oo_meta\mtSuperElement\tests\damping  
Adding: oo_meta\mtSuperElement\tests\damping\__init__.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEAS_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DEASGuyan_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX2DSRIPR_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamX3DEAS_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DEAS_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY2DTRI_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamY3DEAS_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DEAS_6.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_1.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_2.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_3.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_4.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_5.py
Adding: oo_meta\mtSuperElement\tests\damping\beamZ3DTetra_6.py
Adding: oo_meta\mtSuperElement\tests\sticking  
Adding: oo_meta\mtSuperElement\tests\sticking\__init__.py
Adding: oo_meta\mtSuperElement\tests\sticking\stick3dCentrLoad_1.py
Adding: oo_meta\mtSuperElement\tests\sticking\stick3dCentrLoad_2.py
Adding: oo_meta\mtSuperElement\tests\sticking\stick3dCentrLoad_3.py
Adding: oo_meta\mtSuperElement\tests\tools\canteliver2DCompVibr.py
Adding: oo_meta\mtSuperElement\tests\tools\canteliver2DCreate.py
Adding: oo_meta\mtSuperElement\tests\tools\canteliver3DCompVibr.py
Adding: oo_meta\mtSuperElement\tests\tools\canteliver3DCreate.py
Deleting: oo_meta\mtSuperElement\tests\defoCentrCBSESRIPR_1.py  
Deleting: oo_meta\mtSuperElement\tests\defoCentrCBSESRIPR_2.py  
Deleting: oo_meta\mtSuperElement\tests\defoCentrGSESRIPR_1.py  
Deleting: oo_meta\mtSuperElement\tests\defoCentrGSESRIPR_2.py  
Deleting: oo_nda\abrawal\banc18ER\tools\banc18ER_1.py  
Deleting: oo_nda\abrawal\banc18ER\tools\banc18ER_2.py  
Deleting: oo_nda\abrawal\banc18ER\tools\bladeCentrifugeLoad_1.py  
Deleting: oo_nda\abrawal\banc18ER\tools\bladeCentrifugeLoad_2.py  
Deleting: oo_nda\abrawal\banc18ER\tools\superElementNew.py  

Luc Papeleux 2016/10/11

commit/2016/10_11.txt · Last modified: 2018/05/04 15:54 by boman