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/calcul_fluxs_mod.F90

    r3319 r3687  
    1313       fqsat, petAcoef, peqAcoef, petBcoef, peqBcoef, &
    1414       tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, &
    15        sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol)
     15       sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa)
    1616 
    1717   
    1818    USE dimphy, ONLY : klon
    1919    USE indice_sol_mod
     20    use sens_heat_rain_m, only: sens_heat_rain
    2021
    2122    INCLUDE "clesphys.h"
     
    7172    REAL, DIMENSION(klon), INTENT(IN)    :: ps, q1lay
    7273    REAL, DIMENSION(klon), INTENT(IN)    :: tsurf, p1lay, cal, beta, cdragh,cdragq
    73     REAL, DIMENSION(klon), INTENT(IN)    :: precip_rain, precip_snow ! pas utiles
     74    REAL, DIMENSION(klon), INTENT(IN)    :: precip_rain, precip_snow
    7475    REAL, DIMENSION(klon), INTENT(IN)    :: radsol, dif_grnd
    7576    REAL, DIMENSION(klon), INTENT(IN)    :: t1lay, u1lay, v1lay,gustiness
    7677    REAL,                  INTENT(IN)    :: fqsat ! correction factor on qsat (generally 0.98 over salty water, 1 everywhere else)
    7778
     79    real, intent(in), optional:: rhoa(:) ! (knon)
     80    ! density of moist air  (kg / m3)
     81
    7882! Parametres entree-sorties
    7983!****************************************************************************************
     
    8589    REAL, DIMENSION(klon), INTENT(OUT)   :: tsurf_new, evap, fluxsens, fluxlat
    8690    REAL, DIMENSION(klon), INTENT(OUT)   :: dflux_s, dflux_l
    87     REAL, DIMENSION(klon), OPTIONAL      :: sens_prec_liq, sens_prec_sol
     91    REAL, intent(out), OPTIONAL:: sens_prec_liq(:), sens_prec_sol(:) ! (knon)
    8892    REAL, DIMENSION(klon), OPTIONAL      :: lat_prec_liq, lat_prec_sol
    8993
     
    140144    dflux_s = 0.
    141145    dflux_l = 0.
    142     if (PRESENT(sens_prec_liq)) sens_prec_liq = 0.
    143     if (PRESENT(sens_prec_sol)) sens_prec_sol = 0.
    144146    if (PRESENT(lat_prec_liq)) lat_prec_liq = 0.
    145147    if (PRESENT(lat_prec_sol)) lat_prec_sol = 0.
     
    267269!                          precip_snow(i)
    268270! On calcule par rapport a T=0
    269        if (PRESENT(sens_prec_liq))                   &
    270          sens_prec_liq(i) = rcw * (t1lay(i) - RTT) * &
    271                           precip_rain(i)
    272        if (PRESENT(sens_prec_sol))                   &
    273          sens_prec_sol(i) = rcs * (t1lay(i) - RTT) * &
    274                           precip_snow(i)
     271       if (PRESENT(sens_prec_liq)) sens_prec_liq(i) &
     272            = - sens_heat_rain(precip_rain(i) + precip_snow(i), t1lay(i), &
     273            q1lay(i), rhoa(i), rlvtt, tsurf_new(i), ps(i))
     274       if (PRESENT(sens_prec_sol)) sens_prec_sol(i) = 0.
    275275       if (PRESENT(lat_prec_liq))                    &
    276276         lat_prec_liq(i) =  precip_rain(i) * (RLVTT - RLVTT)
     
    280280
    281281   
    282 !       if (PRESENT(sens_prec_liq))                  &
    283 !          WRITE(*,*)' calculs_fluxs sens_prec_liq (min, max)', &
    284 !          MINVAL(sens_prec_liq(1:knon)), MAXVAL(sens_prec_liq(1:knon))
    285 !       if (PRESENT(sens_prec_sol))                  &
    286 !          WRITE(*,*)' calculs_fluxs sens_prec_sol (min, max)', &
    287 !          MINVAL(sens_prec_sol(1:knon)), MAXVAL(sens_prec_sol(1:knon))
    288  
    289 !
    290 !****************************************************************************************
     282!**************************************************************************
    291283!
    292284  END SUBROUTINE calcul_fluxs
Note: See TracChangeset for help on using the changeset viewer.