SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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, PFLOOR_HEIGHT, &
7  pgr, pn_floor, pwall_o_bld, pglaz_o_bld, pmass_o_bld, &
8  pfloor_hw_ratio, &
9  pf_floor_mass, pf_floor_wall, pf_floor_win, &
10  pf_floor_roof, pf_wall_floor, pf_wall_mass, &
11  pf_wall_win, pf_win_floor, pf_win_mass, pf_win_wall, &
12  pf_mass_floor, pf_mass_wall, pf_mass_win, pf_waste_can, &
13  pf_win_win)
14 !#####################################################################
15 !
16 !!**** *BEM_MORPHO
17 !!
18 !! PURPOSE
19 !! -------
20 !! compute morphometric parameter of the building for BEM
21 !!
22 !!** METHOD
23 !! ------
24 !!
25 !! EXTERNAL
26 !! --------
27 !!
28 !!
29 !! IMPLICIT ARGUMENTS
30 !! ------------------
31 !!
32 !! REFERENCE
33 !! ---------
34 !!
35 !!
36 !! AUTHOR
37 !! ------
38 !! G. Pigeon *Meteo France*
39 !!
40 !! MODIFICATIONS
41 !! -------------
42 !! Original 10/2011
43 !-------------------------------------------------------------------------------
44 !
45 !* 0. DECLARATIONS
46 ! ------------
47 !
48 IMPLICIT NONE
49 !
50 !* 0.1 Declarations of arguments
51 ! -------------------------
52 !
53 REAL, DIMENSION(:), INTENT(IN) :: pbld ! Urban horizontal building density
54 REAL, DIMENSION(:), INTENT(IN) :: pwall_o_hor ! Wall to horizontal surface ratio
55 REAL, DIMENSION(:), INTENT(IN) :: pbld_height ! Average building height [m]
56 REAL, DIMENSION(:), INTENT(INOUT)::pfloor_height ! Building floor height [m]
57 REAL, DIMENSION(:), INTENT(IN) :: pgr ! Glazing ratio
58 REAL, DIMENSION(:), INTENT(OUT) :: pn_floor ! number of floor levels
59 REAL, DIMENSION(:), INTENT(OUT) :: pwall_o_bld ! wall surface per ground building surface [m2(wall)/m2(bld)]
60 REAL, DIMENSION(:), INTENT(OUT) :: pglaz_o_bld ! glazing surface per ground building surface [m2(glazing)/m2(bld)]
61 REAL, DIMENSION(:), INTENT(OUT) :: pmass_o_bld ! thermal mass surface per ground building surface [m2(mass)/m2(bld)]
62 REAL, DIMENSION(:), INTENT(OUT) :: pfloor_hw_ratio !Height to width ratio of the floor levels
63 REAL, DIMENSION(:), INTENT(OUT) :: pf_floor_mass !view factor from floor to mass (how much floor seen by mass)
64 REAL, DIMENSION(:), INTENT(OUT) :: pf_floor_wall
65 REAL, DIMENSION(:), INTENT(OUT) :: pf_floor_win
66 REAL, DIMENSION(:), INTENT(OUT) :: pf_floor_roof
67 REAL, DIMENSION(:), INTENT(OUT) :: pf_wall_floor
68 REAL, DIMENSION(:), INTENT(OUT) :: pf_wall_mass
69 REAL, DIMENSION(:), INTENT(OUT) :: pf_wall_win
70 REAL, DIMENSION(:), INTENT(OUT) :: pf_win_floor
71 REAL, DIMENSION(:), INTENT(OUT) :: pf_win_mass
72 REAL, DIMENSION(:), INTENT(OUT) :: pf_win_wall
73 REAL, DIMENSION(:), INTENT(OUT) :: pf_win_win
74 REAL, DIMENSION(:), INTENT(OUT) :: pf_mass_floor
75 REAL, DIMENSION(:), INTENT(OUT) :: pf_mass_wall
76 REAL, DIMENSION(:), INTENT(OUT) :: pf_mass_win
77 REAL, DIMENSION(:), INTENT(INOUT)::pf_waste_can !fraction of waste heat released into the canyon
78 !
79 !* 0.2 Declarations of local variables
80 !
81 REAL, DIMENSION(SIZE(PBLD)):: zf_aux2 ! Auxiliar view factor
82 !
83 !RJ: missing declaration
84 INTEGER :: jj
85 !
86 !------------------------------------------------------------------------------
87 !
88 !* 1. Verify floor height
89 ! -------------------
90 !
91 DO jj=1,SIZE(pbld)
92  IF (pfloor_height(jj) < 2.5) THEN
93 ! WRITE(ILUOUT,*) 'WARNING: PFLOOR_HEIGHT low ',PFLOOR_HEIGHT(JJ),' grid mesh number ',JJ
94  pfloor_height(jj) = 2.5
95  ENDIF
96  IF (pfloor_height(jj) > pbld_height(jj)) THEN
97 ! WRITE(ILUOUT,*) 'WARNING: PFLOOR_HEIGHT higher than PBLD_HEIGHT ',PFLOOR_HEIGHT(JJ),' grid mesh number ',JJ, &
98 ! 'set to PBLD_HEIGHT'
99  pfloor_height(jj) = pbld_height(jj)
100  ENDIF
101 !
102 !* 1. Verify location of HVAC release for very extended buildings
103 ! -----------------------------------------------------------
104 !
105  IF (pbld(jj) > 0.9999 .AND. pf_waste_can(jj) > 0.) THEN
106 ! WRITE(ILUOUT,*) 'WARNING: PF_WASTE_CAN cannot be higher than 0. while PBLD is 0.9999',PF_WASTE_CAN(JJ), &
107 ! ' grid mesh number ',JJ,' set to 0.'
108  pf_waste_can(jj) = 0.
109  ENDIF
110 END DO
111 !
112 !* 1. floor number, relative surf. and view factors caculation
113 ! --------------------------------------------------------
114 !
115 pn_floor(:) = float(nint(pbld_height(:) / pfloor_height(:) ))
116 pwall_o_bld(:) = pwall_o_hor(:) * (1. - pgr(:)) / pbld(:) ! [m2(wall)/m2(bld)]
117 pglaz_o_bld(:) = pwall_o_hor(:) * pgr(:) / pbld(:) ! [m2(win)/m2(bld)]
118 
119 WHERE(pn_floor > 1.5)
120  !* more than 1 floor level -> the floor and the roof don't see each other
121  !
122  ! ROOF
123  ! |---------------------|
124  ! | |
125  ! | |
126  ! | MASS |
127  ! |---------------------|
128  ! |---------------------|
129  ! | MASS |
130  ! | |
131  ! | |
132  ! | FLOOR |
133  ! |---------------------|
134  !
135  pmass_o_bld(:) = 2 * (pn_floor(:) - 1.) ! [m2(mass)/m2(bld)]
136  pfloor_hw_ratio(:) = pwall_o_hor(:) / pn_floor(:) / pbld(:) / 2.
137  !
138  pf_floor_mass(:) = (pfloor_hw_ratio(:)**2 + 1.)**0.5 - pfloor_hw_ratio(:)
139  pf_floor_wall(:) = (1. - pf_floor_mass(:)) * (1. - pgr(:))
140  pf_floor_win(:) = (1. - pf_floor_mass(:)) * pgr(:)
141  pf_floor_roof(:) = 0. ! no rad interaction between floor and roof
142  !
143  zf_aux2(:) = (1. - pf_floor_mass(:)) / pfloor_hw_ratio(:)
144  !
145  pf_wall_floor(:) = zf_aux2(:) / ( 2.*pn_floor(:) )
146  pf_wall_mass(:) = pf_wall_floor(:) * (2.*pn_floor(:)-2.)
147  pf_wall_win(:) = (1. - zf_aux2(:)) * pgr(:)
148  !
149  pf_win_floor(:) = pf_wall_floor(:)
150  pf_win_mass(:) = pf_wall_mass(:)
151  pf_win_wall(:) = (1. - pf_win_floor(:) * 2. - pf_win_mass(:) ) * (1. - pgr(:))
152  pf_win_win(:) = (1. - pf_win_floor(:) * 2. - pf_win_mass(:) ) * pgr(:)
153  !
154  pf_mass_floor(:) = pf_floor_mass(:) / pmass_o_bld(:)
155  pf_mass_wall(:) = pwall_o_bld(:) * pf_wall_mass(:) / pmass_o_bld(:)
156  pf_mass_win(:) = pglaz_o_bld(:) * pf_win_mass(:) / pmass_o_bld(:)
157 ELSE WHERE
158  !* 1 floor level -> no mass view factors ; roof and floor see each other
159  !
160  ! ROOF
161  ! |---------------------|
162  ! | |
163  ! | |
164  ! | FLOOR |
165  ! |---------------------|
166  !
167  pmass_o_bld(:) = 0.
168  pfloor_hw_ratio(:) = pwall_o_hor(:) / pbld(:) / 2.
169  !
170  pf_floor_roof(:) = (pfloor_hw_ratio(:)**2 + 1.)**0.5 - pfloor_hw_ratio(:)
171  pf_floor_mass(:) = 0.
172  pf_floor_wall(:) = (1. - pf_floor_roof(:)) * (1. - pgr(:))
173  pf_floor_win(:) = (1. - pf_floor_roof(:)) * pgr(:)
174  !
175  zf_aux2(:) = (1. - pf_floor_roof(:)) / pfloor_hw_ratio(:)
176  !
177  pf_wall_floor(:) = zf_aux2(:) / 2.
178  pf_wall_mass(:) = 0.
179  pf_wall_win(:) = (1. - zf_aux2(:)) * pgr(:)
180  !
181  pf_win_floor(:) = pf_wall_floor(:)
182  pf_win_mass(:) = 0.
183  pf_win_wall(:) = (1. - pf_win_floor(:) * 2. - pf_win_mass(:) ) * (1. - pgr(:))
184  pf_win_win(:) = (1. - pf_win_floor(:) * 2. - pf_win_mass(:) ) * pgr(:)
185  !
186  pf_mass_floor(:) = 0.
187  pf_mass_wall(:) = 0.
188  pf_mass_win(:) = 0.
189 END WHERE
190 !
191 END SUBROUTINE bem_morpho
192 !-------------------------------------------------------------------------------
subroutine bem_morpho(PBLD, PWALL_O_HOR, PBLD_HEIGHT, PFLOOR_HEIGHT, PGR, PN_FLOOR, PWALL_O_BLD, PGLAZ_O_BLD, PMASS_O_BLD, PFLOOR_HW_RATIO, PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN, PF_FLOOR_ROOF, PF_WALL_FLOOR, PF_WALL_MASS, PF_WALL_WIN, PF_WIN_FLOOR, PF_WIN_MASS, PF_WIN_WALL, PF_MASS_FLOOR, PF_MASS_WALL, PF_MASS_WIN, PF_WASTE_CAN, PF_WIN_WIN)
Definition: bem_morpho.F90:6