====== Commit 2016-06-09 ====== Dans ce commit, j'ai * ajouté les [[#Cas tests écrasement d'aspérités|cas tests écrasement d'aspérités]] utilisés dans la procédure de couplage MetaLub-Metafor * ajouté les [[#Cas tests Norton-Hoff|cas tests "fluides"]] réalisés avec la loi de Norton-Hoff * ajouté deux [[#Rezoner|rezoners]] ALE * fait une petite modification dans le calcul de l'[[#Contact|aire de contact]] * corrigé un petit bug lié au fichier de [[#Licence MingW32|licence]] sur un PC 32bits ===== Cas tests écrasement d'aspérités ===== J'ai ajouté les cas tests d'écrasement d'aspérités en présence de lubrifiant que j'utilise avec la procédure de couplage [[http://metafor.ltas.ulg.ac.be/dokuwiki/metalub/lubri/doc/cpltheory#coupling|MetaLub-Metafor]]. Les simulations sont réalisées en 2D pour des raisons de temps de calcul. On a choisi d’étudier des aspérités longitudinales. Celles-ci sont orientées parallèlement à la direction de laminage (la direction hors plan est la direction de laminage). Il s’agit d’une configuration représentative de cas de laminage avec des cylindres rectifiés très largement utilisés sur les lignes de production. L'allongement de la tôle du au laminage est pris en compte au moyen de l'état plan généralisé qui permet de faire varier la dimension hors plan au cours de la simulation. Une condition similaire est appliquée sur le domaine fluide. Pour l’instant, le modèle éléments finis permet de traiter trois types de géométries (cfr. figures ci-dessous): - une demi-aspérité triangulaire - deux demi-aspérités triangulaires - un profil réel mesuré sur une tôle ou un cylindre de laminoir {{ :metalub:lubri:commits:2015:mtf_asptriang1.png?500 |}} {{ :metalub:lubri:commits:2015:mtf_asptriang2.png?500 |}} {{ :metalub:lubri:commits:2015:mtf_asppreel.png?500 |}} Sur ces figures, le lubrifiant est représenté en jaune. Il est modélisé à l'aide de la loi de Norton-Hoff. Le modèle a été paramétré pour traiter des cas sans lubrifiant. Pour chacune des géométries, j'ai donc ajouté un cas test avec et sans lubrifiant. Il y a donc 6 nouveaux cas tests qui ont été introduits dans le répertoire **oo_meta\aspCrushing\tests\twoDhalf**: [add] triang1Dry.py [add] triang1Lub.py [add] triang2Dry.py [add] triang2Lub.py [add] reelDry.py [add] reelLub.py [add] profilBertrandieBattery.ascii [add] \bCond\res_bc_x.ascii [add] \bCond\res_bc_ht.ascii [add] \bCond\res_bc_lxx.ascii [add] \bCond\res_bc_lxx_lub.ascii [add] \bCond\res_bc_p.ascii [add] \bCond\res_bc_pb_rey.ascii Les utilitaires qui permettent: * de définir la géométrie et le maillage * d'imposer les conditions aux limites * de calculer les grandeurs utilisées par MetaLub lors du couplage (aire relative de contact pression moyenne au sommet des aspérités, distance entre les lignes moyennes de l'outil et de la tôle, etc.) * etc. ont été ajoutés au répertoire **\oo_meta\aspCrushing\tools\python\** [add] aspExtractors.py [add] bCondPb.py [add] geoSpline.py [add] geoTriang.py [add] geoTwoAsp.py [add] rollingAsp.py ===== Cas tests Norton-Hoff ===== J'ai ajouté les cas tests avec lesquels j'ai validé la modélisation d'un fluide newtonien avec la loi de Norton-Hoff. Ces cas tests été ajoutés dans **oo_meta\fluidMaterial\tests\** [add] rayleighStep.py [add] cavity.py [add] channelFSI.py [add] couette.py [add] couetteCirc.py [add] padBearing.py [renaming] poiseuille_NH.py -> poiseuille.py [delete] couetteMacro_NH.py [delete] couetteMacro_NH_2.py [delete] TestNortonHoffHShear.py Les fonctions matlab permettant de post-traiter les cas évoqués ci-dessous ont été ajoutées dans * le répertoire **oo_meta\fluidMaterial\tests\matlab** [add] mainCavity.m [add] mainCouetteCirc.m [add] mainFSI.m [add] mainPadBearing.m [add] mainRayleigh.m * le répertoire **oo_meta\fluidMaterial\tools\matlab** [add] loadCavity.m [add] loadCouette.m [add] loadCouetteCirc.m [add] loadFSI.m [add] loadPadBearing.m [add] loadRayleigh.m [add] refCavity\openFom_x_vy.ascii [add] refCavity\openFom_y_vx.ascii [add] refCavity\Zien_x_vy_Re0.ascii [add] refCavity\Zien_y_vx_Re0.ascii [add] refFSI\degroote_pA.ascii [add] refFSI\degroote_pB.ascii [add] refFSI\degroote_xA.ascii [add] refFSI\degroote_xB.ascii [add] refFSI\neumann_pA.ascii [add] refFSI\neumann_pB.ascii [add] refFSI\neumann_xA.ascii [add] refFSI\neumann_xB.ascii [renaming] loadPoiseuille2D.m -> loadPoiseuille.m [delete] loadCouette2D.m [delete] postMatlabCouette2D.py ===== Rezoner ===== Deux nouveaux rezoner ont été ajoutés. Ceux-ci sont brièvement décrits ci-dessous. ==== MirrorLineReZoner ==== Méthode permettant de repositionner les noeuds d'une ligne en face des noeuds de la ligne en vis à vis. Le nombre de noeuds de chacune des lignes doit évidemment être identique. [added] oo_meta\mtALE\MirrorLineReZoner.h/.cpp [added] oo_meta\mtALE\ProjWireOnWireReZoner.h/.cpp ==== ProjWireOnWireReZoner ==== Repositionne les noeuds du wire "target" en effectuant la projection verticale ou horizontale des noeuds du wire "ref". Les wire doivent posséder le même nombre de noeuds. ===== Contact ===== Après discussion avec Gaëtan, j'ai changé la manière de prendre en compte l'épaisseur hors plan dans le calcul de l'aire relative de contact. Auparavant, on allait rechercher cette information sur les éléments. On passe maintenant par le shortcut de l'interaction de contact (cf. fonction fillOutPlaneThicknessSlaveBoundaries()). Cette modif est utile pour le cas où on met en contact un outil avec les noeuds d'une ligne à l'intérieur de la matière. Dans le cas de mes simulations d'écrasement d'aspérités, ces noeuds sont situés à l'interface entre le domaine fluide et le domaine solide. Au lieu d'utiliser la moyenne des épaisseurs hors plan associées au fluide et au solide dans le calcul de l'aire de contact, je peux maintenant utiliser l'épaisseur hors plan de la tôle. ===== Licence MingW32 ===== On a rencontré quelques problèmes avec les licences fournies à ArcelorMittal sous MingW32. Le fait d'utiliser une limite de temps en plus de la limitation en adresse MAC engendrait un "FATAL ERROR: Bad Key!" Le problème venait du fait que les licences étaient générées sur un PC 64 bits et utilisées sous MingW en 32 bits. En effet, la manière dont les time_t sont codés en 32 et 64 bits sous MingW diffère. Après en avoir discuté avec Romain et Luc, on a effectué les modifications ci-dessous dans "TimeLimitedLicense.cpp" : time_t a été remplacé par MT_UINT64. Donc, on écrit et on lit les infos liées à la date de fin de la licence au format 64 bits que l'on soit sur une architecture 32 bits ou 64 bits. TimeLimitedLicense::encrypt(...) OLD: code += encoder.code(expiredTime); NEW: code += encoder.code(expiredTime); TimeLimitedLicense::decrypt(...) OLD: expiredTime = decoder.decode(); NEW: expiredTime = decoder.decode();