* USTMPS PROCEDUR MB234859 24/11/06 21:15:19 12059 ************************************************************************ * PROCEDURE USTMPS * * Procedure qui determine la liste des instants a calculer pour le * prochain cycle. * Si AJUSTE_PAS = VRAI, les pas de temps sont recalcules/redistribues * Si AJUSTE_PAS = FAUX, les pas de temps sont ceux du cycle precedent * qui ont ete conserves dans BOITE_US.'INFOS'.'INSTANTS_CYCLE'. * * Remarque : pour le schema implicite, le temps courant Tactu ne * change pas tant qu'il n'y a pas eu convergence. * * Entree : * T1 : TABLE transmise a PASAPAS * * Appelee par USURE * ************************************************************************ 'DEBP' USTMPS T1*'TABLE' ; * BOITE_US = T1.'BOITES_USURE' ; NbIncDC = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' '/' 2 ; NCycle = BOITE_US.'DONNEES'.'NB_CYCLES' ; * Periode = BOITE_US.'DONNEES'.'PERIODE' ; DemiPer = Periode '/' 2. ; QuartPer = Periode '/' 4. ; * PasCalc = T1.'WTABLE'.'TEMPS_CALCULES' ; *----------------------------------------------------------------------- * - DEFINITION "STANDARD" D'UN CYCLE *----------------------------------------------------------------------- 'SI' ('NEG' T1.'PERSO1_APPEL' 1) ; * 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV'); * Passage au cycle suivant Tactu = T1.'ESTIMATION'.'TEMPS' ; * 'SI' T1.'ARRET' ; * Sauvegarde du dernier instant avant de quitter T1.'TEMPS_SAUVES' = T1.'TEMPS_SAUVES' 'ET' Tactu ; 'SI' T1.'WTABLE'.'ISAUVEGL' ; T1.'WTABLE'.'ISAUVEGA' = T1.'WTABLE'.'ISAUVEGA' 'ET' Tactu ; 'FINSI' ; 'QUIT' USTMPS ; 'SINON' ; * Construire le chargement de deplacement impose Ltime = BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tactu ; Chdep = BOITE_US.'INFOS'.'CHPT_DEPI' ; T1.'WTABLE'.'CHARGEMENT' = CHAR1 'ET' BOITE_US.'INFOS'.'CHGMTS'; T1.'WTABLE'.'CHARGEMENT_I' = T1.'WTABLE'.'CHARGEMENT' ; 'FINSI' ; * 'SINON' ; * Recalcul du dernier cycle Ndec = Npas '-' BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ; T1.'WTABLE'.'ICHG' = Ndec ; T1.'ESTIMATION'.'TEMPS' = Tactu ; 'FINSI' ; * 'SI' BOITE_US.'INFOS'.'AJUSTE_PAS' ; 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ; LElmt = BOITE_US. &BU .'LELT' ; 'SI' ('<' LElmt LElmtMin) ; LElmtMin = LElmt ; 'FINSI' ; 'FIN' BU ; TauxGlPa = DltaTMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ; TauxElCo = LElmtMin '/' BOITE_US.'INFOS'.'DEPLA_IMPOSE' ; * * NbIncPe points sur la pente soit ]Tactu;T_Pente[ T_Pente = DemiPer '*' TauxGlPa ; DT_Pent = T_Pente '/' NbIncPe ; * * NbIncPl points sur le plateau soit [T_pente;DemiPer] * -> -1 pour avoir le bon nombre de pas de temps car on ajoute * QuartPer a la liste. NbIncPl = NbIncDC '-' NbIncPe - 1 ; T_Plate = DemiPer '-' T_Pente ; DT_Plat = T_Plate '/' NbIncPl ; * 'SI' ('<EG' NbIncPe 1) ; 'SINON' ; DemiCyc = 'PROG' DT_Pent 'PAS' DT_Pent T_Pente 'PAS' DT_Plat DemiPer ; 'FINSI' ; CycleStd = DemiCyc 'ET' (DemiCyc '+' DemiPer) ; NbIncCyc = BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' ; 'SI' ('NEG' DimeCycl NbIncCyc) ; 'MESS' 'Incoherence entre :' ; 'FINSI' ; BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleStd ; 'SINON' ; CycleStd = BOITE_US.'INFOS'.'INSTANTS_CYCLE' ; 'FINSI' ; * 'SINON' ; * * Instants a calculer (premier appel a PERSO1) Tactu = BOITE_US.'INFOS'.'T_DEBUT_DEPI' ; T_Pente = DemiPer ; DT_Pent = T_Pente '/' NbIncDC ; CycleRef = 'PROG' DT_Pent 'PAS' DT_Pent DemiPer 'PAS' DT_Pent Periode ; BOITE_US.'INFOS'.'INSTANTS_CYCLE' = CycleRef ; * * Instants de calcul jusqu'a T_DEBUT_USURE Tbid = 0. ; CycleStd = CycleRef ; Ltime = BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tactu ; Lcoef = BOITE_US.'INFOS'.'COEFF_DEPI' ; 'REPE' B BOITE_US.'INFOS'.'PRE_USURE' ; Tbid = Tbid '+' BOITE_US.'DONNEES'.'PERIODE' ; CycleStd = CycleStd 'ET' (CycleRef '+' Tbid) ; Tbid2 = Tbid '+' Tactu ; Ltime = Ltime 'ET' (BOITE_US.'INFOS'.'TEMPS_DEPI' '+' Tbid2) ; Lcoef = Lcoef 'ET' BOITE_US.'INFOS'.'COEFF_DEPI' ; 'FIN' B ; * * Construire le chargement de deplacement impose Chdep = BOITE_US.'INFOS'.'CHPT_DEPI' ; T1.'WTABLE'.'CHARGEMENT' = CHAR1 'ET' BOITE_US.'INFOS'.'CHGMTS'; T1.'WTABLE'.'CHARGEMENT_I' = T1.'WTABLE'.'CHARGEMENT' ; * * Instants sauves et sauvegardes (dernier instants de chaque cycle) 'SI' BOITE_US.'INFOS'.'SAUV_CYCLE' ; T1.'WTABLE'.'ISAUVEGL' = VRAI ; 'FINSI' ; 'FINSI' ; *----------------------------------------------------------------------- * - MISE A JOUR DES INSTANTS A CALCULER/SAUVEGARDER *----------------------------------------------------------------------- Distrib = CycleStd '+' Tactu ; T1.'WTABLE'.'TEMPS_CALCULES' = PasCalc 'ET' Distrib ; T1.'TEMPS_CALCULES' = T1.'WTABLE'.'TEMPS_CALCULES' ; * * Instants ou les resulats sont conserves 'SI' (BOITE_US.'INFOS'.'SCH_EXPL' 'OU' BOITE_US.'INFOS'.'SCH_CONV'); * T1.'TEMPS_SAUVES' = T1.'TEMPS_SAUVES' 'ET' Tactu ; * * Instants pour une sauvegarde sur disque 'SI' T1.'WTABLE'.'ISAUVEGL' ; T1.'WTABLE'.'ISAUVEGA' = T1.'WTABLE'.'ISAUVEGA' 'ET' Tactu ; 'FINSI' ; 'SINON' ; 'FINSI' ; *----------------------------------------------------------------------- 'FINP' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales