!V28!

!Déclaration des variables qui vont être définies par l'utilisateur
EnergyManagementSystem:GlobalVariable, T_demarrage_ventil_adia;
EnergyManagementSystem:GlobalVariable, T_demarrage_Batterie_froide;
EnergyManagementSystem:GlobalVariable, T_soufflage_Batterie_froide;
EnergyManagementSystem:GlobalVariable, Rendement_CTA;
EnergyManagementSystem:GlobalVariable, A_conduit_chauffe_entrant;
EnergyManagementSystem:GlobalVariable, R_conduit_chauffe_entrant;
EnergyManagementSystem:GlobalVariable, A_conduit_exterieur_entrant;
EnergyManagementSystem:GlobalVariable, R_conduit_exterieur_entrant;
EnergyManagementSystem:GlobalVariable, A_conduit_exterieur_repris;
EnergyManagementSystem:GlobalVariable, R_conduit_exterieur_repris;
EnergyManagementSystem:GlobalVariable, dP_souffle;
EnergyManagementSystem:GlobalVariable, dP_repris;
EnergyManagementSystem:GlobalVariable, rendement_ventilateur;
EnergyManagementSystem:GlobalVariable, mois_debut;
EnergyManagementSystem:GlobalVariable, jour_debut;
EnergyManagementSystem:GlobalVariable, mois_fin;
EnergyManagementSystem:GlobalVariable, jour_fin;

EnergyManagementSystem:Program, !Programme qui va enregistrer les variables définies par l'utilisateur
   Definition_variable_utilisateur,

!------------------------------------- A compléter par l'utilisateur ! -------------------------------------------------------
! Dans la section suivante : Température = Température de retour de l'air moyenne (pondérés par les débits)

SET T_demarrage_ventil_adia = 24,  ![°C] Température moyenne des zones à partir de laquelle la CTA va démarrer (=100 pour désactiver la ventilation adiabatique)

SET T_demarrage_Batterie_froide = 25, ![°C] Température moyenne des zones à partir de laquelle la batterie froide va démarrer et souffler à sa température de soufflage (doit être supérieure ou égal à T_demarrage_CTA)(=100 pour désactiver la batterie froide)

SET T_soufflage_Batterie_froide = 16, ![°C] Température en sortie de CTA à laquelle va souffler la batterie froide si elle est active et que la teméprature est supérieure à la température de démarrage

SET Rendement_CTA = 0.75, ![-] Rendement de l'échangeur thermique double flux

SET A_conduit_chauffe_entrant = 140, ![m²] Aire extérieur des gaines d'air soufflé situées dans les locaux chauffés (la chaleur dissipée/recupérée via ces pertes thermiques n'est pas pris en compte dans les zones : chauffage/refroidissement des plénums) (=0 pour annuler les pertes thermiques entre les conduites d'air neuf et les locaux chauffés)

SET R_conduit_chauffe_entrant = 0.625, ![m².K/W] résistance thermique des gaines d'air soufflé situées dans les locaux chauffés (la chaleur dissipée/recupérée via ces pertes thermiques n'est aps pris en compte dans les zones : chauffage/refroidissement des plénums) [0.625 correspond à 25mm de laine de verre lambda 0.04]

SET A_conduit_exterieur_entrant = 10, ![m²] Aire extérieur des gaines d'air soufflé situées dans les locaux non chauffés ou à l'extérieur (températures extérieure considérée)(=0 pour annuler les pertes thermiques entre les conduites d'air neuf et l'extérieur)

SET R_conduit_exterieur_entrant = 1.25, ![m².K/W] résistance thermique des gaines d'air soufflé situées dans les locaux non chauffés ou à l'extérieur (températures extérieure considérée) [1.25 correspond à 50mm de laine de verre lambda 0.04]

SET A_conduit_exterieur_repris = 10, ![m²] Aire extérieur des gaines d'air repris situées dans les locaux non chauffés ou à l'extérieur (températures extérieure considérée)(=0 pour annuler les pertes thermiques entre les conduites d'air repris et l'extérieur)

SET R_conduit_exterieur_repris = 1.25, ![m².K/W] Résistance thermique des gaines d'air repris situées dans les locaux non chauffés ou à l'extérieur (températures extérieure considérée) [1.25 correspond à 50mm de laine de verre lambda 0.04]

SET dP_repris = 500, ![Pa] Pertes de charge dans les conduites d'air repris (la module adiabatique ajoute environ 100 Pa)(=0 pour annuler les effets du ventilateur d'air repris) 

SET dP_souffle = 400, ![Pa] Pertes de charges dans les conduites d'air neuf (=0 pour annuler les effets du ventilateur d'air neuf) 

SET rendement_ventilateur = 0.77, ![-] Rendement énergétique du ventilateur 

SET mois_debut = 1, !Mois de debut de fonctionnement de la ventilation adiabatique (avant : juste ventilation mécanique mais pas d'échangeur double-flux, pas de bf et pas de module)
SET jour_debut = 1, !jour de debut de fonctionnement de la ventilation adiabatique (avant : juste ventilation mécanique mais pas d'échangeur double-flux, pas de bf et pas de module)
SET mois_fin = 12, !Mois de la fin du de fonctionnement de la ventilation adiabatique (après : juste ventilation mécanique mais pas d'échangeur double-flux, pas de bf et pas de module)
SET jour_fin = 31; !jour de la fin de fonctionnement de la ventilation adiabatique (après : juste ventilation mécanique mais pas d'échangeur double-flux, pas de bf et pas de module)
!----------------------------------- Fin ! -------------------------------------------------------



<ForAllZones>

EnergyManagementSystem:GlobalVariable, Zone_<LoopZoneVariableName>_active;

EnergyManagementSystem:Actuator,
   Air_Humidity_Ratio_<LoopZoneIDFName>,
   <LoopZoneIDFName> IDEAL LOADS AIR,
   Ideal Loads Air System,
   Air Humidity Ratio;

<LoopNextZone>

!Récupération des variables nécessaires au fonctionnement de la CTA
EnergyManagementSystem:Sensor, !Récupération de la température extérieure 
   T_exterieur,
   Environment,
   Site Outdoor Air Drybulb Temperature;

EnergyManagementSystem:Sensor, !Récupération de l'humidité extérieure
   HR_exterieur,
   Environment,
   Site Outdoor Air Relative Humidity;

EnergyManagementSystem:Sensor,!Récupération de la teméprature humide extérieure
   T_h_exterieur,
   Environment,
   Site Outdoor Air Wetbulb Temperature;

EnergyManagementSystem:Sensor,!Récupération de la teméprature de rosée extérieure
   T_R_exterieur,
   Environment,
   Site Outdoor Air Dewpoint Temperature;

EnergyManagementSystem:Sensor,
   HS_exterieure,
   Environment,
   Site Outdoor Air Humidity Ratio;

<ForAllZones>
EnergyManagementSystem:Actuator, !Température de soufflage dans chaque zone
   T_soufflee_zone_<LoopZoneVariableName>,
   <LoopZoneIDFName> IDEAL LOADS AIR OUTDOOR AIR INLET NODE,
   Outdoor Air System Node,
   Drybulb Temperature;

EnergyManagementSystem:Sensor, !Récupération du débit entrant dans chaque zone (et donc sortant)
   Debit_souffle_zone_<LoopZoneVariableName>,
   <LoopZoneIDFName>,
   Zone Mechanical Ventilation Current Density Volume Flow Rate;

EnergyManagementSystem:Sensor, !Température sèche de toutes les zones
   T_retour_zone_<LoopZoneVariableName>,
   <LoopZoneIDFName>,
   Zone Mean Air Temperature;

EnergyManagementSystem:Sensor, !Humidité relatives de toutes les zones
   HR_retour_zone_<LoopZoneVariableName>,
   <LoopZoneIDFName>,
   Zone Air Relative Humidity;

<LoopNextZone>

!Déclaration des variabels qui vont être utilisées pour les calculs

!-----------------------------------------
!Variales en sortie moyenne des différentes zones thermiques actives (pondérés par les débits)
EnergyManagementSystem:GlobalVariable, T_sortie_zone_total; !Température moyenne des zones actives (et donc sortantes de ces zones)
EnergyManagementSystem:GlobalVariable, HR_sortie_zone_total; !humidité relative moyenne des zones actives (et donc sortantes de ces zones)
EnergyManagementSystem:GlobalVariable, T_h_sortie_zone_total; !Température humide moyenne des zones actives (et donc sortantes de ces zones)
EnergyManagementSystem:GlobalVariable, HS_sortie_zone_total; !humidité spécifique moyenne des zones actives (et donc sortantes de ces zones)

!Variable utilisée pour les pertes thermiques dans les gaines d'air repris avec les locaux non-chauffes (à température extérieure)
EnergyManagementSystem:GlobalVariable, facteur_repris_exterieur; !Facteur de pertes thermiques sur les gaines d'air repris avec les locaux non chauffés

!------------------------------------------
!Variable en entrée du module adiabatique
EnergyManagementSystem:GlobalVariable, T_entree_module; !Température d'entrée dans le module adiabatique (après les pertes thermiques sur l'air repris)
EnergyManagementSystem:GlobalVariable, T_h_entree_module; !Température humide d'entrée dans le module adiabtique (après les pertes thermiques sur l'air repris)
EnergyManagementSystem:GlobalVariable, HR_entree_module; !humidité relative d'entrée dans le module adiabatique (après les pertes thermiques sur l'air repris)
EnergyManagementSystem:GlobalVariable, debit_entree_module; !Débit d'entrée total d'air dans le module adiabatique (après les pertes thermiques sur l'air repris)
EnergyManagementSystem:GlobalVariable, Enthalpy_entree_module; !Enthalpie en entrée du module adiabatique (après les pertes thermiques sur l'air repris)
EnergyManagementSystem:GlobalVariable, HS_entree_module; !Humidité spécifique en entrée du module adiabatique  (après les pertes thermiques sur l'air repris)

!-----------------------------------------
!Variables en sortie du module adiabatique
EnergyManagementSystem:GlobalVariable, HS_sortie_module; !Humidité spécifique en sortie du module adiabatique
EnergyManagementSystem:GlobalVariable, T_sortie_echangeur; !Température sèche en sortie d'air neuf de l'échangeur double flux

!-----------------------------------------
!Variables des différentes puissances et consommations des composants
EnergyManagementSystem:GlobalVariable, P_echangeur; !Puissance fournit par l'échangeur au flux d'air neuf entrant dans le bâtiment
EnergyManagementSystem:GlobalVariable, P_bf; !Puissance fournie par la batterie froide

!-----------------------------------------
!Variable en sortie de la CTA
EnergyManagementSystem:GlobalVariable, T_soufflee_apres_CTA; !Température de l'air neuf à la sortie de la CTA (avant les pertes thermiques sur les gaines d'air souffle)

!-----------------------------------------
!Variable caractéristique du module adiabatique
EnergyManagementSystem:GlobalVariable, Pas_de_temps_total; !Nombre de pas de temps total effectués par la simulation
EnergyManagementSystem:GlobalVariable, Pas_de_temps_module_OFF; !Nombre de pas de temps pendant lesquels le module a été désactivé

!-----------------------------------------
!Variables pour la description des pertes thermiques de l'air soufflé dans les locaux non chauffés et chauffés
EnergyManagementSystem:GlobalVariable, T_souffle_apres_exterieur; !Teméprature de l'air soufflé après les pertes dans les locaux non chauffés
EnergyManagementSystem:GlobalVariable, facteur_souffle_exterieur;!Facteur de pertes thermiques sur les gaines d'air soufflé avec les locaux non chauffés
EnergyManagementSystem:GlobalVariable, T_souffle_finale; !Teméprature de l'air soufflé après les pertes dans les locaux chauffés
EnergyManagementSystem:GlobalVariable, facteur_souffle_chauffe;!Facteur de pertes thermiques sur les gaines d'air soufflé avec les locaux chauffés
EnergyManagementSystem:GlobalVariable, U_volume_exterieur_entrant; !Valeur U de la gaine d'air neuf en contact avec un local non chauffé
EnergyManagementSystem:GlobalVariable, U_volume_chauffe_entrant;!Valeur U de la gaine d'air neuf en contact avec un local chauffé
EnergyManagementSystem:GlobalVariable, U_volume_exterieur_repris;!Valeur U de la gaine d'air vicié en contact avec un local non chauffé


!Caractéristiques variables de l'air
EnergyManagementSystem:GlobalVariable, densite_air; !Recalculé à chaque besoin!
EnergyManagementSystem:GlobalVariable, HS_exterieur; !humidité spécifique de l'air extérieur et de l'air soufflé (hypothèse : pas de condensation)
EnergyManagementSystem:GlobalVariable, Cp_air; !Recalculé à chaque besoin

!Variables liées aux ventilateurs
EnergyManagementSystem:GlobalVariable, Puissance_ventilateur_souffle; !Puissance consommée par le ventilateur d'air neuf
EnergyManagementSystem:GlobalVariable, Puissance_ventilateur_repris; !Puissance consommée par le ventilateur d'air vicié
EnergyManagementSystem:GlobalVariable, h_ext; !Enthalpie de l'air extérieur
EnergyManagementSystem:GlobalVariable, h_ext_apres_fan; !Enthalpie de l'air après le ventilateur
EnergyManagementSystem:GlobalVariable, T_ext_apres_fan; !Température de l'air après le ventilateur

!Variables liées à la condensation
EnergyManagementSystem:GlobalVariable, Presence_condensation; !indicateur de la présence de condensation dans le circuit d'air neuf
EnergyManagementSystem:GlobalVariable, Puissance_condensation; !indicateur de la puissance de froid nécessaire en plus pour permettre d'atteindre la même température avec la condensation
EnergyManagementSystem:GlobalVariable, HS_souffle; !humidité spécifique de l'air soufflé si aps de condensation (humiditié spécifique de l'air extréieur)
EnergyManagementSystem:GlobalVariable, HS_souffle_condensation; !humidité spécifique réel du à la condensation
EnergyManagementSystem:GlobalVariable, Debit_condensation; !débit d'eau condensé


EnergyManagementSystem:GlobalVariable, chaleur_vaporisation;



!----------------------------------------------Début des programmes ------------------------------------------------------
EnergyManagementSystem:ProgramCallingManager, !Programme d'initialisation qui va mettre à zéro les pas de temps et désactiver toutes les zones
   Initialisation,
   BeginNewEnvironment,
   init_pas_temps;


!--------------------------------------------------------------------

EnergyManagementSystem:Program, 
   init_pas_temps,
!Initialisation des pas de temps
   SET Pas_de_temps_total =0,
   SET Pas_de_temps_module_OFF = 0,
!Désactivation de toutes les zones
<ForAllZones>
!SET process_density_<LoopZoneVariableName> = process_<LoopZoneVariableName> / Zone_Floor_Area_<LoopZoneVariableName>, 
SET Zone_<LoopZoneVariableName>_active = 0,
<LoopNextZone>;


!--------------------------------------------------------------------
EnergyManagementSystem:ProgramCallingManager, !Programme principal
   Module adia,
   BeginTimestepBeforePredictor,
   Determination_zone_active, !Permet de déterminer quelles zones sont reliées à la CTA adiabatique
   Definition_variable_utilisateur, !Met à jour les variables fournies par l'utilisateur
   Calculs, !Fait les calculs de puissances, humidité, ... dus à la CTA adiabatique et aux pertes thermiques d'air repris
   Determination_T_soufflage, !Assigne la température de soufflage en sortie de CTA en fonction des différents scénarios prévus
   Ajout_des_pertes; !Ajoute les pertes de l'air souffle dans les locaux non chauffes et chauffes


!--------------------------------------------------------------------
EnergyManagementSystem:Program, !Permet de déterminer quelles zones sont reliées à la CTA adiabatique et remet à zéro les puissances de process
   Determination_zone_active,
   SET T_ext_apres_fan = T_exterieur,
   <ForAllZones>
   IF <LoopZoneAttribute ProcessOn> == 1,
      SET Zone_<LoopZoneVariableName>_active = 1,
   ENDIF,
     <LoopNextZone>;



!--------------------------------------------------------------------
EnergyManagementSystem:Program, !Fait les calculs de puissances, humidité, ... dus à la CTA adiabatique et aux pertes thermiques d'air repris
   Calculs,
!----------------
!Mise à zéro des conditions d'entrée du module pour détecter si un calcul ne se fait pas
   SET T_sortie_zone_total = 0,
   SET HR_sortie_zone_total = 0,
   SET T_h_sortie_zone_total = 0,
   SET T_entree_module = 0,
   SET T_sortie_echangeur = 0,
   SET HR_entree_module = 0,
   SET debit_entree_module = 0,
   SET T_h_entree_module = 0,

!----------------
!Calculs des conditions moyennes en sortie de toutes les zones
<ForAllZones>
   IF Zone_<LoopZoneVariableName>_active == 1, !uniquement si zone active
         !pondération par les débits
      SET T_sortie_zone_total = T_sortie_zone_total + T_retour_zone_<LoopZoneVariableName>*Debit_souffle_zone_<LoopZoneVariableName>,
         !pondération par les débits
      SET HR_sortie_zone_total = HR_sortie_zone_total + HR_retour_zone_<LoopZoneVariableName>*Debit_souffle_zone_<LoopZoneVariableName>, 
      SET debit_entree_module = debit_entree_module + Debit_souffle_zone_<LoopZoneVariableName>,
   ENDIF,
<LoopNextZone>

!----------------
!Determination si pendant periode de foncitonnmeent ou non 
   IF month < mois_debut,
       SET debit_entree_module = 0,
   ENDIF,
   IF month > mois_fin,
       SET debit_entree_module = 0,
   ENDIF,
   IF month == mois_debut,
      IF DayOfMonth < jour_debut,
         SET debit_entree_module = 0,
      ENDIF,
   ENDIF,
   IF month == mois_fin,
      IF DayOfMonth > jour_fin,
         SET debit_entree_module = 0,
      ENDIF,
   ENDIF,




!------------------
!Calcul des différentes caractéristiques de l'air moyennes en sorties des zones (avant les pertes thermiques dans les gaines)
   IF debit_entree_module <> 0, !Calcul uniquement si un débit est présent
      SET T_sortie_zone_total = T_sortie_zone_total / debit_entree_module, !Température sèche moyenne en sortie des zones    
      SET HR_sortie_zone_total = HR_sortie_zone_total /debit_entree_module, !humidité relative moyenne en sortie des zones 
      SET HS_sortie_zone_total = @WFnTdbRhPb T_sortie_zone_total HR_sortie_zone_total/100 101325, !Humidité spécifique moyenne en sortie des zones
      SET T_h_sortie_zone_total = @TwbFnTdbWPb T_sortie_zone_total HS_sortie_zone_total 101325, !Température humide moyenne en sortie des zones 
	SET HS_sortie_zone_total = HS_sortie_zone_total*1000,
      

!----------------
!Calcul des trois U des trois types de gaines  via l'équation de la RT2012 (page 393 de la methode de calcul)

SET U_volume_chauffe_entrant = A_conduit_chauffe_entrant/(R_conduit_chauffe_entrant+0.02), 
SET U_volume_exterieur_entrant = A_conduit_exterieur_entrant/(R_conduit_exterieur_entrant+0.02), 
SET U_volume_exterieur_repris = A_conduit_exterieur_repris/(R_conduit_exterieur_repris+0.02), 


!Ajout des pertes thermiques sur le circuit repris via l'équation de la RT2012 (page 393 de la methode de calcul) avec hypothèse sans fuite d'air sur le réseau
      SET densite_air = @RhoAirFnPbTdbW 101325 T_sortie_zone_total HS_sortie_zone_total/1000, !calcul densite air pour prochain calcul avec les caractéristiques d'entrée
      SET Cp_air = @CpAirFnW HS_sortie_zone_total/1000, !Calcul de la capacité calorifique de l'air avec les caractéristique d'entrée
      SET facteur_repris_exterieur = (- (U_volume_exterieur_repris)/(Cp_air*debit_entree_module*densite_air)) ,
      SET facteur_repris_exterieur =  @Exp facteur_repris_exterieur,
      SET facteur_repris_exterieur = 1 - facteur_repris_exterieur,! Calcul du facteur de pertes d'air repris
      SET T_entree_module = T_sortie_zone_total - (T_sortie_zone_total - T_exterieur)*facteur_repris_exterieur, !Calcul de la température finale après les pertes thermiques sur l'air repris    


!----------------
!Calcul des différentes caractéristiques de l'air en entére du module adiabatique (après les pertes thermiques dans les gaines sur l'air repris)
      SET T_h_entree_module = @TwbFnTdbWPb T_entree_module HS_sortie_zone_total/1000 101325, !Calcul de la nouvelle température humide
      SET HS_entree_module = HS_sortie_zone_total, !humidité spécifique en entrée du module identique à celle en sortie de zone (pas d'ajout d'humidité et condensation impossible (hypothèse))
      SET HR_entree_module  = @RhFnTdbWPb T_entree_module HS_sortie_zone_total/1000 101325, !calcul de l'humidité relative de l'air en entrée du module
      SET HR_entree_module  = HR_entree_module*100,


!----------------
!calcul de la température de sortie de l''échnageur de l'air neuf via son refroidissement par l'air repris
      SET T_sortie_echangeur = T_ext_apres_fan + Rendement_CTA*(T_h_entree_module - T_ext_apres_fan), !Calcul de la température de sortie de l'échangeur avec son rendement


!----------------
!calcul des différentes consommations des composants
      SET HS_exterieur = @WFnTdbTwbPb T_exterieur T_h_exterieur 101325, !Humidité spécifique exterieur
      SET HS_exterieur = HS_exterieur *1000,
      SET densite_air = @RhoAirFnPbTdbW 101325 (T_sortie_echangeur+T_exterieur)/2 HS_exterieur/1000, !calcul densite air pour prochain calcul
      SET Cp_air = @CpAirFnW HS_exterieur/1000, !Calcul de la capacité calorifique de l'air 
      SET P_echangeur = debit_entree_module*densite_air*Cp_air/1000*( T_sortie_echangeur - T_ext_apres_fan ), !Puissance récupérée par l'échangeur double flux



!----------------
!Calcul de l'apport de chaleur et la consommation du ventilateur d'air soufflé
      SET Puissance_ventilateur_souffle = debit_entree_module * dP_souffle/rendement_ventilateur,
      SET h_ext = @HFnTdbW T_exterieur HS_exterieur/1000,
      SET h_ext_apres_fan = h_ext + Puissance_ventilateur_souffle/(debit_entree_module*densite_air),
      SET T_ext_apres_fan = @TdbFnHW h_ext_apres_fan HS_exterieur/1000,
!Calcul de l'apport de chaleur et la consommation du ventilateur d'air repris
      SET Puissance_ventilateur_repris = debit_entree_module * dP_repris/rendement_ventilateur,

      
!----------------
!Fin de la boucle : si pas de débit
   ELSE, !Si il n'y a pas de débit la CTA est considérée éteinte
      RUN ECH_OFF,
   ENDIF;
   


!--------------------------------------------------------------------
EnergyManagementSystem:Program, !Programme qui va déterminer la température de soufflage en sortie de CTA en fonction des différents scénarios envisagés
   Determination_T_soufflage,

!------------------------
!Préparation calculs
   SET T_soufflee_apres_CTA = 100,!Haute temperature de soufflage pour rapidement voir si elle n'a pas ete modifiee
   SET Pas_de_temps_total = Pas_de_temps_total +1, !incrémentation du pas de temps total

!------------------------
!Si la température intérieure est trop basse pour faire démarrer le module adia et la batterie froide
   IF T_entree_module <= T_demarrage_ventil_adia, !Température trop basse pour faire démarrer la CTA
      RUN BF_OFF, !Batterie froide éteinte
      RUN ECH_OFF, !bypass echangeur double-flux, pas de réchauffage de l'air entrant

!------------------Production de froid---------------------------
   ELSEIF T_entree_module > T_demarrage_ventil_adia, ! Température assez haute pour activer la CTA
      IF T_entree_module <= T_demarrage_Batterie_froide, !Température pas assez haute pour activer la batterie froide
         IF T_sortie_echangeur <= T_ext_apres_fan, !L'échangeur double flux permet de refroidir l'air
            RUN BF_OFF, !Arrêt juste de la batterie froide (l'échangeur double-flux est considéré comme ON si pas éteint)
         ELSEIF T_sortie_echangeur > T_ext_apres_fan, !L'échangeur double-flux ne permet pas de refroidir l'air entrant, on souffle donc l'air extérieur directement
            RUN ECH_OFF, !bypass echangeur double-flux
            RUN BF_OFF, !Arrêt de la batterie froide
         ENDIF,
      ELSEIF T_entree_module > T_demarrage_Batterie_froide && ( @MIN T_sortie_echangeur T_ext_apres_fan ) > T_soufflage_Batterie_froide, !La température d'entrée est supérieure à la température de démarrage de la batterie froide et la température en entrée de celle-ci est inférieure à la température de soufflage
         	IF T_sortie_echangeur <= T_ext_apres_fan, !L'échangeur double flux permet de refroidir l'air entrant
            	RUN BF_ON, !L'échangeur double-flux et la batterie froide fonctionnent
         	ELSEIF T_sortie_echangeur > T_ext_apres_fan, !L'échangeur double flux ne permet pas de refroidir l'air entrant
            	RUN ECH_OFF, !bypass échangeur double-flux
            	RUN BF_ON, !bypass echangeur double-flux mais production de froid de la batterie
         	ENDIF,
      ELSEIF T_entree_module > T_demarrage_Batterie_froide && ( @MIN T_sortie_echangeur T_ext_apres_fan ) <= T_soufflage_Batterie_froide, !La température d'entrée est supérieure à la température de démarrage de la batterie froide et la température en entrée de celle-ci est inférieure à la température de soufflage
	    IF T_sortie_echangeur <= T_ext_apres_fan, !L'échangeur double flux permet de refroidir l'air entrant
            RUN BF_OFF,!Arrêt de la batterie froide car sa température de soufflage et plus haute que la teméprature en entrée
         ELSEIF T_sortie_echangeur > T_ext_apres_fan, !L'échangeur double flux ne permet pas de refroidir l'air entrant
            RUN ECH_OFF, !bypass echangeur double-flux car il ne refroidit pas l'air
            RUN BF_OFF, !Arrêt de la batterie froide car sa température de soufflage et plus haute que la teméprature en entrée
         ENDIF,
      ENDIF,
   ENDIF;   


!-----------------------------------------------------------------------
!Subroutines qui simplifient le code
EnergyManagementSystem:Subroutine, !Lorsque l'échangeur double-flux est bypassé
   ECH_OFF,
   SET T_sortie_echangeur = T_ext_apres_fan, !On bypass l'échangeur et on souffle l'air extérieur
   SET P_echangeur = 0, !Pas de puissance transmise via l'échangeur
   SET Pas_de_temps_module_OFF = Pas_de_temps_module_OFF + 1; !Incrémentation du pas de tmeps de non fonctionnement

!-------------------------
EnergyManagementSystem:Subroutine, !Lorsque la batterie froide fonctionne
   BF_ON,
   SET T_soufflee_apres_CTA = T_soufflage_Batterie_froide, !Souffle à la température de consigne
   SET densite_air = @RhoAirFnPbTdbW 101325 (T_soufflage_Batterie_froide+T_sortie_echangeur)/2 HS_exterieur/1000, !calcul densite air pour prochain calcul avec les caractéristiques d'entrée
   SET Cp_air = @CpAirFnW HS_exterieur/1000, !Calcul de la capacité calorifique de l'air
   SET P_bf = debit_entree_module*densite_air*Cp_air/1000*( T_soufflage_Batterie_froide - T_sortie_echangeur ); !calcul de la puissance


!-------------------------
EnergyManagementSystem:Subroutine,!Lorsque la batterie froide est éteinte
   BF_OFF,   
   SET T_soufflee_apres_CTA = T_sortie_echangeur, !Souffle directement l'air en sortie d'échangeur (avec ou sans bypass)
   SET P_bf = 0;!Aucune puissance froide produite


!-----------------------------------------------------------------------
!Calculs des pertes thermiques dans les gaines d'air souffle
EnergyManagementSystem:Program, !Ajoute les pertes thermiques
   Ajout_des_pertes,
   !uniquement si un débit est présent
   SET Presence_condensation = 0,
   SET Debit_condensation = 0,
   SET Puissance_condensation = 0,
   IF debit_entree_module <> 0,

!-----------------------------
   !Ajout des pertes thermiques avec les locaux non chauffés en utilisant la formule de la RT 2012 page 390 de la méthode de calucl avec hypothèse sans fuite d'air
      SET densite_air = @RhoAirFnPbTdbW 101325 T_soufflee_apres_CTA HS_exterieur/1000, !calcul densite air pour prochain calcul avec les caractéristiques d'entrée    
      SET Cp_air = @CpAirFnW HS_exterieur/1000, !Calcul de la capacité calorifique de l'air avec les caractéristiques d'entrée  
      SET facteur_souffle_exterieur = (- (U_volume_exterieur_entrant)/(Cp_air*debit_entree_module*densite_air)) ,
      SET facteur_souffle_exterieur =  @Exp facteur_souffle_exterieur,
      SET facteur_souffle_exterieur = 1 - facteur_souffle_exterieur, ! Calcul du facteur de pertes d'air souffle avec locaux non chauffes
      !Température après pertes thermiques dans locaux non chauffes 
      SET T_souffle_apres_exterieur = T_soufflee_apres_CTA - (T_soufflee_apres_CTA - T_ext_apres_fan)*facteur_souffle_exterieur,

!-----------------------------
   !Ajout des pertes thermiques avec les locaux chauffes en utilisant la formule de la RT 2012 page 390 de la méthode de calucl avec hypothèse sans fuite d'air (ces pertes thermiques ne chauffent pas les zones, elle sont considérés commes perdues dans les plénums)
      SET densite_air = @RhoAirFnPbTdbW 101325 T_souffle_apres_exterieur HS_exterieur/1000, !calcul densite air pour prochain calcul avec les caractéristiques d'entrée     
      SET Cp_air = @CpAirFnW HS_exterieur/1000, !Calcul de la capacité calorifique de l'air avec les caractéristiques d'entrée  
      SET facteur_souffle_chauffe = (- (U_volume_chauffe_entrant)/(Cp_air*debit_entree_module*densite_air)) ,
      SET facteur_souffle_chauffe =  @Exp facteur_souffle_chauffe,
      SET facteur_souffle_chauffe = 1 - facteur_souffle_chauffe, ! Calcul du facteur de pertes d'air souffle avec locaux chauffes
      !Température final après pertes thermiques dans locaux non chauffes et chauffes
      SET T_souffle_finale = T_souffle_apres_exterieur - (T_souffle_apres_exterieur - T_sortie_zone_total)*facteur_souffle_chauffe,
!------------------------------
!Calcul de la présence de condensation et de la puissance nécessaire pour la contrer
!Condensation négligée dans l'humidité de soufflage et dans l'assèchement des zones

      IF T_souffle_finale < T_R_exterieur,
         SET Presence_condensation = 1, !Affichage de la présence de condensation
         SET HS_souffle = HS_exterieure, !Humidité spécifique de l'air si pas de condensation
         SET HS_souffle_condensation = @WFnTdpPb T_souffle_finale 101325, !Humidité spécifique de l'air soufflé après condensation
         SET densite_air = @RhoAirFnPbTdbW 101325 T_souffle_finale HS_exterieur/1000, !recalcul de la densité de l'air
         SET Debit_condensation = debit_entree_module*densite_air*(HS_souffle - HS_souffle_condensation)*1000, ! Calcul du débit d'eau condensé
         SET chaleur_vaporisation = @HfgAirFnWTdb HS_souffle_condensation/1000 T_souffle_finale,
         SET chaleur_vaporisation = chaleur_vaporisation/1000,
         SET Puissance_condensation = -chaleur_vaporisation*Debit_condensation/1000, !calcul de la puissance nécessaire à cette condensation
         SET P_bf = P_bf+Puissance_condensation, !Ajout de cette puissance à la puissance fournie par la batterie froide m$ême si celle-ci éteinte
      ELSE, !Si pas de condensation valeur égale à 0
         SET Presence_condensation = 0,
         SET Debit_condensation = 0,
         SET Puissance_condensation = 0,
         SET HS_souffle_condensation = HS_exterieure,
         SET HS_souffle = HS_souffle_condensation, 
      ENDIF,


!---------------------------------
!Assignation de la température soufflée à la température d'entrée dans chaque zone active
      <ForAllZones>
         IF Zone_<LoopZoneVariableName>_active == 1,
            SET T_soufflee_zone_<LoopZoneVariableName> = T_souffle_finale,
            SET Air_Humidity_Ratio_<LoopZoneIDFName> = HS_souffle_condensation,
         ENDIF,
      <LoopNextZone>,

!Fin de la boucle de débit non égal à 0
   ELSE,
      <ForAllZones>
         IF Zone_<LoopZoneVariableName>_active == 1,
            SET T_soufflee_zone_<LoopZoneVariableName> = T_ext_apres_fan,
            SET Air_Humidity_Ratio_<LoopZoneIDFName> = HS_exterieure,
         ENDIF,
      <LoopNextZone>,
   ENDIF;





!------------------------------------------------------Sorties et affichagge -------------------------------------------------


EnergyManagementSystem:OutputVariable, 
   Debit entrant sortant CTA [m3/s],   !- Name
   debit_entree_module,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Debit entrant sortant CTA, timestep;

EnergyManagementSystem:OutputVariable, 
   Temperature seche entrant CTA [C],   !- Name
   T_entree_module,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Temperature seche entrant module, timestep;


EnergyManagementSystem:OutputVariable, 
   Puissance echangeur [kW],   !- Name
   P_echangeur,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Puissance echangeur, timestep;

EnergyManagementSystem:OutputVariable, 
   Puissance batterie froide [kW],   !- Name
   P_bf,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Puissance batterie froide, timestep;

EnergyManagementSystem:OutputVariable, 
   Temperature finale de soufflage [C],   !- Name
   T_souffle_finale,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Temperature finale de soufflage apres locaux chauffe, timestep;

EnergyManagementSystem:OutputVariable, 
   Presence de condensation,   !- Name
   Presence_condensation,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Presence_condensation, timestep;


EnergyManagementSystem:OutputVariable, 
   Debit de condensation [g/s],   !- Name
   Debit_condensation,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Debit_condensation, timestep;


!----------------------------Sorties pour toutes les zones ! ----------------------------------

<ForAllZones>

EnergyManagementSystem:OutputVariable, 
   Zone_<LoopZoneVariableName>_active,   !- Name
   Zone_<LoopZoneVariableName>_active,       !- EMS Variable Name
   Averaged,                 !- Type of Data in Variable
   SystemTimeStep;           !- Update Frequency

Output:Variable,*,Zone_<LoopZoneVariableName>_active, timestep;

<LoopNextZone>  