commit:2016:10_11
Table of Contents
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 fonctiongetSuperElementImporter
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 fonctionbuildInteraction()
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à leDbNodalValueExtractor
). - 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
Test DampM = 1.0e3
Test DampPhi = 0.05 (pas d'amortissement modal en FEM)
Test DampPhi = 0.005 (pas d'amortissement modal en FEM)
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