Télécharger usure.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : usure.dgibi
  2. *
  3. *
  4. * Cas-test gracieusement mis a disposition par le LTDS
  5. * Ecole Centrale Lyon (S.Fouvry et S.Garcin)
  6. *
  7. * Ce cas-test appelle les procedures :
  8. *
  9. * @CHCOTAE : initialisation des tables de stockage de resultats
  10. * @CHREP : procedure realisant un changement de repere
  11. * @PCPT : decoupage des pas de temps
  12. * @PRCA1 : Acquisition des donnees de contact
  13. * @PRCA2 : Calcul de la densite d'energie dissipee
  14. * @PRCA3 : Calcul du profil d'usure a appliquer
  15. * @PRCA4 : Calcul du taux d'application et application du profil
  16. * d'usure reparti en profondeur
  17. * @PRCA5 : Calcul des donnees scalaires associees au contact
  18. * @EVN_MNG : identificateur d'evenements
  19. * @EVN_IDT : manageur d'evenements
  20. *______________________________________________________________________
  21.  
  22. * DEFINITION D'UNE BOITE D USURE
  23. *______________________________________________________________________
  24. *
  25. * Dans le jeu de donnees, l'utilisateur doit definir les indices
  26. * suivant pour chaque boite d'usure :
  27.  
  28. * BOX1 = TABL 'BOITE_USURE' ;
  29. * -> Creation de la boite d'usure a stocker dans la table PASAPAS
  30.  
  31. * BOX1.'VOLUME_REPARTITION'
  32. * -> Volume sous la surface usee pour "repartir" l'usure.
  33.  
  34. * BOX1.'SURFACE_APPLICATION'
  35. * -> Surface usee (ou sera appliquee l'usure).
  36.  
  37. * BOX1.'SURFACE_VOISINE'
  38. * -> Surface qui use (en contact avec la surface usee).
  39.  
  40. * BOX1.'SURFACE_APPUI'
  41. * -> Surface delimitant avec 'SUR_APPL' le 'VOLUME_REPARTITION'.
  42.  
  43. * BOX1.'POINT_O_U'
  44. * -> Point servant de reference pour deplacer le maillage.
  45.  
  46. * BOX1.'DIRECTION_APPLICATION'
  47. * -> Vecteur donnant la direction d'application de l'usure.
  48.  
  49. * BOX1.'COEFFICIENT_USURE'
  50. * -> Valeur du coefficient d'usure (en mJ/mm3).
  51.  
  52. * BOX1.'COEFFICIENT_FROTTEMENT'
  53. * -> Valeur du coefficient de frottement.
  54.  
  55. * BOX1.'FACTEUR_ACCELERATION'
  56. * -> Valeur du coefficient d'acceleration (sans unite).
  57.  
  58. * BOX1.'T_INI_US'
  59. * -> Temps ou demarre l'usure.
  60.  
  61. * BOX1.'T_FIN_US'
  62. * -> Temps ou s'arrete l'usure.
  63.  
  64. * BOX1.'PERIODCY'
  65. * -> Periode d'un cycle d'usure.
  66.  
  67. * BOX1.'USURE_CYCLIQUE'
  68. * -> Booleen qui indique le type d'usure.
  69. * Si vrai -> usure cyclique sinon incrementale.
  70.  
  71. * BOX1.'POINT_REF_DELTA'
  72. * -> Point ou l'on recupere les valeurs de glissement et de force
  73. * pour les traces.
  74.  
  75. * Remarques :
  76.  
  77. * 1/ On parle de SURFACE et de VOLUME mais puisqu'il s'agit d'un
  78. * cas-test bidimensionnel, il convient de remplacer ces termes
  79. * respectivement par ligne et surface.
  80.  
  81. * 2/ Les indices 'SURFACE_APPLICATION' et 'SURFACE_VOISINE' contiennent
  82. * les lignes ayant permis de definir le maillage de contact.
  83.  
  84. * 3/ Un indice 'BOITES_USURES' de la table de PASAPAS sera defini
  85. * comme etant un objet de type TABLE. Ainsi dans cette table
  86. * on stockera au bon indice la table BOX1 creee.
  87. * Soit TAB1, la table de PASAPAS, alors
  88. * TAB1.'BOITES_USURES' = 'TABL' ;
  89. * TAB1.'BOITES_USURES'. 1 = BOX1
  90. * .
  91. * .
  92. *
  93. * 4/ Les dimensions sont a donner en mm
  94. *
  95. *
  96. * Presentation du cas-test:
  97. * -------------------------
  98. *
  99. * Modelisation du contact-frottement entre un cylindre et un plan
  100. * Probleme 2D avec prise en compte d'un profil d'usure
  101. * Choix d'un contact de type Maitre-Esclave
  102. * Modele de frottement de Coulomb
  103. * Materiau elastique
  104. *
  105. * Comparaison code a code avec code WearBox du LTDS
  106. * Code Matlab - Abaqus - Python
  107. * Fretting Team - LTDS - Ecole Centrale Lyon
  108. *
  109. *______________________________________________________________________
  110. *
  111. * OPTION DE CALCUL
  112. *______________________________________________________________________
  113. *
  114. * Definition des options de calcul
  115. OPTI DIME 2 ELEM QUA4;
  116. OPTI MODE 'PLAN' 'DEFO';
  117. * Pieces massives => Deformations planes
  118. * OPTI DEBU 1 ;
  119. OPTI SAUV TAILLE 2.e9 8 ;
  120. *
  121. * Booleen pour n'effectuer que le trace du maillage (pas de resolution)
  122. OnlyMesh = FAUX ;
  123. * Maillage grossier
  124. YESFATMS = FAUX ;
  125. * Prendre en compte l'usure du plan ?
  126. OuiUsPla = VRAI ;
  127. * Prendre en compte l'usure du cylindre ?
  128. OuiUsCyl = FAUX ;
  129. *______________________________________________________________________
  130. *
  131. * MAILLAGE
  132. *______________________________________________________________________
  133. *
  134. * - DIMENSIONS GEOMETRIQUES DU MODELE (mm)
  135. * CT -> Cylindre Total BUC -> Boite Usure Cylindre
  136. * PT -> Plan Total BUP -> Boite Usure Plan
  137. FineMS = 0.010 ;
  138. rayon = 4.8 ;
  139. LgrCT = 0.75 ;
  140. EprCT = 0.25 ;
  141. LgrPT = 0.75 ;
  142. EprPT = 0.25 ;
  143. LgrBUC = 0.4 ;
  144. EprBUC = 0.125 ;
  145. LgrBUP = 0.4 ;
  146. EprBUP = 0.125 ;
  147. *
  148. * - MAILLAGE DU CYLINDRE
  149. * -> Dimensions, nombre et taille des elements pour le cylindre
  150. LgrBU = (( ENTI 'SUPERIEUR' (LgrBUC/FineMS/2) ) * FineMS * 2) ;
  151. EprBU = (( ENTI 'SUPERIEUR' (EprBUC/FineMS ) ) * FineMS ) ;
  152. NLgrBU = 2* (ENTI 'PROCHE' (LgrBU / FineMS / 2)) ;
  153. NEprBU = ENTI 'PROCHE' (EprBU / FineMS) ;
  154. GrosMSVC = EprCT / NEprBU ;
  155. GrosMSHC = LgrCT / NLgrBU ;
  156.  
  157. * -> Dimensions du cylindre totale
  158. AlphaCT = ASIN ((LgrCT/2.)/rayon) ;
  159. GapCT = (1. - (COS AlphaCT) ) * rayon ;
  160. HtrCT = GapCT + EprCT ;
  161.  
  162. * -> Dimensions de la boite d usure, partie cylindre
  163. AlphaBU = ASIN ((LgrBU/2.)/rayon) ;
  164. GapBU = (1. - (COS AlphaBU) ) * rayon ;
  165. HtrBU = GapBU + EprBU ;
  166.  
  167. * -> Points
  168. P0 = 0.0 0.0 ;
  169. PCEN = 0.0 rayon ;
  170. PA = (-1*LgrCT/2) GapCT ;
  171. PB = (-1*LgrBU/2) GapBU ;
  172. PC = ( LgrBU/2) GapBU ;
  173. PD = ( LgrCT/2) GapCT ;
  174. PE = ( LgrCT/2) HtrCT ;
  175. PF = (-1*LgrCT/2) HtrCT ;
  176. PG = ( LgrBU/2) HtrBU ;
  177. PH = (-1*LgrBU/2) HtrBU ;
  178.  
  179. * -> Lignes
  180. CAB = CERC 'DINI' GrosMSVC 'DFIN' FineMS PA PCEN PB ;
  181. CBC = CERC NLgrBU PB PCEN PC ;
  182. CCD = CERC 'DINI' FineMS 'DFIN' GrosMSVC PC PCEN PD ;
  183. LDE = DROI NEprBU PD PE ;
  184. LEF = DROI NLgrBU PE PF ;
  185. LFA = DROI NEprBU PF PA ;
  186. LCG = DROI NEprBU PC PG ;
  187. LGH = DROI NLgrBU PG PH ;
  188. LHB = DROI NEprBU PH PB ;
  189.  
  190. SI YESFATMS ;
  191. GrosMSVC = 4. * GrosMSVC ;
  192. CAB = CERC 'DINI' GrosMSVC 'DFIN' FineMS PA PCEN PB ;
  193. CCD = CERC 'DINI' FineMS 'DFIN' GrosMSVC PC PCEN PD ;
  194. LDE = DROI PD PE 'DINI' GrosMSVC 'DFIN' GrosMSVC ;
  195. LEF = DROI PE PF 'DINI' GrosMSVC 'DFIN' GrosMSVC ;
  196. LFA = DROI PF PA 'DINI' GrosMSVC 'DFIN' GrosMSVC ;
  197. FINSI ;
  198.  
  199. * -> Surface boite d'usure (partie en contact-frottement)
  200. SrfBUC = CBC REGL NEprBU (INVE LGH) ;
  201.  
  202. * -> Surface du reste du cylindre
  203. CntrInt = LCG ET LGH ET LHB ;
  204. CntrExt = LDE ET LEF ET LFA ;
  205. SrfCT = DALL (INVE CntrInt) CCD CntrExt CAB 'PLAN' ;
  206.  
  207. SI YESFATMS ;
  208. SrfCT = SURF ((INVE CntrInt) ET CCD ET CntrExt ET CAB) ;
  209. FINSI ;
  210.  
  211. * -> Surface totale du cylindre
  212. SurfCyl = SrfBUC ET SrfCT ;
  213. ELIM SurfCyl 1.e-8 ;
  214.  
  215. * - MAILLAGE DU PLAN
  216. * -> Dimensions, nombre et taille des elements pour le plan
  217. LgrBU = (( ENTI 'SUPERIEUR' (LgrBUP/FineMS/2) ) * FineMS * 2) ;
  218. EprBU = (( ENTI 'SUPERIEUR' (EprBUP/FineMS ) ) * FineMS ) ;
  219. NLgrBU = 2* (ENTI 'PROCHE' (LgrBU / FineMS / 2)) ;
  220. NEprBU = ENTI 'PROCHE' (EprBU / FineMS) ;
  221. GrosMSVP = EprPT / NEprBU ;
  222. GrosMSHP = LgrPT / NLgrBU ;
  223.  
  224. * -> Points
  225. PI = (-1*LgrPT/2) 0.0 ;
  226. PJ = (-1*LgrBU/2) 0.0 ;
  227. PK = ( LgrBU/2) 0.0 ;
  228. PK = ( LgrBU/2) -0.00 ;
  229. PL = ( LgrPT/2) 0.0 ;
  230. PM = ( LgrPT/2) (-1.*EprPT) ;
  231. PN = (-1*LgrPT/2) (-1.*EprPT) ;
  232. PO = ( LgrBU/2) (-1.*EprBU) ;
  233. PP = (-1*LgrBU/2) (-1.*EprBU) ;
  234.  
  235. * -> Lignes
  236. LIJ = DROI 'DINI' GrosMSVP 'DFIN' FineMS PI PJ ;
  237. LJK = DROI NLgrBU PJ PK ;
  238. LKL = DROI 'DINI' FineMS 'DFIN' GrosMSVP PK PL ;
  239. LLM = DROI NEprBU PL PM ;
  240. LMN = DROI NLgrBU PM PN ;
  241. LNI = DROI NEprBU PN PI ;
  242. LKO = DROI NEprBU PK PO ;
  243. LOP = DROI NLgrBU PO PP ;
  244. LPJ = DROI NEprBU PP PJ ;
  245.  
  246. SI YESFATMS ;
  247. GrosMSVP = GrosMSVP * 4. ;
  248. LIJ = DROI 'DINI' GrosMSVP 'DFIN' FineMS PI PJ ;
  249. LKL = DROI 'DINI' FineMS 'DFIN' GrosMSVP PK PL ;
  250. LLM = DROI PL PM 'DINI' GrosMSVP 'DFIN' GrosMSVP ;
  251. LMN = DROI PM PN 'DINI' GrosMSVP 'DFIN' GrosMSVP ;
  252. LNI = DROI PN PI 'DINI' GrosMSVP 'DFIN' GrosMSVP ;
  253. FINSI ;
  254.  
  255. * -> Surface du plan (partie en contact-frottement)
  256. SrfBUP = LJK REGL NEprBU (INVE LOP) ;
  257. aa = 2.5 ;
  258. aa = 1. ;
  259. LKO = DROI PK PO 'DINI' (FineMS) 'DFIN' (aa*FineMS) ;
  260. LOP = DROI PO PP 'DINI' (aa*FineMS) 'DFIN' (aa*FineMS) ;
  261. LPJ = DROI PP PJ 'DINI' (aa*FineMS) 'DFIN' (FineMS) ;
  262.  
  263. * -> Surface du reste du plan
  264. CntrInt = LKO ET LOP ET LPJ ;
  265. CntrExt = LLM ET LMN ET LNI;
  266. SrfPT = DALL (INVE CntrInt) LKL CntrExt LIJ 'PLAN' ;
  267.  
  268. SI YESFATMS ;
  269. SrfPT = SURF ((INVE CntrInt) ET LKL ET CntrExt ET LIJ ) ;
  270. FINSI ;
  271.  
  272. * -> Surface totale du plan
  273. SurfPlan = SrfBUP ET SrfPT ;
  274. ELIM SurfPlan 1.e-8 ;
  275. SrfBUP = SurfPlan INTE SrfBUP ;
  276. *
  277. * RECUPERATION DES ZONES DE MAILLAGE UTILES
  278. * -> Cylindre
  279. CntrCyl = CONT SurfCyl 'COUL' 'BLEU' ;
  280. PtsHautC = SurfCyl POIN 'DROIT' PF PE 1.e-8 ;
  281. PtsCrbeC = SurfCyl POIN 'SPHE' PCEN P0 1.e-8 ;
  282. SetHautC = CntrCyl ELEM 'APPU' 'STRI' PtsHautC ;
  283. SetCrbeC = CntrCyl ELEM 'APPU' 'STRI' PtsCrbeC ;
  284. SetCrbeC = ORIE SetCrbeC ;
  285.  
  286. * -> Plan
  287. CntrPlan = CONT SurfPlan 'COUL' 'BLEU' ;
  288. PtsHautP = SurfPlan POIN 'DROIT' PI PL 1.e-8 ;
  289. PtsBasP = SurfPlan POIN 'DROIT' PM PN 1.e-8 ;
  290. PtsGaucP = SurfPlan POIN 'DROIT' PI PN 1.e-8 ;
  291. PtsDroiP = SurfPlan POIN 'DROIT' PL PM 1.e-8 ;
  292. SetHautP = CntrPlan ELEM 'APPU' 'STRI' PtsHautP ;
  293. SetBasP = CntrPlan ELEM 'APPU' 'STRI' PtsBasP ;
  294. SetGaucP = CntrPlan ELEM 'APPU' 'STRI' PtsGaucP ;
  295. SetDroiP = CntrPlan ELEM 'APPU' 'STRI' PtsDroiP ;
  296. SetHautP = ORIE SetHautP ;
  297. *
  298. SI OnlyMesh ;
  299. TRAC ((CntrCyl ET CntrPlan) ET (SurfCyl ET SurfPlan))
  300. TITR 'Maillage Cylindre et Plan' ;
  301. FINSI ;
  302. *
  303. * Creation du maillage de contact
  304. MeshCntc ='IMPO' 'MAIL' 'MESC' SetCrbeC (INVE SetHautP) ;
  305. MeshCntc = MeshCntc 'COUL' 'JAUN' ;
  306.  
  307. SI OnlyMesh ;
  308. TRAC (MeshCntc ET (CntrCyl ET CntrPlan) ET (SurfCyl ET SurfPlan))
  309. TITR 'Maillages Cylindre, Plan et Zone Contact' ;
  310. FIN ;
  311. FINSI ;
  312. *______________________________________________________________________
  313. *
  314. * MODELES ET MATERIAUX
  315. *______________________________________________________________________
  316. *
  317. YoungCyl = 200000 ; NuCyl = 0.3 ;
  318. YoungPln = 200000 ; NuPlan = 0.3 ;
  319. MuContac = 0.9;
  320. *
  321. ModeCyl = MODE SurfCyl 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE' ;
  322. MateCyl = MATE ModeCyl 'YOUN' YoungCyl 'NU' NuCyl ;
  323. *
  324. ModePlan = MODE SurfPlan 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE' ;
  325. MatePlan = MATE ModePlan 'YOUN' YoungPln 'NU' NuPlan ;
  326. *
  327. ModeCntc = MODE MeshCntc 'CONTACT' 'FROTTANT' 'COULOMB';
  328. MateCntc = MATE ModeCntc 'MU' MuContac;
  329. *______________________________________________________________________
  330. *
  331. * CONDITIONS AUX LIMITES
  332. *______________________________________________________________________
  333. *
  334. BlcXPlan = (SetGaucP ET SetDroiP) BLOQ 'UX' ;
  335. BlcYPlan = SetBasP BLOQ 'UY' ;
  336. BlocPlan = (BlcXPlan ET BlcYPlan) ;
  337.  
  338. LinkHauC = BLOQ SetHautC 'UX' ;
  339. YcommunC = RELA ENSE SetHautC 'UY';
  340. BlocCyl = LinkHauC ET YcommunC ;
  341.  
  342. BloTot = BlocPlan ET BlocCyl ;
  343. *______________________________________________________________________
  344. *
  345. * CHARGEMENT
  346. *______________________________________________________________________
  347. *
  348. * Donnees necessaires a @PCPT pour determiner les pas de calcul
  349. DltEtoil = 0.004 ;
  350. Delta_t = 0.001 ;
  351. N_DemiPe = 3 ;
  352. N_DemiPl = 3 ;
  353. N_cyclFr = 20.25 ;
  354. N_cyclFr = 5.25 ;
  355. t_0 = 1.0 ;
  356. T_INI_US = 1.25 ;
  357. period = 1. ;
  358. T_FIN_US = T_0 + (N_cyclFr * period) ;
  359.  
  360. * EVOLution de chargement
  361. ListT_Fn = PROG 0. 1. T_FIN_US ;
  362. ListF_Fn = PROG 0. 1. 1. ;
  363.  
  364. ListT_De = PROG 0. 1. ;
  365. ListA_De = PROG 0. 0. ;
  366.  
  367. REPE BRLDe ((ENTI 'SUPERIEUR' N_cyclFr ) ) ;
  368. T_DebCyc = FLOT &BRLDe ;
  369. ListT_De = ET ListT_De (PROG (T_DebCyc+0.25) (T_DebCyc+0.75)) ;
  370. ListA_De = ET ListA_De (PROG 1. -1) ;
  371. FIN BRLDE ;
  372.  
  373. Evol_Fn = EVOL 'VERT' 'MANU' ListT_Fn 'Temps' ListF_Fn 'F_n' ;
  374. Evol_De = EVOL 'BLAN' 'MANU' ListT_De 'Temps' ListA_De 'Delta' ;
  375.  
  376. * Chargement normal -> vient mettre le plan et le cylindre en contact
  377. ForceN = 60. ;
  378. ValPresN = ForceN / LgrCT;
  379. PressNod = PRES 'MASS' ModeCyl ValPresN SetHautC ;
  380. CharNorm = CHAR 'MECA' Evol_Fn PressNod ;
  381.  
  382. * Fretting -> vient faire frotter le cylindre et le plan
  383. DeplFret = DEPI LinkHauC DltEtoil ;
  384. CharFret = CHAR 'DIMP' Evol_De DeplFret ;
  385.  
  386. * Definition des instants de calcul
  387. Distrib = @PCPT delta_t DltEtoil t_0 period N_cyclFr N_DemiPe
  388. N_DemiPl ;
  389.  
  390. * Pas de calcul Globaux : Sauve et Calcul
  391. PasGlob = ET (PROG 0. PAS 0.125 1.) Distrib ;
  392. PasSVGD = PROG T_INI_US PAS period T_FIN_US ;
  393. *______________________________________________________________________
  394. *
  395. * DEFINITION DE LA BOITE D USURE
  396. *______________________________________________________________________
  397. *
  398. * Coefficient pour l'usure (alpha en mm3/mJ)
  399. ALPHA = 1.e-8 ;
  400. BETA = 500. ;
  401. *
  402. * -> Boite d usure relative au plan
  403. VOL_REPA = SrfBUP ;
  404. SUR_APPL = LJK ; SUR_VOIS = CBC ; SUR_APPU = LOP ;
  405. PT_REF_U = PJ ;
  406. VEC_APPL = (0. -1.) ;
  407.  
  408. BOX1 = TABL 'BOITE_USURE' ;
  409. BOX1.'VOLUME_REPARTITION' = VOL_REPA ;
  410. BOX1.'SURFACE_APPLICATION' = SUR_APPL ;
  411. BOX1.'SURFACE_VOISINE' = SUR_VOIS ;
  412. BOX1.'SURFACE_APPUI' = SUR_APPU ;
  413. BOX1.'POINT_O_U' = PT_REF_U ;
  414. BOX1.'DIRECTION_APPLICATION' = VEC_APPL ;
  415. BOX1.'COEFFICIENT_USURE' = ALPHA ;
  416. BOX1.'COEFFICIENT_FROTTEMENT' = MuContac ;
  417. BOX1.'FACTEUR_ACCELERATION' = BETA ;
  418. BOX1.'T_INI_US' = T_INI_US ;
  419. BOX1.'T_FIN_US' = T_FIN_US ;
  420. BOX1.'PERIODCY' = period ;
  421. BOX1.'USURE_CYCLIQUE' = VRAI ;
  422. BOX1.'USURE_INCREMENTALE' = FAUX ;
  423. BOX1.'POINT_REF_DELTA' = SurfCyl POIN 'PROC' PF ;
  424.  
  425. * -> Boite d usure relative au cylindre
  426. VOL_REPA = SrfBUC ;
  427. SUR_APPL = INVE CBC ; SUR_VOIS = LJK ; SUR_APPU = LGH ;
  428. PT_REF_U = PB ;
  429. VEC_APPL = (0. 1.) ;
  430.  
  431. BOX2 = TABL 'BOITE_USURE' ;
  432. BOX2.'VOLUME_REPARTITION' = VOL_REPA ;
  433. BOX2.'SURFACE_APPLICATION' = SUR_APPL ;
  434. BOX2.'SURFACE_VOISINE' = SUR_VOIS ;
  435. BOX2.'SURFACE_APPUI' = SUR_APPU ;
  436. BOX2.'POINT_O_U' = PT_REF_U ;
  437. BOX2.'DIRECTION_APPLICATION' = VEC_APPL ;
  438. BOX2.'COEFFICIENT_USURE' = ALPHA ;
  439. BOX2.'COEFFICIENT_FROTTEMENT' = MuContac ;
  440. BOX2.'FACTEUR_ACCELERATION' = BETA ;
  441. BOX2.'T_INI_US' = T_INI_US ;
  442. BOX2.'T_FIN_US' = T_FIN_US ;
  443. BOX2.'PERIODCY' = period ;
  444. BOX2.'USURE_CYCLIQUE' = VRAI ;
  445. BOX2.'USURE_INCREMENTALE' = FAUX ;
  446. BOX2.'POINT_REF_DELTA' = SurfCyl POIN 'PROC' PF ;
  447.  
  448. **************************************
  449. ** ENCAPSULAGE DES BOITES D'USURE **
  450. **************************************
  451. NbBoxUs = 0 ;
  452. YesUsur = VRAI ;
  453.  
  454. SI OuiUsCyl ; NbBoxUs = NbBoxUs + 1 ; FINSI ;
  455. SI OuiUsPla ; NbBoxUs = NbBoxUs + 1 ; FINSI ;
  456.  
  457. BOX_USUR = TABL ;
  458. BOX_USUR.'N_BOITES' = NbBoxUs ;
  459. SI (NbBoxUs EGA 2) ;
  460. BOX_USUR. 1 = BOX1 ;
  461. BOX_USUR. 2 = BOX2 ;
  462. SINON ; SI OuiUsCyl ;
  463. BOX_USUR. 1 = BOX2 ;
  464. SINON ; SI OuiUsPla ;
  465. BOX_USUR. 1 = BOX1 ;
  466. SINON ;
  467. YesUsur = FAUX ;
  468. FINSI ; FINSI ; FINSI ;
  469. *______________________________________________________________________
  470. *
  471. * DEFINTION DE LA TABLE DE PASAPAS
  472. *______________________________________________________________________
  473. *
  474. TAB1 = TABL 'PASAPAS' ;
  475. TAB1.'MODELE' = ModeCyl ET ModePlan ET ModeCntc ;
  476. TAB1.'CARACTERISTIQUES' = MateCyl ET MatePlan ET MateCntc ;
  477. TAB1.'CHARGEMENT' = CharFret ET CharNorm ;
  478. TAB1.'BLOCAGES_MECANIQUES' = BloTot ;
  479. TAB1.'GRANDS_DEPLACEMENTS' = VRAI ;
  480. TAB1.'TEMPS_CALCULES' = PasGlob ;
  481. TAB1.'TEMPS_SAUVES' = PasGlob ;
  482. TAB1.'ECONOMIQUE' = VRAI ;
  483. TAB1.'BOITES_USURES' = BOX_USUR ;
  484. TAB1.'FreshP1' = FAUX ;
  485. SI YesUsur ;
  486. TAB1.'PROCEDURE_PERSO1' = VRAI ;
  487. SINON ;
  488. TAB1.'PROCEDURE_PERSO1' = FAUX ;
  489. FINSI ;
  490.  
  491. Tmp = TEMPS 'ENTI' 'HORL' ;
  492. *______________________________________________________________________
  493. *
  494. * PROCEDURE UTILISATEUR PERSO1
  495. *______________________________________________________________________
  496. *
  497. DEBP PERSO1 T1*'TABLE' ;
  498. N_BOITES = T1.'BOITES_USURES'.'N_BOITES' ;
  499.  
  500. * Section de test de l'entree : On autorise l'execution de la procedure
  501. * uniquement si on n'entre pas pour la premiere fois de la sequence de
  502. * resolution (PASAPAS). Cela se justifie par le fait que l'on force
  503. * ponctuellement la sortie de PASAPAS pour y rerentrer juste apres. Avec
  504. * un tel processus, certains instants de temps sont analyses deux fois
  505. * par la procedure perso1.
  506.  
  507. FreshP1 = T1.'FreshP1' ;
  508. SI FreshP1 ;
  509. OuiRunP1 = FAUX ;
  510. T1.'FreshP1' = FAUX ;
  511. SINON ;
  512. OuiRunP1 = VRAI ;
  513. FINSI ;
  514.  
  515. SI OuiRunP1 ;
  516. * Boucle sur les boites a user
  517. REPE BU N_BOITES ;
  518. ID_BU = &BU ;
  519. BOIT_i = T1.'BOITES_USURES'. ID_BU ;
  520. * Appel de l'identificateur d'evenements
  521. T1 = @EVN_IDT T1 ID_BU ;
  522. * Appel du manageur d'evenements
  523. T1 = @EVN_MNG T1 ID_BU ;
  524. FIN BU ;
  525. FINSI ;
  526. FINP T1;
  527. *______________________________________________________________________
  528. *
  529. * RESOLUTION DU PROBLEME PAR APPEL SUCCESSIF A PASAPAS
  530. *______________________________________________________________________
  531. *
  532. PASAPAS Tab1 ;
  533. OPTI ECHO 0 ;
  534.  
  535. * Affichage des temps de calcul par cycle :
  536. RunTimeE = TEMPS 'ENTI' 'HORL' ;
  537. RunTimeF = (FLOT RunTimeE)/ 1000. ;
  538. LstRunTm = PROG RunTimeF ;
  539. LstCycTm = PROG RunTimeF ;
  540. MESS ' ' ; MESS ' - RunTime = ' RunTimeF ' secondes - ' ;
  541. MESS ' ' ;
  542. TAB1.'LISTE_RUN_TIME' = LstRunTm ;
  543. TAB1.'LISTE_CYCLE_TIME' = LstRunTm ;
  544.  
  545. * Boucle qui relance la resolution sur toute la liste de temps
  546. REPE BoucInf ;
  547.  
  548. * Application Externe de l'usure
  549. NBBOX = TAB1.'BOITES_USURES'.'N_BOITES' ;
  550. REPE BCL NBBOX ;
  551. @PRCA4 TAB1 &BCL ;
  552. FIN BCL ;
  553.  
  554. * Pas de temps restant a calculer
  555. DTPS = DIME TAB1.'TEMPS' ;
  556. DLIS = DIME PasGlob ;
  557. TPF = TAB1.'TEMPS'. (DTPS - 1) ;
  558. LTPS = MASQ PasGlob 'SUPE' (TPF + 1.e-10) ;
  559. Last2PG = EXTR PasGlob (LECT (DLIS - 1) PAS 1 DLIS) ;
  560.  
  561. * Test de la condition de sortie de la boucle
  562. SI ((DTPS+1) < DLIS) ;
  563. PG_New = EXTR PasGlob (LECT (DTPS+1) PAS 1 DLIS) ;
  564. SINON ;
  565. 'SORTIE DE LA BOUCLE DE RESOLUTION SUITE A DETECTION COND. SORTIE. ' ;
  566. QUIT BoucInf ;
  567. FINSI ;
  568.  
  569. * Instants de sauvegarde restant
  570. LTPS = MASQ PasSVGD 'SUPE' (TPF + 1.e-10) ;
  571. LPSVGD = DIME PasSVGD ;
  572. FirstInd = 1000000 ;
  573.  
  574. * Boucle de deduction du premier Index a garder
  575. REPE BDPIAG LPSVGD ;
  576. Val_ii = EXTR LTPS &BDPIAG ;
  577. SI ((ABS (Val_ii - 1.0)) &lt;EG 1.e-10) ;
  578. FirstInd = &BDPIAG;
  579. QUIT BDPIAG ;
  580. FINSI ;
  581. FIN BDPIAG ;
  582.  
  583. SI (FirstInd < LPSVGD) ;
  584. PSVG_New = EXTR PasSVGD ('LECT' FirstInd PAS 1 LPSVGD) ;
  585. SINON ;
  586. SI (FirstInd EGA LPSVGD) ;
  587. PSVG_New = PROG (EXTR PasSVGD FirstInd) ;
  588. SINON ;
  589. erre 'ca va pas avec PSVG_New' ;
  590. FINSI ;
  591. FINSI ;
  592.  
  593. SI ((DIME PSVG_New) EGA 1) ;
  594. PSVG_New = ET PSVG_New PSVG_New ;
  595. DPG_new = DIME PG_New ;
  596. PSVG_New = EXTR PG_New (LECT (DPG_new-1) DPG_new ) ;
  597. FINSI ;
  598.  
  599. * Evaluation de la condition de reprise du calcul
  600. SI ((DIME PG_New) > 1) ; OuiResta = VRAI ;
  601. SINON ; OuiResta = FAUX ;
  602. FINSI ;
  603.  
  604. * REPRISE DE CALCUL
  605. SI OuiResta ;
  606. TAB1.'TEMPS_CALCULES' = PG_New ;
  607. TAB1.'TEMPS_SAUVES' = PG_New ;
  608. TAB1.'FreshP1' = VRAI ;
  609.  
  610. PASAPAS TAB1 ;
  611.  
  612. RunTimeE = TEMPS 'ENTI' 'HORL' ;
  613. CyclTime = (FLOT RunTimeE)/ 1000. ;
  614. RunTimeF = RunTimeF + ((FLOT RunTimeE)/ 1000.) ; MESS ' ' ;
  615. LstRunTm = LstRunTm ET RunTimeF ;
  616. LstCycTm = LstCycTm ET CyclTime ;
  617. Tab1.'LISTE_RUN_TIME' = LstRunTm ;
  618. Tab1.'LISTE_CYCLE_TIME' = LstRunTm ;
  619. MESS ' ' ; MESS ' - CyclTime = ' CyclTime ' secondes - ';
  620. MESS ' ' ; MESS ' - RunTime = ' RunTimeF ' secondes - ';
  621. MESS ' ' ; MESS ' ' ;
  622. SINON ;
  623. 'SORTIE DE LA BOUCLE DE RESOLUTION SUITE A DETECTION COND. SORTIE. ' ;
  624. QUIT BoucInf ;
  625. FINSI ;
  626.  
  627. FIN BoucInf ;
  628. *______________________________________________________________________
  629. *
  630. * VALIDATION CODE A CODE
  631. *______________________________________________________________________
  632. *
  633. * Comparaison des resultats obtenus avec Cast3M a la reference WearBox :
  634. * Code Matlab - Abaqus - Python
  635. * Fretting Team - LTDS - Ecole Centrale Lyon
  636. *
  637. * Une premiere version du cas test comportait 20 cycles numeriques,
  638. * qui dure environ 7 minutes.
  639. * La seconde version du cas test comporte 5 cycles numeriques, qui
  640. * dure environ 1.5 minutes. Celle-ci a ete mise en place par soucis
  641. * de rapidite.
  642. *
  643. BOITE_US = TAB1.'BOITES_USURES'. 1 ;
  644. EvUC_N20 = BOITE_US . 'EVO_USURE_CUMULEE' . 1 ;
  645. EvUC_N5 = BOITE_US . 'EVO_USURE_CUMULEE' . 5 ;
  646.  
  647. x_C3M20 = EXTR EvUC_N20 'ABSC' ;
  648. hu_C3M20 = EXTR EvUC_N20 'ORDO' ;
  649.  
  650. x_C3M5 = EXTR EvUC_N5 'ABSC' ;
  651. hu_C3M5 = EXTR EvUC_N5 'ORDO' ;
  652.  
  653. * Valeurs de reference provenant du code WearBox
  654. hu_R20_1 = PROG 0 0 0 0 0 0 0 0 0 0 0 ;
  655. hu_R20_2 = PROG -0.00000622 -0.00011182 -0.00022604 -0.00031499
  656. -0.00039416 -0.00045657 -0.0005048 -0.00053816 -0.00055841
  657. -0.00056512 -0.00055841 -0.00053816 -0.0005048 -0.00045657
  658. -0.00039416 -0.00031499 -0.00022609 -0.00011182 -0.00000622 ;
  659. hu_R20_3 = PROG 0 0 0 0 0 0 0 0 0 0 0 ;
  660.  
  661. hu_R5_1 = PROG 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
  662. hu_R5_2 = PROG -0.00000319 -0.00004986 -0.0000968 -0.0001257
  663. -0.00014598 -0.00015885 -0.00016597 -0.00016829 -0.00016597
  664. -0.00015885 -0.00014598 -0.0001257 -0.0000968 -0.00004986
  665. -0.00000319 ;
  666. hu_R5_3 = PROG 0 0 0 0 0 0 0 0 0 0 0 0 0 ;
  667.  
  668. hu_R5 = hu_R5_1 ET hu_R5_2 ET hu_R5_3 ;
  669. hu_R20 = hu_R20_1 ET hu_R20_2 ET hu_R20_3 ;
  670. errHU_20 = (ABS hu_R20) - (ABS hu_C3M20) ;
  671. errHU_5 = (ABS hu_R5 ) - (ABS hu_C3M5) ;
  672.  
  673. EvEr_N20 = EVOL 'MANU' x_C3M20 errHU_20 ;
  674. EvHU_R20 = EVOL 'MANU' x_C3M20 hu_R20 ;
  675.  
  676. EvEr_N5 = EVOL 'MANU' x_C3M5 errHU_5 ;
  677. EvHU_R5 = EVOL 'MANU' x_C3M5 hu_R5 ;
  678.  
  679. MyEvos = (ABS EvUC_N20) ET (ABS EvHU_R20) ;
  680.  
  681. VolEr20 = INTG EvEr_N20 'ABSO' ;
  682. VolR20 = INTG EvHU_R20 'ABSO' ;
  683. PCT_Er20 = MAXI (VolEr20 / VolR20 * 100.) ;
  684.  
  685. VolEr5 = INTG EvEr_N5 'ABSO' ;
  686. VolR5 = INTG EvHU_R5 'ABSO' ;
  687. PCT_Er5 = MAXI (VolEr5 / VolR5 * 100.) ;
  688.  
  689. * Critere de validite du code d'usure Cast3M : moins de 1% d'erreur par
  690. * rapport a la reference WearBox (Matlab Abaqus Python)
  691. MESS ' ' ; MESS ' ' ;
  692. MESS '***************************' ;
  693. MESS '** CAS TEST CODE USURE **' ;
  694. MESS '***************************' ;
  695. MESS ' ' ; MESS ' ' ;
  696.  
  697. SI (PCT_Er5 &lt;EG 1.) ;
  698. MESS ' CAS TEST DU CODE D USURE VALIDE' ;
  699. SINON ;
  700. MESS ' ERREUR SEUIL DEPASSEE POUR LE CAS TEST DU CODE D USURE' ;
  701. MESS ' ERREUR SEUIL TOLEREE : 1%' ;
  702. MESS ' ERREUR CONSTATEE : ' PCT_Er5 '%' ;
  703. ERRE 5 ;
  704. FINSI ;
  705. fin ;
  706.  
  707.  
  708.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales