SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
isba_lwnet_meb.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 isba_lwnet_meb(PLAI,PPSN,PPSNA,PEMIS_N,PEMIS_F,PFF, &
7  ptv,ptg,ptn,plw_rad,plwnet_n,plwnet_v,plwnet_g, &
8  plwnet_v_dtv,plwnet_v_dtg,plwnet_v_dtn, &
9  plwnet_g_dtv,plwnet_g_dtg,plwnet_g_dtn, &
10  plwnet_n_dtv,plwnet_n_dtg,plwnet_n_dtn, &
11  psigma_f,psigma_fn, &
12  plwdown_gn )
13 
14 !
15 !!**** *ISBA_LWNET_MEB*
16 !!
17 !! PURPOSE
18 !! -------
19 !
20 ! Calculates the net longwave radiation budget terms for fully
21 ! coupled snow, soil-understory vegetation and canopy vegetation.
22 ! Flux derrivatives also herein.
23 !
24 !
25 !!** METHOD
26 !! ------
27 !
28 !! EXTERNAL
29 !! --------
30 !!
31 !! none
32 !!
33 !! IMPLICIT ARGUMENTS
34 !! ------------------
35 !!
36 !!
37 !! REFERENCE
38 !! ---------
39 !!
40 !! Noilhan and Planton (1989)
41 !! Belair (1995)
42 !! * to be done * (2011)
43 !!
44 !! AUTHOR
45 !! ------
46 !!
47 !! A. Boone * Meteo-France *
48 !! P. Samuelsson * SMHI *
49 !! S. Gollvik * SMHI *
50 !!
51 !! MODIFICATIONS
52 !! -------------
53 !! Original 22/01/11
54 !!
55 !-------------------------------------------------------------------------------
56 !
57 !* 0. DECLARATIONS
58 ! ------------
59 !
60 USE modd_isba_par, ONLY : xemissoil, xemisveg
61 !
62 USE mode_meb, ONLY : meb_shield_factor
63 !
64 USE yomhook ,ONLY : lhook, dr_hook
65 USE parkind1 ,ONLY : jprb
66 !
67 IMPLICIT NONE
68 !
69 !* 0.1 declarations of arguments
70 !
71 REAL, DIMENSION(:), INTENT(IN) :: plai, ppsn, ppsna, plw_rad, psigma_f
72 !
73 REAL, DIMENSION(:), INTENT(IN) :: ptv, ptg, ptn
74 !
75 REAL, DIMENSION(:), INTENT(IN) :: pemis_n, pemis_f, pff
76 !
77 REAL, DIMENSION(:), INTENT(OUT) :: plwnet_n, plwnet_v, plwnet_g
78 !
79 REAL, DIMENSION(:), INTENT(OUT) :: plwdown_gn
80 !
81 REAL, DIMENSION(:), INTENT(OUT) :: plwnet_v_dtv, plwnet_v_dtg, plwnet_v_dtn
82 ! PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN = Vegetation canopy net radiation
83 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
84 !
85 REAL, DIMENSION(:), INTENT(OUT) :: plwnet_g_dtv, plwnet_g_dtg, plwnet_g_dtn
86 ! PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN = Understory-ground net radiation
87 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
88 !
89 REAL, DIMENSION(:), INTENT(OUT) :: plwnet_n_dtv, plwnet_n_dtg, plwnet_n_dtn
90 ! PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN = Ground-based snow net radiation
91 ! derivatives w/r/t surface temperature(s) (W m-2 K-1)
92 !
93 REAL, DIMENSION(:), INTENT(OUT) :: psigma_fn
94 !
95 !* 0.2 declarations of local variables
96 !
97 !
98 REAL, DIMENSION(SIZE(PLAI)) :: zlwup
99 !
100 REAL, DIMENSION(SIZE(PLAI)) :: zsigma_fa, zpn, zfrac, zemis
101 !
102 REAL, DIMENSION(SIZE(PLAI)) :: zlw_g_a, zlw_g_b, zlw_g_c, &
103  zlw_g_d, zlw_g_e, zlw_g_f, zlw_g_g, &
104  zlw_g_h, zlw_g_i, zlw_g_j, zlw_g_k, &
105  zlw_g_l
106 !
107 REAL, DIMENSION(SIZE(PLAI)) :: zlw_n_a, zlw_n_b, zlw_n_c, &
108  zlw_n_d, zlw_n_e, zlw_n_f, zlw_n_g, &
109  zlw_n_h, zlw_n_i, zlw_n_j, zlw_n_k, &
110  zlw_n_l
111 !
112 REAL, DIMENSION(SIZE(PEMIS_N)) :: zemis_g
113 !
114 REAL(KIND=JPRB) :: zhook_handle
115 !-------------------------------------------------------------------------------
116 !
117 !* 0. Initialization:
118 ! ---------------
119 !
120 IF (lhook) CALL dr_hook('ISBA_LWNET_MEB',0,zhook_handle)
121 !-------------------------------------------------------------------------------
122 !
123 ! Soil with flooded part:
124 !
125 zemis_g(:) = xemissoil*(1.-pff(:)) + pff(:)*pemis_f(:)
126 !
127 !* 1. View factors: transmission
128 ! --------------------------
129 !
130 psigma_fn(:) = 1.0 - meb_shield_factor(plai,ppsna) ! NOTE: Effects of intercepted snow on the
131 ! ! canopy is neglected.
132 !
133 !* 2. Longwave radiation terms
134 ! ------------------------
135 
136 ! - over snow-free fraction:
137 
138 zfrac(:) = 1.-ppsn(:)
139 zpn(:) = ppsn(:)*(1.-ppsna(:))
140 zsigma_fa(: ) = (1.-zpn(:))*psigma_f(:) + zpn(:)*psigma_fn(:)
141 
142  CALL lw_flux_comp(zpn,plw_rad,zfrac,psigma_f,zsigma_fa, &
143  zemis_g,ptv,ptg, &
144  zlw_g_a,zlw_g_b,zlw_g_c,zlw_g_d,zlw_g_e,zlw_g_f, &
145  zlw_g_g,zlw_g_h,zlw_g_i,zlw_g_j,zlw_g_k,zlw_g_l )
146 
147 ! - over snow-covered fraction:
148 
149 zfrac(:) = ppsn(:)
150 zpn(:) = ppsn(:) + ppsna(:)*(1.-ppsn(:))
151 zsigma_fa(: ) = (1.-zpn(:))*psigma_f(:) + zpn(:)*psigma_fn(:)
152 
153  CALL lw_flux_comp(zpn,plw_rad,zfrac,psigma_fn,zsigma_fa, &
154  pemis_n,ptv,ptn, &
155  zlw_n_a,zlw_n_b,zlw_n_c,zlw_n_d,zlw_n_e,zlw_n_f, &
156  zlw_n_g,zlw_n_h,zlw_n_i,zlw_n_j,zlw_n_k,zlw_n_l )
157 
158 !------------------------------------------------------------------
159 ! Diagnostics
160 !------------------------------------------------------------------
161 
162 ! Total LW energy flux reaching ground/snow surface: (W m-2)
163 ! (explicit part: the implicit flux needs to have the derrivative terms added)
164 
165 plwdown_gn(:) = zlw_g_c(:) + zlw_g_f(:) + zlw_n_c(:) + zlw_n_f(:) + &
166  zlw_g_j(:) + zlw_g_k(:) + zlw_n_j(:) + zlw_n_k(:)
167 
168 !------------------------------------------------------------------
169 ! - compute derivatives: W m-2 K-1
170 !------------------------------------------------------------------
171 
172 plwnet_v_dtv(:) = ( zlw_g_g(:) - zlw_g_h(:) - 2*zlw_g_f(:) &
173  + zlw_n_g(:) - zlw_n_h(:) - 2*zlw_n_f(:) )*4/ptv(:)
174 plwnet_v_dtg(:) = ( zlw_g_i(:) - zlw_g_j(:) - zlw_g_k(:) &
175  - zlw_g_l(:) )*4/ptg(:)
176 plwnet_v_dtn(:) = ( zlw_n_i(:) - zlw_n_j(:) - zlw_n_k(:) &
177  - zlw_n_l(:) )*4/ptn(:)
178 
179 plwnet_g_dtv(:) = ( zlw_g_f(:) - zlw_g_g(:) )*4/ptv(:)
180 plwnet_g_dtg(:) = ( zlw_g_j(:) - zlw_g_i(:) )*4/ptg(:)
181 plwnet_g_dtn(:) = zlw_n_j(:) *4/ptn(:)
182 
183 plwnet_n_dtv(:) = ( zlw_n_f(:) - zlw_n_g(:) )*4/ptv(:)
184 plwnet_n_dtg(:) = zlw_g_k(:) *4/ptg(:)
185 plwnet_n_dtn(:) = ( zlw_n_j(:) - zlw_n_i(:) )*4/ptn(:)
186 
187 !------------------------------------------------------------------
188 ! - Compute *explicit* net budgets (at time t): W m-2
189 ! NOTE: fully implicit budgets (at time t+dt) are computed
190 ! *after* energy budget
191 !------------------------------------------------------------------
192 
193 zlwup(:) = zlw_g_b(:) + zlw_g_e(:) + zlw_g_f(:) + zlw_g_h(:) &
194  + zlw_g_l(:) &
195  + zlw_n_b(:) + zlw_n_e(:) + zlw_n_f(:) + zlw_n_h(:) &
196  + zlw_n_l(:)
197 
198 plwnet_g(:) = zlw_g_c(:) + zlw_g_f(:) + zlw_g_j(:) &
199  - zlw_g_i(:) - zlw_g_d(:) - zlw_g_g(:) &
200  + zlw_n_j(:)
201 
202 plwnet_n(:) = zlw_n_c(:) + zlw_n_f(:) + zlw_n_k(:) &
203  - zlw_n_i(:) - zlw_n_d(:) - zlw_n_g(:) &
204  + zlw_g_k(:)
205 
206 plwnet_v(:) = plw_rad(:) - zlwup(:) - plwnet_g(:) - plwnet_n(:)
207 
208 IF (lhook) CALL dr_hook('ISBA_LWNET_MEB',1,zhook_handle)
209 
210  CONTAINS
211 !=========================================================
212 SUBROUTINE lw_flux_comp(PPN,PLW_RAD,PFRAC,PSIGMA_F,PSIGMA_FA, &
213  pemis_s,ptv,ptemp_s, &
214  plw_a,plw_b,plw_c,plw_d,plw_e,plw_f,plw_g,plw_h, &
215  plw_i,plw_j,plw_k,plw_l )
216 
217 USE modd_csts, ONLY : xstefan
218 
219 IMPLICIT NONE
220 
221 REAL, DIMENSION(:), INTENT(IN) :: ppn, plw_rad, psigma_f, psigma_fa, pfrac
222 REAL, DIMENSION(:), INTENT(IN) :: ptemp_s, ptv
223 REAL, DIMENSION(:), INTENT(IN) :: pemis_s
224 REAL, DIMENSION(:), INTENT(OUT) :: plw_a, plw_b, plw_c, plw_d, plw_e, plw_f, &
225  plw_g, plw_h, plw_i, plw_j, plw_k, plw_l
226 
227 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
228 
229 REAL, DIMENSION(SIZE(PLW_RAD)) :: zwork
230 REAL(KIND=JPRB) :: zhook_handle
231 !--------------------------------------------------------------
232 IF (lhook) CALL dr_hook('LW_FLUX_COMP',0,zhook_handle)
233 
234 plw_a(:) = plw_rad(:)*pfrac(:)
235 plw_b(:) = plw_a(:)* psigma_f(:) *(1.-xemisveg)
236 plw_c(:) = plw_a(:)*(1.-psigma_f(:))
237 plw_d(:) = plw_c(:) *(1.-pemis_s(:))
238 plw_e(:) = plw_d(:)*(1.-psigma_fa(:))
239 
240 plw_f(:) = psigma_fa(:) * xemisveg * pfrac(:) *xstefan*(ptv(:)**4)
241 plw_g(:) = plw_f(:) *(1.-pemis_s(:))
242 plw_h(:) = plw_g(:)*(1.-psigma_fa(:))
243 
244 zwork(:) = (1.-xemisveg)*psigma_fa(:)
245 plw_i(:) = pemis_s(:) * pfrac(:) *xstefan*(ptemp_s(:)**4)
246 plw_j(:) = plw_i(:)*zwork(:) *(1.-ppn(:))
247 plw_k(:) = plw_i(:)*zwork(:)* ppn(:)
248 plw_l(:) = plw_i(:)*(1.-psigma_fa(:))
249 
250 IF (lhook) CALL dr_hook('LW_FLUX_COMP',1,zhook_handle)
251 
252 END SUBROUTINE lw_flux_comp
253 !=========================================================
254 
255 END SUBROUTINE isba_lwnet_meb
subroutine lw_flux_comp(PPN, PLW_RAD, PFRAC, PSIGMA_F, PSIGMA_FA, EMIS_S, PTV, PTEMP_S, LW_A, PLW_B, PLW_C, PLW_D, PLW_E, PLW_F, PLW_G, PLW_H, LW_I, PLW_J, PLW_K, PLW_L)
subroutine isba_lwnet_meb(PLAI, PPSN, PPSNA, PEMIS_N, PEMIS_F, PFF, PTV, PTG, PTN, PLW_RAD, PLWNET_N, PLWNET_V, PLWNET_G, PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN, PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN, PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN, PSIGMA_F, PSIGMA_FN, PLWDOWN_GN)