SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
floor_layer_e_budget.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 floor_layer_e_budget(PT_FLOOR, PTSTEP, PHC_FLOOR, PTC_FLOOR, PD_FLOOR, &
7  pflx_bld_floor, pdqs_floor, pimb_floor, &
8  pf_floor_mass, pf_floor_wall, pf_floor_win, &
9  pf_floor_roof, pradht_in, &
10  pts_mass, prad_wall_floor, prad_roof_floor, &
11  prad_win_floor, pload_floor, pti_bld, &
12  prad_floor_mass, pconv_floor_bld )
13 ! ##########################################################################
14 !
15 !!**** *FLOOR_LAYER_E_BUDGET*
16 !!
17 !! PURPOSE
18 !! -------
19 !
20 ! Computes the evoultion of building floor temperatures
21 !
22 !
23 !!** METHOD
24 ! ------
25 !
26 ! 6 : equations for evolution of Ts_floor
27 ! *************************************************************
28 !
29 ! dTf_k(t) / dt = 1/(df_k*Cf_k) * (- 2*Kf_k-1*(Tf_k-Tf_k-1)/(df_k-1 +df_k)
30 ! - 2*Kf_k *(Tf_k-Tf_k+1)/(df_k+1 +df_k) )
31 !
32 ! dTf_1(t) / dt = 1/(df_1*Cf_1) * (- 2*Kw_1*(Tw_1-Tw_2)/(dw_1 +dw_2))
33 !
34 ! with
35 !
36 ! K*_k = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1)
37 !
38 !
39 ! The system is implicited (or semi-implicited).
40 !
41 ! ZIMPL=1 ---> implicit system
42 ! ZIMPL=0.5 ---> semi-implicit system
43 ! ZIMPL=0 ---> explicit system
44 !
45 !
46 !
47 !
48 !! EXTERNAL
49 !! --------
50 !!
51 !!
52 !! IMPLICIT ARGUMENTS
53 !! ------------------
54 !!
55 !! MODD_CST
56 !!
57 !!
58 !! REFERENCE
59 !! ---------
60 !!
61 !!
62 !! AUTHOR
63 !! ------
64 !!
65 !! G. Pigeon * Meteo-France *
66 !!
67 !! MODIFICATIONS
68 !! -------------
69 !! Original 15/04/09
70 !! G. Pigeon 08/10 computation of residual of energy balance
71 !! modification of the limit condition for
72 !! the deep temp. from the deep road temp.
73 !! to zero flux condition. idem for sfce T
74 !! G. Pigeon 11/11 split in 2 for floor and mass to be flux conservative
75 !! G. Pigeon 09/12 modif of conv. coef + implicitation of the exchange
76 !-------------------------------------------------------------------------------
77 !
78 !* 0. DECLARATIONS
79 ! ------------
80 !
81 USE modi_layer_e_budget_get_coef
82 USE modi_layer_e_budget
83 USE mode_conv_doe
84 !
85 USE yomhook ,ONLY : lhook, dr_hook
86 USE parkind1 ,ONLY : jprb
87 !
88 IMPLICIT NONE
89 !
90 !* 0.1 declarations of arguments
91 !
92 REAL, DIMENSION(:,:), INTENT(INOUT) :: pt_floor ! floor layers temperatures
93 REAL, INTENT(IN) :: ptstep ! time step
94 REAL, DIMENSION(:,:), INTENT(IN) :: phc_floor ! heat capacity for road layers
95 REAL, DIMENSION(:,:), INTENT(IN) :: ptc_floor ! thermal conductivity for
96  !road layers
97 REAL, DIMENSION(:,:), INTENT(IN) :: pd_floor ! depth of road layers
98 REAL, DIMENSION(:), INTENT(OUT) :: pflx_bld_floor !flux from building to floor
99 REAL, DIMENSION(:), INTENT(OUT) :: pdqs_floor !heat storage inside the floor
100 REAL, DIMENSION(:), INTENT(OUT) :: pimb_floor !floor energy residual imbalance for verification
101 REAL, DIMENSION(:), INTENT(IN) :: pf_floor_mass ! View factor floor-mass
102 REAL, DIMENSION(:), INTENT(IN) :: pf_floor_wall ! View factor floor-wall
103 REAL, DIMENSION(:), INTENT(IN) :: pf_floor_win ! View factor floor-window
104 REAL, DIMENSION(:), INTENT(IN) :: pf_floor_roof ! View factor floor-roof
105 REAL, DIMENSION(:), INTENT(IN) :: pradht_in ! Indoor radiant heat transfer coefficient
106  ! [W K-1 m-2]
107 REAL, DIMENSION(:), INTENT(IN) :: pts_mass ! surf. mass temp. (contact with bld air)
108 REAL, DIMENSION(:), INTENT(IN) :: prad_roof_floor ! rad. fluxes from roof to floor[W m-2(roof)]
109 REAL, DIMENSION(:), INTENT(IN) :: prad_wall_floor ! rad. fluxes from wall to floor[W m-2(wall)]
110 REAL, DIMENSION(:), INTENT(IN) :: prad_win_floor ! rad. fluxes from win to floor[W m-2(win)]
111 REAL, DIMENSION(:), INTENT(IN) :: pti_bld ! indoor air temp.
112 REAL, DIMENSION(:), INTENT(IN) :: pload_floor ! solar and internal load to the floor
113 REAL, DIMENSION(:), INTENT(OUT) :: prad_floor_mass ! rad. fluxes from floor to mass [W m-2(floor)]
114 REAL, DIMENSION(:), INTENT(OUT) :: pconv_floor_bld ! conv. fluxes from floor to bld [W m-2(floor)]
115 !
116 !* 0.2 declarations of local variables
117 !
118 !
119 REAL :: zimpl=1.0 ! implicit coefficient
120 REAL :: zexpl=0.0 ! explicit coefficient
121 !
122 REAL, DIMENSION(SIZE(PT_FLOOR,1),SIZE(PT_FLOOR,2)) :: za,& ! lower diag.
123  zb,& ! main diag.
124  zc,& ! upper diag.
125  zy ! r.h.s.
126 !
127 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: zts_floor ! surf. floor temp. used for rad. exchanges
128 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: zts_floor_conv ! surf. floor temp. used for conv exchanges
129  ! used during calculation
130 REAL, DIMENSION(SIZE(PT_FLOOR,1)) :: zchtc_in_floor ! Indoor floor convec heat transfer coefficient
131  ! [W K-1 m-2(bld)]
132 
133 REAL(KIND=JPRB) :: zhook_handle
134 INTEGER :: jj
135 !-------------------------------------------------------------------------------
136 IF (lhook) CALL dr_hook('FLOOR_LAYER_E_BUDGET',0,zhook_handle)
137 !
138 ! *Convection heat transfer coefficients [W m-2 K-1]
139 ! From EP Engineering Reference
140 zchtc_in_floor(:) = chtc_up_doe(pt_floor(:,1), pti_bld(:))
141 DO jj=1,SIZE(zchtc_in_floor)
142  zchtc_in_floor(jj) = max(1., zchtc_in_floor(jj))
143 ENDDO
144 
145 
146 !
147  CALL layer_e_budget_get_coef( pt_floor, ptstep, zimpl, phc_floor, ptc_floor, pd_floor, &
148  za, zb, zc, zy )
149 !
150 zts_floor(:) = pt_floor(:,1)
151 
152 zb(:,1) = zb(:,1) + zimpl * &
153  (zchtc_in_floor(:)*4./3. + pradht_in(:) * pf_floor_mass(:))
154 
155 
156 zy(:,1) = zy(:,1) &
157  + zchtc_in_floor(:) * (pti_bld(:) - 1./3. * pt_floor(:, 1) * (4* zexpl -1)) &
158  + pf_floor_win(:) * prad_win_floor(:) &
159  + pf_floor_wall(:) * prad_wall_floor(:) &
160  + pf_floor_roof(:) * prad_roof_floor(:) &
161  + pradht_in(:) * pf_floor_mass(:) * (pts_mass(:) - zexpl * pt_floor(:,1)) &
162  + pload_floor(:)
163 !
164  CALL layer_e_budget( pt_floor, ptstep, zimpl, phc_floor, ptc_floor, pd_floor, &
165  za, zb, zc, zy, pdqs_floor )
166 !
167 !* floor surface temperature used in the implicit formulation
168 ! ----------------------------------------------------------
169 zts_floor_conv(:) = 4./3. * zimpl * pt_floor(:,1) + 1./3. * zts_floor(:) * (4 * zexpl - 1.)
170 zts_floor(:) = zexpl * zts_floor(:) + zimpl * pt_floor(:,1)
171 !
172 !* fluxes with mass and indoor air
173 ! ----------------------------------------------------------
174 prad_floor_mass(:) = pradht_in(:) * (zts_floor(:) - pts_mass(:))
175 pconv_floor_bld(:) = zchtc_in_floor(:) * (zts_floor_conv(:) - pti_bld(:))
176 !
177 !* Flux between floor and indoor surfaces and air
178 ! ------------------------------------------------
179 pflx_bld_floor(:) = - pconv_floor_bld(:) &
180  + pf_floor_win(:) * prad_win_floor(:) &
181  + pf_floor_wall(:) * prad_wall_floor(:) &
182  + pf_floor_roof(:) * prad_roof_floor(:) &
183  + pradht_in(:) * pf_floor_mass(:) * (pts_mass(:) - zts_floor(:)) &
184  + pload_floor(:)
185 !
186 !* Floor residual energy imbalance for verification
187 ! ------------------------------------------------
188 pimb_floor(:) = pflx_bld_floor(:) - pdqs_floor(:)
189 !
190 IF (lhook) CALL dr_hook('FLOOR_LAYER_E_BUDGET',1,zhook_handle)
191 !-------------------------------------------------------------------------------
192 END SUBROUTINE floor_layer_e_budget
subroutine layer_e_budget(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY, PDQS)
subroutine floor_layer_e_budget(PT_FLOOR, PTSTEP, PHC_FLOOR, PTC_FLOOR, PD_FLOOR, PFLX_BLD_FLOOR, PDQS_FLOOR, PIMB_FLOOR, PF_FLOOR_MASS, PF_FLOOR_WALL, PF_FLOOR_WIN, PF_FLOOR_ROOF, PRADHT_IN, PTS_MASS, PRAD_WALL_FLOOR, PRAD_ROOF_FLOOR, PRAD_WIN_FLOOR, PLOAD_FLOOR, PTI_BLD, PRAD_FLOOR_MASS, PCONV_FLOOR_BLD)
subroutine layer_e_budget_get_coef(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY)