===== 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
{{ :commit:2016:canteliver3d_se_fem_01.png?500 |}}
* 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.
{{:commit:2016:canteliver3d_se_fem_02.png?200|}}{{:commit:2016:canteliver3d_se_fem_03.png?200|}}{{:commit:2016:canteliver3d_se_fem_04.png?200|}}
* 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)
{{:commit:2016:canteliver3d_se_fem_05.png?200|}}{{:commit:2016:canteliver3d_se_fem_06.png?200|}}{{:commit:2016:canteliver3d_se_fem_07.png?200|}}
* Strain Gauge : positionnée à 15mm de l'extrémité libre et de 0.1mm de long :
* Déformation longitudinale
* Déformation à travers l'épaisseur
{{ :commit:2016:canteliver3d_se_fem_08.png?500 |}}
* Extracteur Energétique :
* Energies
{{ :commit:2016:canteliver3d_se_fem_09.png?500 |}}
* Travaux
{{ :commit:2016:canteliver3d_se_fem_10.png?500 |}}
* 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)
{{ :commit:2016:canteliver3d_se_fem_11.png?500 |}}
* Extracteur Amplitudes des modes des SE :
{{ :commit:2016:canteliver3d_se_fem_12.png?500 |}}
==== 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 :
{{:commit:2016:canteliver3ddampk_se_fem_01.png?300|}}{{:commit:2016:canteliver3ddampk_se_fem_02.png?300|}}
* Energy
{{ :commit:2016:canteliver3ddampk_se_fem_03.png?500 |}}
* Work of forces
{{ :commit:2016:canteliver3ddampk_se_fem_04.png?500 |}}
* Modal Amplitude
{{ :commit:2016:canteliver3ddampk_se_fem_05.png?500 |}}
=== Test DampM = 1.0e3 ===
* Amplitude des déplacement et jauges de défo :
{{:commit:2016:canteliver3ddampm_se_fem_01.png?300|}}{{:commit:2016:canteliver3ddampm_se_fem_02.png?300|}}
* Energy
{{ :commit:2016:canteliver3ddampm_se_fem_03.png?500 |}}
* Work of forces
{{ :commit:2016:canteliver3ddampm_se_fem_04.png?500 |}}
* Modal Amplitude
{{ :commit:2016:canteliver3ddampm_se_fem_05.png?500 |}}
=== Test DampPhi = 0.05 (pas d'amortissement modal en FEM) ===
* Amplitude des déplacement et jauges de défo :
{{:commit:2016:canteliver3ddampphi_se_fem_01.png?300|}}{{:commit:2016:canteliver3ddampphi_se_fem_02.png?300|}}
* Energy
{{ :commit:2016:canteliver3ddampphi_se_fem_03.png?500 |}}
* Work of forces
{{ :commit:2016:canteliver3ddampphi_se_fem_04.png?500 |}}
* Modal Amplitude
{{ :commit:2016:canteliver3ddampphi_se_fem_05.png?500 |}}
=== Test DampPhi = 0.005 (pas d'amortissement modal en FEM) ===
* Amplitude des déplacement et jauges de défo :
{{:commit:2016:canteliver3ddampphi2_se_fem_01.png?300|}}{{:commit:2016:canteliver3ddampphi2_se_fem_02.png?300|}}
* Energy
{{ :commit:2016:canteliver3ddampphi2_se_fem_03.png?500 |}}
* Work of forces
{{ :commit:2016:canteliver3ddampphi2_se_fem_04.png?500 |}}
* Modal Amplitude
{{ :commit:2016:canteliver3ddampphi2_se_fem_05.png?500 |}}
==== 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 &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
--- //[[L.Papeleux@ulg.ac.be|Luc Papeleux]] 2016/10/11 //