Ignore:
Timestamp:
May 27, 2020, 4:52:16 PM (4 years ago)
Author:
lguez
Message:

Modify sensible heat due to rain sent to the ocean

Modify the sensible heat flux due to rain which is sent to the
ocean. Replace the computation of sens_prec_liq in procedure
calcul_fluxs by a call to sens_heat_rain. Set sens_prec_sol in
procedure calcul_fluxs to 0 because, for now, sens_heat_rain is
supposed to account for both rain and snow.

For the call to sens_heat_rain in procedure calcul_fluxs, we need
an additional dummy argument rhoa of calcul_fluxs. Add dummy
argument rhoa to ocean_cpl_noice, ocean_forced_noice,
ocean_forced_ice and ocean_cpl_ice because we need to pass it down
to calcul_fluxs.

Change the dimension of sens_prec_liq and sens_prec_sol in
procedures calcul_fluxs, ocean_cpl_noice, ocean_cpl_ice,
ocean_forced_noice, ocean_forced_ice, cpl_send_ocean_fields and
cpl_send_seaice_fields to knon.

In procedures ocean_forced_noice and ocean_cpl_noice, promote
sens_prec_liq from local variable to dummy argument because we need
it in surf_ocean. Remove useless initialization of sens_prec_liq
and sens_prec_sol in ocean_cpl_noice, ocean_cpl_ice,
ocean_forced_ice and ocean_forced_noice: they are intent out in
calcul_fluxs.

Remove variable rf of module phys_output_var_mod, we use
sens_prec_liq instead. Remove local variable yrf of procedure
pbl_surface. rf and yrf appeared in pbl_surface only to be output.
Remove variable o_rf of module phys_output_ctrlout_mod. Remove
dummy argument rf of procedure surf_ocean.

Do not call sens_heat_rain in surf_ocean since we now call it
from calcul_fluxs. Move the computation of rhoa in surf_ocean
before the calls to ocean_cpl_noice and ocean_forced_noice.

Add the computation of rhoa in surf_seaice, to pass it down to
ocean_cpl_ice and ocean_forced_ice.

If activate_ocean_skin == 1 then the results are changed because the
call to sens_heat_rain in calcul_fluxs now uses the SST from the
current time step of physics. On this point, the present revision
reverses revision [3463].

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Ocean_skin/libf/phylmd/surf_ocean_mod.F90

    r3628 r3687  
    2020       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &
    2121       tsurf_new, dflux_s, dflux_l, lmt_bils, &
    22        flux_u1, flux_v1, t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf, &
    23        taur)
     22       flux_u1, flux_v1, t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, taur)
    2423
    2524    use albedo, only: alboc, alboc_cd
     
    3231    USE indice_sol_mod, ONLY : nbsrf, is_oce
    3332    USE limit_read_mod
    34     use sens_heat_rain_m, only: sens_heat_rain
    3533    use config_ocean_skin_m, only: activate_ocean_skin
    3634    !
     
    122120    ! épaisseur (m) de la couche de diffusion de masse (microlayer)
    123121
    124     REAL, intent(out):: rf(:) ! (knon)
    125     ! sensible heat flux at the surface due to rainfall, in  W m-2
    126     ! positive upward
    127 
    128122    REAL, intent(out):: taur(:) ! (knon)
    129123    ! momentum flux due to rain, in Pa
     
    139133    CHARACTER(len=20),PARAMETER :: modname="surf_ocean"
    140134    real rhoa(knon) ! density of moist air  (kg / m3)
    141     real xlv(knon) ! chaleur latente d'évaporation (J / kg)
    142     real precip_tot(knon) ! rain + snow
     135    REAL sens_prec_liq(knon)
    143136
    144137    real sss(klon)
     
    175168    ENDIF
    176169
    177 
     170    rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon)))
    178171    !******************************************************************************
    179172    ! Switch according to type of ocean (couple, slab or forced)
     
    191184            radsol, snow, agesno, &
    192185            qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    193             tsurf_new, dflux_s, dflux_l, sss, s_int)
     186            tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa)
    194187
    195188    CASE('slab')
     
    214207            radsol, snow, agesno, &
    215208            qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    216             tsurf_new, dflux_s, dflux_l)
     209            tsurf_new, dflux_s, dflux_l, sens_prec_liq, rhoa)
    217210    END SELECT
    218211
     
    319312
    320313    if (activate_ocean_skin >= 1) then
    321        rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon)))
    322        xlv = rlvtt
    323        precip_tot = precip_rain(:knon) + precip_snow(:knon)
    324        rf =  sens_heat_rain(precip_tot, temp_air(:knon), spechum(:knon), rhoa, &
    325             xlv, tsurf_in(:knon), ps(:knon))
    326314       if (type_ocean /= 'couple') sss(:knon) = 35.
    327315       call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, &
    328316            u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), &
    329             rain = precip_tot, hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
     317            rain = precip_rain(:knon) + precip_snow(:knon), &
     318            hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
    330319            rnl = - lwnet(:knon), &
    331320            tau = sqrt(flux_u1(:knon)**2 + flux_v1(:knon)**2), rhoa = rhoa, &
    332             xlv = xlv, rf = rf, dtime = dtime, rns = swnet(:knon))
     321            xlv = [(rlvtt, i = 1, knon)], rf = - sens_prec_liq, dtime = dtime, &
     322            rns = swnet(:knon))
    333323       if (activate_ocean_skin == 2) tsurf_new(:knon) = t_int
    334324    end if
Note: See TracChangeset for help on using the changeset viewer.