Changeset 4370 for LMDZ6/trunk


Ignore:
Timestamp:
Dec 6, 2022, 4:23:49 PM (18 months ago)
Author:
lguez
Message:

Merge branch Ocean_skin back into trunk

Location:
LMDZ6/trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk

  • LMDZ6/trunk/libf/phylmd/cpl_mod.F90

    r4283 r4370  
    4949  !$OMP THREADPRIVATE(cpl_snow,cpl_evap,cpl_tsol)
    5050
    51   REAL, ALLOCATABLE, SAVE:: cpl_delta_sst(:), cpl_delta_sal(:)
    52   !$OMP THREADPRIVATE(cpl_delta_sst, cpl_delta_sal)
     51  REAL, ALLOCATABLE, SAVE:: cpl_delta_sst(:), cpl_delta_sal(:), cpl_dter(:), &
     52       cpl_dser(:), cpl_dt_ds(:)
     53  !$OMP THREADPRIVATE(cpl_delta_sst, cpl_delta_sal, cpl_dter, cpl_dser)
     54  !$OMP THREADPRIVATE(cpl_dt_ds)
    5355 
    5456  REAL, ALLOCATABLE, DIMENSION(:,:), SAVE   :: cpl_fder, cpl_albe, cpl_taux, cpl_tauy
     
    9698  !$OMP THREADPRIVATE(cpl_snow2D, cpl_evap2D, cpl_tsol2D)
    9799
    98   REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:,:), cpl_delta_sal_2D(:,:)
     100  REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:, :), cpl_delta_sal_2D(:, :), &
     101       cpl_dter_2D(:, :), cpl_dser_2D(:, :), cpl_dt_ds_2D(:, :)
    99102  !$OMP THREADPRIVATE(cpl_delta_sst_2D, cpl_delta_sal_2D)
     103  !$OMP THREADPRIVATE(cpl_dter_2D, cpl_dser_2D, cpl_dt_ds_2D)
    100104
    101105  REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_fder2D, cpl_albe2D
     
    242246   
    243247       if (activate_ocean_skin == 2) then
    244           ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), stat = error)
     248          ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), cpl_dter(klon), &
     249               cpl_dser(klon), cpl_dt_ds(klon), stat = error)
    245250          sum_error = sum_error + error
    246251       end if
     
    654659       precip_rain, precip_snow, evap, tsurf, fder, albsol, taux, tauy, windsp,&
    655660       sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, delta_sst, &
    656        delta_sal)
     661       delta_sal, dTer, dSer, dt_ds)
    657662
    658663    ! This subroutine cumulates some fields for each time-step during
     
    687692    real, intent(in):: delta_sal(:) ! (knon)
    688693    ! Ocean-air interface salinity minus bulk salinity, in ppt.
     694
     695    REAL, intent(in):: dter(:) ! (knon)
     696    ! Temperature variation in the diffusive microlayer, that is
     697    ! ocean-air interface temperature minus subskin temperature. In
     698    ! K.
     699
     700    REAL, intent(in):: dser(:) ! (knon)
     701    ! Salinity variation in the diffusive microlayer, that is
     702    ! ocean-air interface salinity minus subskin salinity. In ppt.
     703
     704    real, intent(in):: dt_ds(:) ! (knon)
     705    ! (tks / tkt) * dTer, in K
    689706
    690707! Local variables
     
    726743          cpl_delta_sst = 0.
    727744          cpl_delta_sal = 0.
     745          cpl_dter = 0.
     746          cpl_dser = 0.
     747          cpl_dt_ds = 0.
    728748       end if
    729749    ENDIF
     
    772792          cpl_delta_sst(ig) = cpl_delta_sst(ig) + delta_sst(ig) / REAL(nexca)
    773793          cpl_delta_sal(ig) = cpl_delta_sal(ig) + delta_sal(ig) / REAL(nexca)
     794          cpl_dter(ig) = cpl_dter(ig) + dter(ig) / REAL(nexca)
     795          cpl_dser(ig) = cpl_dser(ig) + dser(ig) / REAL(nexca)
     796          cpl_dt_ds(ig) = cpl_dt_ds(ig) + dt_ds(ig) / REAL(nexca)
    774797       end if
    775798     ENDDO
     
    821844          if (activate_ocean_skin == 2) then
    822845             ALLOCATE(cpl_delta_sst_2D(nbp_lon, jj_nb), &
    823                   cpl_delta_sal_2D(nbp_lon, jj_nb), stat = error)
     846                  cpl_delta_sal_2D(nbp_lon, jj_nb), &
     847                  cpl_dter_2D(nbp_lon, jj_nb), cpl_dser_2D(nbp_lon, jj_nb), &
     848                  cpl_dt_ds_2D(nbp_lon, jj_nb), stat = error)
    824849             sum_error = sum_error + error
    825850          end if
     
    882907          CALL gath2cpl(cpl_delta_sst, cpl_delta_sst_2D, knon, knindex)
    883908          CALL gath2cpl(cpl_delta_sal, cpl_delta_sal_2D, knon, knindex)
     909          CALL gath2cpl(cpl_dter, cpl_dter_2D, knon, knindex)
     910          CALL gath2cpl(cpl_dser, cpl_dser_2D, knon, knindex)
     911          CALL gath2cpl(cpl_dt_ds, cpl_dt_ds_2D, knon, knindex)
    884912       end if
    885913    ENDIF
     
    12831311       tab_flds(:, :, ids_delta_sst) = cpl_delta_sst_2D
    12841312       tab_flds(:, :, ids_delta_sal) = cpl_delta_sal_2D
     1313       tab_flds(:, :, ids_dter) = cpl_dter_2D
     1314       tab_flds(:, :, ids_dser) = cpl_dser_2D
     1315       tab_flds(:, :, ids_dt_ds) = cpl_dt_ds_2D
    12851316    end if
    12861317   
     
    15221553    ENDIF
    15231554
    1524     if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, cpl_delta_sal_2d)
     1555    if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, &
     1556         cpl_delta_sal_2d, cpl_dter_2d, cpl_dser_2d, cpl_dt_ds_2d)
    15251557
    15261558    IF (sum_error /= 0) THEN
  • LMDZ6/trunk/libf/phylmd/oasis.F90

    r4247 r4370  
    6262  INTEGER, PARAMETER :: ids_qraiic = 28
    6363  INTEGER, PARAMETER :: ids_qsnoic = 29
    64   INTEGER, PARAMETER :: ids_delta_sst = 30, ids_delta_sal = 31
    65  
    66   INTEGER, PARAMETER :: maxsend    = 31  ! Maximum number of fields to send
     64  INTEGER, PARAMETER :: ids_delta_sst = 30, ids_delta_sal = 31, ids_dter = 32, &
     65       ids_dser = 33, ids_dt_ds = 34
     66 
     67  INTEGER, PARAMETER :: maxsend    = 34  ! Maximum number of fields to send
    6768 
    6869  ! Id for fields received from ocean
     
    201202       infosend(ids_delta_sal)%action = .TRUE.
    202203       infosend(ids_delta_sal)%name = 'CODELSSS'
     204       infosend(ids_dter)%action = .TRUE.
     205       infosend(ids_dter)%name = 'CODELTER'
     206       infosend(ids_dser)%action = .TRUE.
     207       infosend(ids_dser)%name = 'CODELSER'
     208       infosend(ids_dt_ds)%action = .TRUE.
     209       infosend(ids_dt_ds)%name = 'CODTDS'
    203210    end if
    204211           
  • LMDZ6/trunk/libf/phylmd/ocean_cpl_mod.F90

    r3815 r4370  
    5656       qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    5757       tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, &
    58        delta_sst)
     58       delta_sst, dTer, dSer, dt_ds)
    5959
    6060!
     
    103103    ! only if activate_ocean_skin >= 1.
    104104
     105    REAL, intent(in):: dter(:) ! (knon)
     106    ! Temperature variation in the diffusive microlayer, that is
     107    ! ocean-air interface temperature minus subskin temperature. In
     108    ! K.
     109
     110    REAL, intent(in):: dser(:) ! (knon)
     111    ! Salinity variation in the diffusive microlayer, that is
     112    ! ocean-air interface salinity minus subskin salinity. In ppt.
     113
     114    real, intent(in):: dt_ds(:) ! (knon)
     115    ! (tks / tkt) * dTer, in K
     116
    105117! In/Output arguments
    106118!****************************************************************************************
     
    219231         fluxsens, precip_rain, precip_snow, evap, tsurf_new, fder_new, alb1, &
    220232         flux_u1, flux_v1, windsp, sens_prec_liq, sens_prec_sol, lat_prec_liq, &
    221          lat_prec_sol, delta_sst, delta_sal)
     233         lat_prec_sol, delta_sst, delta_sal, dTer, dSer, dt_ds)
    222234
    223235  END SUBROUTINE ocean_cpl_noice
  • LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90

    r4283 r4370  
    313313    USE print_control_mod,  ONLY : prt_level,lunout
    314314    USE ioipsl_getin_p_mod, ONLY : getin_p
    315     use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, zsig, zmea
    316     use phys_output_var_mod, only: dter, dser, tkt, tks, taur, sss
     315    use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, dter, &
     316         dser, dt_ds, zsig, zmea
     317    use phys_output_var_mod, only: tkt, tks, taur, sss
    317318#ifdef CPP_XIOS
    318319    USE wxios, ONLY: missing_val
     
    875876    ! Martin
    876877
    877     REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, ydser, &
    878          ytkt, ytks, ytaur, ysss
    879     ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks,
    880     ! taur, sss on ocean points
     878    REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, &
     879         ydser, ydt_ds, ytkt, ytks, ytaur, ysss
     880    ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser,
     881    ! dt_ds, tkt, tks, taur, sss on ocean points
    881882
    882883!****************************************************************************************
     
    15331534             ydelta_sal(:knon) = delta_sal(ni(:knon))
    15341535             ydelta_sst(:knon) = delta_sst(ni(:knon))
     1536             ydter(:knon) = dter(ni(:knon))
     1537             ydser(:knon) = dser(ni(:knon))
     1538             ydt_ds(:knon) = dt_ds(ni(:knon))
    15351539          end if
    15361540         
     
    21132117               y_flux_u1, y_flux_v1, ydelta_sst(:knon), ydelta_sal(:knon), &
    21142118               yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), &
    2115                ytkt(:knon), ytks(:knon), ytaur(:knon), ysss)
     2119               ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss)
    21162120      IF (prt_level >=10) THEN
    21172121          print *,'arg de surf_ocean: ycdragh ',ycdragh
     
    28602864          taur(ni(:knon)) = ytaur(:knon)
    28612865          sss(ni(:knon)) = ysss(:knon)
     2866
     2867          if (activate_ocean_skin == 2 .and. type_ocean == "couple") then
     2868             dt_ds = missing_val
     2869             dt_ds(ni(:knon)) = ydt_ds(:knon)
     2870          end if
    28622871       end if
    28632872
     
    35273536
    35283537    USE indice_sol_mod
    3529     use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst
     3538    use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst, dter, &
     3539         dser, dt_ds
    35303540    use config_ocean_skin_m, only: activate_ocean_skin
    35313541
     
    36203630                         delta_sal(i) = 0.
    36213631                         delta_sst(i) = 0.
     3632                         dter(i) = 0.
     3633                         dser(i) = 0.
     3634                         dt_ds(i) = 0.
    36223635                      end if
    36233636                     
  • LMDZ6/trunk/libf/phylmd/phyetat0_mod.F90

    r4367 r4370  
    2727       wake_s, wake_dens, awake_dens, cv_gen, zgam, zmax0, zmea, zpic, zsig, &
    2828       zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, u10m, v10m, treedrg, &
    29        ale_wake, ale_bl_stat, ds_ns, dt_ns, delta_sst, delta_sal, ratqs_inter
     29       ale_wake, ale_bl_stat, ds_ns, dt_ns, delta_sst, delta_sal, dter, dser, &
     30       dt_ds, ratqs_inter
    3031!FC
    3132  USE geometry_mod,     ONLY: longitude_deg, latitude_deg
     
    558559        found = phyetat0_get(delta_sst, "delta_SST", &
    559560             "ocean-air interface temperature minus bulk SST", 0.)
     561        found = phyetat0_get(dter, "dter", &
     562             "ocean-air interface temperature minus subskin temperature", 0.)
     563        found = phyetat0_get(dser, "dser", &
     564             "ocean-air interface salinity minus subskin salinity", 0.)
     565        found = phyetat0_get(dt_ds, "dt_ds", "(tks / tkt) * dTer", 0.)
     566
     567        where (pctsrf(:, is_oce) == 0.)
     568           delta_sst = missing_val
     569           delta_sal = missing_val
     570           dter = missing_val
     571           dser = missing_val
     572           dt_ds = missing_val
     573        end where
    560574     end if
    561575     
  • LMDZ6/trunk/libf/phylmd/phyredem.F90

    r4298 r4370  
    3030                                du_gwd_rando, du_gwd_front, u10m, v10m, &
    3131                                treedrg, solswfdiff, delta_sal, ds_ns, dt_ns, &
    32                                 delta_sst, ratqs_inter
     32                                delta_sst, ratqs_inter, dter, dser, dt_ds
    3333
    3434  USE geometry_mod, ONLY : longitude_deg, latitude_deg
     
    378378          CALL put_field(pass, "delta_SST", &
    379379               "ocean-air interface temperature minus bulk SST", delta_sst)
     380          CALL put_field(pass, "dter", &
     381               "ocean-air interface temperature minus subskin temperature", &
     382               dter)
     383          CALL put_field(pass, "dser", &
     384               "ocean-air interface salinity minus subskin salinity", dser)
     385          CALL put_field(pass, "dt_ds", &
     386               "(tks / tkt) * dTer", dt_ds)
    380387       end if
    381388       
  • LMDZ6/trunk/libf/phylmd/phys_output_var_mod.F90

    r4046 r4370  
    135135  ! Ocean-atmosphere interface, subskin ocean and near-surface ocean:
    136136 
    137   REAL, ALLOCATABLE, SAVE:: dter(:)
    138   ! Temperature variation in the diffusive microlayer, that is
    139   ! ocean-air interface temperature minus subskin temperature. In K.
    140      
    141   REAL, SAVE, ALLOCATABLE:: dser(:)
    142   ! Temperature variation in the diffusive microlayer, that is
    143   ! subskin temperature minus ocean-air interface temperature. In K.
    144 
    145   REAL, SAVE, ALLOCATABLE:: tkt(:)
     137  REAL, SAVE, ALLOCATABLE:: tkt(:) ! (klon)
    146138  ! épaisseur (m) de la couche de diffusion thermique (microlayer)
    147139  ! cool skin thickness
    148140
    149   REAL, SAVE, ALLOCATABLE:: tks(:)
     141  REAL, SAVE, ALLOCATABLE:: tks(:) ! (klon)
    150142  ! épaisseur (m) de la couche de diffusion de masse (microlayer)
    151143 
    152   REAL, SAVE, ALLOCATABLE:: taur(:) ! momentum flux due to rain, in Pa
    153 
    154   REAL, SAVE, ALLOCATABLE:: sss(:)
     144  REAL, SAVE, ALLOCATABLE:: taur(:) ! (klon) momentum flux due to rain, in Pa
     145
     146  REAL, SAVE, ALLOCATABLE:: sss(:) ! (klon)
    155147  ! bulk salinity of the surface layer of the ocean, in ppt
    156148 
    157   !$OMP THREADPRIVATE(dter, dser, tkt, tks, taur, sss)
     149  !$OMP THREADPRIVATE(tkt, tks, taur, sss)
    158150
    159151CONTAINS
     
    216208    IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon))
    217209
    218     if (activate_ocean_skin >= 1) allocate(dter(klon), dser(klon), tkt(klon), &
    219          tks(klon), taur(klon), sss(klon))
     210    if (activate_ocean_skin >= 1) allocate(tkt(klon), tks(klon), taur(klon), &
     211         sss(klon))
    220212
    221213  END SUBROUTINE phys_output_var_init
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r4293 r4370  
    271271        xtrain_con, xtsnow_con, xtrain_fall, xtsnow_fall, &
    272272#endif
    273          dt_ns, delta_sst
     273         dt_ns, delta_sst, dter, dser
    274274
    275275    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
     
    390390         alt_tropo, &
    391391!Ionela
    392          ok_4xCO2atm, dter, dser, tkt, tks, taur, sss
     392         ok_4xCO2atm, tkt, tks, taur, sss
    393393
    394394    USE ocean_slab_mod, ONLY: nslay, tslab, slab_bilg, tice, seaice, &
  • LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90

    r4296 r4370  
    489489      ! Ocean-air interface salinity minus bulk salinity, in ppt
    490490     
    491       !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst)
     491      REAL, ALLOCATABLE, SAVE:: dter(:) ! (klon)
     492      ! Temperature variation in the diffusive microlayer, that is
     493      ! ocean-air interface temperature minus subskin temperature. In K.
     494
     495      REAL, SAVE, ALLOCATABLE:: dser(:) ! (klon)
     496      ! Salinity variation in the diffusive microlayer, that is
     497      ! ocean-air interface salinity minus subskin salinity. In ppt.
     498
     499      real, SAVE, ALLOCATABLE:: dt_ds(:) ! (klon)
     500      ! (tks / tkt) * dTer, in K
     501
     502      !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser, dt_ds)
    492503
    493504    CONTAINS
     
    503514USE indice_sol_mod
    504515use config_ocean_skin_m, only: activate_ocean_skin
     516use surface_data, only: type_ocean
    505517IMPLICIT NONE
    506518
     
    726738        du_gwd_front(:,:) = 0 !ym missing init   
    727739      ENDIF
    728       if (activate_ocean_skin >= 1) ALLOCATE(delta_sal(klon), ds_ns(klon), &
    729            dt_ns(klon), delta_sst(klon))
     740
     741      if (activate_ocean_skin >= 1) then
     742         ALLOCATE(delta_sal(klon), ds_ns(klon), dt_ns(klon), delta_sst(klon), &
     743              dter(klon), dser(klon))
     744         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
     745              allocate(dt_ds(klon))
     746      end if
    730747
    731748    END SUBROUTINE phys_state_var_init
     
    737754USE indice_sol_mod
    738755use config_ocean_skin_m, only: activate_ocean_skin
     756use surface_data, only: type_ocean
    739757IMPLICIT NONE
    740758include "clesphys.h"
     
    865883      DEALLOCATE(ratqs_inter)
    866884
    867       if (activate_ocean_skin >= 1) deALLOCATE(delta_sal, ds_ns, dt_ns, &
    868            delta_sst)
     885      if (activate_ocean_skin >= 1) then
     886         deALLOCATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser)
     887         if (activate_ocean_skin == 2 .and. type_ocean == "couple") &
     888              deALLOCATE(dt_ds)
     889      end if
    869890
    870891#ifdef ISO   
  • LMDZ6/trunk/libf/phylmd/surf_ocean_mod.F90

    r3906 r4370  
    2020       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &
    2121       tsurf_new, dflux_s, dflux_l, lmt_bils, &
    22        flux_u1, flux_v1, delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks, &
    23        taur, sss)
     22       flux_u1, flux_v1, delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, &
     23       dt_ds, tkt, tks, taur, sss)
    2424
    2525    use albedo, only: alboc, alboc_cd
     
    9494    ! minus foundation temperature. (Can be negative.) In K.
    9595
     96    REAL, intent(inout):: dter(:) ! (knon)
     97    ! Temperature variation in the diffusive microlayer, that is
     98    ! ocean-air interface temperature minus subskin temperature. In
     99    ! K.
     100
     101    REAL, intent(inout):: dser(:) ! (knon)
     102    ! Salinity variation in the diffusive microlayer, that is
     103    ! ocean-air interface salinity minus subskin salinity. In ppt.
     104
     105    real, intent(inout):: dt_ds(:) ! (knon)
     106    ! (tks / tkt) * dTer, in K
     107
    96108    ! Output variables
    97109    !**************************************************************************
     
    109121    REAL, DIMENSION(klon), INTENT(OUT)       :: flux_u1, flux_v1
    110122
    111     REAL, intent(out):: dter(:) ! (knon)
    112     ! Temperature variation in the diffusive microlayer, that is
    113     ! ocean-air interface temperature minus subskin temperature. In
    114     ! K.
    115 
    116     REAL, intent(out):: dser(:) ! (knon)
    117     ! Salinity variation in the diffusive microlayer, that is
    118     ! ocean-air interface salinity minus subskin salinity. In ppt.
    119 
    120123    REAL, intent(out):: tkt(:) ! (knon)
    121124    ! épaisseur (m) de la couche de diffusion thermique (microlayer)
     
    192195            qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
    193196            tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, &
    194             delta_sst)
     197            delta_sst, dTer, dSer, dt_ds)
    195198
    196199    CASE('slab')
     
    331334       delta_sst = t_int - tsurf_new(:knon)
    332335       delta_sal = s_int - sss(:knon)
    333        if (activate_ocean_skin >= 2) tsurf_new(:knon) = t_int
     336
     337       if (activate_ocean_skin == 2) then
     338          tsurf_new(:knon) = t_int
     339          if (type_ocean == 'couple') dt_ds = (tks / tkt) * dter
     340       end if
    334341    end if
    335342   
  • LMDZ6/trunk/libf/phylmd/wake.F90

    r4295 r4370  
    22382238    d_deltaqw, sigmaw, d_sigmaw, alpha)
    22392239  ! ------------------------------------------------------
    2240   ! Dtermination du coefficient alpha tel que les tendances
     2240  ! D\'etermination du coefficient alpha tel que les tendances
    22412241  ! corriges alpha*d_G, pour toutes les grandeurs G, correspondent
    22422242  ! a une humidite positive dans la zone (x) et dans la zone (w).
Note: See TracChangeset for help on using the changeset viewer.