Télécharger ustmps.procedur

Retour à la liste

Numérotation des lignes :

  1. * USTMPS PROCEDUR MB234859 24/11/06 21:15:19 12059
  2. ************************************************************************
  3. * PROCEDURE USTMPS
  4. *
  5. * Procedure qui determine la liste des instants a calculer pour le
  6. * prochain cycle.
  7. * Si AJUSTE_PAS = VRAI, les pas de temps sont recalcules/redistribues
  8. * Si AJUSTE_PAS = FAUX, les pas de temps sont ceux du cycle precedent
  9. * qui ont ete conserves dans BOITE_US.'INFOS'.'INSTANTS_CYCLE'.
  10. *
  11. * Remarque : pour le schema implicite, le temps courant Tactu ne
  12. * change pas tant qu'il n'y a pas eu convergence.
  13. *
  14. * Entree :
  15. * T1 : TABLE transmise a PASAPAS
  16. *
  17. * Appelee par USURE
  18. *
  19. ************************************************************************
  20. 'DEBP' USTMPS T1*'TABLE' ;
  21. *
  22. BOITE_US = T1.'BOITES_USURE' ;
  23. NbIncDC = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' '/' 2 ;
  24. NCycle = BOITE_US.'DONNEES'.'NB_CYCLES' ;
  25. *
  26. Periode = BOITE_US.'DONNEES'.'PERIODE' ;
  27. DemiPer = Periode '/' 2. ;
  28. QuartPer = Periode '/' 4. ;
  29. *
  30. PasCalc = T1.'WTABLE'.'TEMPS_CALCULES' ;
  31. *-----------------------------------------------------------------------
  32. * - DEFINITION "STANDARD" D'UN CYCLE
  33. *-----------------------------------------------------------------------
  34. 'SI' ('NEG' T1.'PERSO1_APPEL' 1) ;
  35. *
  36. 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV');
  37. * Passage au cycle suivant
  38. Tactu = T1.'ESTIMATION'.'TEMPS' ;
  39. *
  40. 'SI' T1.'ARRET' ;
  41. * Sauvegarde du dernier instant avant de quitter
  42. T1.'WTABLE'.'IPRESU' = 'PROG' Tactu ;
  43. T1.'TEMPS_SAUVES' = T1.'TEMPS_SAUVES' 'ET' Tactu ;
  44. 'SI' T1.'WTABLE'.'ISAUVEGL' ;
  45. T1.'WTABLE'.'ISAUVEGA' = T1.'WTABLE'.'ISAUVEGA' 'ET' Tactu ;
  46. 'FINSI' ;
  47. 'QUIT' USTMPS ;
  48. 'SINON' ;
  49. * Construire le chargement de deplacement impose
  50. Ltime = BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tactu ;
  51. Evdep = 'EVOL' 'MANU' Ltime BOITE_US.'INFOS'.'COEFF_DEPI' ;
  52. Chdep = BOITE_US.'INFOS'.'CHPT_DEPI' ;
  53. CHAR1 = 'CHAR' 'DIMP' Evdep Chdep ;
  54. T1.'WTABLE'.'CHARGEMENT' = CHAR1 'ET' BOITE_US.'INFOS'.'CHGMTS';
  55. T1.'WTABLE'.'CHARGEMENT_I' = T1.'WTABLE'.'CHARGEMENT' ;
  56. 'FINSI' ;
  57. *
  58. 'SINON' ;
  59. * Recalcul du dernier cycle
  60. Npas = 'DIME' PasCalc ;
  61. Ndec = Npas '-' BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ;
  62. Tactu = 'EXTR' PasCalc Ndec ;
  63. Loub = 'ORDO' ('LECT' Npas 'PAS' -1 (Ndec '+' 1)) 'CROI' ;
  64. PasCalc = 'ENLE' PasCalc Loub ;
  65. T1.'WTABLE'.'ICHG' = Ndec ;
  66. T1.'ESTIMATION'.'TEMPS' = Tactu ;
  67. 'FINSI' ;
  68. *
  69. 'SI' BOITE_US.'INFOS'.'AJUSTE_PAS' ;
  70. DltaTMin = 'VALE' 'GRAN' ; LElmtMin = 'VALE' 'GRAN' ;
  71. DltaTMin = 'MINI' ('PROG' BOITE_US.'INFOS'.'DELTA_T' DltaTMin) ;
  72. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  73. LElmt = BOITE_US. &BU .'LELT' ;
  74. 'SI' ('<' LElmt LElmtMin) ;
  75. LElmtMin = LElmt ;
  76. 'FINSI' ;
  77. 'FIN' BU ;
  78. TauxGlPa = DltaTMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ;
  79. TauxElCo = LElmtMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ;
  80. *
  81. * NbIncPe points sur la pente soit ]Tactu;T_Pente[
  82. NbIncPe = 'ENTI' 'SUPE' (TauxGlPa '*' NbIncDC) ;
  83. T_Pente = DemiPer '*' TauxGlPa ;
  84. DT_Pent = T_Pente '/' NbIncPe ;
  85. *
  86. * NbIncPl points sur le plateau soit [T_pente;DemiPer]
  87. * -> -1 pour avoir le bon nombre de pas de temps car on ajoute
  88. * QuartPer a la liste.
  89. NbIncPl = NbIncDC '-' NbIncPe - 1 ;
  90. T_Plate = DemiPer '-' T_Pente ;
  91. DT_Plat = T_Plate '/' NbIncPl ;
  92. *
  93. 'SI' ('&lt;EG' NbIncPe 1) ;
  94. DemiCyc = 'PROG' T_Pente 'PAS' DT_Plat DemiPer ;
  95. 'SINON' ;
  96. DemiCyc = 'PROG' DT_Pent 'PAS' DT_Pent T_Pente
  97. 'PAS' DT_Plat DemiPer ;
  98. 'FINSI' ;
  99. DemiCyc = 'ORDO' (DemiCyc 'ET' QuartPer) 'CROI' ;
  100. CycleStd = DemiCyc 'ET' (DemiCyc '+' DemiPer) ;
  101. DimeCycl = 'DIME' CycleStd ;
  102. NbIncCyc = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ;
  103. 'SI' ('NEG' DimeCycl NbIncCyc) ;
  104. 'MESS' 'Incoherence entre :' ;
  105. CHA1 = 'CHAI' ' le nombre d instants a calculer :'DimeCycl ;
  106. CHA2 = 'CHAI' ' le nombre d instants demandes :'NbIncCyc ;
  107. 'MESS' CHA1 ; 'MESS' CHA2 ;
  108. 'ERRE' 5 ;
  109. 'FINSI' ;
  110. BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleStd ;
  111. 'SINON' ;
  112. CycleStd = BOITE_US.'INFOS'.'INSTANTS_CYCLE' ;
  113. 'FINSI' ;
  114. *
  115. 'SINON' ;
  116. *
  117. * Instants a calculer (premier appel a PERSO1)
  118. Tactu = BOITE_US.'INFOS'.'T_DEBUT_DEPI' ;
  119. T_Pente = DemiPer ;
  120. DT_Pent = T_Pente '/' NbIncDC ;
  121. CycleRef = 'PROG' DT_Pent 'PAS' DT_Pent DemiPer
  122. 'PAS' DT_Pent Periode ;
  123. BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleRef ;
  124. *
  125. * Instants de calcul jusqu'a T_DEBUT_USURE
  126. Tbid = 0. ;
  127. CycleStd = CycleRef ;
  128. Ltime = BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tactu ;
  129. Lcoef = BOITE_US.'INFOS'.'COEFF_DEPI' ;
  130. 'REPE' B BOITE_US.'INFOS'.'PRE_USURE' ;
  131. Tbid = Tbid '+' BOITE_US.'DONNEES'.'PERIODE' ;
  132. CycleStd = CycleStd 'ET' (CycleRef '+' Tbid) ;
  133. Tbid2 = Tbid '+' Tactu ;
  134. Ltime = Ltime 'ET' (BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tbid2) ;
  135. Lcoef = Lcoef 'ET' BOITE_US.'INFOS'.'COEFF_DEPI' ;
  136. 'FIN' B ;
  137. *
  138. * Construire le chargement de deplacement impose
  139. Evdep = 'EVOL' 'MANU' Ltime Lcoef ;
  140. Chdep = BOITE_US.'INFOS'.'CHPT_DEPI' ;
  141. CHAR1 = 'CHAR' 'DIMP' Evdep Chdep ;
  142. T1.'WTABLE'.'CHARGEMENT' = CHAR1 'ET' BOITE_US.'INFOS'.'CHGMTS';
  143. T1.'WTABLE'.'CHARGEMENT_I' = T1.'WTABLE'.'CHARGEMENT' ;
  144. *
  145. * Instants sauves et sauvegardes (dernier instants de chaque cycle)
  146. T1.'TEMPS_SAUVES' = 'PROG' ;
  147. T1.'WTABLE'.'IPRESU' = 'PROG' ;
  148. 'SI' BOITE_US.'INFOS'.'SAUV_CYCLE' ;
  149. T1.'WTABLE'.'ISAUVEGL' = VRAI ;
  150. T1.'WTABLE'.'ISAUVEGA' = 'PROG' ;
  151. 'FINSI' ;
  152. 'FINSI' ;
  153. *-----------------------------------------------------------------------
  154. * - MISE A JOUR DES INSTANTS A CALCULER/SAUVEGARDER
  155. *-----------------------------------------------------------------------
  156. Distrib = CycleStd '+' Tactu ;
  157. T1.'WTABLE'.'TEMPS_CALCULES' = PasCalc 'ET' Distrib ;
  158. T1.'TEMPS_CALCULES' = T1.'WTABLE'.'TEMPS_CALCULES' ;
  159. *
  160. * Instants ou les resulats sont conserves
  161. 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV');
  162. *
  163. T1.'WTABLE'.'IPRESU' = 'PROG' Tactu ;
  164. T1.'TEMPS_SAUVES' = T1.'TEMPS_SAUVES' 'ET' Tactu ;
  165. *
  166. * Instants pour une sauvegarde sur disque
  167. 'SI' T1.'WTABLE'.'ISAUVEGL' ;
  168. T1.'WTABLE'.'ISAUVEGA' = T1.'WTABLE'.'ISAUVEGA' 'ET' Tactu ;
  169. 'FINSI' ;
  170. 'SINON' ;
  171. T1.'WTABLE'.'IPRESU' = 'PROG' ;
  172. 'FINSI' ;
  173. *-----------------------------------------------------------------------
  174. 'FINP' ;
  175.  
  176.  
  177.  
  178.  
  179.  

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