* TRANSIT2 PROCEDUR JEANV 94/10/10 21:50:57 1285 *----------------------------------------------------------------------* * * * T R A N S I T 2 * * --------------- * * * * RESOLUTION D'UN PROBLEME DE THERMIQUE TRANSITOIRE LINEAIRE * * METHODE A UN PAS DE TEMPS * * * * ETAB, TABLE CONTENANT EN ENTREE : * * * * INDICE 'SOUSTYPE' THERMIQUE * * INDICE 'INITIAL' CHAMP DE TEMPERATURE INITIAL * * INDICE 'IMPOSE' VALEURS IMPOSEES ( CHPOINT OU CHARGEMENT ) * * INDICE 'BLOCAGE' MATRICE DE BLOCAGE * * INDICE 'FLUX' CHARGEMENT DE FLUX EN FONCTION DU TEMPS * * INDICE 'CONDUCTIVITE' MATRICE DE CONDUCTIVITE * * INDICE 'CAPACITE' MATRICE DE CAPACITE * * INDICE 'TINI' TEMPS INITIAL (TINI=0. PAR DEFAUT) * * INDICE 'PAS' VALEUR DU PAS DE TEMPS * * INDICE 'NPAS' NOMBRE DE PAS DE CALCUL (NPAS=1 PAR DEFAUT)* * INDICE 'NSOR' ON VEUT UN RESULTAT TOUS LES NSOR PAS * * (NSOR=1 PAR DEFAUT) * * INDICE 'COEF' VALEUR DU COEFFICIENT DE RELAXATION * * (0.55 PAR DEFAUT ) * * INDICE 'COE2' VALEUR DU SECOND COEFFICIENT * * (0.5 PAR DEFAUT) * * INDICE 'NIVEAU' NIVEAUX DE MESSAGES (0 PAR DEFAUT) * * INDICE 'REPRISE' 'OUI' POUR UNE REPRISE DE CALCUL * * * * ETAB CONTENANT EN SORTIE : * * * * INDICE NUMPAS NUMERO DU PAS DE SORTIE * * LA TABLE ( ETAB NUMPAS ) CONTENANT : * * INDICE 'TEMPERATURE' LE CHAMP DE TEMPERATURE * * INDICE 'INSTANT' L'INSTANT DE SORTIE * * * * D.R., LE 20 DECEMBRE 1988. VERSION DU 18 JANVIER 1989. * * CONDITION DE TEMPERATURE IMPOSEE FACULTATIVE, D.R. LE 30/05/89 * * * *----------------------------------------------------------------------* 'REPETER' PROC 1 ; 'SI' ( 'NEG' ( ETAB.'SOUSTYPE' ) 'THERMIQUE' ) ; 'MESS' 'SOUS TYPAGE INCORRECT DE LA TABLE EN ENTREE|' ; 'QUITTER' PROC ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'NIVEAU' ) ; NIV_MESS = 'ENTIER' ( ETAB.'NIVEAU' ) ; 'SINON' ; NIV_MESS = 0 ; 'FINSI' ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'FINSI' ; * *--- RECUPERATION DE L'INFORMATION CONTENUE DANS "ETAB" * U0 = 'COPIER' ( ETAB.'INITIAL' ) 'GEOM' ; T_REP = 0. ;NREP = 0 ;IREP = 0 ; 'SI' ( 'EXISTE' ETAB 'REPRISE' ) ; 'REPETER' BOUC_REP ; IREP = IREP + 1 ; 'SI' ( 'NON' ( 'EXISTE' ETAB IREP ) ) ; 'QUITTER' BOUC_REP ; 'FINSI' ; 'FIN' BOUC_REP ; NREP = IREP - 1 ; U0 = ETAB.NREP.'TEMPERATURE' ; T_REP = ETAB.NREP.'INSTANT' ; 'FINSI' ; MAT_COND = ETAB.'CONDUCTIVITE' ; MAT_CAPA = ETAB.'CAPACITE' ; 'SI' ( 'EXISTE' ETAB 'BLOCAGE' ) ; MAT_BLOC = ETAB.'BLOCAGE' ; 'SI' ( 'EXISTE' ETAB 'IMPOSE' ) ; VAL_IMP = ETAB.'IMPOSE' ; 'SI' ( 'NEG' TYP_IMP 'CHARGEME' ) ; VAL_IMPO = VAL_IMP ; 'FINSI' ; 'FINSI' ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'COEF' ) ; LAMBDA = ETAB.'COEF' ; 'SINON' ; LAMBDA = 0.55 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'COE2' ) ; LAMBDA2 = ETAB.'COE2' ; 'SINON' ; LAMBDA2 = 0.5 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'TINI' ) ; T_INI = ETAB.'TINI' ; 'SINON' ; T_INI = 0. ; 'FINSI' ; T_INI = T_INI + T_REP ; 'SI' ( 'EXISTE' ETAB 'NPAS' ) ; NBRE_PAS = 'ENTIER' ( ETAB.'NPAS' ) ; 'SINON' ; NBRE_PAS = 1 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'NSOR' ) ; N_SOR = 'ENTIER' ( ETAB.'NSOR' ) ; 'SINON' ; N_SOR = 1 ; 'FINSI' ; 'SI' ( 'EXISTE' ETAB 'PAS' ) ; T_PAS = ETAB.'PAS' ; 'SINON' ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'IL MANQUE LE PAS DE TEMPS |' ; 'QUITTER' PROC ; 'FINSI' ; T0 = T_INI ; Q0 = 'TIRER' TAB_FLUX T0 ; * *--- "ETAB" EST UNE TABLE DE TABLES, INDICEE PAR LE NUMERO DU PAS * NUM_PAS = NREP ; 'SI' ( 'NON' ( 'EXISTE' ETAB 'REPRISE' ) ) ; STN = 'TABLE' ; ETAB.NUM_PAS = 'TABLE' STN ; STN.'INSTANT' = T0 ; STN.'TEMPERATURE' = U0 ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'SORTIE D UN RESULTAT POUR LE TEMPS :' T0 ; 'MESS' 'NUMERO DU PAS DE SORTIE :' NUM_PAS ; 'SI' ( NIV_MESS '>EG' 2 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'CHAMP DE TEMPERATURE AU TEMPS :' T0 ; 'LISTE' U0 ; 'FINSI' ; 'FINSI' ; 'FINSI' ; SCA1 = 1. - LAMBDA ; SCA2 = 1. / T_PAS ; A1 = MAT_COND * LAMBDA ; A2 = MAT_CAPA * SCA2 ; A3 = MAT_COND * ( LAMBDA - 1 ) ; B2 = A2 'ET' A3 ; MAT_RIGI = A1 'ET' A2 ; 'SI' ( 'EXISTE' ETAB 'BLOCAGE' ) ; MAT_RIGI = MAT_RIGI 'ET' MAT_BLOC ; 'FINSI' ; IPAS = 0 ;ITEM = 0 ; * *--- BOUCLE SUR LES PAS DE TEMPS * 'REPETER' BOUC_SOR ; ITEM = ITEM + 1 ; IPAS = IPAS + 1 ; * *--- TEST SI FIN DE BOUCLE * 'SI' ( ITEM '>' NBRE_PAS ) ; 'QUITTER' BOUC_SOR ; 'FINSI' ; T1 = T_INI + ( ITEM * T_PAS ) ; Q1 = 'TIRER' TAB_FLUX T1 ; B3 = B2 * U0 ; MAT_CHPO = B1 + B3 ; 'SI' ( 'EXISTE' ETAB 'IMPOSE' ) ; 'SI' ( 'EGA' TYP_IMP 'CHARGEME' ) ; VAL_IMPO = 'TIRER' VAL_IMP T1 ; 'FINSI' ; MAT_CHPO = MAT_CHPO + VAL_IMPO ; 'FINSI' ; * *--- CALCUL D'UN PAS * U1 = 'RESOUDRE' MAT_RIGI MAT_CHPO ; U1_AUX = U1 - U1_LX ; U1_T = 'ENLEVE' U1 'LX' ; * *--- ARCHIVAGE DES RESULTATS DANS "ETAB" * 'SI' ( IPAS 'EGA' N_SOR ) ; NUM_PAS = NUM_PAS + 1 ; STN = 'TABLE' ; ETAB.NUM_PAS = 'TABLE' STN ; STN.'INSTANT' = T1 ; STN.'TEMPERATURE' = U1_T ; 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'SORTIE D UN RESULTAT POUR LE TEMPS :' T1 ; 'MESS' 'NUMERO DU PAS DE SORTIE :' NUM_PAS ; 'SI' ( NIV_MESS '>EG' 2 ) ; 'SAUTER' 1 'LIGNE' ; 'MESS' 'CHAMP DE TEMPERATURE AU TEMPS :' T1 ; 'LISTE' U1 ; 'FINSI' ; 'FINSI' ; IPAS = 0 ; 'FINSI' ; T0 = T1 ; U0 = U1_AUX ; Q0 = Q1 ; 'FIN' BOUC_SOR ; * *--- ON FAIT LE MENAGE | * 'MENAGE' ; * 'SI' ( NIV_MESS '>EG' 1 ) ; 'SAUTER' 1 'LIGNE' ; 'FINSI' ; 'FIN' PROC ; 'FINPROC' ETAB ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales