ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_MOSTRoughness.H File Reference
#include <ERF_Constants.H>
Include dependency graph for ERF_MOSTRoughness.H:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness (amrex::Real zref, amrex::Real umm, amrex::Real ustar)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness (amrex::Real ustar)
 

Function Documentation

◆ COARE3_roughness()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real COARE3_roughness ( amrex::Real  zref,
amrex::Real  umm,
amrex::Real  ustar 
)

COARE3.0, following WRF phys/module_sf_mynn.F

12 {
13  amrex::Real ws10m = umm*std::log(10./1e-4) / std::log(zref/1e-4);
14  amrex::Real Czc = 0.011 + 0.007*std::min(std::max((ws10m-10.)/8., 0.), 1.0);
15  amrex::Real z0 = (Czc / CONST_GRAV) * ustar * ustar;
16  // From Davis et al 2008 MWR, but their lower limit is 0.125e-6 -- WRF typo?
17  return std::min(std::max(z0, 1.27e-7), 2.85e-3);
18 }
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21

Referenced by adiabatic_charnock::iterate_flux(), surface_flux_charnock::iterate_flux(), and surface_temp_charnock::iterate_flux().

Here is the caller graph for this function:

◆ Donelan_roughness()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real Donelan_roughness ( amrex::Real  ustar)

Updated Donelan 2004 as found in AHW

Matches implementations in WRF phys/physics_mmm/sf_sfclayrev.F90 and phys/module_sf_mynn.F

30 {
31  constexpr amrex::Real ozo{1.59e-5};
32  amrex::Real zw = std::min(std::pow(ustar/1.06, 0.3),1.0);
33  amrex::Real zn1 = 0.011*ustar*ustar/CONST_GRAV + ozo;
34  amrex::Real zn2 = 10.*std::exp(-9.5*std::pow(ustar, -.3333))
35  + 0.11*1.5e-5/std::max(ustar,0.01);
36  amrex::Real z0 = (1.0-zw) * zn1 + zw * zn2;
37  // From Davis et al 2008 MWR, but their lower limit is 0.125e-6 -- WRF typo?
38  return std::min(std::max(z0, 1.27e-7), 2.85e-3);
39 }

Referenced by adiabatic_donelan::iterate_flux(), surface_flux_donelan::iterate_flux(), and surface_temp_donelan::iterate_flux().

Here is the caller graph for this function: