===== 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 //