SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/bem_morpho.F90
Go to the documentation of this file.
00001 !#####################################################################
00002 SUBROUTINE BEM_MORPHO(PBLD, PWALL_O_HOR, PBLD_HEIGHT, PFLOOR_HEIGHT,            &
00003                       PGR, PN_FLOOR, PWALL_O_BLD, PGLAZ_O_BLD, PMASS_O_BLD,     &
00004                       PFLOOR_HW_RATIO,                                          &
00005                       PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN,               &
00006                       PF_FLOOR_ROOF, PF_WALL_FLOOR, PF_WALL_MASS,               &
00007                       PF_WALL_WIN, PF_WIN_FLOOR, PF_WIN_MASS, PF_WIN_WALL,      &
00008                       PF_MASS_FLOOR, PF_MASS_WALL, PF_MASS_WIN, PF_WASTE_CAN,   &
00009                       PF_WIN_WIN)
00010 !#####################################################################
00011 !
00012 !!**** *BEM_MORPHO 
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !! compute morphometric parameter of the building for BEM
00017 !! 
00018 !!**  METHOD
00019 !!    ------
00020 !!
00021 !!    EXTERNAL
00022 !!    --------
00023 !!
00024 !!
00025 !!    IMPLICIT ARGUMENTS
00026 !!    ------------------
00027 !!
00028 !!    REFERENCE
00029 !!    ---------
00030 !!
00031 !!
00032 !!    AUTHOR
00033 !!    ------
00034 !!      G. Pigeon   *Meteo France*      
00035 !!
00036 !!    MODIFICATIONS
00037 !!    -------------
00038 !!      Original    10/2011
00039 !-------------------------------------------------------------------------------
00040 !
00041 !*       0.    DECLARATIONS
00042 !              ------------
00043 !
00044 !
00045 !*       0.1   Declarations of arguments
00046 !              -------------------------
00047 !
00048 REAL, DIMENSION(:),   INTENT(IN)  :: PBLD         ! Urban horizontal building density
00049 REAL, DIMENSION(:),   INTENT(IN)  :: PWALL_O_HOR  ! Wall to horizontal surface ratio
00050 REAL, DIMENSION(:),   INTENT(IN)  :: PBLD_HEIGHT  ! Average building height [m]
00051 REAL, DIMENSION(:),   INTENT(INOUT)::PFLOOR_HEIGHT ! Building floor height [m]
00052 REAL, DIMENSION(:),   INTENT(IN)  :: PGR           ! Glazing ratio
00053 REAL, DIMENSION(:),   INTENT(OUT) :: PN_FLOOR ! number of floor levels
00054 REAL, DIMENSION(:),   INTENT(OUT) :: PWALL_O_BLD  ! wall surface per ground building surface [m²(wall)/m²(bld)]
00055 REAL, DIMENSION(:),   INTENT(OUT) :: PGLAZ_O_BLD  ! glazing surface per ground building surface [m²(glazing)/m²(bld)]
00056 REAL, DIMENSION(:),   INTENT(OUT) :: PMASS_O_BLD  ! thermal mass surface per ground building surface [m²(mass)/m²(bld)]
00057 REAL, DIMENSION(:),   INTENT(OUT) :: PFLOOR_HW_RATIO !Height to width ratio of the floor levels
00058 REAL, DIMENSION(:),   INTENT(OUT) :: PF_FLOOR_MASS  !view factor from floor to mass (how much floor seen by mass)
00059 REAL, DIMENSION(:),   INTENT(OUT) :: PF_FLOOR_WALL
00060 REAL, DIMENSION(:),   INTENT(OUT) :: PF_FLOOR_WIN
00061 REAL, DIMENSION(:),   INTENT(OUT) :: PF_FLOOR_ROOF
00062 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WALL_FLOOR
00063 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WALL_MASS
00064 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WALL_WIN
00065 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WIN_FLOOR
00066 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WIN_MASS
00067 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WIN_WALL
00068 REAL, DIMENSION(:),   INTENT(OUT) :: PF_WIN_WIN
00069 REAL, DIMENSION(:),   INTENT(OUT) :: PF_MASS_FLOOR
00070 REAL, DIMENSION(:),   INTENT(OUT) :: PF_MASS_WALL
00071 REAL, DIMENSION(:),   INTENT(OUT) :: PF_MASS_WIN
00072 REAL, DIMENSION(:),   INTENT(INOUT)::PF_WASTE_CAN !fraction of waste heat released into the canyon
00073 !
00074 !*      0.2    Declarations of local variables 
00075 !
00076 REAL, DIMENSION(SIZE(PBLD)):: ZF_AUX2       ! Auxiliar view factor
00077 !
00078 !------------------------------------------------------------------------------
00079 !
00080 !*    1.   Verify floor height
00081 !          -------------------
00082 !
00083 DO JJ=1,SIZE(PBLD)
00084   IF (PFLOOR_HEIGHT(JJ) < 2.5) THEN
00085 !    WRITE(ILUOUT,*) 'WARNING: PFLOOR_HEIGHT low ',PFLOOR_HEIGHT(JJ),' grid mesh number ',JJ
00086     PFLOOR_HEIGHT(JJ) = 2.5
00087   ENDIF
00088   IF (PFLOOR_HEIGHT(JJ) > PBLD_HEIGHT(JJ)) THEN
00089 !    WRITE(ILUOUT,*) 'WARNING: PFLOOR_HEIGHT higher than PBLD_HEIGHT ',PFLOOR_HEIGHT(JJ),' grid mesh number ',JJ, &
00090 !                    'set to PBLD_HEIGHT'
00091     PFLOOR_HEIGHT(JJ) = PBLD_HEIGHT(JJ)
00092   ENDIF
00093 !
00094 !*    1.   Verify location of HVAC release for very extended buildings
00095 !          -----------------------------------------------------------
00096 !
00097   IF (PBLD(JJ) > 0.9999 .AND. PF_WASTE_CAN(JJ) > 0.) THEN
00098 !    WRITE(ILUOUT,*) 'WARNING: PF_WASTE_CAN cannot be higher than 0. while PBLD is 0.9999',PF_WASTE_CAN(JJ), &
00099 !                    ' grid mesh number ',JJ,' set to 0.'
00100     PF_WASTE_CAN(JJ) = 0.
00101   ENDIF
00102 END DO
00103 !
00104 !*       1.    floor number, relative surf. and view factors caculation
00105 !              --------------------------------------------------------
00106 !
00107 PN_FLOOR(:) = FLOAT(NINT(PBLD_HEIGHT(:) / PFLOOR_HEIGHT(:) ))
00108 PWALL_O_BLD(:) = PWALL_O_HOR(:) * (1. - PGR(:)) / PBLD(:) ! [m2(wall)/m2(bld)]
00109 PGLAZ_O_BLD(:) = PWALL_O_HOR(:) * PGR(:)        / PBLD(:) ! [m2(win)/m2(bld)]
00110 
00111 WHERE(PN_FLOOR > 1.5)
00112    !* more than 1 floor level -> the floor and the roof don't see each other
00113    !
00114    !           ROOF
00115    !  |---------------------|
00116    !  |                     |
00117    !  |                     |
00118    !  |        MASS         |
00119    !  |---------------------|
00120    !  |---------------------|
00121    !  |        MASS         |
00122    !  |                     |
00123    !  |                     |
00124    !  |        FLOOR        |
00125    !  |---------------------|
00126    !
00127    PMASS_O_BLD(:) = 2 * (PN_FLOOR(:) - 1.)                     ! [m2(mass)/m2(bld)]
00128    PFLOOR_HW_RATIO(:) = PWALL_O_HOR(:) / PN_FLOOR(:) / PBLD(:) / 2.
00129    !
00130    PF_FLOOR_MASS(:) = (PFLOOR_HW_RATIO(:)**2 + 1.)**0.5  - PFLOOR_HW_RATIO(:)
00131    PF_FLOOR_WALL(:) = (1. - PF_FLOOR_MASS(:)) * (1. - PGR(:))
00132    PF_FLOOR_WIN (:) = (1. - PF_FLOOR_MASS(:)) * PGR(:)
00133    PF_FLOOR_ROOF(:) = 0. ! no rad interaction between floor and roof
00134    !
00135    ZF_AUX2      (:) = (1. - PF_FLOOR_MASS(:)) / PFLOOR_HW_RATIO(:)
00136    !
00137    PF_WALL_FLOOR(:) = ZF_AUX2(:) / ( 2.*PN_FLOOR(:) )
00138    PF_WALL_MASS (:) = PF_WALL_FLOOR(:) * (2.*PN_FLOOR(:)-2.) 
00139    PF_WALL_WIN  (:) = (1. - ZF_AUX2(:)) * PGR(:)
00140    !
00141    PF_WIN_FLOOR(:) = PF_WALL_FLOOR(:)
00142    PF_WIN_MASS (:) = PF_WALL_MASS (:)
00143    PF_WIN_WALL (:) = (1. - PF_WIN_FLOOR(:) * 2. - PF_WIN_MASS(:) ) * (1. - PGR(:))
00144    PF_WIN_WIN  (:) = (1. - PF_WIN_FLOOR(:) * 2. - PF_WIN_MASS(:) ) * PGR(:)
00145    !
00146    PF_MASS_FLOOR(:) = PF_FLOOR_MASS(:) / PMASS_O_BLD(:)
00147    PF_MASS_WALL (:) = PWALL_O_BLD(:) * PF_WALL_MASS(:) / PMASS_O_BLD(:)
00148    PF_MASS_WIN  (:) = PGLAZ_O_BLD (:) * PF_WIN_MASS(:)  / PMASS_O_BLD(:)
00149 ELSE WHERE
00150    !* 1 floor level -> no mass view factors ; roof and floor see each other
00151    !
00152    !           ROOF
00153    !  |---------------------|
00154    !  |                     |
00155    !  |                     |
00156    !  |        FLOOR        |
00157    !  |---------------------|
00158    !
00159    PMASS_O_BLD(:) = 0.
00160    PFLOOR_HW_RATIO(:) = PWALL_O_HOR(:) / PBLD(:) / 2.
00161    !
00162    PF_FLOOR_ROOF(:) = (PFLOOR_HW_RATIO(:)**2 + 1.)**0.5  - PFLOOR_HW_RATIO(:)
00163    PF_FLOOR_MASS(:) = 0.
00164    PF_FLOOR_WALL(:) = (1. - PF_FLOOR_ROOF(:)) * (1. - PGR(:))
00165    PF_FLOOR_WIN (:) = (1. - PF_FLOOR_ROOF(:)) * PGR(:)
00166    !
00167    ZF_AUX2      (:) = (1. - PF_FLOOR_ROOF(:)) / PFLOOR_HW_RATIO(:)
00168    !
00169    PF_WALL_FLOOR(:) = ZF_AUX2(:) / 2.
00170    PF_WALL_MASS (:) = 0.
00171    PF_WALL_WIN  (:) = (1. - ZF_AUX2(:)) * PGR(:)
00172    !
00173    PF_WIN_FLOOR(:) = PF_WALL_FLOOR(:)
00174    PF_WIN_MASS (:) = 0.
00175    PF_WIN_WALL (:) = (1. - PF_WIN_FLOOR(:) * 2. - PF_WIN_MASS(:) ) * (1. - PGR(:))
00176    PF_WIN_WIN  (:) = (1. - PF_WIN_FLOOR(:) * 2. - PF_WIN_MASS(:) ) * PGR(:)
00177    !
00178    PF_MASS_FLOOR(:) = 0.
00179    PF_MASS_WALL (:) = 0.
00180    PF_MASS_WIN  (:) = 0.
00181 END WHERE
00182 !
00183 END SUBROUTINE BEM_MORPHO
00184 !-------------------------------------------------------------------------------