-
Notifications
You must be signed in to change notification settings - Fork 4
Description
CLUBB includes an effect of 'splatting' of eddies near the surface and for stratocumulus inversions. This terms looks like
wp2_splat_term \propto -wp2 * turbulent_timescale * (d/dz(sqrt(wp2)))**2
there is a similar term for wp3
This term is then removed from wp2 and half is put to up2 and half to vp2
the relevant code for wp2 is
d_sqrt_wp2_dz = ddzt( sqrt( wp2_zt ) )
! The splatting term is clipped so that the incremental change doesn't exceed 5 times the
! value of wp2 itself. This prevents spikes in wp2 from being propagated to up2 and vp2.
! However, it does introduce undesired dependence on the time step.
! Someday we may wish to treat this term using a semi-implicit discretization.
wp2_splat = - wp2 * min( five/dt, C_wp2_splat * tau_zm * d_sqrt_wp2_dz**2 )
The code is identical for wp3_splat except the leading term is wp3. In this code block, tau_zm is the turbulent time scale on layer boundaries. This is a simple interpolation in most cases, it appears that they use a linear extrapolation at model top and they have a modification for the surface boundary condition, which is below
if ( wpthlp_sfc > zero ) then
usp2_sfc = four * ustar**2 + 0.3_core_rknd * wstar**2
vsp2_sfc = 1.75_core_rknd * ustar**2 + 0.3_core_rknd * wstar**2
else
usp2_sfc = four * ustar**2
vsp2_sfc = 1.75_core_rknd * ustar**2
endif
! Add effect of vertical compression of eddies on horizontal gustiness.
! First, ensure that wp2_sfc does not make the correlation
! of (w,thl) or (w,rt) outside (-1,1).
! Perhaps in the future we should also ensure that the correlations
! of (w,u) and (w,v) are not outside (-1,1).
min_wp2_sfc_val &
= max( w_tol_sqd, &
wprtp_sfc**2 / ( rtp2_sfc * max_mag_correlation_flux**2 ), &
wpthlp_sfc**2 / ( thlp2_sfc * max_mag_correlation_flux**2 ) )
if ( wp2_sfc + tau_zm_sfc * wp2_splat_sfc < min_wp2_sfc_val ) then
! splatting correction drives wp2_sfc to overly small value
wp2_splat_sfc_correction = -wp2_sfc + min_wp2_sfc_val
wp2_sfc = min_wp2_sfc_val
else
wp2_splat_sfc_correction = tau_zm_sfc * wp2_splat_sfc
wp2_sfc = wp2_sfc + wp2_splat_sfc_correction
end if
usp2_sfc = usp2_sfc - 0.5_core_rknd * wp2_splat_sfc_correction
vsp2_sfc = vsp2_sfc - 0.5_core_rknd * wp2_splat_sfc_correction
At the top note they use something similar to what is proposed and appears to be straight from Andre et al 1978. There is another non-Andre et al version
! Surface friction velocity following Andre et al. 1978
uf = sqrt( ustar2 + 0.3_core_rknd * wstar * wstar )
uf = max( ufmin, uf )
! Compute estimate for surface second order moments
wp2_sfc = a_const * uf**2
up2_sfc = up2_vp2_factor * a_const * uf**2 ! From Andre, et al. 1978
vp2_sfc = up2_vp2_factor * a_const * uf**2 ! " "
! Notes: 1) With "a" having a value of 1.8, the surface correlations of
! both w & rt and w & thl have a value of about 0.878.
! 2) The surface correlation of rt & thl is 0.5.
! Brian Griffin; February 2, 2008.
thlp2_sfc = 0.4_core_rknd * a_const * ( wpthlp_sfc / uf )**2
thlp2_sfc = max( thl_tol**2, thlp2_sfc )
rtp2_sfc = 0.4_core_rknd * a_const * ( wprtp_sfc / uf )**2
rtp2_sfc = max( rt_tol**2, rtp2_sfc )
rtpthlp_sfc = 0.2_core_rknd * a_const &
* ( wpthlp_sfc / uf ) * ( wprtp_sfc / uf )
! Add effect of vertical compression of eddies on horizontal gustiness.
! First, ensure that wp2_sfc does not make the correlation
! of (w,thl) or (w,rt) outside (-1,1).
! Perhaps in the future we should also ensure that the correlations
! of (w,u) and (w,v) are not outside (-1,1).
min_wp2_sfc_val &
= max( w_tol_sqd, &
wprtp_sfc**2 / ( rtp2_sfc * max_mag_correlation_flux**2 ), &
wpthlp_sfc**2 / ( thlp2_sfc * max_mag_correlation_flux**2 ) )
if ( wp2_sfc + tau_zm_sfc * wp2_splat_sfc < min_wp2_sfc_val ) then
! splatting correction drives wp2_sfc to overly small values
wp2_splat_sfc_correction = -wp2_sfc + min_wp2_sfc_val
wp2_sfc = min_wp2_sfc_val
else
wp2_splat_sfc_correction = tau_zm_sfc * wp2_splat_sfc
wp2_sfc = wp2_sfc + wp2_splat_sfc_correction
end if
up2_sfc = up2_sfc - 0.5_core_rknd * wp2_splat_sfc_correction
vp2_sfc = vp2_sfc - 0.5_core_rknd * wp2_splat_sfc_correction
staring at this it looks a bit like the prior splatting code but using MOST for the near surface. I'm honestly a bit surprised that the atmosphere model has a wp2_sfc when that value lives on the surface, I would expect wp2=0
I think it would be useful to try this. It should add the sfc up2/vp2 and also potentially near the OSBL base.
Thoughts?