module sfx_esm_param
      !> @brief ESM surface flux model parameters
      !> @details  all in SI units

      ! modules used
      ! --------------------------------------------------------------------------------
      use sfx_phys_const
      ! --------------------------------------------------------------------------------

      ! directives list
      ! --------------------------------------------------------------------------------
      implicit none
      ! --------------------------------------------------------------------------------

      ! *: add lake surface & add surface type as input value
      integer, public, parameter :: surface_ocean = 0     !> ocean surface
      integer, public, parameter :: surface_land = 1      !> land surface

      !> von Karman constant [n/d]
      real, parameter :: kappa = 0.40
      !> inverse Prandtl (turbulent) number in neutral conditions [n/d]
      real, parameter :: Pr_t_0_inv = 1.15
      !> inverse Prandtl (turbulent) number in free convection [n/d]
      real, parameter :: Pr_t_inf_inv = 3.5

      !> stability function coeff. (unstable) [= g4 & g10 in deprecated code]
      real, parameter :: alpha_m = 16.0
      real, parameter :: alpha_h = 16.0
      real, parameter :: alpha_h_fix = 1.2

      !> stability function coeff. (stable)
      real, parameter :: beta_m = 4.7
      real, parameter :: beta_h = beta_m

      !> --- max Ri-bulk value in stable case ( < 1 / beta_m )
      real, parameter ::  Rib_max = 0.9 / beta_m

      !> Re fully roughness minimum value [n/d]
      real, parameter ::  Re_rough_min = 16.3

      !> roughness model coeff. [n/d]
      !> --- transitional mode
      !>     B = log(z0_m / z0_t) = B1 * log(B3 * Re) + B2
      real, parameter :: B1_rough = 5.0 / 6.0
      real, parameter :: B2_rough = 0.45
      real, parameter :: B3_rough = kappa * Pr_m
      !> --- fully rough mode (Re > Re_rough_min)
      !>     B = B4 * Re^(B2)
      real, parameter :: B4_rough =(0.14 * (30.0**B2_rough)) * (Pr_m**0.8)

      real, parameter :: B_max_land = 2.0
      real, parameter :: B_max_ocean = 8.0

end module sfx_esm_param
