8 dMsnowdt_in, I_atm_in, Q_atm_lw_in, height_u_in, height_tq_in, &
9 U_a_in, T_a_in, q_a_in, P_a_in, &
12 ! Parameters that may change
14 ! Surface heat, momentum fluxes, and other diags
15 Q_sensible, Q_latent ,Q_momentum, z0t, Qsat, Ri, ustar, Cd_a, &
16 Q_watvap, Q_latenti, Q_sublim, Q_atm_lw_up, pswe, &
17 ! Switches to configure FLake runs
18 PPEW_A_COEF, PPEW_B_COEF, rho_a, HIMPLICIT_WIND )
97 t_snow_p_flk, t_snow_n_flk , &
98 t_ice_p_flk, t_ice_n_flk , &
99 t_mnw_p_flk, t_mnw_n_flk , &
100 t_wml_p_flk, t_wml_n_flk , &
101 t_bot_p_flk, t_bot_n_flk , &
102 t_b1_p_flk, t_b1_n_flk , &
103 c_t_p_flk, c_t_n_flk , &
104 h_snow_p_flk, h_snow_n_flk , &
105 h_ice_p_flk, h_ice_n_flk , &
106 h_ml_p_flk, h_ml_n_flk , &
107 h_b1_p_flk, h_b1_n_flk , &
138 USE modi_wind_threshold
155 TYPE(
flake_t),
INTENT(INOUT) :: F
157 INTEGER,
INTENT(IN) :: KI
161 REAL,
DIMENSION(KI),
INTENT(IN) :: &
172 REAL,
DIMENSION(KI),
INTENT(IN) :: &
178 CHARACTER(LEN=*),
INTENT(IN) :: HIMPLICIT_WIND
185 REAL,
DIMENSION(KI),
INTENT(IN) :: albedo
190 REAL,
DIMENSION(KI),
INTENT(INOUT) :: &
202 REAL,
DIMENSION(KI),
INTENT(OUT) :: &
214 REAL,
DIMENSION(KI) :: &
221 REAL(KIND=JPRB) :: ZHOOK_HANDLE
223 REAL,
PARAMETER :: ZTIMEMAX = 300.
226 REAL :: zaux, zcond, zloc, ZTSTEP
231 IF (
lhook)
CALL dr_hook(
'FLAKE_INTERFACE',0,zhook_handle)
247 h_point_loop:
DO jl = 1,ki
255 t_snow_p_flk = f%XT_SNOW(jl)
256 t_ice_p_flk = f%XT_ICE(jl)
257 t_mnw_p_flk = f%XT_MNW(jl)
258 t_wml_p_flk = f%XT_WML(jl)
259 t_bot_p_flk = f%XT_BOT(jl)
260 t_b1_p_flk = f%XT_B1(jl)
261 c_t_p_flk = f%XCT(jl)
262 h_snow_p_flk = f%XH_SNOW(jl)
263 h_ice_p_flk = f%XH_ICE(jl)
264 h_ml_p_flk = f%XH_ML(jl)
265 h_b1_p_flk = f%XH_B1(jl)
271 dmsnowdt_flk = dmsnowdt_in(jl)
277 i_atm_flk = i_atm_in(jl)
278 CALL flake_radflux ( f%XWATER_DEPTH(jl), albedo(jl), opticpar_water(jl), &
279 opticpar_ice(jl), opticpar_snow(jl) )
286 q_w_flk = f%XEMIS(jl)*q_atm_lw_in(jl) -
sfcflx_lwradwsfc(f%XEMIS(jl),f%XTS(jl))
288 q_atm_lw_up(jl) = q_atm_lw_in(jl) - q_w_flk
294 IF (f%CFLK_FLUX==
'FLAKE')
THEN 296 q_momentum(jl) = - rho_a(jl) * ustar(jl)**2
298 CALL sfcflx_momsenlat ( height_u_in(jl), height_tq_in(jl), f%XWATER_FETCH(jl), &
299 u_a_in(jl), t_a_in(jl), q_a_in(jl), f%XTS(jl), &
300 p_a_in(jl), h_ice_p_flk, q_momentum(jl), &
301 q_sensible(jl), q_latent(jl), q_watvap(jl), &
302 ri(jl), f%XZ0(jl), z0t(jl), qsat(jl), &
303 q_latenti(jl), q_sublim(jl) )
312 cd_a(jl) = - q_momentum(jl) / rho_a(jl) / zwind(jl)**2
317 IF(himplicit_wind==
'OLD')
THEN 319 ustar2 = (cd_a(jl)*u_a_in(jl)*ppew_b_coef(jl))/ &
320 (1.0-rho_a(jl)*cd_a(jl)*u_a_in(jl)*ppew_a_coef(jl))
323 ustar2 = (cd_a(jl)*u_a_in(jl)*(2.*ppew_b_coef(jl)-u_a_in(jl)))/ &
324 (1.0-2.0*rho_a(jl)*cd_a(jl)*u_a_in(jl)*ppew_a_coef(jl))
325 zvmod = rho_a(jl)*ppew_a_coef(jl)*ustar2 + ppew_b_coef(jl)
326 zvmod = max(0.0,zvmod)
327 IF(ppew_a_coef(jl)/= 0.)
THEN 328 ustar2 = max((zvmod-ppew_b_coef(jl))/(rho_a(jl)*ppew_a_coef(jl)),0.0)
331 ustar(jl) =sqrt(ustar2)
333 q_momentum(jl) = - rho_a(jl) * ustar2
336 u_star_w_flk = sqrt(-q_momentum(jl)/tpl_rho_w_r)
342 q_w_flk = q_w_flk - q_sensible(jl) - q_latent(jl)
344 IF(h_ice_p_flk.GE.h_ice_min_flk)
THEN 345 IF(h_snow_p_flk.GE.h_snow_min_flk)
THEN 364 indt = max(1,nint(del_time(jl)/ztimemax))
365 ztstep = del_time(jl)/
REAL(indt)
369 t_snow_p_flk = f%XT_SNOW(jl)
370 t_ice_p_flk = f%XT_ICE(jl)
371 t_mnw_p_flk = f%XT_MNW(jl)
372 t_wml_p_flk = f%XT_WML(jl)
373 t_bot_p_flk = f%XT_BOT(jl)
374 t_b1_p_flk = f%XT_B1(jl)
375 c_t_p_flk = f%XCT(jl)
376 h_snow_p_flk = f%XH_SNOW(jl)
377 h_ice_p_flk = f%XH_ICE(jl)
378 h_ml_p_flk = f%XH_ML(jl)
379 h_b1_p_flk = f%XH_B1(jl)
381 CALL flake_driver ( f%XWATER_DEPTH(jl), f%XDEPTH_BS(jl), f%XT_BS(jl), f%XCORIO(jl), &
382 opticpar_water(jl)%extincoef_optic(1), &
383 ztstep, f%XTS(jl), t_sfc_n )
389 f%XT_SNOW(jl) = t_snow_n_flk
390 f%XT_ICE(jl) = t_ice_n_flk
391 f%XT_MNW(jl) = t_mnw_n_flk
392 f%XT_WML(jl) = t_wml_n_flk
393 f%XT_BOT(jl) = t_bot_n_flk
394 f%XT_B1(jl) = t_b1_n_flk
395 f%XCT(jl) = c_t_n_flk
396 f%XH_SNOW(jl) = h_snow_n_flk
397 f%XH_ICE(jl) = h_ice_n_flk
398 f%XH_ML(jl) = h_ml_n_flk
399 f%XH_B1(jl) = h_b1_n_flk
404 pswe(jl) = f%XH_SNOW(jl)*flake_snowdensity(f%XH_SNOW(jl))
413 IF (f%LSKINTEMP.AND.(f%XH_ICE(jl)<h_ice_min_flk).AND.(f%CFLK_FLUX==
'FLAKE'))
THEN 415 zaux = (1.0-exp(-opticpar_water(jl)%extincoef_optic(1) * h_skinlayer_flk)) &
416 / opticpar_water(jl)%extincoef_optic(1)
420 zloc = ((1.0-albedo(jl))*i_atm_flk+q_w_flk)*h_skinlayer_flk-(1.0-albedo(jl))*i_atm_flk*zaux
422 f%XTS(jl) = t_sfc_n + zloc / zcond
428 IF (
lhook)
CALL dr_hook(
'FLAKE_INTERFACE',1,zhook_handle)
subroutine flake_driver(depth_w, depth_bs, T_bs, par_Coriolis, extincoef_water_typ, del_time, T_sfc_p, T_sfc_n)
real function, dimension(size(pwind)) wind_threshold(PWIND, PUREF)
real, parameter tpl_kappa_w
real function sfcflx_lwradwsfc(emis, pts)
type(opticpar_medium), parameter opticpar_ice_opaque
type(opticpar_medium), parameter opticpar_snow_opaque
integer, parameter nband_optic_max
subroutine flake_interface(F, KI, dMsnowdt_in, I_atm_in, Q_atm_lw_in, height_u_in, height_tq_in, U_a_in, T_a_in, q_a_in, P_a_in, del_time, albedo, Q_sensible, Q_latent, Q_momentum, z0t, Qsat, Ri, ustar, Cd_a, Q_watvap, Q_latenti, Q_sublim, Q_atm_lw_up, pswe, PPEW_A_COEF, PPEW_B_COEF, rho_a, HIMPLICIT_WIND)