Skip to content
Snippets Groups Projects
sfx_esm_param.f90 2.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • Evgeny Mortikov's avatar
    Evgeny Mortikov committed
    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
          ! --------------------------------------------------------------------------------
    
          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
    
          !> Charnock parameters
          !>     z0 = Re_visc_min * (nu / u_dyn) + gamma_c * (u_dyn^2 / g)
          real, parameter :: gamma_c = 0.0144
          real, parameter :: Re_visc_min = 0.111
    
          real, parameter :: h_charnock = 10.0
          real, parameter :: c1_charnock = log(h_charnock * (g / gamma_c))
          real, parameter :: c2_charnock = Re_visc_min * nu_air * c1_charnock
    
    end module sfx_esm_param