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

    r3720 r3740  
    135135  ! Ocean-atmosphere interface, subskin ocean and near-surface ocean:
    136136 
    137   REAL, ALLOCATABLE, SAVE:: sst_nff(:)
    138   ! SST not used to compute surface fluxes, in K. If
    139   ! activate_ocean_skin == 0 then it is not allocated; if
    140   ! activate_ocean_skin == 1 then it is the ocean-air interface
    141   ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.
    142 
    143137  REAL, ALLOCATABLE, SAVE:: dter(:)
    144138  ! Temperature variation in the diffusive microlayer, that is
     
    161155  ! bulk salinity of the surface layer of the ocean, in ppt
    162156 
    163   !$OMP THREADPRIVATE(sst_nff, dter, dser, tkt, tks, taur, sss)
     157  !$OMP THREADPRIVATE(dter, dser, tkt, tks, taur, sss)
    164158
    165159CONTAINS
     
    222216    IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon))
    223217
    224     if (activate_ocean_skin >= 1) allocate(sst_nff(klon), dter(klon), &
    225          dser(klon), tkt(klon), tks(klon), taur(klon), sss(klon))
     218    if (activate_ocean_skin >= 1) allocate(dter(klon), dser(klon), tkt(klon), &
     219         tks(klon), taur(klon), sss(klon))
    226220
    227221  END SUBROUTINE phys_output_var_init
Note: See TracChangeset for help on using the changeset viewer.