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_state_var_mod.F90

    r3628 r3740  
    444444      ! minus foundation temperature. (Can be negative.) In K.
    445445     
    446       !$OMP THREADPRIVATE(s_int, ds_ns, dt_ns)
     446      REAL, ALLOCATABLE, SAVE:: sst_nff(:)
     447      ! SST not used to compute surface fluxes, in K. If
     448      ! activate_ocean_skin == 0 then it is not allocated; if
     449      ! activate_ocean_skin == 1 then it is the ocean-air interface
     450      ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.
     451
     452      !$OMP THREADPRIVATE(s_int, ds_ns, dt_ns, sst_nff)
    447453
    448454    CONTAINS
     
    653659      ENDIF
    654660      if (activate_ocean_skin >= 1) ALLOCATE(s_int(klon), ds_ns(klon), &
    655            dt_ns(klon))
     661           dt_ns(klon), sst_nff(klon))
    656662
    657663    END SUBROUTINE phys_state_var_init
     
    791797!!! fin nrlmd le 10/04/2012
    792798
    793       if (activate_ocean_skin >= 1) deALLOCATE(s_int, ds_ns, dt_ns)
     799      if (activate_ocean_skin >= 1) deALLOCATE(s_int, ds_ns, dt_ns, sst_nff)
    794800
    795801      is_initialized=.FALSE.
Note: See TracChangeset for help on using the changeset viewer.