Ignore:
Timestamp:
Jan 2, 2019, 7:44:20 PM (5 years ago)
Author:
lguez
Message:

Create subdirectory Ocean_skin in libf. For now, Ocean_skin is under
control of git, not subversion.

Add variable eps_w to common YOMCST.

For now, continue to read ocean skin parameters from a namelist in
config_ocean_skin.

The parameterisation is called from procedure surf_ocean.

Add two prognostic variables for the parameterisation: dt_ns and
ds_ns. Add eight diagnostic variables: t_int, s_int, dter, dser, tkt,
tks, rf, taur. The ten variables are only defined on ocean surface,
elsewhere they are set to nf90_fill_real. In pbl_surface, we can
initialize the eight diagnostic variables to nf90_fill_real before the
loop on sub-surfaces, but we need to keep the old values of dt_ns and
ds_ns as input of the parameterisation so we set dt_ns and ds_ns to
nf90_fill_real after the call to surf_ocean. Define ten corresponding
compressed variables in pbl_surface. Define ten corresponding NetCDF
output variables in phys_output_ctrlout_mod.

In procedure pbl_surface_newfrac, for an appearing ocean sub-surface,
dt_ns and ds_ns are set to 0. In phyetat0, also set initial dt_ns and
ds_ns to 0 if they are not in start file.

In procedure surf_ocean, for now, we use a constant specific latent
heat of vaporization, as elsewhere in LMDZ, and a constant bulk
salinity.

File:
1 edited

Legend:

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

    r3402 r3429  
    290290    USE print_control_mod,  ONLY : prt_level,lunout
    291291    USE ioipsl_getin_p_mod, ONLY : getin_p
     292    use phys_state_var_mod, only: ds_ns, dt_ns
     293    use phys_output_var_mod, only: t_int, s_int, dter, dser, tkt, tks, rf, taur
     294    use netcdf, only: nf90_fill_real
    292295
    293296    IMPLICIT NONE
     
    821824    ! Martin
    822825
     826    real, DIMENSION(klon):: yt_int, ys_int, yds_ns, ydt_ns, ydter, ydser, &
     827         ytkt, ytks, yrf, ytaur
     828    ! compression of t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf,
     829    ! taur on ocean points
     830
    823831!****************************************************************************************
    824832! End of declarations
     
    954962!!! jyg le 10/02/2012
    955963    rh2m_x(:) = 0. ; qsat2m_x(:) = 0. ; rh2m_w(:) = 0. ; qsat2m_w(:) = 0.
    956 !!!
     964
     965    t_int = nf90_fill_real
     966    s_int = nf90_fill_real
     967    dter = nf90_fill_real
     968    dser = nf90_fill_real
     969    tkt = nf90_fill_real
     970    tks = nf90_fill_real
     971    rf = nf90_fill_real
     972    taur = nf90_fill_real
    957973
    958974! 2b) Initialization of all local variables that will be compressed later
     
    14141430          ENDDO
    14151431       ENDIF
     1432
     1433       if (nsrf == is_oce) then
     1434          yds_ns(:knon) = ds_ns(ni(:knon))
     1435          ydt_ns(:knon) = dt_ns(ni(:knon))
     1436       end if
    14161437       
    14171438!****************************************************************************************
     
    19341955               yz0m, yz0h, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
    19351956               ytsurf_new, y_dflux_t, y_dflux_q, slab_wfbils, &
    1936                y_flux_u1, y_flux_v1)
     1957               y_flux_u1, y_flux_v1, yt_int(:knon), ys_int(:knon), &
     1958               yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), &
     1959               ytkt(:knon), ytks(:knon), yrf(:knon), ytaur(:knon))
    19371960      IF (prt_level >=10) THEN
    19381961          print *,'arg de surf_ocean: ycdragh ',ycdragh
     
    25382561       ENDIF
    25392562
     2563       if (nsrf == is_oce) then
     2564          dt_ns = nf90_fill_real
     2565          ds_ns = nf90_fill_real
     2566          ds_ns(ni(:knon)) = yds_ns(:knon)
     2567          dt_ns(ni(:knon)) = ydt_ns(:knon)
     2568
     2569          t_int(ni(:knon)) = yt_int(:knon)
     2570          s_int(ni(:knon)) = ys_int(:knon)
     2571          dter(ni(:knon)) = ydter(:knon)
     2572          dser(ni(:knon)) = ydser(:knon)
     2573          tkt(ni(:knon)) = ytkt(:knon)
     2574          tks(ni(:knon)) = ytks(:knon)
     2575          rf(ni(:knon)) = yrf(:knon)
     2576          taur(ni(:knon)) = ytaur(:knon)
     2577       end if
     2578
    25402579!****************************************************************************************
    25412580! 14) Calculate the temperature and relative humidity at 2m and the wind at 10m
     
    31413180
    31423181!albedo SB >>>
    3143 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, &
    3144      evap, z0m, z0h, agesno,                                  &
    3145      tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 
    3146 !albedo SB <<<
     3182  SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, &
     3183       evap, z0m, z0h, agesno,                                  &
     3184       tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 
     3185    !albedo SB <<<
    31473186    ! Give default values where new fraction has appread
    31483187
    31493188    USE indice_sol_mod
     3189    use phys_state_var_mod, only: ds_ns, dt_ns
    31503190
    31513191    INCLUDE "dimsoil.h"
     
    32343274                      alb_dif(i,k,nsrf) = 0.06
    32353275                   ENDDO
     3276                   ds_ns(i) = 0.
     3277                   dt_ns(i) = 0.
    32363278                ELSE IF (nsrf.EQ.is_sic) THEN
    32373279                   tsurf(i,nsrf) = 271.35
Note: See TracChangeset for help on using the changeset viewer.