= 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. [[PageOutline(2, , inline)]] == Summary == See ticket #2159 [https://forge.ipsl.jussieu.fr/nemo/ticket/2159] ||=Action''' || ASINTER-05_Brodeau_Advanced_Bulk || ||=PI(S)''' || Laurent Brodeau @ Ocean Next || {{{#!th style='text-align: left' Digest }}} {{{#!td 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 || [source:/NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk] || ||=Previewer(s) || || ||=Reviewer(s) || Guillaume Samson || ||=Link || [[ExtractUrl(.)]] || == Abstract == * 1/ Implement different state-of-the-art bulk formula parameterizations 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,2008) * b/ ECMWF (IFS@ECWMF, cy45r1) * c/ COARE 3.0 (Fairall et al, 2003) * d/ COARE 3.6 (Edson et al, 2013; Fairall et al, 2019) * 2/ Implement, when relevant, their respective cool-skin and warm-layer parameterization 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 of ECMWF * c/ COARE 3.0 → cool-skin & warm-layer of COARE * d/ COARE 3.6 → cool-skin & warm-layer of COARE * 3/ Improve the accuracy of various physical parameters used in the estimate of surface fluxes and previously assumed constant. * 4/ Implement more advanced bulk parameterization 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, kept up-to-date with rev 12030 of the trunk) * `SBC/sbc_oce.F90` * Added `rhoa`, public 2D array to contain the air density at z=zu [kg/m3] * `SBC/sbcblk.F90` * Moved all the functions for air thermodynamics into a new module: `SBC/sbcblk_phy.F90` * Moved all physical parameters constants formerly declared into `sbcblk.F90` into `sbcblk_phy.F90` and suppressed those already declared in ```phycst.F90``` (then using the name they have in ```phycst.F90``` obviously...) * New namelist parameters to namelist's section `namsbc_blk`: * `ln_skin_cs` (if true: use the cool-skin parameterization if supported by selected bulk algorithm) * `ln_skin_wl` (if true: use the warm-layer parameterization 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"). * 0.98 now becomes `rdct_qsat_salt` (into `sbcblk_phy.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 ECMWF cool-skin/warm-layer parameterizations is triggered when `namsbc_blk` namelist flags `ln_skin_cs`/`ln_skin_wl` are set to `.true.`, respectively (optional arguments `Qsw, rad_lw, slp` of routine `turb_ecmwf` must then be explicitly specified) * In each iteration step, estimation of solar and non-solar components of net surface heat flux is done prior to call to subroutines `CS_ECMWF` and `WL_ECMWF` (defined into `SBC/sbcblk_skin_ecmwf.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_phy.F90` * `SBC/sbcblk_algo_coare.F90` is gone, it is now `SBC/sbcblk_algo_coare_3p0.F90` for the sake of name-convention 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 COARE cool-skin/warm-layer parameterizations is triggered when `namsbc_blk` namelist flags `ln_skin_cs`/`ln_skin_wl` are set to `.true.`, respectively (optional arguments `Qsw, rad_lw, slp` of routine `turb_coare3p0` must then be explicitly specified) * In each iteration step, estimation of solar and non-solar components of net surface heat flux is done prior to call to subroutines `CS_COARE` and `WL_COARE` (defined into `SBC/sbcblk_skin_coare.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_phy.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 ==== * `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) * Because of the introduction of the cool-skin and warm-layer schemes in the "ECMWF" and "COARE" algorithms, surface heat fluxes have to be estimated (via bulk formulae) at different times and places in the code. For the sake of consistency, in order to ensure that the exact same set of bulk formulae is used each time some surface heat flux components need to be estimated, the 2 following routines have been introduced into `SBC/sbcblk_phy.F90`: * `bulk_formula` (computes the turbulent components of the surface heat flux, namely wind stress and latent and sensible heat fluxes, using aerodynamic bulk formulae; based on near-surface atmospheric and sea-surface states) * `update_qnsol_tau` (computes the non-solar heat flux component and the module of the wind stress based on bulk formulae, calls routine `bulk_formula`) * `SBC/sbcblk_skin_ecmwf.F90` [ cool-skin / warm-layer parameterization of ECMWF, contains functions `CS_ECMWF` (cool-skin scheme) and `WL_ECMWF` (warm-layer scheme), which update 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:'' * `CS_ECMWF` cool-skin scheme * `WL_ECMWF` warm-layer scheme * `SBC/sbcblk_skin_coare.F90` [ cool-skin / warm-layer parameterization of COARE, contains functions `CS_COARE` (cool-skin scheme) and `WL_COARE` (warm-layer scheme), which update 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:'' * `CS_COARE` cool-skin scheme * `WL_COARE` warm-layer scheme == Reference manual update == The section `Bulk formulae` of the chapter `Surface Boundary Condition (SBC, SAS, ISF, ICB)` is undergoing substantial improvements at the same time that all the new features introduced in this branch are being documented. == Associated test case == `tests/STATION_ASF`: demonstration case that mimics an in-situ station (buoy, platform) dedicated to the estimation of surface air-sea fluxes by means of the measurement of traditional meteorological surface parameters. See https://github.com/brodeau/aerobulk/blob/master/misc/STATION_ASF_of_NEMO/README.md for more information. == Progress == * 1/ 100% completed * 2/ 100% completed * 3/ 100% completed * 4/ 0% completed == SETTE test == Passed successfully == Review == The review has been carried out by Guillaume Samson. == MP ready == Totally ready for MP 2019 in December.