Télécharger @PCPT.procedur

Retour à la liste

Numérotation des lignes :

  1. * @PCPT PROCEDUR MB234859 17/09/26 21:15:03 9567
  2. ***********************************************************************
  3. *
  4. * CETTE PROCEDURE A ETE MISE GRACIEUSEMENT A DISPOSITION DES
  5. * UTILISATEURS PAR LE LTDS - Ecole Centrale Lyon (S. Fouvry et S.Garcin)
  6. *
  7. ***********************************************************************
  8. * PROCEDURE ETABLISSANT LA LISTE DES INSTANTS A CALCULER (@PCPT)
  9. *
  10. * Entree :
  11. * delta_t : amplitude de raideur
  12. * delta_et : amplitude de deplacement impose
  13. * t_0 : instant ou demarre les cycles d'usure
  14. * period : periode temporelle d'un cycle d'usure
  15. * N_cyclFr nombre de cycle de fretting considere
  16. * N_DemiPe : les nombres de points calcules et enregistres sur les
  17. * N_DemiPl : demi-pentes et demi-plateaux du cycle de fretting
  18. *
  19. * Sortie :
  20. * Distrib : liste des instants a calculer
  21.  
  22. * A appeler dans le jeu de donnees
  23. *
  24. ***********************************************************************
  25. DEBP @PCPT delta_t*'FLOTTANT' delta_et*'FLOTTANT' t_0*'FLOTTANT'
  26. period*'FLOTTANT' N_cyclFr*'FLOTTANT'
  27. N_DemiPe*'ENTIER' N_DemiPl*'ENTIER' ;
  28.  
  29. * Booleen d'affichage des Points Temporels (DEBUG)
  30. OPPtTemp = FAUX ;
  31.  
  32. * Test sur le nombre de cycles de fretting voulu > 1.25
  33. SI (N_cyclFr < 1.25) ;
  34. MessErr = ET 'Le nombre de cycle de fretting renseigne dans la '
  35. 'procedure @PCPT est inferieur a la limite basse (fixee a 1.25)' ;
  36. ERRE(MessErr);
  37. FINSI ;
  38.  
  39. * Test de la condition de glissement total
  40. SI (delta_et > delta_t) ;
  41. OuiGlTot = VRAI ;
  42. SINON ;
  43. OuiGlTot = FAUX ;
  44. FINSI ;
  45.  
  46. * Test du bon remplissage des nombres de points a parcourir
  47. SI OuiGlTot ;
  48. SI (N_DemiPl < 2) ;
  49. ERRE('N_DemiPl n est pas conforme, il doit etre superieur a 2');
  50. FINSI;
  51. FINSI ;
  52.  
  53. SI (N_DemiPe < 2) ;
  54. ERRE('N_DemiPe n est pas conforme, il doit etre superieur a 2');
  55. FINSI;
  56.  
  57. * Definition de donnees intermediaires importantes :
  58. QuartPer = period / 4. ;
  59. DemiPer = period / 2. ;
  60. TempsTot = period * N_cyclFr ;
  61.  
  62. * Nombre de cycles apres le premier Quart de cycle (car 1er Quart traite a part)
  63. N_c_ApQ1 = N_cyclFr - 0.25 ;
  64. * Nombre de demi cycles pleins (Range de distribution standardise)
  65. N_DemiCy = ENTI 'INFERIEUR' (2.*N_c_ApQ1) ;
  66. * Portion de demi cycle restante (non standardise)
  67. TpsResta = TempsTot - QuartPer - (N_DemiCy * DemiPer) ;
  68.  
  69. * A t-on un multiple entier de la periode? Si oui rien a faire
  70. SI ((ABS TpsResta) &lt;EG 1.e-10);
  71. NeedAdap = FAUX ;
  72. SINON ;
  73. NeedAdap = VRAI ;
  74. FINSI ;
  75.  
  76. * Repartition du temps en glissement partiel (pente) et
  77. * en glissement total (plateau)
  78. SI OuiGlTot ;
  79. TauxGlPa = delta_t / delta_et ;
  80. TauxGlTo = 1. - TauxGlPa ;
  81. SINON ;
  82. TauxGlPa = 1. ;
  83. TauxGlTo = 0. ;
  84. FINSI ;
  85.  
  86. T_DemiPe = QuartPer * TauxGlPa ;
  87. T_DemiPl = QuartPer * TauxGlTo ;
  88. DT_DemPe = T_DemiPe / (N_DemiPe - 1) ;
  89. DT_DemPl = T_DemiPl / (N_DemiPl - 1) ;
  90.  
  91. * Constitution du premier quart de cycle (traite a part)
  92. Distr1Q = PROG DT_DemPe PAS DT_DemPe T_DemiPe PAS DT_DemPl QuartPer ;
  93. SI (N_DemiPe EGA 2) ;
  94. Distr1Q = PROG T_DemiPe PAS DT_DemPl QuartPer ; ;
  95. FINSI ;
  96.  
  97. * Compteur incremental du temps atteint a la fin de la distribution en cours
  98. TpsFinDi = QuartPer ;
  99. Distrib = Distr1Q ;
  100.  
  101. * Decoupage standardise d'une demi-periode
  102. DistDemC = PROG DT_DemPe PAS DT_DemPe (2*T_DemiPe)
  103. PAS DT_DemPl DemiPer ;
  104.  
  105. REPE B1 N_DemiCy ;
  106. NewDistr = DistDemC + TpsFinDi ;
  107. Distrib = Distrib ET NewDistr ;
  108. TpsFinDi = TpsFinDi + DemiPer ;
  109. FIN B1 ;
  110.  
  111. * Algo de gestion de l'eventuelle derniere demi portion du cycle non complete :
  112. * Cas 1 : TpsResta = 2 * T_DemiPe => On complete sur la pente
  113. * Cas 2 : TpsResta > 2 * T_DemiPe => On complete sur la pente et on
  114. * rajoute 2*N_DemiPl points sur le reste de plateau a discretiser
  115. * Cas 3 : TpsResta < 2 * T_DemiPe => On rajoute 2*N_DemiPe points sur
  116. * le reste de pente a discretiser
  117. SI NeedAdap ;
  118. SI (TpsResta >EG (2.*T_DemiPe)) ;
  119. DistFina = PROG DT_DemPe PAS DT_DemPe (2*T_DemiPe) ;
  120. DistFina = DistFina + TpsFinDi ;
  121. TpsFinDi = TpsFinDi + (2*T_DemiPe) ;
  122.  
  123. SI (TpsResta > (2.*T_DemiPe + 1.e-10)) ;
  124. TpsResta = TpsResta - (2.*T_DemiPe) ;
  125. DT_adap = TpsResta / (2.*N_DemiPl - 2.) ;
  126. DistTemp = PROG DT_adap PAS DT_adap TpsResta ;
  127. DistTemp = DistTemp + TpsFinDi ;
  128. DistFina = DistFina ET DistTemp ;
  129. TpsFinDi = TpsFinDi + TpsResta ;
  130. FINSI ;
  131. SINON ;
  132. DT_adap = TpsResta / (2.*N_DemiPe - 2.) ;
  133. DistFina = PROG DT_adap PAS DT_adap TpsResta ;
  134. DistFina = DistFina + TpsFinDi ;
  135. TpsFinDi = TpsFinDi + TpsResta ;
  136. FINSI ;
  137. * Ajout de la derniere portion de distribution
  138. Distrib = Distrib ET DistFina ;
  139. FINSI ;
  140.  
  141. Distrib = Distrib + t_0 ;
  142.  
  143. * Section de trace pour verifier le resultat obtenu par la procedure
  144. SI OPPtTemp ;
  145. N_pts = DIME Distrib ;
  146. Abs_N = PROG 1 PAS 1 N_pts ;
  147. PtsTpDis = EVOL 'MANU' Abs_N Distrib ;
  148. SpecCrb = TABL ;
  149. SpecCrb. 1 = 'MARQ CROI' ;
  150. DESS PtsTpDis SpecCrb 'LOGO' 'GRIL' 'TITR'
  151. 'Points temporels pour decrire le cycle de Fretting' ;
  152. FINSI ;
  153.  
  154. FINP Distrib ;
  155.  
  156.  

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