module sfx_log_param
    !> @brief log-roughness 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

    !> 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_log_param
