Télécharger ustmps.procedur

Retour à la liste

Numérotation des lignes :

  1. * USTMPS PROCEDUR MB234859 24/02/06 21:15:05 11833
  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.'WTABLE'.'TEMPS0' ;
  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.'WTABLE'.'TEMPS0' = Tactu ;
  67. T1.'ESTIMATION'.'TEMPS' = Tactu ;
  68. 'FINSI' ;
  69. *
  70. 'SI' BOITE_US.'INFOS'.'AJUSTE_PAS' ;
  71. DltaTMin = 'VALE' 'GRAN' ; LElmtMin = 'VALE' 'GRAN' ;
  72. DltaTMin = 'MINI' ('PROG' BOITE_US.'INFOS'.'DELTA_T' DltaTMin) ;
  73. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  74. LElmt = BOITE_US. &BU .'LELT' ;
  75. 'SI' ('<' LElmt LElmtMin) ;
  76. LElmtMin = LElmt ;
  77. 'FINSI' ;
  78. 'FIN' BU ;
  79. TauxGlPa = DltaTMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ;
  80. TauxElCo = LElmtMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ;
  81. *
  82. * NbIncPe points sur la pente soit ]Tactu;T_Pente[
  83. NbIncPe = 'ENTI' 'SUPE' (TauxGlPa '*' NbIncDC) ;
  84. T_Pente = DemiPer '*' TauxGlPa ;
  85. DT_Pent = T_Pente '/' NbIncPe ;
  86. *
  87. * NbIncPl points sur le plateau soit [T_pente;DemiPer]
  88. * -> -1 pour avoir le bon nombre de pas de temps car on ajoute
  89. * QuartPer a la liste.
  90. NbIncPl = NbIncDC '-' NbIncPe - 1 ;
  91. T_Plate = DemiPer '-' T_Pente ;
  92. DT_Plat = T_Plate '/' NbIncPl ;
  93. *
  94. 'SI' ('&lt;EG' NbIncPe 1) ;
  95. DemiCyc = 'PROG' T_Pente 'PAS' DT_Plat DemiPer ;
  96. 'SINON' ;
  97. DemiCyc = 'PROG' DT_Pent 'PAS' DT_Pent T_Pente
  98. 'PAS' DT_Plat DemiPer ;
  99. 'FINSI' ;
  100. DemiCyc = 'ORDO' (DemiCyc 'ET' QuartPer) 'CROI' ;
  101. CycleStd = DemiCyc 'ET' (DemiCyc '+' DemiPer) ;
  102. DimeCycl = 'DIME' CycleStd ;
  103. NbIncCyc = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ;
  104. 'SI' ('NEG' DimeCycl NbIncCyc) ;
  105. 'MESS' 'Incoherence entre :' ;
  106. CHA1 = 'CHAI' ' le nombre d instants a calculer :'DimeCycl ;
  107. CHA2 = 'CHAI' ' le nombre d instants demandes :'NbIncCyc ;
  108. 'MESS' CHA1 ; 'MESS' CHA2 ;
  109. 'ERRE' 5 ;
  110. 'FINSI' ;
  111. BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleStd ;
  112. 'SINON' ;
  113. CycleStd = BOITE_US.'INFOS'.'INSTANTS_CYCLE' ;
  114. 'FINSI' ;
  115. *
  116. 'SINON' ;
  117. *
  118. * Instants a calculer (premier appel a PERSO1)
  119. Tactu = BOITE_US.'INFOS'.'T_DEBUT_DEPI' ;
  120. T_Pente = DemiPer ;
  121. DT_Pent = T_Pente '/' NbIncDC ;
  122. CycleRef = 'PROG' DT_Pent 'PAS' DT_Pent DemiPer
  123. 'PAS' DT_Pent Periode ;
  124. BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleRef ;
  125. *
  126. * Instants de calcul jusqu'a T_DEBUT_USURE
  127. Tbid = 0. ;
  128. CycleStd = CycleRef ;
  129. Ltime = BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tactu ;
  130. Lcoef = BOITE_US.'INFOS'.'COEFF_DEPI' ;
  131. 'REPE' B BOITE_US.'INFOS'.'PRE_USURE' ;
  132. Tbid = Tbid '+' BOITE_US.'DONNEES'.'PERIODE' ;
  133. CycleStd = CycleStd 'ET' (CycleRef '+' Tbid) ;
  134. Tbid2 = Tbid '+' Tactu ;
  135. Ltime = Ltime 'ET' (BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tbid2) ;
  136. Lcoef = Lcoef 'ET' BOITE_US.'INFOS'.'COEFF_DEPI' ;
  137. 'FIN' B ;
  138. *
  139. * Construire le chargement de deplacement impose
  140. Evdep = 'EVOL' 'MANU' Ltime Lcoef ;
  141. Chdep = BOITE_US.'INFOS'.'CHPT_DEPI' ;
  142. CHAR1 = 'CHAR' 'DIMP' Evdep Chdep ;
  143. T1.'WTABLE'.'CHARGEMENT' = CHAR1 'ET' BOITE_US.'INFOS'.'CHGMTS';
  144. T1.'WTABLE'.'CHARGEMENT_I' = T1.'WTABLE'.'CHARGEMENT' ;
  145. *
  146. * Instants sauves et sauvegardes (dernier instants de chaque cycle)
  147. T1.'TEMPS_SAUVES' = 'PROG' ;
  148. T1.'WTABLE'.'IPRESU' = 'PROG' ;
  149. 'SI' BOITE_US.'INFOS'.'SAUV_CYCLE' ;
  150. T1.'WTABLE'.'ISAUVEGL' = VRAI ;
  151. T1.'WTABLE'.'ISAUVEGA' = 'PROG' ;
  152. 'FINSI' ;
  153. 'FINSI' ;
  154. *-----------------------------------------------------------------------
  155. * - MISE A JOUR DES INSTANTS A CALCULER/SAUVEGARDER
  156. *-----------------------------------------------------------------------
  157. Distrib = CycleStd '+' Tactu ;
  158. T1.'WTABLE'.'TEMPS_CALCULES' = PasCalc 'ET' Distrib ;
  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.  

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