SURFEX v8.1
General documentation of Surfex
bem_morpho.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !#####################################################################
6 SUBROUTINE bem_morpho(PBLD, PWALL_O_HOR, PBLD_HEIGHT, PWALL_O_BLD, B)
7 !#####################################################################
8 !
9 !!**** *BEM_MORPHO
10 !!
11 !! PURPOSE
12 !! -------
13 !! compute morphometric parameter of the building for BEM
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! G. Pigeon *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 10/2011
36 !-------------------------------------------------------------------------------
37 !
38 !* 0. DECLARATIONS
39 ! ------------
40 !
41 USE modd_bem_n, ONLY : bem_t
42 !
43 IMPLICIT NONE
44 !
45 !* 0.1 Declarations of arguments
46 ! -------------------------
47 !
48 REAL, DIMENSION(:), INTENT(IN) :: PBLD ! Urban horizontal building density
49 REAL, DIMENSION(:), INTENT(IN) :: PWALL_O_HOR ! Wall to horizontal surface ratio
50 REAL, DIMENSION(:), INTENT(IN) :: PBLD_HEIGHT ! Average building height [m]
51 REAL, DIMENSION(:), INTENT(OUT) :: PWALL_O_BLD ! wall surface per ground building surface [m2(wall)/m2(bld)]
52 TYPE(bem_t), INTENT(INOUT) :: B
53 !
54 !* 0.2 Declarations of local variables
55 !
56 REAL, DIMENSION(SIZE(PBLD)):: ZF_AUX2 ! Auxiliar view factor
57 !
58 !RJ: missing declaration
59 INTEGER :: JJ
60 !
61 !------------------------------------------------------------------------------
62 !
63 !* 1. Verify floor height
64 ! -------------------
65 !
66 DO jj=1,SIZE(pbld)
67  IF (b%XFLOOR_HEIGHT(jj) < 2.5) THEN
68 ! WRITE(ILUOUT,*) 'WARNING: B%XFLOOR_HEIGHT low ',B%XFLOOR_HEIGHT(JJ),' grid mesh number ',JJ
69  b%XFLOOR_HEIGHT(jj) = 2.5
70  ENDIF
71  IF (b%XFLOOR_HEIGHT(jj) > pbld_height(jj)) THEN
72 ! WRITE(ILUOUT,*) 'WARNING: B%XFLOOR_HEIGHT higher than PBLD_HEIGHT ',B%XFLOOR_HEIGHT(JJ),' grid mesh number ',JJ, &
73 ! 'set to PBLD_HEIGHT'
74  b%XFLOOR_HEIGHT(jj) = pbld_height(jj)
75  ENDIF
76 !
77 !* 1. Verify location of HVAC release for very extended buildings
78 ! -----------------------------------------------------------
79 !
80  IF (pbld(jj) > 0.9999 .AND. b%XF_WASTE_CAN(jj) > 0.) THEN
81 ! WRITE(ILUOUT,*) 'WARNING: B%XF_WASTE_CAN cannot be higher than 0. while PBLD is 0.9999',B%XF_WASTE_CAN(JJ), &
82 ! ' grid mesh number ',JJ,' set to 0.'
83  b%XF_WASTE_CAN(jj) = 0.
84  ENDIF
85 END DO
86 !
87 !* 1. floor number, relative surf. and view factors caculation
88 ! --------------------------------------------------------
89 !
90 b%XN_FLOOR(:) = float(nint(pbld_height(:) / b%XFLOOR_HEIGHT(:) ))
91 pwall_o_bld(:) = pwall_o_hor(:) * (1. - b%XGR(:)) / pbld(:) ! [m2(wall)/m2(bld)]
92 b%XGLAZ_O_BLD(:) = pwall_o_hor(:) * b%XGR(:) / pbld(:) ! [m2(win)/m2(bld)]
93 
94 WHERE(b%XN_FLOOR > 1.5)
95  !* more than 1 floor level -> the floor and the roof don't see each other
96  !
97  ! ROOF
98  ! |---------------------|
99  ! | |
100  ! | |
101  ! | MASS |
102  ! |---------------------|
103  ! |---------------------|
104  ! | MASS |
105  ! | |
106  ! | |
107  ! | FLOOR |
108  ! |---------------------|
109  !
110  b%XMASS_O_BLD(:) = 2 * (b%XN_FLOOR(:) - 1.) ! [m2(mass)/m2(bld)]
111  b%XFLOOR_HW_RATIO(:) = pwall_o_hor(:) / b%XN_FLOOR(:) / pbld(:) / 2.
112  !
113  b%XF_FLOOR_MASS(:) = (b%XFLOOR_HW_RATIO(:)**2 + 1.)**0.5 - b%XFLOOR_HW_RATIO(:)
114  b%XF_FLOOR_WALL(:) = (1. - b%XF_FLOOR_MASS(:)) * (1. - b%XGR(:))
115  b%XF_FLOOR_WIN (:) = (1. - b%XF_FLOOR_MASS(:)) * b%XGR(:)
116  b%XF_FLOOR_ROOF(:) = 0. ! no rad interaction between floor and roof
117  !
118  zf_aux2(:) = (1. - b%XF_FLOOR_MASS(:)) / b%XFLOOR_HW_RATIO(:)
119  !
120  b%XF_WALL_FLOOR(:) = zf_aux2(:) / ( 2.*b%XN_FLOOR(:) )
121  b%XF_WALL_MASS (:) = b%XF_WALL_FLOOR(:) * (2.*b%XN_FLOOR(:)-2.)
122  b%XF_WALL_WIN (:) = (1. - zf_aux2(:)) * b%XGR(:)
123  !
124  b%XF_WIN_FLOOR(:) = b%XF_WALL_FLOOR(:)
125  b%XF_WIN_MASS (:) = b%XF_WALL_MASS (:)
126  b%XF_WIN_WALL (:) = (1. - b%XF_WIN_FLOOR(:) * 2. - b%XF_WIN_MASS(:) ) * (1. - b%XGR(:))
127  b%XF_WIN_WIN (:) = (1. - b%XF_WIN_FLOOR(:) * 2. - b%XF_WIN_MASS(:) ) * b%XGR(:)
128  !
129  b%XF_MASS_FLOOR(:) = b%XF_FLOOR_MASS(:) / b%XMASS_O_BLD(:)
130  b%XF_MASS_WALL (:) = pwall_o_bld(:) * b%XF_WALL_MASS(:) / b%XMASS_O_BLD(:)
131  b%XF_MASS_WIN (:) = b%XGLAZ_O_BLD (:) * b%XF_WIN_MASS(:) / b%XMASS_O_BLD(:)
132 ELSE WHERE
133  !* 1 floor level -> no mass view factors ; roof and floor see each other
134  !
135  ! ROOF
136  ! |---------------------|
137  ! | |
138  ! | |
139  ! | FLOOR |
140  ! |---------------------|
141  !
142  b%XMASS_O_BLD(:) = 0.
143  b%XFLOOR_HW_RATIO(:) = pwall_o_hor(:) / pbld(:) / 2.
144  !
145  b%XF_FLOOR_ROOF(:) = (b%XFLOOR_HW_RATIO(:)**2 + 1.)**0.5 - b%XFLOOR_HW_RATIO(:)
146  b%XF_FLOOR_MASS(:) = 0.
147  b%XF_FLOOR_WALL(:) = (1. - b%XF_FLOOR_ROOF(:)) * (1. - b%XGR(:))
148  b%XF_FLOOR_WIN (:) = (1. - b%XF_FLOOR_ROOF(:)) * b%XGR(:)
149  !
150  zf_aux2(:) = (1. - b%XF_FLOOR_ROOF(:)) / b%XFLOOR_HW_RATIO(:)
151  !
152  b%XF_WALL_FLOOR(:) = zf_aux2(:) / 2.
153  b%XF_WALL_MASS (:) = 0.
154  b%XF_WALL_WIN (:) = (1. - zf_aux2(:)) * b%XGR(:)
155  !
156  b%XF_WIN_FLOOR(:) = b%XF_WALL_FLOOR(:)
157  b%XF_WIN_MASS (:) = 0.
158  b%XF_WIN_WALL (:) = (1. - b%XF_WIN_FLOOR(:) * 2. - b%XF_WIN_MASS(:) ) * (1. - b%XGR(:))
159  b%XF_WIN_WIN (:) = (1. - b%XF_WIN_FLOOR(:) * 2. - b%XF_WIN_MASS(:) ) * b%XGR(:)
160  !
161  b%XF_MASS_FLOOR(:) = 0.
162  b%XF_MASS_WALL (:) = 0.
163  b%XF_MASS_WIN (:) = 0.
164 END WHERE
165 !
166 END SUBROUTINE bem_morpho
167 !-------------------------------------------------------------------------------
subroutine bem_morpho(PBLD, PWALL_O_HOR, PBLD_HEIGHT, PWALL_O_BLD, B)
Definition: bem_morpho.F90:7