Ignore:
Timestamp:
Jun 30, 2020, 9:14:36 PM (4 years ago)
Author:
lguez
Message:

Send delta temperature to the ocean

The grid of Nemo is finer than the grid of LMDZ. So LMDZ receives from
Oasis a spatial average of bulk SST. If we send to Nemo the interface
temperature computed by LMDZ, it is regridded as a step function
by Oasis and, in Nemo, the difference between bulk SST and interface
temperature has spatial oscillations. To avoid this, we send to Nemo
the difference between bulk SST and interface temperature computed by
LMDZ, instead of the interface temperature.

So, in module cpl_mod, rename cpl_t_int to cpl_delta_temp,
cpl_t_int_2D to cpl_delta_temp_2D. In module oasis, rename
ids_t_int to ids_delta_temp. Change
infosend(ids_delta_temp)%name to "CODTEMP".

In procedure cpl_send_ocean_fields, rename dummy argument
t_int to tsurf_in just for clarity, because this argument is
passed also when activate_ocean_skin /= 2. Add dummy argument
sst_nff. We cannot just replace dummy argument t_int by a dummy
argument that would receive tsurf_in - sst_nff because sst_nff is
not defined when activate_ocean_skin == 0.

In procedure ocean_cpl_noice, add dummy argument sst_nff.

As for interface salinity, we have to send delta temperature from the
previous time step. So we have to transform sst_nff into a state
variable. So move sst_nff from module phys_output_var_mod to
module phys_state_var_mod. Define ysst_nff in procedure
pbl_surface before the call to surf_ocean. Choose a value of
sst_nff for an appearing ocean fraction. Read sst_nff in procedure
phyetat0, write it in procedure phyredem. Change the intent of dummy argument
sst_nff in procedure surf_ocean to inout.

File:
1 edited

Legend:

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

    r3720 r3740  
    8888    ! minus foundation temperature. (Can be negative.) In K.
    8989
     90    REAL, intent(inout):: sst_nff(:) ! (knon)
     91    ! SST not used to compute surface fluxes, in K. If
     92    ! activate_ocean_skin == 0 then it is not defined; if
     93    ! activate_ocean_skin == 1 then it is the ocean-air interface
     94    ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.
     95
    9096    ! Output variables
    9197    !******************************************************************************
     
    103109    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
    104110
    105     REAL, intent(out):: sst_nff(:) ! (knon)
    106     ! SST not used to compute surface fluxes, in K. If
    107     ! activate_ocean_skin == 0 then it is not defined; if
    108     ! activate_ocean_skin == 1 then it is the ocean-air interface
    109     ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.
    110 
    111111    REAL, intent(out):: dter(:) ! (knon)
    112112    ! Temperature variation in the diffusive microlayer, that is
     
    190190            radsol, snow, agesno, &
    191191            qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    192             tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa)
     192            tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa, &
     193            sst_nff)
    193194
    194195    CASE('slab')
Note: See TracChangeset for help on using the changeset viewer.