New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
2019WP/ASINTER-05_Brodeau_Advanced_Bulk – NEMO
wiki:2019WP/ASINTER-05_Brodeau_Advanced_Bulk

Version 6 (modified by laurent, 5 years ago) (diff)

--

ASINTER-05_Brodeau_Advanced_Bulk

Last edition: Wikinfo(changed_ts)? by Wikinfo(changed_by)?

The PI is responsible to closely follow the progress of the action, and especially to contact NEMO project manager if the delay on preview (or review) are longer than the 2 weeks expected.

  1. Summary
  2. Abstract
  3. Description
  4. Implementation
  5. Reference manual update
  6. Progress
  7. Review
  8. MP ready

Summary

See ticket #2159 https://forge.ipsl.jussieu.fr/nemo/ticket/2159

Action ASINTER-05_Brodeau_Advanced_Bulk
PI(S) Laurent Brodeau @ Ocean Next

Digest

More accurate air-sea flux estimates through the implementation of a cool-skin/warm-layer parameterization in NEMO, also more advanced bulk formulae over sea-ice.

Dependencies
Expected for December, 2019
Ticket #2159
Branch NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk
Previewer(s)
Reviewer(s)
Link ExtractUrl(.)?

Abstract

  • 1/ Implement different state-of-the-art bulk formula parametrizations used to compute transfer coefficients (CD, CE, and CH) for estimates of turbulent air-sea fluxes:
    • a/ NCAR (previously known as "CORE", Large and Yeager, 2004)
    • b/ ECMWF (IFS@ECWMF)
    • c/ COARE 3.0 (Fairall et al, 2003)
    • d/ COARE 3.6 (Fairall et al, 2019)
  • 2/ Implement, when relevant, their respective cool-skin and warm-layer parametrization for better estimate of the water temperature at the air-sea interface (which is the relevant temperature to estimate heat flux to the atmosphere).
    • a/ NCAR → irrelevant
    • b/ ECMWF → cool-skin & warm-layer
    • c/ COARE → cool-skin only
    • d/ COARE 3.6 → cool-skin & warm-layer
  • 3/ Improve the accuracy of various physical parameters used in the estimate of surface fluxes and previously assumed constant.
  • 4/ Implement more advanced bulk parametrization for turbulent "air-ice" fluxes of momentum, heat and freshwater over sea-ice

Description

See Abstract (above) and Implementation (below).

Implementation

Modified modules aka source files

(Forked from NEMOGCM trunk at rev 11085)

  • DOM/phycst.F90
    • Moved/merged all physical parameters previously declared into sbcblk.F90 into phycst.F90 (keeping the name they had in phycst.F90 when previously declared in both modules with a different name)
  • SBC/sbc_oce.F90
    • Added tsk, public 2D array to contain the sea-surface skin temperature from the cool-skin/warm-layer parametrization [Celsius]
    • Added rhoa, public 2D array to contain the air density at z=zu [kg/m3]
  • SBC/sbcblk.F90
    • Moved/merged all physical parameters previously declared into sbcblk.F90 into phycst.F90 (keeping the name they had in phycst.F90 when previously declared in both modules with a different name)
    • Moved all the functions for air thermodynamics into a new module: SBC/sbcblk_phy.F90
    • New namelist parameters to namelist's section namsbc_blk:
      • ln_skin (if true: use the cool-skin/warm-layer parametrization if supported by selected bulk algorithm)
      • ln_humi_sph (if true: air humidity in the forcing files is specific humidity [kg/kg])
      • ln_humi_dpt (if true: air humidity in the forcing files is dew-point temperature [K])
      • ln_humi_rlh (if true: air humidity in the forcing files is relative humidity [%])
      • ln_COARE_3p6 replaces the old ln_COARE_3p5, because we upgraded from COARE 3.5 to COARE 3.6 (3.5 was intermediate and not "official").
    • Added function sbc_blk_cswl_alloc() to allocate array tsk (declared into sbc_oce.F90).
    • Added part where turb_ecmwf (and soon turb_coare*) is called with Qlw, rad_sw, & slp (optional arguments) in case of ln_skin==.true.
    • 0.98 now becomes rdct_qsat_salt (into phycst.F90)
    • Longwave radiative flux component zqlw now computed after turbulent fluxes are, because needs the updated skin temperature which comes out the turb_ecmwf (and soon turb_coare*) function
    • Corrected mistake: no rdct_qsat_salt factor for q_sat over ice! (zqi_sat)
    • Added XIOS iom_put for density of air (rho_air), and skin temperature
    • Added local arrays zqair to contain specific humidity of air at height rn_zqt
    • When ln_humi_sph=.true., zqair is simply what is read into sn_humi file (spec. hum.). When ln_humi_dpt=.true., zqair is deduced from the dew-point temperature (read into sn_humi file) and the SLP. When ln_humi_rlh=.true., zqair is deduced from the relative humidity (read into sn_humi file), air temperature, and SLP.
    • rhoa (air density at height rn_zu, declared into sbc_oce.F90) is updated once for all in blk_oce() instead of being computed their and their in different locations.
  • SBC/sbcblk_algo_ecmwf.F90
    • Increased numerical stability to handle non-realistic values over land points, which caused systematic crash in old version (such as in 4.0)
    • The use of the cool-skin/warm-layer parametrization is triggered when optional arguments Qsw, rad_lw, slp are specified when calling turb_ecmwf
      • In each iteration step, estimation of solar and non-solar components of net surface heat flux is done prior to call to subroutine CSWL_ECMWF (defined into SBC/sbcblk_skin.F90)
    • Some variables renamed for clarity, ex: sst → T_s
    • Function visc_air moved to sbcblk_phy.F90...
    • Use of function Ri_bulk() defined into SBC/sbcblk_skin.F90
  • SBC/sbcblk_algo_coare.F90 is gone, it is now SBC/sbcblk_algo_coare_3p0.F90 for the sake of consistency
  • SBC/sbcblk_algo_coare_3p0.F90 (ex sbcblk_algo_coare.F90)
    • Increased numerical stability to handle non-realistic values over land points, which caused systematic crash in old version (such as in 4.0)
    • The use of the cool-skin/warm-layer parametrization is triggered when optional arguments Qsw, rad_lw, slp are specified when calling turb_coare
    • In each iteration step, estimation of solar and non-solar components of net surface heat flux is done prior to call to subroutine CSWL_ECMWF (defined into SBC/sbcblk_skin.F90)
    • Some variables renamed for clarity, ex: sst → T_s
    • Function visc_air moved to sbcblk_phy.F90...
    • Use of functions One_on_L() and Ri_bulk() defined into SBC/sbcblk_skin.F90
  • SBC/sbcblk_algo_coare_3p5.F90 is gone, it is now SBC/sbcblk_algo_coare_3p6.F90
  • SBC/sbcblk_algo_coare_3p6.F90 (ex sbcblk_algo_coare_3p5.F90)
    • upgraded from COARE 3.5 to COARE 3.6 (3.5 was intermediate and not "official") following Fairall et al. 2019 (in prep.) and Edson et al. 2013
    • applied all improvements mentioned for SBC/sbcblk_algo_coare_3p0.F90.
  • SBC/sbcblk_algo_ncar.F90
    • use of sbcblk_phy.F90 for functions virt_temp() and One_on_L()

New modules aka source files

  • SBC/sbcblk_phy.F90 [ catalog of functions of some non constant physical parameters in the MBL (Marine Boundary Layer) ] → Gathers the following functions:
    • virt_temp (computes absolute/potential VIRTUAL temperature out of absolute/potential temperature and specific humidity)
    • Rho_air (computes density of air out of air temperature and spec. hum. and SLP)
    • Visc_air (computes kinematic viscosity of air out of air temperature)
    • L_vap (computes the latent heat of vaporization of water out of water temperature)
    • cp_air (computes the specific heat, aka Cp, of moist air out of specific humidity)
    • gamma_moist (computes the the adiabatic lapse-rate of moist air out of air temperature and spec. hum.)
    • One_on_L (computes 1/[Monin-Obukhov length])
    • Ri_bulk (computes the bulk Richardson number)
    • e_sat_sclr (computes "e_sat", the water vapor pressure of saturated air out of air temperature and SLP, scalar IO arguments)
    • q_sat (computes the specific humidity at saturation out of temperature of air and SLP)
    • q_air_rh (computes the specific humidity of air out of relative humidity and temperature of air and SLP)
  • SBC/sbcblk_skin.F90 [ cool-skin / warm-layer parametrization of ECMWF, contains function CSWL_ECMWF, which updates the value of the skin temperature out of previous guess of skin temperature, solar and non-solar components of surface heat flux and friction velocity u*] → Gathers the following subroutine:
    • `CSWL_ECMWF

Reference manual update

???

Progress

  • 1/ 90% completed
  • 2/ 75% completed
  • 3/ 100% completed
  • 4/ 0% completed

Review

Has the review been completed? I don't think so.

MP ready

Yes, very likely to be ready for MP 2019 in December.