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

    r3720 r3740  
    292292    USE print_control_mod,  ONLY : prt_level,lunout
    293293    USE ioipsl_getin_p_mod, ONLY : getin_p
    294     use phys_state_var_mod, only: s_int, ds_ns, dt_ns
    295     use phys_output_var_mod, only: sst_nff, dter, dser, tkt, tks, taur, sss
     294    use phys_state_var_mod, only: s_int, ds_ns, dt_ns, sst_nff
     295    use phys_output_var_mod, only: dter, dser, tkt, tks, taur, sss
    296296#ifdef CPP_XIOS
    297297    USE wxios, ONLY: missing_val
     
    14291429
    14301430       if (nsrf == is_oce .and. activate_ocean_skin >= 1) then
    1431           if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
    1432                ys_int(:knon) = s_int(ni(:knon))
     1431          if (activate_ocean_skin == 2 .and. type_ocean == "couple") then
     1432             ys_int(:knon) = s_int(ni(:knon))
     1433             ysst_nff(:knon) = sst_nff(ni(:knon))
     1434          end if
     1435         
    14331436          yds_ns(:knon) = ds_ns(ni(:knon))
    14341437          ydt_ns(:knon) = dt_ns(ni(:knon))
     
    31943197
    31953198    USE indice_sol_mod
    3196     use phys_state_var_mod, only: s_int, ds_ns, dt_ns
     3199    use phys_state_var_mod, only: s_int, ds_ns, dt_ns, sst_nff
    31973200    use config_ocean_skin_m, only: activate_ocean_skin
    31983201
     
    32843287                   if (activate_ocean_skin >= 1) then
    32853288                      if (activate_ocean_skin == 2 &
    3286                            .and. type_ocean == "couple") s_int(i) = 35.
     3289                           .and. type_ocean == "couple") then
     3290                         s_int(i) = 35.
     3291                         sst_nff(i) = tsurf(i,nsrf)
     3292                      end if
     3293                     
    32873294                      ds_ns(i) = 0.
    32883295                      dt_ns(i) = 0.
Note: See TracChangeset for help on using the changeset viewer.