SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_bemn.F90
Go to the documentation of this file.
00001 !     ################
00002       MODULE MODD_BEM_n
00003 !     ################
00004 !
00005 !!****  *MODD_BEM_n - declaration of parameters and option for BEM
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !     Declaration of surface parameters
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None 
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!
00019 !!    AUTHOR
00020 !!    ------
00021 !!      B. Bueno   *Meteo France*
00022 !!
00023 !!    MODIFICATIONS
00024 !!    -------------
00025 !!      Original       10/2010
00026 !!      G. Pigeon      06/2011 add LSHAD_DAY
00027 !!      G. Pigeon      07/2011 add LNATVENT_NIGHT
00028 !!      G. Pigeon      08/2011 change from MODD_BLD -> MODD_BEM
00029 !!      G. Pigeon      10/2011 add indoor relative surf. and view factors
00030 !!      G. Pigeon      09/2012 add TRAN_WIN
00031 !!      G. Pigeon      10/2012 add XF_WIN_WIN
00032 !
00033 !*       0.   DECLARATIONS
00034 !             ------------
00035 !
00036 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00037 USE PARKIND1  ,ONLY : JPRB
00038 !
00039 IMPLICIT NONE
00040 
00041 TYPE BEM_OPTIONS_t
00042 ! BLD scheme option
00043 !
00044 ! Number of layers
00045 !
00046   INTEGER                       :: NFLOOR_LAYER   ! number of layers in walls
00047   CHARACTER(LEN=6)              :: CCOOL_COIL    ! type of cooling coil
00048   CHARACTER(LEN=6)              :: CHEAT_COIL    ! type of heating coil
00049   LOGICAL                       :: LAUTOSIZE     ! Flag to activate autosize calculations
00050 !
00051 END TYPE BEM_OPTIONS_t
00052 !
00053 TYPE(BEM_OPTIONS_t), ALLOCATABLE, TARGET, SAVE :: BEM_OPTIONS_MODEL(:)
00054 !
00055 INTEGER, POINTER :: NFLOOR_LAYER=>NULL()
00056 !$OMP THREADPRIVATE(NFLOOR_LAYER)
00057  CHARACTER(LEN=6), POINTER     :: CCOOL_COIL=>NULL()
00058 !$OMP THREADPRIVATE(CCOOL_COIL)
00059  CHARACTER(LEN=6), POINTER     :: CHEAT_COIL=>NULL()
00060 !$OMP THREADPRIVATE(CHEAT_COIL)
00061 LOGICAL, POINTER :: LAUTOSIZE=>NULL()
00062 !$OMP THREADPRIVATE(LAUTOSIZE)
00063 !
00064 !
00065 !--------------------------------------------------------------------------
00066 !
00067 TYPE BEM_t
00068 !
00069 ! Floor parameters
00070 !
00071   REAL, POINTER, DIMENSION(:,:) :: XHC_FLOOR     ! floor layers heat capacity        (J/K/m3)
00072   REAL, POINTER, DIMENSION(:,:) :: XTC_FLOOR     ! floor layers thermal conductivity (W/K/m)
00073   REAL, POINTER, DIMENSION(:,:) :: XD_FLOOR      ! depth of floor layers             (m)
00074 !
00075 ! HVAC parameters
00076 !
00077   REAL, POINTER, DIMENSION(:)   :: XTCOOL_TARGET ! cooling setpoint of indoor air
00078   REAL, POINTER, DIMENSION(:)   :: XTHEAT_TARGET ! heating setpoint of indoor air
00079   REAL, POINTER, DIMENSION(:)   :: XF_WASTE_CAN  ! fraction of waste heat released into the canyon
00080   REAL, POINTER, DIMENSION(:)   :: XEFF_HEAT     ! efficiency of the heating system
00081 !
00082 ! Indoor parameters
00083 !
00084   REAL, POINTER, DIMENSION(:)   :: XTI_BLD       ! building interior temperature    (K)
00085   REAL, POINTER, DIMENSION(:,:) :: XT_FLOOR      ! floor layer temperatures         (K)
00086   REAL, POINTER, DIMENSION(:,:) :: XT_MASS       ! Air cooled building internal th. mass temperature (K)
00087 !
00088   REAL, POINTER, DIMENSION(:)   :: XQIN          ! internal heat gains [W m-2(floor)]
00089   REAL, POINTER, DIMENSION(:)   :: XQIN_FRAD     ! radiant fraction of internal heat gains
00090   REAL, POINTER, DIMENSION(:)   :: XSHGC         ! solar heat gain coef. of windows
00091   REAL, POINTER, DIMENSION(:)   :: XSHGC_SH      ! solar heat gain coef. of windows + shading
00092   REAL, POINTER, DIMENSION(:)   :: XU_WIN        ! window U-factor [K m W-2]
00093   REAL, POINTER, DIMENSION(:)   :: XTRAN_WIN     ! window transmittance (-)
00094   REAL, POINTER, DIMENSION(:)   :: XGR           ! glazing ratio
00095   REAL, POINTER, DIMENSION(:)   :: XFLOOR_HEIGHT ! building floor height [m]
00096   REAL, POINTER, DIMENSION(:)   :: XINF          ! infiltration/ventilation flow rate [AC/H]
00097 !
00098 ! New parameters
00099 !
00100   REAL, POINTER, DIMENSION(:)   :: XF_WATER_COND  ! fraction of evaporation for condensers (cooling system)
00101   REAL, POINTER, DIMENSION(:)   :: XAUX_MAX      ! Auxiliar variable for autosize calcs
00102   REAL, POINTER, DIMENSION(:)   :: XQIN_FLAT     ! Latent franction of internal heat gains
00103   REAL, POINTER, DIMENSION(:)   :: XHR_TARGET    ! Relative humidity setpoint
00104   REAL, POINTER, DIMENSION(:)   :: XT_WIN2       ! Indoor window temperature [K]
00105   REAL, POINTER, DIMENSION(:)   :: XQI_BLD       ! Indoor air specific humidity [kg kg-1]
00106   REAL, POINTER, DIMENSION(:)   :: XV_VENT       ! Ventilation flow rate [AC/H]
00107   REAL, POINTER, DIMENSION(:)   :: XCAP_SYS_HEAT ! Capacity of the heating system 
00108                                                  ! [W m-2(bld)]
00109   REAL, POINTER, DIMENSION(:)   :: XCAP_SYS_RAT  ! Rated capacity of the cooling system
00110                                                  ! [W m-2(bld)]
00111   REAL, POINTER, DIMENSION(:)   :: XT_ADP        ! Apparatus dewpoint temperature of the
00112                                                  ! cooling coil [K]
00113   REAL, POINTER, DIMENSION(:)   :: XM_SYS_RAT    ! Rated HVAC mass flow rate 
00114                                                  ! [kg s-1 m-2(bld)]
00115   REAL, POINTER, DIMENSION(:)   :: XCOP_RAT      ! Rated COP of the cooling system
00116   REAL, POINTER, DIMENSION(:)   :: XT_WIN1       ! outdoor window temperature [K]
00117   REAL, POINTER, DIMENSION(:)   :: XALB_WIN      ! window albedo
00118   REAL, POINTER, DIMENSION(:)   :: XABS_WIN      ! window absortance
00119   REAL, POINTER, DIMENSION(:)   :: XT_SIZE_MAX   ! Maximum outdoor air temperature for
00120                                                  ! HVAC sizing [K]
00121   REAL, POINTER, DIMENSION(:)   :: XT_SIZE_MIN   ! Minimum outdoor air temperature for
00122                                                  ! HVAC sizing [K]
00123   REAL, POINTER, DIMENSION(:)   :: XUGG_WIN      ! Window glass-to-glass U-factor [K m W-2]
00124   LOGICAL, POINTER, DIMENSION(:):: LSHADE        ! flag to activate shading devices -> LOGICAL in the code
00125   REAL,    POINTER, DIMENSION(:):: XSHADE        ! flag to activate shading devices -> REAL for i/o 0. or 1.
00126   CHARACTER(LEN=4), POINTER, DIMENSION(:) :: CNATVENT ! flag to activate natural ventilation 'NONE', 'MANU', 'AUTO'
00127   REAL,    POINTER, DIMENSION(:):: XNATVENT      ! flag to describe surventilation system for i/o 
00128                                                  ! 0 for NONE, 1 for MANU and 2 for AUTO
00129   LOGICAL, POINTER, DIMENSION(:):: LSHAD_DAY     !Has shading been necessary this day ?
00130   LOGICAL, POINTER, DIMENSION(:):: LNATVENT_NIGHT !Has nocturnal surventilation been necessary and possible this night ?
00131   !
00132   !indoor relative surfaces and view factors
00133   REAL, POINTER, DIMENSION(:) :: XN_FLOOR        ! Number of floors     
00134   REAL, POINTER, DIMENSION(:) :: XGLAZ_O_BLD    ! Window area [m2_win/m2_bld]
00135   REAL, POINTER, DIMENSION(:) :: XMASS_O_BLD    ! Mass area [m2_mass/m2_bld]
00136   REAL, POINTER, DIMENSION(:) :: XFLOOR_HW_RATIO ! H/W ratio of 1 floor level
00137   REAL, POINTER, DIMENSION(:) :: XF_FLOOR_MASS   ! View factor floor-mass
00138   REAL, POINTER, DIMENSION(:) :: XF_FLOOR_WALL   ! View factor floor-wall
00139   REAL, POINTER, DIMENSION(:) :: XF_FLOOR_WIN    ! View factor floor-window
00140   REAL, POINTER, DIMENSION(:) :: XF_FLOOR_ROOF   ! View factor floor-roof
00141   REAL, POINTER, DIMENSION(:) :: XF_WALL_FLOOR   ! View factor wall-floor
00142   REAL, POINTER, DIMENSION(:) :: XF_WALL_MASS    ! View factor wall-mass
00143   REAL, POINTER, DIMENSION(:) :: XF_WALL_WIN     ! View factor wall-win
00144   REAL, POINTER, DIMENSION(:) :: XF_WIN_FLOOR    ! View factor win-floor
00145   REAL, POINTER, DIMENSION(:) :: XF_WIN_MASS     ! View factor win-mass
00146   REAL, POINTER, DIMENSION(:) :: XF_WIN_WALL     ! View factor win-wall
00147   REAL, POINTER, DIMENSION(:) :: XF_WIN_WIN      ! indoor View factor win-win
00148   REAL, POINTER, DIMENSION(:) :: XF_MASS_FLOOR   ! View factor mass-floor
00149   REAL, POINTER, DIMENSION(:) :: XF_MASS_WALL    ! View factor mass-wall
00150   REAL, POINTER, DIMENSION(:) :: XF_MASS_WIN     ! View factor mass-window
00151 
00152 
00153 ! 
00154 END TYPE BEM_t
00155 
00156 TYPE(BEM_t), ALLOCATABLE, TARGET, SAVE :: BEM_MODEL(:,:)
00157 
00158 REAL, POINTER, DIMENSION(:,:) :: XHC_FLOOR=>NULL()
00159 !$OMP THREADPRIVATE(XHC_FLOOR)
00160 REAL, POINTER, DIMENSION(:,:) :: XTC_FLOOR=>NULL()
00161 !$OMP THREADPRIVATE(XTC_FLOOR)
00162 REAL, POINTER, DIMENSION(:,:) :: XD_FLOOR=>NULL()
00163 !$OMP THREADPRIVATE(XD_FLOOR)
00164 REAL, POINTER, DIMENSION(:)   :: XTCOOL_TARGET=>NULL()
00165 !$OMP THREADPRIVATE(XTCOOL_TARGET)
00166 REAL, POINTER, DIMENSION(:)   :: XTHEAT_TARGET=>NULL()
00167 !$OMP THREADPRIVATE(XTHEAT_TARGET)
00168 REAL, POINTER, DIMENSION(:)   :: XTI_BLD=>NULL()
00169 !$OMP THREADPRIVATE(XTI_BLD)
00170 REAL, POINTER, DIMENSION(:,:) :: XT_FLOOR=>NULL()
00171 !$OMP THREADPRIVATE(XT_FLOOR)
00172 REAL, POINTER, DIMENSION(:)   :: XQIN=>NULL()
00173 !$OMP THREADPRIVATE(XQIN)
00174 REAL, POINTER, DIMENSION(:)   :: XQIN_FRAD=>NULL()
00175 !$OMP THREADPRIVATE(XQIN_FRAD)
00176 REAL, POINTER, DIMENSION(:)   :: XSHGC=>NULL()
00177 !$OMP THREADPRIVATE(XSHGC)
00178 REAL, POINTER, DIMENSION(:)   :: XSHGC_SH=>NULL()
00179 !$OMP THREADPRIVATE(XSHGC_SH)
00180 REAL, POINTER, DIMENSION(:)   :: XU_WIN=>NULL()
00181 !$OMP THREADPRIVATE(XU_WIN)
00182 REAL, POINTER, DIMENSION(:)   :: XTRAN_WIN=>NULL()
00183 !$OMP THREADPRIVATE(XTRAN_WIN)
00184 REAL, POINTER, DIMENSION(:)   :: XGR=>NULL()
00185 !$OMP THREADPRIVATE(XGR)
00186 REAL, POINTER, DIMENSION(:)   :: XFLOOR_HEIGHT=>NULL()
00187 !$OMP THREADPRIVATE(XFLOOR_HEIGHT)
00188 REAL, POINTER, DIMENSION(:)   :: XEFF_HEAT=>NULL()
00189 !$OMP THREADPRIVATE(XEFF_HEAT)
00190 REAL, POINTER, DIMENSION(:)   :: XINF=>NULL()
00191 !$OMP THREADPRIVATE(XINF)
00192 REAL, POINTER, DIMENSION(:,:) :: XT_MASS=>NULL()
00193 !$OMP THREADPRIVATE(XT_MASS)
00194 REAL, POINTER, DIMENSION(:)   :: XF_WASTE_CAN=>NULL()
00195 !$OMP THREADPRIVATE(XF_WASTE_CAN)
00196 !
00197 LOGICAL, POINTER, DIMENSION(:) :: LSHADE=>NULL()
00198 !$OMP THREADPRIVATE(LSHADE)
00199 REAL, POINTER, DIMENSION(:) :: XSHADE=>NULL()
00200 !$OMP THREADPRIVATE(XSHADE)
00201  CHARACTER(LEN=4), POINTER, DIMENSION(:) :: CNATVENT=>NULL()
00202 !$OMP THREADPRIVATE(CNATVENT)
00203 REAL, POINTER, DIMENSION(:) :: XNATVENT=>NULL()
00204 !$OMP THREADPRIVATE(XNATVENT)
00205 REAL, POINTER, DIMENSION(:)   :: XF_WATER_COND=>NULL()
00206 !$OMP THREADPRIVATE(XF_WATER_COND)
00207 REAL, POINTER, DIMENSION(:)   :: XAUX_MAX=>NULL()
00208 !$OMP THREADPRIVATE(XAUX_MAX)
00209 REAL, POINTER, DIMENSION(:)   :: XQIN_FLAT=>NULL()
00210 !$OMP THREADPRIVATE(XQIN_FLAT)
00211 REAL, POINTER, DIMENSION(:)   :: XHR_TARGET=>NULL()
00212 !$OMP THREADPRIVATE(XHR_TARGET)
00213 REAL, POINTER, DIMENSION(:)   :: XT_WIN2=>NULL()
00214 !$OMP THREADPRIVATE(XT_WIN2)
00215 REAL, POINTER, DIMENSION(:)   :: XQI_BLD=>NULL()
00216 !$OMP THREADPRIVATE(XQI_BLD)
00217 REAL, POINTER, DIMENSION(:)   :: XV_VENT=>NULL()
00218 !$OMP THREADPRIVATE(XV_VENT)
00219 REAL, POINTER, DIMENSION(:)   :: XCAP_SYS_HEAT=>NULL()
00220 !$OMP THREADPRIVATE(XCAP_SYS_HEAT)
00221 REAL, POINTER, DIMENSION(:)   :: XCAP_SYS_RAT=>NULL()
00222 !$OMP THREADPRIVATE(XCAP_SYS_RAT)
00223 REAL, POINTER, DIMENSION(:)   :: XT_ADP=>NULL()
00224 !$OMP THREADPRIVATE(XT_ADP)
00225 REAL, POINTER, DIMENSION(:)   :: XM_SYS_RAT=>NULL()
00226 !$OMP THREADPRIVATE(XM_SYS_RAT)
00227 REAL, POINTER, DIMENSION(:)   :: XCOP_RAT=>NULL()
00228 !$OMP THREADPRIVATE(XCOP_RAT)
00229 REAL, POINTER, DIMENSION(:)   :: XT_WIN1=>NULL()
00230 !$OMP THREADPRIVATE(XT_WIN1)
00231 REAL, POINTER, DIMENSION(:)   :: XALB_WIN=>NULL()
00232 !$OMP THREADPRIVATE(XALB_WIN)
00233 REAL, POINTER, DIMENSION(:)   :: XABS_WIN=>NULL()
00234 !$OMP THREADPRIVATE(XABS_WIN)
00235 REAL, POINTER, DIMENSION(:)   :: XT_SIZE_MAX=>NULL()
00236 !$OMP THREADPRIVATE(XT_SIZE_MAX)
00237 REAL, POINTER, DIMENSION(:)   :: XT_SIZE_MIN=>NULL()
00238 !$OMP THREADPRIVATE(XT_SIZE_MIN)
00239 REAL, POINTER, DIMENSION(:)   :: XUGG_WIN=>NULL()
00240 !$OMP THREADPRIVATE(XUGG_WIN)
00241 LOGICAL, POINTER, DIMENSION(:):: LSHAD_DAY=>NULL()
00242 !$OMP THREADPRIVATE(LSHAD_DAY)
00243 LOGICAL, POINTER, DIMENSION(:):: LNATVENT_NIGHT =>NULL()
00244 !$OMP THREADPRIVATE(LNATVENT_NIGHT)
00245 REAL, POINTER, DIMENSION(:) :: XN_FLOOR=> NULL()
00246 !$OMP THREADPRIVATE(XN_FLOOR)
00247 REAL, POINTER, DIMENSION(:) :: XGLAZ_O_BLD=> NULL()
00248 !$OMP THREADPRIVATE(XGLAZ_O_BLD)
00249 REAL, POINTER, DIMENSION(:) :: XMASS_O_BLD=> NULL()
00250 !$OMP THREADPRIVATE(XMASS_O_BLD)
00251 REAL, POINTER, DIMENSION(:) :: XFLOOR_HW_RATIO=> NULL()
00252 !$OMP THREADPRIVATE(XFLOOR_HW_RATIO)
00253 REAL, POINTER, DIMENSION(:) :: XF_FLOOR_MASS=> NULL()
00254 !$OMP THREADPRIVATE(XF_FLOOR_MASS)
00255 REAL, POINTER, DIMENSION(:) :: XF_FLOOR_WALL=> NULL()
00256 !$OMP THREADPRIVATE(XF_FLOOR_WALL)
00257 REAL, POINTER, DIMENSION(:) :: XF_FLOOR_WIN=> NULL()
00258 !$OMP THREADPRIVATE(XF_FLOOR_WIN)
00259 REAL, POINTER, DIMENSION(:) :: XF_FLOOR_ROOF=> NULL()
00260 !$OMP THREADPRIVATE(XF_FLOOR_ROOF)
00261 REAL, POINTER, DIMENSION(:) :: XF_WALL_FLOOR=> NULL()
00262 !$OMP THREADPRIVATE(XF_WALL_FLOOR)
00263 REAL, POINTER, DIMENSION(:) :: XF_WALL_MASS=> NULL()
00264 !$OMP THREADPRIVATE(XF_WALL_MASS)
00265 REAL, POINTER, DIMENSION(:) :: XF_WALL_WIN=> NULL()
00266 !$OMP THREADPRIVATE(XF_WALL_WIN)
00267 REAL, POINTER, DIMENSION(:) :: XF_WIN_FLOOR=> NULL()
00268 !$OMP THREADPRIVATE(XF_WIN_FLOOR)
00269 REAL, POINTER, DIMENSION(:) :: XF_WIN_MASS=> NULL()
00270 !$OMP THREADPRIVATE(XF_WIN_MASS)
00271 REAL, POINTER, DIMENSION(:) :: XF_WIN_WALL=> NULL()
00272 !$OMP THREADPRIVATE(XF_WIN_WALL)
00273 REAL, POINTER, DIMENSION(:) :: XF_WIN_WIN=> NULL()
00274 !$OMP THREADPRIVATE(XF_WIN_WIN)
00275 REAL, POINTER, DIMENSION(:) :: XF_MASS_FLOOR=> NULL()
00276 !$OMP THREADPRIVATE(XF_MASS_FLOOR)
00277 REAL, POINTER, DIMENSION(:) :: XF_MASS_WALL=> NULL()
00278 !$OMP THREADPRIVATE(XF_MASS_WALL)
00279 REAL, POINTER, DIMENSION(:) :: XF_MASS_WIN=> NULL()
00280 !$OMP THREADPRIVATE(XF_MASS_WIN)
00281 
00282 CONTAINS
00283 
00284 SUBROUTINE BEM_OPTIONS_GOTO_MODEL(KFROM, KTO, LKFROM)
00285 LOGICAL, INTENT(IN) :: LKFROM
00286 INTEGER, INTENT(IN) :: KFROM, KTO
00287 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00288 !
00289 ! Save current state for allocated arrays
00290 !
00291 ! Current model is set to model KTO
00292 IF (LHOOK) CALL DR_HOOK('MODD_BEM_N:BEM_OPTIONS_GOTO_MODEL',0,ZHOOK_HANDLE)
00293 NFLOOR_LAYER=>BEM_OPTIONS_MODEL(KTO)%NFLOOR_LAYER
00294 CCOOL_COIL=>BEM_OPTIONS_MODEL(KTO)%CCOOL_COIL
00295 CHEAT_COIL=>BEM_OPTIONS_MODEL(KTO)%CHEAT_COIL
00296 LAUTOSIZE=>BEM_OPTIONS_MODEL(KTO)%LAUTOSIZE
00297 IF (LHOOK) CALL DR_HOOK('MODD_BEM_N:BEM_OPTIONS_GOTO_MODEL',1,ZHOOK_HANDLE)
00298 
00299 END SUBROUTINE BEM_OPTIONS_GOTO_MODEL
00300 
00301 SUBROUTINE BEM_OPTIONS_ALLOC(KMODEL)
00302 INTEGER, INTENT(IN) :: KMODEL
00303 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00304 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_OPTIONS_ALLOC",0,ZHOOK_HANDLE)
00305 ALLOCATE(BEM_OPTIONS_MODEL(KMODEL))
00306 BEM_OPTIONS_MODEL(:)%NFLOOR_LAYER = 0
00307 BEM_OPTIONS_MODEL(:)%CCOOL_COIL   = '      '
00308 BEM_OPTIONS_MODEL(:)%CHEAT_COIL   = '      '
00309 BEM_OPTIONS_MODEL(:)%LAUTOSIZE    = .FALSE.
00310 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_OPTIONS_ALLOC",1,ZHOOK_HANDLE)
00311 END SUBROUTINE BEM_OPTIONS_ALLOC
00312 
00313 SUBROUTINE BEM_OPTIONS_DEALLO
00314 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00315 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_OPTIONS_DEALLO",0,ZHOOK_HANDLE)
00316 IF (ALLOCATED(BEM_OPTIONS_MODEL)) DEALLOCATE(BEM_OPTIONS_MODEL)
00317 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_OPTIONS_DEALLO",1,ZHOOK_HANDLE)
00318 END SUBROUTINE BEM_OPTIONS_DEALLO
00319 
00320 !----------------------------------------------------------------------------
00321 
00322 SUBROUTINE BEM_GOTO_MODEL(KFROM, KTO, LKFROM, KFROM_PATCH, KTO_PATCH)
00323 INTEGER, INTENT(IN) :: KFROM, KTO
00324 LOGICAL, INTENT(IN) :: LKFROM
00325 INTEGER, INTENT(IN) :: KFROM_PATCH, KTO_PATCH
00326 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00327 !
00328 ! Save current state for allocated arrays
00329 IF (LKFROM) THEN
00330    BEM_MODEL(KFROM,KFROM_PATCH)%LSHADE=>LSHADE
00331    BEM_MODEL(KFROM,KFROM_PATCH)%XSHADE=>XSHADE
00332    BEM_MODEL(KFROM,KFROM_PATCH)%CNATVENT=>CNATVENT
00333    BEM_MODEL(KFROM,KFROM_PATCH)%XNATVENT=>XNATVENT
00334    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WATER_COND=>XF_WATER_COND
00335    BEM_MODEL(KFROM,KFROM_PATCH)%XHC_FLOOR=>XHC_FLOOR
00336    BEM_MODEL(KFROM,KFROM_PATCH)%XTC_FLOOR=>XTC_FLOOR
00337    BEM_MODEL(KFROM,KFROM_PATCH)%XD_FLOOR=>XD_FLOOR
00338    BEM_MODEL(KFROM,KFROM_PATCH)%XTCOOL_TARGET=>XTCOOL_TARGET
00339    BEM_MODEL(KFROM,KFROM_PATCH)%XTHEAT_TARGET=>XTHEAT_TARGET
00340    BEM_MODEL(KFROM,KFROM_PATCH)%XTI_BLD=>XTI_BLD
00341    BEM_MODEL(KFROM,KFROM_PATCH)%XT_FLOOR=>XT_FLOOR
00342    BEM_MODEL(KFROM,KFROM_PATCH)%XT_MASS=>XT_MASS
00343    BEM_MODEL(KFROM,KFROM_PATCH)%XQIN=>XQIN
00344    BEM_MODEL(KFROM,KFROM_PATCH)%XQIN_FRAD=>XQIN_FRAD
00345    BEM_MODEL(KFROM,KFROM_PATCH)%XSHGC=>XSHGC
00346    BEM_MODEL(KFROM,KFROM_PATCH)%XSHGC_SH=>XSHGC_SH
00347    BEM_MODEL(KFROM,KFROM_PATCH)%XU_WIN=>XU_WIN
00348    BEM_MODEL(KFROM,KFROM_PATCH)%XTRAN_WIN=>XTRAN_WIN
00349    BEM_MODEL(KFROM,KFROM_PATCH)%XGR=>XGR
00350    BEM_MODEL(KFROM,KFROM_PATCH)%XFLOOR_HEIGHT=>XFLOOR_HEIGHT
00351    BEM_MODEL(KFROM,KFROM_PATCH)%XEFF_HEAT=>XEFF_HEAT
00352    BEM_MODEL(KFROM,KFROM_PATCH)%XINF=>XINF
00353    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WASTE_CAN=>XF_WASTE_CAN
00354    !
00355    BEM_MODEL(KFROM,KFROM_PATCH)%XAUX_MAX=>XAUX_MAX
00356    BEM_MODEL(KFROM,KFROM_PATCH)%XQIN_FLAT=>XQIN_FLAT
00357    BEM_MODEL(KFROM,KFROM_PATCH)%XHR_TARGET=>XHR_TARGET
00358    BEM_MODEL(KFROM,KFROM_PATCH)%XT_WIN2=>XT_WIN2
00359    BEM_MODEL(KFROM,KFROM_PATCH)%XQI_BLD=>XQI_BLD
00360    BEM_MODEL(KFROM,KFROM_PATCH)%XV_VENT=>XV_VENT
00361    BEM_MODEL(KFROM,KFROM_PATCH)%XCAP_SYS_HEAT=>XCAP_SYS_HEAT
00362    BEM_MODEL(KFROM,KFROM_PATCH)%XCAP_SYS_RAT=>XCAP_SYS_RAT
00363    BEM_MODEL(KFROM,KFROM_PATCH)%XT_ADP=>XT_ADP
00364    BEM_MODEL(KFROM,KFROM_PATCH)%XM_SYS_RAT=>XM_SYS_RAT
00365    BEM_MODEL(KFROM,KFROM_PATCH)%XCOP_RAT=>XCOP_RAT
00366    BEM_MODEL(KFROM,KFROM_PATCH)%XT_WIN1=>XT_WIN1
00367    BEM_MODEL(KFROM,KFROM_PATCH)%XALB_WIN=>XALB_WIN
00368    BEM_MODEL(KFROM,KFROM_PATCH)%XABS_WIN=>XABS_WIN
00369    BEM_MODEL(KFROM,KFROM_PATCH)%XT_SIZE_MAX=>XT_SIZE_MAX
00370    BEM_MODEL(KFROM,KFROM_PATCH)%XT_SIZE_MIN=>XT_SIZE_MIN
00371    BEM_MODEL(KFROM,KFROM_PATCH)%XUGG_WIN=>XUGG_WIN
00372    BEM_MODEL(KFROM,KFROM_PATCH)%LSHAD_DAY=>LSHAD_DAY
00373    BEM_MODEL(KFROM,KFROM_PATCH)%LNATVENT_NIGHT=>LNATVENT_NIGHT
00374    !
00375    BEM_MODEL(KFROM,KFROM_PATCH)%XN_FLOOR=>XN_FLOOR
00376    BEM_MODEL(KFROM,KFROM_PATCH)%XGLAZ_O_BLD=>XGLAZ_O_BLD
00377    BEM_MODEL(KFROM,KFROM_PATCH)%XMASS_O_BLD=>XMASS_O_BLD
00378    BEM_MODEL(KFROM,KFROM_PATCH)%XFLOOR_HW_RATIO=>XFLOOR_HW_RATIO
00379    BEM_MODEL(KFROM,KFROM_PATCH)%XF_FLOOR_MASS=>XF_FLOOR_MASS
00380    BEM_MODEL(KFROM,KFROM_PATCH)%XF_FLOOR_WALL=>XF_FLOOR_WALL
00381    BEM_MODEL(KFROM,KFROM_PATCH)%XF_FLOOR_WIN=>XF_FLOOR_WIN
00382    BEM_MODEL(KFROM,KFROM_PATCH)%XF_FLOOR_ROOF=>XF_FLOOR_ROOF
00383    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WALL_FLOOR=>XF_WALL_FLOOR
00384    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WALL_MASS=>XF_WALL_MASS
00385    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WALL_WIN=>XF_WALL_WIN
00386    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WIN_FLOOR=>XF_WIN_FLOOR
00387    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WIN_MASS=>XF_WIN_MASS
00388    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WIN_WALL=>XF_WIN_WALL
00389    BEM_MODEL(KFROM,KFROM_PATCH)%XF_WIN_WIN=>XF_WIN_WIN
00390    BEM_MODEL(KFROM,KFROM_PATCH)%XF_MASS_FLOOR=>XF_MASS_FLOOR
00391    BEM_MODEL(KFROM,KFROM_PATCH)%XF_MASS_WALL=>XF_MASS_WALL
00392    BEM_MODEL(KFROM,KFROM_PATCH)%XF_MASS_WIN=>XF_MASS_WIN
00393 ENDIF
00394 !
00395 IF (LHOOK) CALL DR_HOOK('MODD_BEM_N:BEM_GOTO_MODEL',0,ZHOOK_HANDLE)
00396 !
00397 XHC_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XHC_FLOOR
00398 XTC_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XTC_FLOOR
00399 XD_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XD_FLOOR
00400 XTCOOL_TARGET=>BEM_MODEL(KTO,KTO_PATCH)%XTCOOL_TARGET
00401 XTHEAT_TARGET=>BEM_MODEL(KTO,KTO_PATCH)%XTHEAT_TARGET
00402 XTI_BLD=>BEM_MODEL(KTO,KTO_PATCH)%XTI_BLD
00403 XT_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XT_FLOOR
00404 XT_MASS=>BEM_MODEL(KTO,KTO_PATCH)%XT_MASS
00405 XQIN=>BEM_MODEL(KTO,KTO_PATCH)%XQIN
00406 XQIN_FRAD=>BEM_MODEL(KTO,KTO_PATCH)%XQIN_FRAD
00407 XSHGC=>BEM_MODEL(KTO,KTO_PATCH)%XSHGC
00408 XSHGC_SH=>BEM_MODEL(KTO,KTO_PATCH)%XSHGC_SH
00409 XU_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XU_WIN
00410 XTRAN_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XTRAN_WIN
00411 XGR=>BEM_MODEL(KTO,KTO_PATCH)%XGR
00412 XFLOOR_HEIGHT=>BEM_MODEL(KTO,KTO_PATCH)%XFLOOR_HEIGHT
00413 XEFF_HEAT=>BEM_MODEL(KTO,KTO_PATCH)%XEFF_HEAT
00414 XINF=>BEM_MODEL(KTO,KTO_PATCH)%XINF
00415 XF_WASTE_CAN=>BEM_MODEL(KTO,KTO_PATCH)%XF_WASTE_CAN
00416 !
00417 LSHADE=>BEM_MODEL(KTO,KTO_PATCH)%LSHADE
00418 XSHADE=>BEM_MODEL(KTO,KTO_PATCH)%XSHADE
00419 CNATVENT=>BEM_MODEL(KTO,KTO_PATCH)%CNATVENT
00420 XNATVENT=>BEM_MODEL(KTO,KTO_PATCH)%XNATVENT
00421 XF_WATER_COND=>BEM_MODEL(KTO,KTO_PATCH)%XF_WATER_COND
00422 XAUX_MAX=>BEM_MODEL(KTO,KTO_PATCH)%XAUX_MAX
00423 XQIN_FLAT=>BEM_MODEL(KTO,KTO_PATCH)%XQIN_FLAT
00424 XHR_TARGET=>BEM_MODEL(KTO,KTO_PATCH)%XHR_TARGET
00425 XT_WIN2=>BEM_MODEL(KTO,KTO_PATCH)%XT_WIN2
00426 XQI_BLD=>BEM_MODEL(KTO,KTO_PATCH)%XQI_BLD
00427 XV_VENT=>BEM_MODEL(KTO,KTO_PATCH)%XV_VENT
00428 XCAP_SYS_HEAT=>BEM_MODEL(KTO,KTO_PATCH)%XCAP_SYS_HEAT
00429 XCAP_SYS_RAT=>BEM_MODEL(KTO,KTO_PATCH)%XCAP_SYS_RAT
00430 XT_ADP=>BEM_MODEL(KTO,KTO_PATCH)%XT_ADP
00431 XM_SYS_RAT=>BEM_MODEL(KTO,KTO_PATCH)%XM_SYS_RAT
00432 XCOP_RAT=>BEM_MODEL(KTO,KTO_PATCH)%XCOP_RAT
00433 XT_WIN1=>BEM_MODEL(KTO,KTO_PATCH)%XT_WIN1
00434 XALB_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XALB_WIN
00435 XABS_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XABS_WIN
00436 XT_SIZE_MAX=>BEM_MODEL(KTO,KTO_PATCH)%XT_SIZE_MAX
00437 XT_SIZE_MIN=>BEM_MODEL(KTO,KTO_PATCH)%XT_SIZE_MIN
00438 XUGG_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XUGG_WIN
00439 LSHAD_DAY=>BEM_MODEL(KTO,KTO_PATCH)%LSHAD_DAY
00440 LNATVENT_NIGHT=>BEM_MODEL(KTO,KTO_PATCH)%LNATVENT_NIGHT
00441 !
00442 XN_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XN_FLOOR
00443 XGLAZ_O_BLD=>BEM_MODEL(KTO,KTO_PATCH)%XGLAZ_O_BLD
00444 XMASS_O_BLD=>BEM_MODEL(KTO,KTO_PATCH)%XMASS_O_BLD
00445 XFLOOR_HW_RATIO=>BEM_MODEL(KTO,KTO_PATCH)%XFLOOR_HW_RATIO
00446 XF_FLOOR_MASS=>BEM_MODEL(KTO,KTO_PATCH)%XF_FLOOR_MASS
00447 XF_FLOOR_WALL=>BEM_MODEL(KTO,KTO_PATCH)%XF_FLOOR_WALL
00448 XF_FLOOR_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XF_FLOOR_WIN
00449 XF_FLOOR_ROOF=>BEM_MODEL(KTO,KTO_PATCH)%XF_FLOOR_ROOF
00450 XF_WALL_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XF_WALL_FLOOR
00451 XF_WALL_MASS=>BEM_MODEL(KTO,KTO_PATCH)%XF_WALL_MASS
00452 XF_WALL_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XF_WALL_WIN
00453 XF_WIN_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XF_WIN_FLOOR
00454 XF_WIN_MASS=>BEM_MODEL(KTO,KTO_PATCH)%XF_WIN_MASS
00455 XF_WIN_WALL=>BEM_MODEL(KTO,KTO_PATCH)%XF_WIN_WALL
00456 XF_WIN_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XF_WIN_WIN
00457 XF_MASS_FLOOR=>BEM_MODEL(KTO,KTO_PATCH)%XF_MASS_FLOOR
00458 XF_MASS_WALL=>BEM_MODEL(KTO,KTO_PATCH)%XF_MASS_WALL
00459 XF_MASS_WIN=>BEM_MODEL(KTO,KTO_PATCH)%XF_MASS_WIN
00460 !
00461 IF (LHOOK) CALL DR_HOOK('MODD_BEM_N:BEM_GOTO_MODEL',1,ZHOOK_HANDLE)
00462 !
00463 END SUBROUTINE BEM_GOTO_MODEL
00464 !
00465 !
00466 SUBROUTINE BEM_ALLOC(KMODEL,KPATCH)
00467 INTEGER, INTENT(IN) :: KMODEL
00468 INTEGER, INTENT(IN) :: KPATCH
00469 INTEGER :: J,JP
00470 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00471 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_ALLOC",0,ZHOOK_HANDLE)
00472 ALLOCATE(BEM_MODEL(KMODEL,KPATCH))
00473 DO J=1,KMODEL
00474  DO JP=1,KPATCH
00475   NULLIFY(BEM_MODEL(J,JP)%XF_WATER_COND)
00476   NULLIFY(BEM_MODEL(J,JP)%XHC_FLOOR)
00477   NULLIFY(BEM_MODEL(J,JP)%XTC_FLOOR)
00478   NULLIFY(BEM_MODEL(J,JP)%XD_FLOOR)
00479   NULLIFY(BEM_MODEL(J,JP)%XTCOOL_TARGET)
00480   NULLIFY(BEM_MODEL(J,JP)%XTHEAT_TARGET)
00481   NULLIFY(BEM_MODEL(J,JP)%XTI_BLD)
00482   NULLIFY(BEM_MODEL(J,JP)%XT_FLOOR)
00483   NULLIFY(BEM_MODEL(J,JP)%XT_MASS)
00484   NULLIFY(BEM_MODEL(J,JP)%XQIN)
00485   NULLIFY(BEM_MODEL(J,JP)%XQIN_FRAD)
00486   NULLIFY(BEM_MODEL(J,JP)%XSHGC)
00487   NULLIFY(BEM_MODEL(J,JP)%XSHGC_SH)
00488   NULLIFY(BEM_MODEL(J,JP)%XU_WIN)
00489   NULLIFY(BEM_MODEL(J,JP)%XTRAN_WIN)
00490   NULLIFY(BEM_MODEL(J,JP)%XGR)
00491   NULLIFY(BEM_MODEL(J,JP)%XFLOOR_HEIGHT)
00492   NULLIFY(BEM_MODEL(J,JP)%XEFF_HEAT)
00493   NULLIFY(BEM_MODEL(J,JP)%XINF)
00494   NULLIFY(BEM_MODEL(J,JP)%XF_WASTE_CAN)
00495   NULLIFY(BEM_MODEL(J,JP)%XAUX_MAX)
00496   NULLIFY(BEM_MODEL(J,JP)%XQIN_FLAT)
00497   NULLIFY(BEM_MODEL(J,JP)%XHR_TARGET)
00498   NULLIFY(BEM_MODEL(J,JP)%XT_WIN2)
00499   NULLIFY(BEM_MODEL(J,JP)%XQI_BLD)
00500   NULLIFY(BEM_MODEL(J,JP)%XV_VENT)
00501   NULLIFY(BEM_MODEL(J,JP)%XCAP_SYS_HEAT)
00502   NULLIFY(BEM_MODEL(J,JP)%XCAP_SYS_RAT)
00503   NULLIFY(BEM_MODEL(J,JP)%XT_ADP)
00504   NULLIFY(BEM_MODEL(J,JP)%XM_SYS_RAT)
00505   NULLIFY(BEM_MODEL(J,JP)%XCOP_RAT)
00506   NULLIFY(BEM_MODEL(J,JP)%XT_WIN1)
00507   NULLIFY(BEM_MODEL(J,JP)%XALB_WIN)
00508   NULLIFY(BEM_MODEL(J,JP)%XABS_WIN)
00509   NULLIFY(BEM_MODEL(J,JP)%XT_SIZE_MAX)
00510   NULLIFY(BEM_MODEL(J,JP)%XT_SIZE_MIN)
00511   NULLIFY(BEM_MODEL(J,JP)%XUGG_WIN)
00512   NULLIFY(BEM_MODEL(J,JP)%LSHAD_DAY)
00513   NULLIFY(BEM_MODEL(J,JP)%LNATVENT_NIGHT)
00514   NULLIFY(BEM_MODEL(J,JP)%LSHADE)
00515   NULLIFY(BEM_MODEL(J,JP)%XSHADE)
00516   NULLIFY(BEM_MODEL(J,JP)%CNATVENT)
00517   NULLIFY(BEM_MODEL(J,JP)%XNATVENT)
00518   NULLIFY(BEM_MODEL(J,JP)%XN_FLOOR)
00519   NULLIFY(BEM_MODEL(J,JP)%XGLAZ_O_BLD)
00520   NULLIFY(BEM_MODEL(J,JP)%XMASS_O_BLD)
00521   NULLIFY(BEM_MODEL(J,JP)%XFLOOR_HW_RATIO)
00522   NULLIFY(BEM_MODEL(J,JP)%XF_FLOOR_MASS)
00523   NULLIFY(BEM_MODEL(J,JP)%XF_FLOOR_WALL)
00524   NULLIFY(BEM_MODEL(J,JP)%XF_FLOOR_WIN)
00525   NULLIFY(BEM_MODEL(J,JP)%XF_FLOOR_ROOF)
00526   NULLIFY(BEM_MODEL(J,JP)%XF_WALL_FLOOR)
00527   NULLIFY(BEM_MODEL(J,JP)%XF_WALL_MASS)
00528   NULLIFY(BEM_MODEL(J,JP)%XF_WALL_WIN)
00529   NULLIFY(BEM_MODEL(J,JP)%XF_WIN_FLOOR)
00530   NULLIFY(BEM_MODEL(J,JP)%XF_WIN_MASS)
00531   NULLIFY(BEM_MODEL(J,JP)%XF_WIN_WALL)
00532   NULLIFY(BEM_MODEL(J,JP)%XF_WIN_WIN)
00533   NULLIFY(BEM_MODEL(J,JP)%XF_MASS_FLOOR)
00534   NULLIFY(BEM_MODEL(J,JP)%XF_MASS_WALL)
00535   NULLIFY(BEM_MODEL(J,JP)%XF_MASS_WIN)
00536  ENDDO
00537 ENDDO
00538 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_ALLOC",1,ZHOOK_HANDLE)
00539 END SUBROUTINE BEM_ALLOC
00540 !
00541 SUBROUTINE BEM_DEALLO
00542 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00543 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_DEALLO",0,ZHOOK_HANDLE)
00544 IF (ALLOCATED(BEM_MODEL)) DEALLOCATE(BEM_MODEL)
00545 IF (LHOOK) CALL DR_HOOK("MODD_BEM_N:BEM_DEALLO",1,ZHOOK_HANDLE)
00546 END SUBROUTINE BEM_DEALLO
00547 !
00548 END MODULE MODD_BEM_n