SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/bem.F90
Go to the documentation of this file.
00001 !   ##########################################################################
00002         SUBROUTINE BEM(PTSTEP, PTIME, HCOOL_COIL, HHEAT_COIL,                 &
00003                 OAUTOSIZE, KDAY,  HNATVENT,                                   &
00004                 PPS, PRHOA, PT_CANYON, PQ_CANYON, PU_CANYON,                  &
00005                 PT_ROOF, PT_WALL_A, PT_WALL_B, PBLD, PBLD_HEIGHT, PWALL_O_HOR,&
00006                 PHC_FLOOR, PTC_FLOOR, PD_FLOOR,                               &
00007                 PT_WIN2, PGR, PQIN, PQIN_FRAD, PQIN_FLAT,                     &
00008                 PEFF_HEAT, PINF, PTCOOL_TARGET, PTHEAT_TARGET, PHR_TARGET,    &
00009                 PF_WATER_COND, PV_VENT, PCAP_SYS_HEAT, PT_ADP, PCOP_RAT,      &
00010                 PAUX_MAX, PT_FLOOR, PT_MASS, PTI_BLD, PQI_BLD,                &
00011                 PCAP_SYS_RAT, PM_SYS_RAT, ONATVENT_NIGHT,                     &
00012                 PH_BLD_COOL, PH_BLD_HEAT, PLE_BLD_COOL, PLE_BLD_HEAT,         &
00013                 PT_BLD_COOL, PHVAC_COOL, PT_SYS, PQ_SYS, PH_WASTE, PLE_WASTE, & 
00014                 PFAN_POWER, PHVAC_HEAT, PM_SYS, PCOP, PCAP_SYS, PHU_BLD,      &
00015                 PTR_SW_WIN, PT_RAD_IND, PFLX_BLD_FLOOR, PFLX_BLD_MASS,        &
00016                 PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN,                   &
00017                 PRADHT_IN, PN_FLOOR, PWALL_O_BLD, PGLAZ_O_BLD, PMASS_O_BLD,   &
00018                 PFLOOR_HW_RATIO, PF_FLOOR_ROOF, PF_MASS_FLOOR, PF_MASS_WALL,  &
00019                 PF_MASS_WIN, PRAD_ROOF_MASS, PRAD_ROOF_FLOOR, PRAD_WALL_MASS, &
00020                 PRAD_WALL_FLOOR, PRAD_WIN_MASS, PRAD_WIN_FLOOR,               &
00021                 PCONV_ROOF_BLD, PCONV_WALL_BLD, PCONV_WIN_BLD, &
00022                 PLOAD_IN_FLOOR, PLOAD_IN_MASS                )
00023 !   ##########################################################################
00024 !
00025 !!****  *BEM*
00026 !!
00027 !!    PURPOSE
00028 !!    -------
00029 !
00030 !     Computes the temperature and humidity evolution of indoor air, 
00031 !     building energy demand, HVAC energy consumption, 
00032 !     waste heat from HVAC systems, and heat fluxes from indoor to building surfaces.
00033 !
00034 !
00035 !!**  METHOD
00036 !     ------
00037 !
00038 !              NOMENCLATURE: bld  - refers to building plant area; 
00039 !                            floor- refers to building plant area multiplied 
00040 !                                   by the number of floors;
00041 !                            wall - refers to wall area (excluding windows).
00042 !                            win  - refers to window area. 
00043 !                            mass - refers to internal mass area. 
00044 !
00045 !
00046 !        solar radiation transmitted through windows
00047 !        *******************************************
00048 !
00049 !     Qsol_tr_win = Qsol_facade * tr_win * GR 
00050 !
00051 !
00052 !        indoor wall conv/rad heat transfer coefficients
00053 !        ***********************************************
00054 !
00055 !     The calculation of CHTC accounts for favorable or unfavorable convection 
00056 !     depending on the relative position between the hot layer and cold layer
00057 !
00058 ! 
00059 !        building energy demand
00060 !        **********************
00061 !
00062 !     Calculation of the cooling and heating, sensible and latent building energy demand.
00063 !     The sensible demand includes the convective heat transfer from indoor surfaces, the 
00064 !     convective fraction of internal heat gains, and sensible infiltration/ventilation heat
00065 !     gains. The latent demand includes the latent fraction of internal heat gains and latent
00066 !     infiltration/ventilation heat gains.  
00067 !
00068 !        surface areas and volummes (referred to m2_bld)
00069 !        ***********************************************
00070 !
00071 !     Awall   =  WALL_O_HOR * (1 - GR) / BLD [m2_wall/m2_bld]
00072 !     Awin    =  WALL_O_HOR * GR / BLD       [m2_win/m2_bld]   
00073 !     Amass   =  2 * N_FLOOR                  [m2_mass/m2_bld]  
00074 !     N_FLOOR  =  BLD_HEIGHT / FLOOR_HEIGHT   [#]
00075 !     Aroof   =  1                           [m2_roof/m2_bld]  
00076 !     Afloor  =  1                           [m2_floor/m2_bld]   
00077 !     Vol_air =  BLD_HEIGHT                  [m3_bld/m2_bld]
00078 !
00079 !
00080 !        evolution of the internal temperature
00081 !        *************************************
00082 !
00083 
00084 !                                  dTin  
00085 !     Vol_air * ro_air * cp_air * ---- = h_wall * Awall * (Twall - Tin)
00086 !                                   dt    + h_roof * Aroof * (Troof -Tin)
00087 !                                         + h_floor * Afloor *(Tfloor - Tin)
00088 !                                         + h_mass * Amass * (Tmass - Tin)  
00089 !                                         + h_win * Awin * (Twin - Tin)
00090 !                                         + Qig * (1 - fig_rad) * (1-fig_lat)
00091 !                                         + Vinf * ro_air * cp_air * (Tout - Tin) 
00092 !                                         + Vsys * ro_air * cp_air * (Tsys - Tin) 
00093 !
00094 !
00095 !        evolution of the internal specific humidity
00096 !        *******************************************
00097 !
00098 !                                  dQin  
00099 !      Vol_air * ro_air * lv_air * ---- = Qig * fig_lat
00100 !                                   dt    + Vinf * ro_air * lv_air * (Qout - Qin) 
00101 !                                         + Vsys * ro_air * lv_air * (Qsys - Qin) 
00102 !
00103 !
00104 !        heat fluxes from indoor to surfaces
00105 !        ***********************************
00106 !
00107 !      Qin_wall  = h_wall  * (Tin - Twall)  [W/m2_wall]
00108 !      Qin_roof  = h_roof  * (Tin - Troof)  [W/m2_roof] 
00109 !      Qin_floor = h_floor * (Tin - Tfloor) [W/m2_floor] 
00110 !      Qin_mass  = h_wall  * (Tin - Tmass)  
00111 !                + Qig * fig_rad * (1-fig_lat)/ 2  
00112 !                + Qsol_tr_win              [W/m2_mass]
00113 !
00114 !
00115 !        energy consumption and waste heat from cooling system
00116 !        *****************************************************
00117 !
00118 !      Qhvac  = Qbld / COP
00119 !      Qwaste = Qbld + Qhvac
00120 !
00121 !
00122 !        energy consumption and waste heat from heating system
00123 !        *****************************************************
00124 !
00125 !      Qhvac  = Qbld / Eff
00126 !      Qwaste = Qhvac - Qbld
00127 !
00128 !
00129 !!    EXTERNAL
00130 !!    --------
00131 !!
00132 !!
00133 !!    IMPLICIT ARGUMENTS
00134 !!    ------------------
00135 !!
00136 !!
00137 !!    REFERENCE
00138 !!    ---------
00139 !!
00140 !!
00141 !!    AUTHOR
00142 !!    ------
00143 !!
00144 !!      B. Bueno           * Meteo-France *
00145 !!
00146 !!!    MODIFICATIONS
00147 !!    -------------
00148 !!     Original 2010
00149 !!     G. Pigeon nov. 2011: inclusion floor/mass budget inside
00150 !!                          add automatic/manual ventilation
00151 !!                          conserve exchanges with the different surfaces inside 1 time step
00152 !!    G. Pigeon sept. 2012: use of TARP/DOE coef for indoor convection
00153 !!                          use of both PT_WALL_A and PT_WALL_B for calculations
00154 !!                          the internal mass depth is 1/2 of the floor depth
00155 !!                          add the option of no atmospheric heat releases by HVAC system (PF_WATER_COND < 0)
00156 !!    G. Pigeon oct. 2012:  use indoor air density + new solar heat gain distribution
00157 !-------------------------------------------------------------------------------
00158 !
00159 !*       0.     DECLARATIONS
00160 !               ------------
00161 !
00162 USE MODD_CSTS,ONLY : XCPD,XSTEFAN,XLVTT,XG, XRV, XRD
00163  
00164 USE MODE_THERMOS
00165 USE MODE_PSYCHRO
00166 USE MODI_DX_AIR_COOLING_COIL_CV
00167 USE MODI_FLOOR_LAYER_E_BUDGET
00168 USE MODI_MASS_LAYER_E_BUDGET
00169 USE MODE_CONV_DOE
00170 !
00171 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00172 USE PARKIND1  ,ONLY : JPRB
00173 !
00174 IMPLICIT NONE
00175 !
00176 !*      0.1    Declarations of arguments
00177 !
00178 !
00179 REAL,                INTENT(IN)   :: PTSTEP        ! Time step
00180 REAL,                INTENT(IN)   :: PTIME         ! current time since midnight (UTC, s)
00181  CHARACTER(LEN=6),    INTENT(IN)   :: HCOOL_COIL    ! type of cooling system IDEAL/DX_COOL
00182  CHARACTER(LEN=6),    INTENT(IN)   :: HHEAT_COIL    ! type of heating system IDEAL/FIN_CAP
00183 LOGICAL,             INTENT(IN)   :: OAUTOSIZE     ! Flag to activate autosize calculations
00184 INTEGER,             INTENT(IN)   :: KDAY          ! Simulation day
00185 !
00186  CHARACTER(LEN=4), DIMENSION(:), INTENT(IN) :: HNATVENT
00187 !
00188 REAL, DIMENSION(:),   INTENT(IN)  :: PPS          ! Canyon air pressure [Pa]
00189 REAL, DIMENSION(:),   INTENT(IN)  :: PRHOA        ! Air density at the lowest level [kg m-3]
00190 REAL, DIMENSION(:),   INTENT(IN)  :: PT_CANYON    ! Canyon air temperature [K]
00191 REAL, DIMENSION(:),   INTENT(IN)  :: PQ_CANYON    ! Canyon air specific humidity [kg kg-1]
00192 REAL, DIMENSION(:),   INTENT(IN)  :: PU_CANYON    ! Canyon wind speed (m s-1)
00193 REAL, DIMENSION(:,:), INTENT(IN)  :: PT_ROOF      ! Roof layers temperatures [K]
00194 REAL, DIMENSION(:,:), INTENT(IN)  :: PT_WALL_A    ! Wall A layers temperatures [K]
00195 REAL, DIMENSION(:,:), INTENT(IN)  :: PT_WALL_B    ! Wall B layers temperatures [K]
00196 !
00197 REAL, DIMENSION(:),   INTENT(IN)  :: PBLD         ! Urban horizontal building density
00198 REAL, DIMENSION(:),   INTENT(IN)  :: PBLD_HEIGHT  ! Average building height [m]
00199 REAL, DIMENSION(:),   INTENT(IN)  :: PWALL_O_HOR  ! Wall to horizontal surface ratio
00200 !
00201 REAL, DIMENSION(:,:), INTENT(IN)  :: PHC_FLOOR    ! heat capacity for road layers
00202 REAL, DIMENSION(:,:), INTENT(IN)  :: PTC_FLOOR    ! thermal conductivity for 
00203                                                   ! road layers
00204 REAL, DIMENSION(:,:), INTENT(IN)  :: PD_FLOOR     ! depth of road layers
00205 !
00206 REAL, DIMENSION(:),   INTENT(IN)   :: PT_WIN2       ! Indoor window temperature [K]
00207 REAL, DIMENSION(:),   INTENT(IN)   :: PGR           ! Glazing ratio
00208 REAL, DIMENSION(:),   INTENT(IN)   :: PQIN          ! Internal heat gains [W m-2(floor)]
00209 REAL, DIMENSION(:),   INTENT(IN)   :: PQIN_FRAD     ! Radiant fraction of internal heat gains
00210 REAL, DIMENSION(:),   INTENT(IN)   :: PQIN_FLAT     ! Latent franction of internal heat gains
00211 REAL, DIMENSION(:),   INTENT(IN)   :: PEFF_HEAT     ! Efficiency of the heating system
00212 REAL, DIMENSION(:),   INTENT(IN)   :: PINF          ! Infiltration flow rate [AC/H]
00213 REAL, DIMENSION(:),   INTENT(IN)   :: PTCOOL_TARGET ! Cooling setpoint of HVAC system [K]
00214 REAL, DIMENSION(:),   INTENT(IN)   :: PTHEAT_TARGET ! Heating setpoint of HVAC system [K]
00215 REAL, DIMENSION(:),   INTENT(IN)   :: PHR_TARGET    ! Relative humidity setpoint
00216 REAL,DIMENSION(:),    INTENT(IN)   :: PF_WATER_COND !fraction of evaporation for the condensers
00217 REAL, DIMENSION(:),   INTENT(IN)   :: PV_VENT       ! Ventilation flow rate [AC/H]
00218 REAL, DIMENSION(:),   INTENT(IN)   :: PCAP_SYS_HEAT ! Capacity of the heating system 
00219                                                     ! [W m-2(bld)]
00220 REAL, DIMENSION(:),   INTENT(IN)   :: PT_ADP        ! Apparatus dewpoint temperature of the
00221                                                     ! cooling coil [K]          
00222 REAL, DIMENSION(:),   INTENT(IN)   :: PCOP_RAT      ! Rated COP of the cooling system
00223 !
00224 REAL, DIMENSION(:),   INTENT(INOUT):: PAUX_MAX      ! Auxiliar variable for autosize calcs
00225 REAL, DIMENSION(:,:), INTENT(INOUT):: PT_FLOOR      ! Floor layers temperatures [K]
00226 REAL, DIMENSION(:,:), INTENT(INOUT):: PT_MASS       ! Internal mass layers temperatures [K]
00227 REAL, DIMENSION(:),   INTENT(INOUT):: PTI_BLD       ! Indoor air temperature [K]
00228 REAL, DIMENSION(:),   INTENT(INOUT):: PQI_BLD       ! Indoor air specific humidity [kg kg-1]
00229                  
00230 REAL, DIMENSION(:),   INTENT(INOUT):: PCAP_SYS_RAT  ! Rated capacity of the cooling system
00231                                                     ! [W m-2(bld)]
00232 REAL, DIMENSION(:),   INTENT(INOUT):: PM_SYS_RAT    ! Rated HVAC mass flow rate 
00233                                                     ! [kg s-1 m-2(bld)]
00234 LOGICAL, DIMENSION(:),INTENT(INOUT):: ONATVENT_NIGHT ! has natural ventilation
00235                                                      ! been necessary/possible during the night
00236 !
00237 REAL, DIMENSION(:),   INTENT(OUT)  :: PH_BLD_COOL   ! Sensible cooling energy demand  
00238                                                     ! of the building [W m-2(bld)]
00239 REAL, DIMENSION(:),   INTENT(OUT)  :: PH_BLD_HEAT   ! Heating energy demand       
00240                                                     ! of the building [W m-2(bld)]
00241 REAL, DIMENSION(:),   INTENT(OUT)  :: PLE_BLD_COOL  ! Latent cooling energy demand 
00242                                                     ! of the building [W m-2(bld)]
00243 REAL, DIMENSION(:),   INTENT(OUT)  :: PLE_BLD_HEAT  ! Latent heating energy demand 
00244                                                     ! of the building [W m-2(bld)]
00245 REAL, DIMENSION(:),   INTENT(OUT)  :: PT_BLD_COOL   ! Total cooling energy demand  
00246                                                     ! of the building [W m-2(bld)]
00247 REAL, DIMENSION(:),   INTENT(OUT)  :: PHVAC_COOL    ! Energy consumption of the cooling system
00248                                                     ! [W m-2(bld)]
00249 REAL, DIMENSION(:),   INTENT(OUT)  :: PT_SYS        ! Supply air temperature [K]                         
00250 REAL, DIMENSION(:),   INTENT(OUT)  :: PQ_SYS        ! Supply air specific humidity [kg kg-1]
00251 REAL, DIMENSION(:),   INTENT(OUT)  :: PH_WASTE      ! Sensible waste heat from HVAC system
00252                                                     ! [W m-2(bld)]
00253 REAL, DIMENSION(:),   INTENT(OUT)  :: PLE_WASTE     ! Latent waste heat from HVAC system
00254                                                     ! [W m-2(bld)]
00255 REAL, DIMENSION(:),   INTENT(OUT)  :: PFAN_POWER    ! HVAC fan power
00256 REAL, DIMENSION(:),   INTENT(OUT)  :: PHVAC_HEAT    ! Energy consumption of the heating system
00257                                                     ! [W m-2(bld)]
00258 !
00259 REAL, DIMENSION(:),   INTENT(OUT)  :: PM_SYS        ! Actual HVAC mass flow rate 
00260                                                     ! [kg s-1 m-2(bld)]
00261 REAL, DIMENSION(:),   INTENT(OUT)  :: PCOP          ! COP of the cooling system
00262 REAL, DIMENSION(:),   INTENT(OUT)  :: PCAP_SYS      ! Actual capacity of the cooling system
00263                                                     ! [W m-2(bld)] 
00264 !
00265 REAL, DIMENSION(:),   INTENT(OUT)  :: PHU_BLD       ! Indoor relative humidity 0 < (-) < 1
00266 REAL, DIMENSION(:),   INTENT(IN)   :: PTR_SW_WIN    ! Solar radiation transmitted throught
00267                                                     ! windows [W m-2(bld)]
00268 REAL, DIMENSION(:),   INTENT(IN)  :: PT_RAD_IND    ! Indoor mean radiant temperature [K]
00269 !
00270 REAL, DIMENSION(:),   INTENT(OUT)  :: PFLX_BLD_FLOOR! Heat flux from indoor air to floor 
00271                                                     ! [W m-2(bld)]
00272 REAL, DIMENSION(:),   INTENT(OUT)  :: PFLX_BLD_MASS ! Heat flux from indoor air to mass 
00273                                                     ! [W m-2(bld)]
00274 REAL, DIMENSION(:),   INTENT(IN)  :: PF_FLOOR_MASS ! View factor floor-mass
00275 REAL, DIMENSION(:),   INTENT(IN)  :: PF_FLOOR_WALL ! View factor floor-wall
00276 REAL, DIMENSION(:),   INTENT(IN)  :: PF_FLOOR_WIN  ! View factor floor-window
00277 REAL, DIMENSION(:),   INTENT(IN) :: PRADHT_IN     ! Indoor radiant heat transfer coefficient
00278                                                     ! [W K-1 m-2]
00279 REAL, DIMENSION(:)  , INTENT(IN)  :: PN_FLOOR        ! Number of floors     
00280 REAL, DIMENSION(:)  , INTENT(IN)  :: PWALL_O_BLD         ! Wall area [m2_wall/m2_bld]
00281 REAL, DIMENSION(:)  , INTENT(IN)  :: PGLAZ_O_BLD          ! Window area [m2_win/m2_bld]
00282 REAL, DIMENSION(:)  , INTENT(IN)  :: PMASS_O_BLD         ! Mass area [m2_mass/m2_bld]
00283 REAL, DIMENSION(:)  , INTENT(IN)  :: PFLOOR_HW_RATIO ! H/W ratio of 1 floor level
00284 REAL, DIMENSION(:)  , INTENT(IN)  :: PF_FLOOR_ROOF   ! View factor floor-roof
00285 REAL, DIMENSION(:)  , INTENT(IN)  :: PF_MASS_FLOOR   ! View factor mass-floor
00286 REAL, DIMENSION(:)  , INTENT(IN)  :: PF_MASS_WALL    ! View factor mass-wall
00287 REAL, DIMENSION(:)  , INTENT(IN)  :: PF_MASS_WIN     ! View factor mass-window
00288 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_ROOF_MASS  ! Rad. fluxes between roof and mass
00289 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_ROOF_FLOOR ! Rad. fluxes between roof and floor
00290 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_WALL_MASS  ! Rad. fluxes between wall and mass
00291 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_WALL_FLOOR ! Rad. fluxes between wall and floor
00292 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_WIN_MASS   ! Rad. fluxes between wind. and mass
00293 REAL, DIMENSION(:)  , INTENT(IN)  :: PRAD_WIN_FLOOR  ! Rad. fluxes between wind. and floor
00294 REAL, DIMENSION(:)  , INTENT(IN)  :: PCONV_ROOF_BLD  ! Conv. fluxes between roof and indoor air
00295 REAL, DIMENSION(:)  , INTENT(IN)  :: PCONV_WALL_BLD  ! Conv. fluxes between wall and indoor air
00296 REAL, DIMENSION(:)  , INTENT(IN)  :: PCONV_WIN_BLD   ! Conv. fluxes between wind. and indoor air
00297 REAL, DIMENSION(:)  , INTENT(IN)  :: PLOAD_IN_FLOOR  ! solar + int heat gain on floor W/m² [floor]
00298 REAL, DIMENSION(:)  , INTENT(IN)  :: PLOAD_IN_MASS   ! solar + int heat gain on floor W/m² [mass]
00299 !
00300 !*      0.2    Declarations of local variables 
00301 !
00302 INTEGER                        :: IROOF        ! Number of roof layers
00303 INTEGER                        :: IWALL        ! Number of wall layers
00304 !REAL                           :: ZTCOMF_MAX   ! Maximum comfort temperature for nat.vent [K]
00305 !
00306 REAL, DIMENSION(SIZE(PTI_BLD)) :: ZFAN_AP      ! Fan design pressure increase [Pa]
00307 REAL, DIMENSION(SIZE(PTI_BLD)) :: ZFAN_EFF     ! Fan total efficiency
00308 !
00309 LOGICAL, DIMENSION(SIZE(PTI_BLD)):: GSCHED     ! Day-night schedule flag 
00310                                                ! *to be transported to inputs*
00311 !
00312 REAL, DIMENSION(SIZE(PTI_BLD)) :: ZF_NIGHT     ! Reduction factor of int.gains at night
00313 REAL, DIMENSION(SIZE(PTI_BLD)) :: ZF_DAY       ! Amplification factor of int.gains at daytime
00314 !
00315 REAL, DIMENSION(SIZE(PTI_BLD)):: ZAC_IN_MASS_COOL, ZAC_IN_FLOOR_COOL, 
00316                                  ZAC_IN_ROOF_COOL, ZAC_IN_WALL_A_COOL, 
00317                                  ZAC_IN_WALL_B_COOL, ZAC_IN_WIN_COOL   
00318 REAL, DIMENSION(SIZE(PTI_BLD)):: ZAC_IN_MASS_HEAT, ZAC_IN_FLOOR_HEAT, 
00319                                  ZAC_IN_ROOF_HEAT, ZAC_IN_WALL_A_HEAT, 
00320                                  ZAC_IN_WALL_B_HEAT, ZAC_IN_WIN_HEAT   
00321 !
00322 REAL, DIMENSION(SIZE(PTI_BLD)):: ZQIN          ! Internal heat gains [W m-2(bld)]
00323 !
00324 REAL, DIMENSION(SIZE(PTI_BLD)):: ZV_VENT       ! Ventilation flow rate [m3 s-1 m-2(bld)]
00325 REAL, DIMENSION(SIZE(PTI_BLD)):: ZINF          ! Infiltration flow rate [m3 s-1 m-2(bld)]
00326 !
00327 LOGICAL, DIMENSION(SIZE(PTI_BLD)):: GNAT_VENT  ! Is Natural ventilation active ? 
00328 REAL, DIMENSION(SIZE(PTI_BLD)):: ZNAT_VENT     ! Nat.vent airflow rate [m3 s-1 m-2(bld)]
00329 REAL,DIMENSION(SIZE(PTI_BLD)) :: ZTI_BLD       ! Indoor air temperature at time step t + dt [K]
00330 REAL,DIMENSION(SIZE(PTI_BLD)) :: ZTI_BLD_OPEN  ! Indoor air temperature if windows opened
00331 REAL,DIMENSION(SIZE(PTI_BLD)) :: ZTI_BLD_CLOSED! Indoor air temperature if windows closed
00332 !
00333 REAL, DIMENSION(SIZE(PTI_BLD)):: ZQCOOL_TARGET ! Specific humidity cooling setpoing [kg kg-1]
00334 REAL, DIMENSION(SIZE(PTI_BLD)):: ZQHEAT_TARGET ! Specific humidity heating setpoing [kg kg-1]
00335 !
00336 REAL, DIMENSION(SIZE(PTI_BLD)):: ZSHR          ! Rated sensible heat rate
00337 REAL, DIMENSION(SIZE(PTI_BLD)):: ZM_SYS_RAT    ! Auxiliar mass flow rate [kg s-1 m-2(bld)]
00338 !
00339 REAL, DIMENSION(SIZE(PTI_BLD)):: ZXMIX         ! Outdoor mixing fraction
00340 REAL, DIMENSION(SIZE(PTI_BLD)):: ZT_MIX        ! Mixing air temperature [K]
00341 REAL, DIMENSION(SIZE(PTI_BLD)):: ZQ_MIX        ! Mixing air specific humidity [kg kg-1]
00342 !
00343 REAL,DIMENSION(SIZE(PTI_BLD)) :: ZQI_BLD       ! Indoor air humidity at time step t + dt [K}
00344 REAL, DIMENSION(SIZE(PTI_BLD)):: ZWASTE
00345 !
00346 REAL, DIMENSION(SIZE(PTI_BLD)):: ZDQS_FLOOR
00347 REAL, DIMENSION(SIZE(PTI_BLD)):: ZIMB_FLOOR
00348 REAL, DIMENSION(SIZE(PTI_BLD)):: ZDQS_MASS
00349 REAL, DIMENSION(SIZE(PTI_BLD)):: ZIMB_MASS
00350 REAL, DIMENSION(SIZE(PTI_BLD)):: ZLOAD_FLOOR   ! sum of solar and internal loads on floor
00351 REAL, DIMENSION(SIZE(PTI_BLD)):: ZLOAD_MASS    ! sum of solar and internal loads on mass
00352 REAL, DIMENSION(SIZE(PTI_BLD)):: ZRAD_FLOOR_MASS ! Rad. fluxes from floor to mass
00353 REAL, DIMENSION(SIZE(PTI_BLD)):: ZCONV_FLOOR_BLD ! Conv. fluxes from floor to indoor air
00354 REAL, DIMENSION(SIZE(PTI_BLD)):: ZCONV_MASS_BLD  ! Conv. fluxes from mass to indoor air
00355 REAL, DIMENSION(SIZE(PTI_BLD)):: ZRHOI  ! indoor air density
00356 !
00357 INTEGER :: JJ                                  ! Loop counter
00358 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00359 !
00360 !!REAL :: ZEXPL = 0.5 !explicit coefficient for internal temperature evol.
00361 !!REAL :: ZIMPL = 0.5 !implicit coef..
00362 !
00363 !-------------------------------------------------------------------------------
00364 IF (LHOOK) CALL DR_HOOK('BEM',0,ZHOOK_HANDLE)
00365 !
00366 !*      1.   Initializations
00367 !            ---------------
00368 !
00369 ZRHOI(:) = PPS(:) / (XRD * PTI_BLD(:) * ( 1.+((XRV/XRD)-1.)*PQI_BLD(:) ) )
00370 ! *Temperal definitions for nat.vent*
00371 !ZTCOMF_MAX  = 26. + 273.16
00372 !
00373 ! *Definitions
00374 ZFAN_AP (:) = 600.0
00375 ZFAN_EFF(:) = 0.7
00376 !
00377 ! *Other calcs
00378 IROOF  = SIZE(PT_ROOF,2)
00379 IWALL  = SIZE(PT_WALL_A,2)
00380 !
00381 !
00382 ! initial condition of QI_BLD equivalent to 50% RH
00383 IF (ANY(PQI_BLD(:) <= 1E-6)) PQI_BLD = 0.5 * QSAT(PTI_BLD, PPS)
00384 !
00385 ! *Temperal definitions for shedule*
00386 GSCHED(:) = .FALSE.
00387 WHERE (GSCHED(:))
00388  ZF_NIGHT(:)  = 0.8
00389  ZF_DAY(:)    = 1.2
00390 ELSE WHERE
00391  ZF_NIGHT(:)  = 1.
00392  ZF_DAY(:)    = 1.
00393 END WHERE
00394 !
00395 ! *Int.gains schedule
00396 !
00397 ZQIN = PQIN * PN_FLOOR
00398 IF (PTIME > 0. .AND. PTIME < 25200.) THEN ! night between 0000 and 0700
00399   ZQIN(:) = ZQIN(:) * ZF_NIGHT(:)
00400 ELSE
00401   ZQIN(:) = ZQIN(:) * ZF_DAY(:)
00402 END IF
00403 
00404 ! *Change of units AC/H -> [m3 s-1 m-2(bld)]
00405 ZV_VENT(:) = PV_VENT(:) * PBLD_HEIGHT(:) / 3600.
00406 ZINF   (:) = PINF   (:) * PBLD_HEIGHT(:) / 3600.  
00407 !
00408 !*      2.   heat balance for building floor and mass
00409 !            ----------------------------------------
00410 !
00411 !*      2.1 total load on the internal mass or floor
00412 ZLOAD_FLOOR(:) = (ZQIN(:) * PQIN_FRAD(:) * (1.-PQIN_FLAT(:)) + PTR_SW_WIN(:)) / (PMASS_O_BLD(:)+1.)
00413 WHERE (PN_FLOOR(:) > 1.)
00414    ZLOAD_MASS(:) = ZLOAD_FLOOR(:)
00415 ELSEWHERE
00416    ZLOAD_MASS(:) = 0.
00417 ENDWHERE
00418 !
00419 !*      2.2 FLOOR HEAT BALANCE
00420 !
00421  CALL FLOOR_LAYER_E_BUDGET(PT_FLOOR, PTSTEP,               &
00422                           PHC_FLOOR, PTC_FLOOR, PD_FLOOR, &
00423                           PFLX_BLD_FLOOR, ZDQS_FLOOR, ZIMB_FLOOR,&
00424                           PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN,&
00425                           PF_FLOOR_ROOF, PRADHT_IN, &
00426                           PT_MASS(:,1), PRAD_WALL_FLOOR, PRAD_ROOF_FLOOR, &
00427                           PRAD_WIN_FLOOR, PLOAD_IN_FLOOR, PTI_BLD, ZRAD_FLOOR_MASS, ZCONV_FLOOR_BLD)
00428 !
00429 !*      2.3 MASS HEAT BALANCE
00430 !
00431  CALL MASS_LAYER_E_BUDGET(PT_MASS, PTSTEP,                &
00432                           PHC_FLOOR, PTC_FLOOR, PD_FLOOR/2., &
00433                           PFLX_BLD_MASS, ZDQS_MASS, ZIMB_MASS,&
00434                           PF_MASS_WALL, PF_MASS_WIN,&
00435                           PF_MASS_FLOOR, PRADHT_IN, &
00436                           PRAD_WALL_MASS, PRAD_ROOF_MASS,       &
00437                           PRAD_WIN_MASS, PLOAD_IN_MASS, PTI_BLD,             &
00438                           ZRAD_FLOOR_MASS, ZCONV_MASS_BLD  )
00439 !
00440 !
00441 ZAC_IN_WALL_A_COOL = CHTC_VERT_DOE(PT_WALL_A(:,IWALL), PTCOOL_TARGET)
00442 ZAC_IN_WALL_B_COOL = CHTC_VERT_DOE(PT_WALL_B(:,IWALL), PTCOOL_TARGET)
00443 ZAC_IN_WIN_COOL = CHTC_VERT_DOE(PT_WIN2, PTCOOL_TARGET)
00444 ZAC_IN_MASS_COOL = CHTC_VERT_DOE(PT_MASS(:,1), PTCOOL_TARGET)
00445 ZAC_IN_ROOF_COOL = CHTC_DOWN_DOE(PT_ROOF(:,IROOF),PTCOOL_TARGET)
00446 ZAC_IN_FLOOR_COOL = CHTC_UP_DOE(PT_FLOOR(:,1),PTCOOL_TARGET)
00447 
00448 ZAC_IN_WALL_A_HEAT = CHTC_VERT_DOE(PT_WALL_A(:,IWALL), PTHEAT_TARGET)
00449 ZAC_IN_WALL_B_HEAT = CHTC_VERT_DOE(PT_WALL_B(:,IWALL), PTHEAT_TARGET)
00450 ZAC_IN_WIN_HEAT = CHTC_VERT_DOE(PT_WIN2, PTHEAT_TARGET)
00451 ZAC_IN_MASS_HEAT = CHTC_VERT_DOE(PT_MASS(:,1), PTHEAT_TARGET)
00452 ZAC_IN_ROOF_HEAT = CHTC_DOWN_DOE(PT_ROOF(:,IROOF),PTHEAT_TARGET)
00453 ZAC_IN_FLOOR_HEAT = CHTC_UP_DOE(PT_FLOOR(:,1),PTHEAT_TARGET)
00454 
00455 DO JJ=1,SIZE(ZAC_IN_WIN_COOL)
00456    ZAC_IN_WALL_A_COOL(JJ) = MAX(1.,ZAC_IN_WALL_A_COOL(JJ))
00457    ZAC_IN_WALL_B_COOL(JJ) = MAX(1., ZAC_IN_WALL_B_COOL(JJ))
00458    ZAC_IN_WIN_COOL(JJ)    = MAX(1., ZAC_IN_WIN_COOL(JJ))
00459    ZAC_IN_MASS_COOL(JJ)   = MAX(1., ZAC_IN_MASS_COOL(JJ))
00460    ZAC_IN_ROOF_COOL(JJ)   = MAX(1., ZAC_IN_ROOF_COOL(JJ))
00461    ZAC_IN_FLOOR_COOL(JJ)  = MAX(1., ZAC_IN_FLOOR_COOL(JJ))
00462    
00463    ZAC_IN_WALL_A_HEAT(JJ) = MAX(1.,ZAC_IN_WALL_A_HEAT(JJ))
00464    ZAC_IN_WALL_B_HEAT(JJ) = MAX(1., ZAC_IN_WALL_B_HEAT(JJ))
00465    ZAC_IN_WIN_HEAT(JJ)    = MAX(1., ZAC_IN_WIN_HEAT(JJ))
00466    ZAC_IN_MASS_HEAT(JJ)   = MAX(1., ZAC_IN_MASS_HEAT(JJ))
00467    ZAC_IN_ROOF_HEAT(JJ)   = MAX(1., ZAC_IN_ROOF_HEAT(JJ))
00468    ZAC_IN_FLOOR_HEAT(JJ)  = MAX(1., ZAC_IN_FLOOR_HEAT(JJ))
00469 ENDDO
00470 
00471 !*      4.   Indoor energy balance calculation
00472 !            ---------------------------------
00473 !
00474 DO JJ=1,SIZE(PT_CANYON)
00475   ! *first guess of indoor temperature
00476 
00477   ZTI_BLD(JJ) = PTI_BLD(JJ)                                          &
00478           + PTSTEP/(ZRHOI(JJ) * XCPD * PBLD_HEIGHT(JJ))              & 
00479           * (  PWALL_O_BLD(JJ) * PCONV_WALL_BLD(JJ)                        &
00480              + PGLAZ_O_BLD (JJ) * PCONV_WIN_BLD(JJ)                        &
00481              + PMASS_O_BLD(JJ) * ZCONV_MASS_BLD(JJ)                        &
00482              + PCONV_ROOF_BLD(JJ)                                    &
00483              + ZCONV_FLOOR_BLD(JJ)                                   &
00484              + ZQIN(JJ) * (1 - PQIN_FRAD(JJ))  * (1 - PQIN_FLAT(JJ)) )
00485   !
00486   !################################################################################
00487   ! *is natural surventilation active at the current time step ?
00488   !---------------------------------------------------------------------------------
00489   !
00490   !    *no surventilation possible
00491 
00492   IF (HNATVENT(JJ)=='NONE') THEN
00493     !
00494     GNAT_VENT(JJ) = .FALSE.
00495     !
00496   !    *automatic management of surventilation
00497   ELSEIF (HNATVENT(JJ)=='AUTO') THEN
00498     !
00499     IF (MOD(PTIME, 3600.) .LT. 1.E-6) THEN
00500       !
00501       IF ( PTI_BLD(JJ).GT. PT_CANYON(JJ) + 1 ) THEN ! condition to enable the
00502         ! surventilation rate calculation whereas risk of floating point exception
00503         CALL GET_NAT_VENT(PTI_BLD(JJ), PT_CANYON(JJ), PU_CANYON(JJ), PGR(JJ), &
00504                           PFLOOR_HW_RATIO(JJ), PBLD_HEIGHT(JJ), ZNAT_VENT(JJ))
00505         !
00506         ZTI_BLD_OPEN  (JJ) = ZTI_BLD(JJ) &
00507                 + ZNAT_VENT(JJ)            * PTSTEP/PBLD_HEIGHT(JJ) * (PT_CANYON(JJ) - PTI_BLD(JJ)) 
00508         ZTI_BLD_CLOSED(JJ) = ZTI_BLD(JJ) &
00509                 + (ZINF(JJ) + ZV_VENT(JJ)) * PTSTEP/PBLD_HEIGHT(JJ) * (PT_CANYON(JJ) - PTI_BLD(JJ)) 
00510         !
00511         GNAT_VENT(JJ) = (ZTI_BLD_OPEN(JJ) <= PTCOOL_TARGET (JJ) .AND. &            
00512                          ZTI_BLD_OPEN(JJ) <  ZTI_BLD_CLOSED(JJ) .AND. &
00513                          ZTI_BLD_OPEN(JJ) >  PTHEAT_TARGET (JJ) + 4.)
00514         !
00515       ELSE
00516         GNAT_VENT(JJ) = .FALSE.
00517       ENDIF
00518       ONATVENT_NIGHT(JJ) = GNAT_VENT(JJ)
00519     ELSE 
00520       GNAT_VENT(JJ) = ONATVENT_NIGHT(JJ)
00521     ENDIF
00522     !
00523   !    *manual management of surventilation
00524   ELSEIF (HNATVENT(JJ)=='MANU') THEN
00525     !
00526     ONATVENT_NIGHT(JJ) = ONATVENT_NIGHT(JJ) .AND. &
00527                          .NOT. ( PTIME > 5.*3600 .AND. PTIME < 18.*3600 )
00528     !
00529     GNAT_VENT(JJ) = ( PTIME > 18.*3600. .AND. PTIME < 21.*3600.  &
00530                       .AND. PT_CANYON(JJ) < PTI_BLD(JJ)+2.       &
00531                       .AND. PT_CANYON(JJ) > PTHEAT_TARGET(JJ)    & 
00532                       .AND. ( PTI_BLD(JJ) > PTHEAT_TARGET(JJ)+5. &
00533                        .OR. PTI_BLD(JJ) == PTCOOL_TARGET(JJ) )   ) 
00534     GNAT_VENT(JJ) = GNAT_VENT(JJ) .OR. ONATVENT_NIGHT(JJ)
00535     !
00536   ENDIF
00537   !
00538   ! Decicion about natural surventilation OK
00539   !################################################################################
00540   !
00541   !
00542   !################################################################################
00543   ! COMPUTE ENERGY DEMAND
00544   !---------------------------------------------------------------------------------
00545 
00546   ! *If natural surventilation ACTIVE
00547   IF (GNAT_VENT(JJ)) THEN
00548      ! 
00549      CALL GET_NAT_VENT(PTI_BLD(JJ), PT_CANYON(JJ), PU_CANYON(JJ), PGR(JJ), &
00550                        PFLOOR_HW_RATIO(JJ), PBLD_HEIGHT(JJ), ZNAT_VENT(JJ)         )
00551      !
00552      ZV_VENT     (JJ) = 0.
00553      ZINF        (JJ) = 0.
00554      !
00555      PH_BLD_COOL (JJ) = 0.0         ! No HVAC consumption
00556      PH_BLD_HEAT (JJ) = 0.0    
00557      PLE_BLD_COOL(JJ) = 0.0         ! No HVAC consumption
00558      PLE_BLD_HEAT(JJ) = 0.0   
00559      !    
00560      PT_BLD_COOL (JJ) = 0.0         ! No HVAC consumption
00561      PHVAC_COOL  (JJ) = 0.0    
00562      PT_SYS      (JJ) = PTI_BLD(JJ) ! No mechanical ventilation
00563      PQ_SYS      (JJ) = PQI_BLD(JJ) ! 
00564      PH_WASTE    (JJ) = 0.0
00565      PLE_WASTE   (JJ) = 0.0     
00566      PFAN_POWER  (JJ) = 0.0    
00567      PHVAC_HEAT  (JJ) = 0.0
00568      !
00569      PM_SYS  (JJ) = 0.0
00570      PCOP    (JJ) = 0.0
00571      PCAP_SYS(JJ) = 0.0
00572      !
00573   ! *If natural surventilation INACTIVE
00574   ELSE 
00575      !
00576      ZNAT_VENT(JJ) = 0.
00577      !
00578      ! ------------------------------------------------
00579      ! * Building energy demand for heating and cooling
00580      ! ------------------------------------------------
00581      !
00582      PH_BLD_COOL(JJ) = PWALL_O_BLD(JJ)/2. * (ZAC_IN_WALL_A_COOL(JJ) * (PT_WALL_A(JJ,IWALL) - PTCOOL_TARGET(JJ))  &
00583                                            + ZAC_IN_WALL_B_COOL(JJ) * (PT_WALL_B(JJ,IWALL) - PTCOOL_TARGET(JJ))) &
00584                      + PGLAZ_O_BLD(JJ) * ZAC_IN_WIN_COOL(JJ) * (PT_WIN2(JJ)       - PTCOOL_TARGET(JJ)) &    
00585                 + ZAC_IN_MASS_COOL (JJ)* PMASS_O_BLD(JJ) * (PT_MASS(JJ,1)     - PTCOOL_TARGET(JJ))  &
00586                 + ZAC_IN_ROOF_COOL (JJ)              * (PT_ROOF(JJ,IROOF) - PTCOOL_TARGET(JJ))  &
00587                 + ZAC_IN_FLOOR_COOL(JJ)              * (PT_FLOOR(JJ,1)    - PTCOOL_TARGET(JJ))  &
00588                 + ZQIN(JJ) * (1 - PQIN_FRAD(JJ)) * (1 - PQIN_FLAT(JJ))                     &
00589                 + (ZINF(JJ) + ZV_VENT(JJ)) * ZRHOI(JJ) * XCPD * (PT_CANYON(JJ) - PTCOOL_TARGET(JJ))
00590      !
00591      PH_BLD_HEAT(JJ) = - ( PWALL_O_BLD(JJ)/2. * (ZAC_IN_WALL_A_HEAT(JJ) * (PT_WALL_A(JJ,IWALL) - PTHEAT_TARGET(JJ))  &
00592                                                 +ZAC_IN_WALL_B_HEAT(JJ) * (PT_WALL_B(JJ,IWALL) - PTHEAT_TARGET(JJ)))  &
00593                          + PGLAZ_O_BLD(JJ) * ZAC_IN_WIN_HEAT(JJ) * (PT_WIN2(JJ)       - PTHEAT_TARGET(JJ)) &    
00594                 +  ZAC_IN_MASS_HEAT(JJ)* PMASS_O_BLD(JJ) * (PT_MASS(JJ,1)     - PTHEAT_TARGET(JJ))  &
00595                 +  ZAC_IN_ROOF_HEAT(JJ)              * (PT_ROOF(JJ,IROOF) - PTHEAT_TARGET(JJ))  &
00596                 + ZAC_IN_FLOOR_HEAT(JJ)              * (PT_FLOOR(JJ,1)    - PTHEAT_TARGET(JJ))  &
00597                 + ZQIN(JJ) * (1 - PQIN_FRAD(JJ))* (1 - PQIN_FLAT(JJ))                      &
00598                 + (ZINF(JJ) + ZV_VENT(JJ)) * ZRHOI(JJ) * XCPD * (PT_CANYON(JJ) - PTHEAT_TARGET(JJ)))
00599      !
00600 
00601      ZQCOOL_TARGET(JJ) = 0.62198 * PHR_TARGET(JJ) * PSAT(PTCOOL_TARGET(JJ)) / &
00602                          (PPS(JJ)- PHR_TARGET(JJ) * PSAT(PTCOOL_TARGET(JJ)))    
00603      !
00604      PLE_BLD_COOL(JJ) = ZQIN(JJ) * PQIN_FLAT(JJ)                                           &
00605                 + (ZINF(JJ) + ZV_VENT(JJ)) * ZRHOI(JJ) * XLVTT * (PQ_CANYON(JJ) - ZQCOOL_TARGET(JJ)) 
00606      !
00607 
00608      ZQHEAT_TARGET(JJ) = 0.62198 * PHR_TARGET(JJ) * PSAT(PTHEAT_TARGET(JJ)) / &
00609                          (PPS(JJ)- PHR_TARGET(JJ) * PSAT(PTHEAT_TARGET(JJ)))    
00610      !
00611      PLE_BLD_HEAT(JJ) = ZQIN(JJ) * PQIN_FLAT(JJ)                                           &
00612                 + (ZINF(JJ) + ZV_VENT(JJ)) * ZRHOI(JJ) * XLVTT * (PQ_CANYON(JJ) - ZQHEAT_TARGET(JJ))       
00613      !
00614      ! * Autosize calculations
00615      !
00616      IF (OAUTOSIZE .AND. KDAY==15) THEN
00617         !
00618         IF (PH_BLD_COOL(JJ) > PAUX_MAX(JJ))  THEN
00619           !  
00620           PAUX_MAX    (JJ) = PH_BLD_COOL(JJ)
00621           !
00622           ! Cooling coil sensible heat rate 
00623           ZSHR        (JJ) = MIN(XCPD * (PTCOOL_TARGET(JJ) - PT_ADP(JJ)) /           &
00624                                 (ENTH_FN_T_Q(PTCOOL_TARGET(JJ),ZQCOOL_TARGET(JJ)) -  &
00625                                  ENTH_FN_T_Q(PT_ADP(JJ),QSAT(PT_ADP(JJ),PPS(JJ)))), 1.)
00626           ! Cooling Coil Capacity [W m-2(bld)]
00627           PCAP_SYS_RAT(JJ) = PH_BLD_COOL(JJ) / ZSHR(JJ) 
00628           !
00629           ! Cooling rated air flow rate [kg s-1 m-2(bld)]
00630           ZM_SYS_RAT  (JJ) = PH_BLD_COOL(JJ) / XCPD / (PTCOOL_TARGET(JJ)-(14.0+273.16))
00631           IF (ZM_SYS_RAT(JJ) > PM_SYS_RAT(JJ)) PM_SYS_RAT(JJ) = ZM_SYS_RAT(JJ)
00632           !
00633           ! Impose condition 
00634           IF (PM_SYS_RAT(JJ)/ZRHOI(JJ)/PCAP_SYS_RAT(JJ) < 0.00004027) THEN
00635             PCAP_SYS_RAT(JJ) = PM_SYS_RAT(JJ)/ZRHOI(JJ)/0.00004027
00636           ELSE IF (PM_SYS_RAT(JJ)/ZRHOI(JJ)/PCAP_SYS_RAT(JJ) > 0.00006041) THEN
00637             PCAP_SYS_RAT(JJ) = PM_SYS_RAT(JJ)/ZRHOI(JJ)/0.00006041
00638           END IF
00639           !
00640         END IF
00641         !
00642      END IF
00643      !
00644      ! * END Autosize calculations
00645      !
00646      ! * system efficiency
00647      ! ...................
00648      !
00649      PM_SYS  (JJ) = PM_SYS_RAT  (JJ)
00650      PCOP    (JJ) = PCOP_RAT    (JJ)
00651      PCAP_SYS(JJ) = PCAP_SYS_RAT(JJ)
00652      !
00653      ! * Mixing conditions
00654      ! .................
00655      !
00656      ZXMIX (JJ) = ZV_VENT(JJ) * ZRHOI(JJ) / PM_SYS(JJ)
00657      ZT_MIX(JJ) = ZXMIX(JJ) * PT_CANYON(JJ) + (1.-ZXMIX(JJ)) * PTI_BLD(JJ)
00658      ZQ_MIX(JJ) = ZXMIX(JJ) * PQ_CANYON(JJ) + (1.-ZXMIX(JJ)) * PQI_BLD(JJ)
00659      ! 
00660      ! ---------------------------------------------
00661      ! * COOLING system : Performance and Waste heat
00662      ! ---------------------------------------------
00663      !
00664      IF (PH_BLD_COOL(JJ) >= 0.0) THEN
00665         !
00666         ! *ideal system
00667         IF (HCOOL_COIL=='IDEAL') THEN
00668            !
00669            PT_BLD_COOL(JJ) = PH_BLD_COOL(JJ) + PLE_BLD_COOL(JJ)
00670            !desactivation of LE_BLD_COOL impact on HVAC_COOL calculation
00671            !following too much impact in VURCA simulation (23/01/2012)
00672            !this would be the case for a vaporization system !
00673            !PHVAC_COOL (JJ) = PT_BLD_COOL(JJ) / PCOP_RAT(JJ)
00674            PHVAC_COOL (JJ) = PH_BLD_COOL(JJ) / PCOP_RAT(JJ)
00675            IF (PHVAC_COOL(JJ) < 0.0) PHVAC_COOL(JJ) = 0.0
00676            !
00677            PT_SYS(JJ) = ZT_MIX(JJ) - PH_BLD_COOL (JJ)  /PM_SYS(JJ) / XCPD
00678            !PQ_SYS(JJ) = ZQ_MIX(JJ) - PLE_BLD_COOL(JJ) / PM_SYS(JJ)/ XLVTT
00679            !desactivation following too much impact in VURCA simulation
00680            !(23/01/2012)
00681            PQ_SYS(JJ) = ZQ_MIX(JJ)
00682            !
00683            PH_WASTE(JJ)  = PHVAC_COOL(JJ) * (1.+PCOP_RAT(JJ)) * (1. - PF_WATER_COND(JJ))
00684            PLE_WASTE(JJ) = PHVAC_COOL(JJ) * (1.+PCOP_RAT(JJ)) * PF_WATER_COND(JJ)
00685            !
00686         ! *real system
00687         ELSEIF (HCOOL_COIL=='DXCOIL') THEN
00688            !
00689            CALL DX_AIR_COOLING_COIL_CV(PT_CANYON(JJ), PQ_CANYON(JJ), PPS(JJ),  &
00690                      ZRHOI(JJ), ZT_MIX(JJ), ZQ_MIX(JJ), PCOP_RAT(JJ),          &
00691                      PCAP_SYS_RAT(JJ), PT_ADP(JJ), PF_WATER_COND(JJ),          &
00692                      PM_SYS(JJ), PH_BLD_COOL(JJ), PH_WASTE(JJ), PLE_WASTE(JJ), &
00693                      PCOP(JJ), PCAP_SYS(JJ), PT_SYS(JJ), PQ_SYS(JJ),           &
00694                      PHVAC_COOL(JJ), PT_BLD_COOL(JJ)                           )
00695            !
00696         ENDIF !end type of cooling system
00697 
00698         !!! case of system without atmospheric releases. I-e releases in soil/water F_WATER_COND < 0 
00699         IF (PF_WATER_COND(JJ) < 0) THEN
00700           PH_WASTE(JJ) = 0. 
00701           PLE_WASTE(JJ) = 0. 
00702         ENDIF
00703         !!!!
00704         !
00705         !         From EP Engineering Reference (p. 647)
00706         PFAN_POWER(JJ) = PM_SYS(JJ) * ZFAN_AP(JJ) * ZFAN_EFF(JJ) * ZRHOI(JJ)
00707         !
00708         PH_BLD_HEAT (JJ) = 0.0
00709         PLE_BLD_HEAT(JJ) = 0.0
00710         PHVAC_HEAT  (JJ) = 0.0
00711      !
00712      ! ---------------------------------------------
00713      ! * HEATING system : Performance and Waste heat
00714      ! ---------------------------------------------
00715      !
00716      ELSE IF (PH_BLD_HEAT(JJ) > 0.0) THEN
00717         !
00718         ! *specific computation for real heating system
00719         IF  (HHEAT_COIL .EQ. 'FINCAP') THEN
00720           IF (PH_BLD_HEAT(JJ) > PCAP_SYS_HEAT(JJ)) PH_BLD_HEAT(JJ) =  PCAP_SYS_HEAT(JJ)
00721         END IF
00722         !
00723         PT_SYS(JJ) = ZT_MIX(JJ) + PH_BLD_HEAT(JJ) / PM_SYS(JJ) / XCPD
00724         PQ_SYS(JJ) = ZQ_MIX(JJ)
00725         !
00726         PHVAC_HEAT  (JJ) = PH_BLD_HEAT(JJ) / PEFF_HEAT(JJ)
00727         PH_WASTE    (JJ) = PHVAC_HEAT(JJ) - PH_BLD_HEAT(JJ)  
00728         PLE_WASTE   (JJ) = 0.0
00729         PH_BLD_COOL (JJ) = 0.0
00730         PLE_BLD_COOL(JJ) = 0.0
00731         PT_BLD_COOL (JJ) = 0.0
00732         PHVAC_COOL  (JJ) = 0.0
00733 !       From EP Engineering Reference (p. 647)
00734         PFAN_POWER(JJ) = PM_SYS(JJ)*ZFAN_AP(JJ)*(ZFAN_EFF(JJ)*ZRHOI(JJ))
00735      !
00736      ! ------------------------------
00737      ! * NEITHEIR COOLING NOR HEATING
00738      ! ------------------------------
00739      ! 
00740      ELSE
00741         !
00742         PH_BLD_COOL (JJ) = 0.0
00743         PH_BLD_HEAT (JJ) = 0.0 
00744         PLE_BLD_COOL(JJ) = 0.0
00745         PLE_BLD_HEAT(JJ) = 0.0
00746         !
00747         PT_BLD_COOL (JJ) = 0.0 
00748         PHVAC_COOL  (JJ) = 0.0
00749         PT_SYS      (JJ) = ZT_MIX(JJ)
00750         PQ_SYS      (JJ) = ZQ_MIX(JJ)
00751         PH_WASTE    (JJ) = 0.0
00752         PLE_WASTE   (JJ) = 0.0
00753         PFAN_POWER  (JJ) = 0.0     
00754         PHVAC_HEAT  (JJ) = 0.0
00755         !
00756      END IF !end for heating/cooling sytem
00757      !
00758   END IF
00759   !
00760   !---------------------------------------------------------------------------------
00761   ! ENERGY DEMAND COMPUTED
00762   !################################################################################
00763 ENDDO
00764 !
00765 !---------------------------------------------------
00766 ! EVOLUTION OF THE INTERNAL TEMPERATURE AND HUMIDITY
00767 !###################################################
00768 !
00769 ZTI_BLD(:) = ZTI_BLD(:) + PTSTEP/PBLD_HEIGHT(:) *                   & 
00770             ((ZINF(:) + ZNAT_VENT(:)) * (PT_CANYON(:) - PTI_BLD(:)) &
00771             + PM_SYS(:) / ZRHOI(:)    * (PT_SYS   (:) - PTI_BLD(:)) )
00772 !
00773 ZQI_BLD(:) = PQI_BLD(:) +  PTSTEP/PBLD_HEIGHT(:) *                     & 
00774              ( ZQIN(:) * PQIN_FLAT(:) / ( ZRHOI(:) * XLVTT)            &
00775               + (ZINF(:) + ZNAT_VENT(:)) * (PQ_CANYON(:) - PQI_BLD(:)) &
00776               + PM_SYS(:) / ZRHOI(:)     * (PQ_SYS   (:) - PQI_BLD(:)) )
00777 !
00778 !
00779 ! Update variables
00780 PTI_BLD(:) = ZTI_BLD(:)
00781 PQI_BLD(:) = ZQI_BLD(:)
00782 
00783 
00784 !
00785 ! Waste heat due to infiltration/ventilation
00786 ZWASTE   (:) = (ZINF(:)+ZV_VENT(:)+ZNAT_VENT(:)) * ZRHOI(:) 
00787 PH_WASTE (:) = PH_WASTE (:) + ZWASTE(:) * XCPD  * (PTI_BLD(:) - PT_CANYON(:))
00788 PLE_WASTE(:) = PLE_WASTE(:) + ZWASTE(:) * XLVTT * (PQI_BLD(:) - PQ_CANYON(:)) 
00789 !
00790 !
00791 IF (LHOOK) CALL DR_HOOK('BEM',1,ZHOOK_HANDLE)
00792 !
00793 CONTAINS
00794 !
00795 SUBROUTINE GET_NAT_VENT(PPTI_BLD, PPT_CANYON, PPU_CANYON, PPGR, &
00796                         PF_AUX, PPBLD_HEIGHT, PNAT_VENT)
00797 !
00798 IMPLICIT NONE
00799 !
00800 REAL, INTENT(IN) :: PPTI_BLD
00801 REAL, INTENT(IN) :: PPT_CANYON
00802 REAL, INTENT(IN) :: PPU_CANYON
00803 REAL, INTENT(IN) :: PPGR
00804 REAL, INTENT(IN) :: PF_AUX
00805 REAL, INTENT(IN) :: PPBLD_HEIGHT
00806 REAL, INTENT(OUT) :: PNAT_VENT
00807 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00808 !
00809 IF (LHOOK) CALL DR_HOOK('BEM:GET_NAT_VENT',0,ZHOOK_HANDLE)
00810 !
00811 PNAT_VENT = XG * (PPTI_BLD - PPT_CANYON)
00812 IF (PNAT_VENT .LT. 0.) THEN ! exceptional case with MANU ventilation system
00813    PNAT_VENT= PPBLD_HEIGHT/3600. !minimum value
00814 ELSE
00815    PNAT_VENT = 1./3. * (PNAT_VENT/PPT_CANYON)**(1./2.)                             &
00816                * (1.5 + PPTI_BLD/PNAT_VENT * 1./2. * PPU_CANYON**2*0.1)**(3./2.) &
00817                * PPGR * PF_AUX / 1.5 / 2.
00818    PNAT_VENT = MIN(PNAT_VENT, 5.0*PPBLD_HEIGHT/3600.)
00819 ENDIF
00820 !
00821 IF (LHOOK) CALL DR_HOOK('BEM:GET_NAT_VENT',1,ZHOOK_HANDLE)
00822 !
00823 END SUBROUTINE GET_NAT_VENT
00824 !
00825 END SUBROUTINE BEM