SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
mass_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 mass_layer_e_budget(PT_MASS, PTSTEP, PHC_MASS, PTC_MASS, PD_MASS, &
7  pflx_bld_mass, pdqs_mass, pimb_mass, &
8  pf_mass_wall, pf_mass_win, &
9  pf_mass_floor, pradht_in, &
10  prad_wall_mass, prad_roof_mass, &
11  prad_win_mass, pload_mass, pti_bld, &
12  prad_floor_mass, pconv_mass_bld )
13 ! ##########################################################################
14 !
15 !!**** *MASS_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 11/11
70 !! G. Pigeon 09/12 modif internal convection coef
71 !-------------------------------------------------------------------------------
72 !
73 !* 0. DECLARATIONS
74 ! ------------
75 !
76 USE modi_layer_e_budget_get_coef
77 USE modi_layer_e_budget
78 USE mode_conv_doe
79 !
80 USE yomhook ,ONLY : lhook, dr_hook
81 USE parkind1 ,ONLY : jprb
82 !
83 IMPLICIT NONE
84 !
85 !* 0.1 declarations of arguments
86 !
87 REAL, DIMENSION(:,:), INTENT(INOUT) :: pt_mass ! floor layers temperatures
88 REAL, INTENT(IN) :: ptstep ! time step
89 REAL, DIMENSION(:,:), INTENT(IN) :: phc_mass ! heat capacity for road layers
90 REAL, DIMENSION(:,:), INTENT(IN) :: ptc_mass ! thermal conductivity for
91  !road layers
92 REAL, DIMENSION(:,:), INTENT(IN) :: pd_mass ! depth of road layers
93 REAL, DIMENSION(:), INTENT(OUT) :: pflx_bld_mass !flux from building to floor
94 REAL, DIMENSION(:), INTENT(OUT) :: pdqs_mass !heat storage inside the floor
95 REAL, DIMENSION(:), INTENT(OUT) :: pimb_mass !floor energy residual imbalance for verification
96 REAL, DIMENSION(:), INTENT(IN) :: pf_mass_wall ! View factor mass-wall
97 REAL, DIMENSION(:), INTENT(IN) :: pf_mass_win ! View factor mass-window
98 REAL, DIMENSION(:), INTENT(IN) :: pf_mass_floor ! View factor mass-floor
99 REAL, DIMENSION(:), INTENT(IN) :: pradht_in ! Indoor radiant heat transfer coefficient
100  ! [W K-1 m-2]
101 REAL, DIMENSION(:), INTENT(IN) :: prad_roof_mass ! rad. fluxes from roof to floor[W m-2(roof)]
102 REAL, DIMENSION(:), INTENT(IN) :: prad_wall_mass ! rad. fluxes from wall to floor[W m-2(wall)]
103 REAL, DIMENSION(:), INTENT(IN) :: prad_win_mass ! rad. fluxes from win to floor[W m-2(win)]
104 REAL, DIMENSION(:), INTENT(IN) :: pti_bld ! indoor air temp.
105 REAL, DIMENSION(:), INTENT(IN) :: pload_mass ! solar and internal load to the floor
106 REAL, DIMENSION(:), INTENT(IN) :: prad_floor_mass ! rad. fluxes from floor to mass [W m-2(floor)]
107 REAL, DIMENSION(:), INTENT(OUT) :: pconv_mass_bld ! conv. fluxes from floor to bld [W m-2(floor)]
108 !
109 !* 0.2 declarations of local variables
110 !
111 !
112 REAL :: zimpl=1.0 ! implicit coefficient
113 REAL :: zexpl=0.0 ! explicit coefficient
114 !
115 REAL, DIMENSION(SIZE(PT_MASS,1),SIZE(PT_MASS,2)) :: za,& ! lower diag.
116  zb,& ! main diag.
117  zc,& ! upper diag.
118  zy ! r.h.s.
119 !
120 REAL, DIMENSION(SIZE(PT_MASS,1)) :: zts_mass ! surf. mass temp.
121  ! used during calculation
122 REAL, DIMENSION(SIZE(PT_MASS,1)) :: zts_mass_conv ! surf. mass temp. used for conv flux
123 REAL, DIMENSION(SIZE(PT_MASS,1)) :: zchtc_in_mass ! Indoor floor convec heat transfer coefficient
124  ! [W K-1 m-2(bld)]
125 INTEGER :: jj
126 REAL(KIND=JPRB) :: zhook_handle
127 !-------------------------------------------------------------------------------
128 IF (lhook) CALL dr_hook('MASS_LAYER_E_BUDGET',0,zhook_handle)
129 !
130 ! *Convection heat transfer coefficients [W m-2 K-1] from EP Engineering Reference
131 !
132 zchtc_in_mass(:) = chtc_vert_doe(pt_mass(:,1), pti_bld(:))
133 DO jj=1,SIZE(zchtc_in_mass)
134  zchtc_in_mass(jj) = max(1., zchtc_in_mass(jj))
135 ENDDO
136 !
137  CALL layer_e_budget_get_coef( pt_mass, ptstep, zimpl, phc_mass, ptc_mass, pd_mass, &
138  za, zb, zc, zy )
139 !
140 zts_mass(:) = pt_mass(:,1)
141 
142 zb(:,1) = zb(:,1) + zimpl * 4./3. * zchtc_in_mass(:)
143 
144 zy(:,1) = zy(:,1) &
145  + zchtc_in_mass(:) * (pti_bld(:) - 1./3. * pt_mass(:, 1) * (4 * zexpl -1.)) &
146  + pf_mass_win(:) * prad_win_mass(:) &
147  + pf_mass_wall(:) * prad_wall_mass(:) &
148  + pf_mass_floor(:) * (prad_roof_mass(:) +prad_floor_mass(:)) &
149  + pload_mass(:)
150 !
151  CALL layer_e_budget( pt_mass, ptstep, zimpl, phc_mass, ptc_mass, pd_mass, &
152  za, zb, zc, zy, pdqs_mass )
153 !
154 !* calculation of temperature used in energy balance calculation
155 ! -------------------------------------------------------------
156 !
157 zts_mass_conv(:) = zimpl * 4./3. * pt_mass(:,1) +1./3 * zts_mass(:) * (4 * zexpl -1.)
158 zts_mass(:) = zexpl * zts_mass(:) + zimpl * pt_mass(:,1)
159 !
160 !* calculation of convection flux between mass and building air
161 ! ------------------------------------------------------------
162 !
163 pconv_mass_bld(:) = zchtc_in_mass(:) * (zts_mass_conv(:) - pti_bld(:))
164 !
165 !* For diagnostics calculation of flux exchanged between the mass and the
166 ! indoor
167 ! ------------------------------------------------
168 !
169 pflx_bld_mass(:) = - pconv_mass_bld(:) &
170  + pf_mass_win(:) * prad_win_mass(:) &
171  + pf_mass_wall(:) * prad_wall_mass(:) &
172  + pf_mass_floor(:) * (prad_roof_mass(:) + prad_floor_mass(:)) &
173  + pload_mass(:)
174 !
175 !* Floor residual energy imbalance for verification
176 ! ------------------------------------------------
177 !
178 pimb_mass(:) = pflx_bld_mass(:) - pdqs_mass(:)
179 !
180 IF (lhook) CALL dr_hook('MASS_LAYER_E_BUDGET',1,zhook_handle)
181 !-------------------------------------------------------------------------------
182 END SUBROUTINE mass_layer_e_budget
subroutine layer_e_budget(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY, PDQS)
subroutine mass_layer_e_budget(PT_MASS, PTSTEP, PHC_MASS, PTC_MASS, PD_MASS, PFLX_BLD_MASS, PDQS_MASS, PIMB_MASS, PF_MASS_WALL, PF_MASS_WIN, PF_MASS_FLOOR, PRADHT_IN, PRAD_WALL_MASS, PRAD_ROOF_MASS, PRAD_WIN_MASS, PLOAD_MASS, PTI_BLD, PRAD_FLOOR_MASS, PCONV_MASS_BLD)
subroutine layer_e_budget_get_coef(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY)