= 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 || || ||=Ticket || #2159 || ||=Branch || [source:/NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk] || ||=Previewer(s) || || ||=Reviewer(s) || || ||=Link || [[ExtractUrl(.)]] || == Preview == === 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 parameterization [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` * `ln_humi_dpt` * Added function 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_dpt=.true., `zqair` is deduced from the dew-point temperature (read into `sn_humi` file) and the SLP. When ln_humi_dpt=.false., `zqair` is simply what is read into `sn_humi` file * 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) ''What’s really new:'' * The use of the cool-skin/warm-layer parameterization 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 official function `Ri_bulk()` defined into `SBC/sbcblk_skin.F90` * `SBC/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) ''What’s really new:'' * The use of the cool-skin/warm-layer parameterization 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 official functions `One_on_L()` and `Ri_bulk()` defined into `SBC/sbcblk_skin.F90` * `SBC/sbcblk_algo_ncar.F90` * Bla bla to come... ==== New modules ''aka'' source files ==== * `SBC/sbcblk_phy.F90` [ catalogue of functions for non constant physical parameters in the MBL (Marine Boundary Layer) ] ''Gathers the following functions:'' * virt_temp * Rho_air * Visc_air * L_vap * cp_air * gamma_moist * One_on_L * Ri_bulk * q_sat * `SBC/sbcblk_skin.F90` [ cool-skin / warm-layer parameterization of ECMWF, countains 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 {{{#!box help [[Include(wiki:Developers/DevProcess#preview_)]] }}} == Tests == {{{#!box help [[Include(wiki:Developers/DevProcess#tests)]] }}} == Review == {{{#!box help [[Include(wiki:Developers/DevProcess#review)]] }}}