Surface deposition of marine fog and its treatment in the Weather Re-search and Forecasting (WRF) model

Abstract. There have been many studies of marine fog, some using Weather Research and Forecasting (WRF) and other models. Several model studies report overpredictions of near-surface liquid water content (Qc), leading to visibility estimates that are too low. This study has found the same. One possible cause of this overestimation could be the treatment of a surface deposition rate of fog droplets at the underlying water surface. Most models, including the Advanced Research Weather Research and Forecasting (WRF-ARW) Model, available from the National Center for Atmospheric Research (NCAR), take account of gravitational settling of cloud droplets throughout the domain and at the surface. However, there should be an additional deposition as turbulence causes fog droplets to collide and coalesce with the water surface. A water surface, or any wet surface, can then be an effective sink for fog water droplets. This process can be parameterized as an additional deposition velocity with a model that could be based on a roughness length for water droplets, z0c, that may be significantly larger than the roughness length for water vapour, z0q. This can be implemented in WRF either as a variant of the Katata scheme for deposition to vegetation or via direct modifications in boundary-layer modules.


Therefore we have left sedimentation through the air column, and sedimentation to the surface via simple droplet settling, as being treated by the Thompson microphysics code, although in some test cases we can set that settling velocity, vtck(k)=0. We can still use the option grav_settling = 2 in module_bl_mynn, BUT with the parameter gno set to 0 in module_bl_fogdes so that there is no settling through the air column while it remains active at the surface, just because that was the way it was coded in bl_fogdes.
One could set a deposition velocity vdfg(I,j) within module_sf_fogdes based on the lowest grid level wind speed, as discussed in section 3 above, or on the surface friction velocity. Then the turbulent flux of cloud droplets to the water surface from the lowest model level (called gfluxm for compatibility with existing code, even though not gravitational) could be represented (in module_bl_fogdes) as gfluxm=grav_settling2*qc_curr(i,k,j)*vdfg(i,j). The parameter grav_settling2 = 1 if grav_settling = 2 and qc_curr(i,k,j) is the Qc value at the current grid point, which has k = kts (normally = 1). This is the normal use of bl_mynn, but with module_sf_fogdes adjusted to provide vdfg values.
These could be defined by vdfg(i,j) = vtune * wspd(i,j) with vtune as a tuning option. This approach matches the WRF Katata code in module_sf_fogdes which has access to the lowest grid level wind speed (wspd) although vtune should be dependent on the lowest grid level. Our preferred approach is to use ustar (=ust(i,j)) as the velocity scale rather than wspd and a cloud droplet roughness length (z0c) as the tuning parameter, maybe starting with z0c = 0.01 (m). The deposition velocity would then be, vdfg(i,j) = ust(i,j)*karman/ LOG(1+z1/z0c). (A1) In WRF the lowest grid cell centre (mass point) is at z1= 0.5*dz8w(i,kts,j). The friction velocity, ust and the karman constant (0.4) are used or computed in other modules and need to be made accessible to module_sf_fogdes. Note that ust is an input variable in module_bl_mynn. It is an in/out variable in module_sf_sfclayrev and other places.
A direct approach in module_bl_mynn: An alternative approach would be to still leave gravitational settling in the Thompson microphysics module, set grav_settling = 0 in module_bl_mynn, and then, vdfg(I,j) defined in module_sf_fogdes, the settling of the cloud droplets through the air column and at the surface defined in module_bl_fogdes, are all turned to 0. When the tridiagonal matrices are being set up for cloud water, represent the downward flux of cloud water at the lower boundary by vdfg(i,j)*qc(1) so that for k = kts = 1 the code lines read a(k)= 0 ! This is not used anyway b(k)=1.+ dtz(k)*(khdz(k+1)/rho(k)+ depvel)-0.5*dtz(k)*s_aw(k+1) c(k)= -dtz(k)*khdz(k+1)/rho(k) -0.5*dtz(k)*s_aw(k+1) d(k)= sqc(k) + qcd(k)*delt -dtz(k)*s_awqc(k+1)+ det_sqc(k)*delt where depvel is used instead of vdfg to distinguish from vdfg defined in module_sf_fogdes. As with the Katata scheme extension depvel could be defined in terms of the friction velocity ust and with a roughness length for cloud droplets z0c serving as a tuning parameter (see Eq. A1). ust is a known quantity within module_bl_mynn and in that module z1 can be set = 0.5 * dz(1). The s_aw, s_awc and s_awqc terms are associated with mass flux and convective plume mixing, det_sqc is a "detrainment term" and qcd is a counter-gradient term. All should be = 0 at the lowest level but are left to minimize code changes.
Code changes: The additional deposition velocity vdfg defined in terms of ust and z0c (Eq. A1), are implemented to module_sf_fogdes or module_bl_mynn.

i)
For the "Katata like" approach, Katata's vdfg in module_sf_fogdes is replaced by vdfg(i,j) = ust(i,j)*karman/LOG(1+0.5*dz8w(i,kts,j)/z0c) ust and karman need to be made accessible to the SUBROUTINE sf_fogdes. ii) For the direct approach, in module_bl_mynn, the deposition velocity, depvel is given by depvel = ust*vk/LOG(1.0+0.5*dz(kts)/z0c) and is added to term b(k)in the tridiagonal matrices for the cloud water (Eq. A2). flqc is removed from term d(k) in the matrices for both approaches.
To make z0c a namelist.input parameter, z0c is added in Registry.EM_COMMON rconfig real z0c namelist,physics 1 0.01 h "z0c" "roughness length for cloud droplets, default is 0.01" The z0c is added to the relevant subroutines, and also where the subroutines are called. The following modules, module_bl_mynn, module_sf_fogdes, module_pbl_driver, module_surface_driver, module_first_rk_step_part1 and Registry.EM_COMMON, are modified. The codes for these modules are posted separately, module_bl_mynn.F_KatataLike and module_bl_mynn.F_Direct are the codes of the module_bl_mynn for the "Katata like" approach and direct approach respectively.
are replaced with the following: ! Read config instead DO k=1, kde grid%znw(k) = model_config_rec%eta_levels(k) ENDDO It can allow the model to use user-specified eta levels in the namelist.
Notes prepared by L Cheng, Z Chen, and Y. Chen. Aug 2021.