Ignore:
Timestamp:
Nov 17, 2025, 4:01:45 PM (5 days ago)
Author:
yann meurdesoif
Message:

cleaning : remove old pbl_surface subroutine source that was inhibited by preprocessing key.
YM

File:
1 edited

Legend:

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

    r5868 r5869  
    324324
    325325  END SUBROUTINE pbl_surface_init_iso
    326 #endif
    327 
    328 
    329 #ifndef toSupress
    330 
    331 
    332 !****************************************************************************************
    333 
    334 
    335   SUBROUTINE pbl_surface( &
    336        dtime,     date0,     itap,     jour,          &
    337        debut,     lafin,                              &
    338        rlon,      rlat,      rugoro,   rmu0,          &
    339    !GG lwdown_m,  cldt,          &
    340        lwdown_m,  pphi, cldt,          &
    341    !GG
    342        rain_f,    snow_f,    bs_f, solsw_m,  solswfdiff_m, sollw_m,       &
    343        gustiness,                                     &
    344        t,         q,        qbs,  u,        v,        &
    345 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    346 !!       t_x,       q_x,       t_w,      q_w,           &
    347        wake_dlt,             wake_dlq,                &
    348        wake_cstar,           wake_s,                  &
    349 !!!
    350        pplay,     paprs,     pctsrf,                  &
    351        ts,SFRWL,   alb_dir, alb_dif,ustar, u10m, v10m,wstar, &
    352        cdragh,    cdragm,   zu1,    zv1,              &
    353 !jyg<   (26/09/2019)
    354        beta, &
    355 !>jyg
    356        alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,      &
    357        icesub_lic, alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    358        zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout,                 &
    359        d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss,            &
    360 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    361        d_t_w,     d_q_w,                             &
    362        d_t_x,     d_q_x,                             &
    363 !!       d_wake_dlt,d_wake_dlq,                         &
    364        zxsens_x,  zxfluxlat_x,zxsens_w,zxfluxlat_w,  &
    365 !!!
    366 !!! nrlmd le 13/06/2011
    367        delta_tsurf,wake_dens,cdragh_x,cdragh_w,      &
    368        cdragm_x,cdragm_w,kh,kh_x,kh_w,               &
    369 !!!
    370        zcoefh,    zcoefm,    slab_wfbils,            &
    371        qsol,    zq2m,      s_pblh,   s_plcl,         &
    372 !!!
    373 !!! jyg le 08/02/2012
    374        s_pblh_x, s_plcl_x,   s_pblh_w, s_plcl_w,     &
    375 !!!
    376        s_capCL,   s_oliqCL,  s_cteiCL, s_pblT,       &
    377        s_therm,   s_trmb1,   s_trmb2,  s_trmb3,      &
    378        zustar,zu10m,  zv10m,    fder_print,          &
    379        zxqsurf, delta_qsurf,                         &
    380        rh2m,      zxfluxu,  zxfluxv,                 &
    381        z0m, z0h,   agesno,  sollw,    solsw,         &
    382        d_ts,      evap,    fluxlat,   t2m,           &
    383        wfbils,    wfevap,                            &
    384        flux_t,   flux_u, flux_v,                     &
    385        dflux_t,   dflux_q,   zxsnow,                 &
    386 !jyg<
    387 !!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    388        zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x, eps_x, &
    389 !>jyg
    390 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    391 !!        tke_x,     tke_w                              &
    392        wake_dltke,                                     &
    393 !GG        treedrg                                   &
    394        treedrg,hice ,tice, bilg_cumul,            &
    395        fcds, fcdi, dh_basal_growth, dh_basal_melt, &
    396        dh_top_melt, dh_snow2sic, &
    397        dtice_melt, dtice_snow2sic , &
    398 !GG
    399 !FC
    400 !AM heterogeneous continental sub-surfaces
    401        tsurf_tersrf, tsoil_tersrf, qsurf_tersrf, tsurf_new_tersrf, &
    402        cdragm_tersrf, cdragh_tersrf, &
    403        swnet_tersrf, lwnet_tersrf, fluxsens_tersrf, fluxlat_tersrf &
    404 !!!
    405 #ifdef ISO
    406      &   ,xtrain_f, xtsnow_f,xt, &
    407      &   wake_dlxt,zxxtevap,xtevap, &
    408      &   d_xt,d_xt_w,d_xt_x, &
    409      &   xtsol,dflux_xt,zxxtsnow,zxfluxxt,flux_xt, &
    410      &   h1_diag,runoff_diag,xtrunoff_diag &
    411 #endif     
    412      &   )
    413 !****************************************************************************************
    414 ! Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
    415 ! Objet: interface de "couche limite" (diffusion verticale)
    416 !
    417 !AA REM:
    418 !AA-----
    419 !AA Tout ce qui a trait au traceurs est dans phytrac maintenant
    420 !AA pour l'instant le calcul de la couche limite pour les traceurs
    421 !AA se fait avec cltrac et ne tient pas compte de la differentiation
    422 !AA des sous-fraction de sol.
    423 !AA REM bis :
    424 !AA----------
    425 !AA Pour pouvoir extraire les coefficient d'echanges et le vent
    426 !AA dans la premiere couche, 3 champs supplementaires ont ete crees
    427 !AA zcoefh, zu1 et zv1. Pour l'instant nous avons moyenne les valeurs
    428 !AA de ces trois champs sur les 4 subsurfaces du modele. Dans l'avenir
    429 !AA si les informations des subsurfaces doivent etre prises en compte
    430 !AA il faudra sortir ces memes champs en leur ajoutant une dimension,
    431 !AA c'est a dire nbsrf (nbre de subsurface).
    432 !
    433 ! Arguments:
    434 !
    435 ! dtime----input-R- interval du temps (secondes)
    436 ! itap-----input-I- numero du pas de temps
    437 ! date0----input-R- jour initial
    438 ! t--------input-R- temperature (K)
    439 ! q--------input-R- vapeur d'eau (kg/kg)
    440 ! u--------input-R- vitesse u
    441 ! v--------input-R- vitesse v
    442 ! wake_dlt-input-R- temperatre difference between (w) and (x) (K)
    443 ! wake_dlq-input-R- humidity difference between (w) and (x) (kg/kg)
    444 !wake_cstar-input-R- wake gust front speed (m/s)
    445 ! wake_s---input-R- wake fractionnal area
    446 ! ts-------input-R- temperature du sol (en Kelvin)
    447 ! paprs----input-R- pression a intercouche (Pa)
    448 ! pplay----input-R- pression au milieu de couche (Pa)
    449 ! rlat-----input-R- latitude en degree
    450 ! z0m, z0h ----input-R- longeur de rugosite (en m)
    451 ! Martin
    452 ! cldt-----input-R- total cloud fraction
    453 ! Martin
    454 !GG
    455 ! pphi-----input-R- geopotentiel de chaque couche (g z) (reference sol)
    456 !GG
    457 !
    458 ! d_t------output-R- le changement pour "t"
    459 ! d_q------output-R- le changement pour "q"
    460 ! d_u------output-R- le changement pour "u"
    461 ! d_v------output-R- le changement pour "v"
    462 ! d_ts-----output-R- le changement pour "ts"
    463 ! flux_t---output-R- flux de chaleur sensible (CpT) J/m**2/s (W/m**2)
    464 !                    (orientation positive vers le bas)
    465 ! tke_x---input/output-R- tke in the (x) region (kg/m**2/s)
    466 ! wake_dltke-input/output-R- tke difference between (w) and (x) (kg/m**2/s)
    467 ! flux_q---output-R- flux de vapeur d'eau (kg/m**2/s)
    468 ! flux_u---output-R- tension du vent X: (kg m/s)/(m**2 s) ou Pascal
    469 ! flux_v---output-R- tension du vent Y: (kg m/s)/(m**2 s) ou Pascal
    470 ! dflux_t--output-R- derive du flux sensible
    471 ! dflux_q--output-R- derive du flux latent
    472 ! zu1------output-R- le vent dans la premiere couche
    473 ! zv1------output-R- le vent dans la premiere couche
    474 ! trmb1----output-R- deep_cape
    475 ! trmb2----output-R- inhibition
    476 ! trmb3----output-R- Point Omega
    477 ! cteiCL---output-R- Critere d'instab d'entrainmt des nuages de CL
    478 ! plcl-----output-R- Niveau de condensation
    479 ! pblh-----output-R- HCL
    480 ! pblT-----output-R- T au nveau HCL
    481 ! treedrg--output-R- tree drag (m)               
    482 ! qsurf_tersrf--output-R- surface specific humidity of continental sub-surfaces
    483 ! cdragm_tersrf--output-R- momentum drag coefficient of continental sub-surfaces
    484 ! cdragh_tersrf--output-R- heat drag coefficient of continental sub-surfaces
    485 ! tsurf_new_tersrf--output-R- surface temperature of continental sub-surfaces
    486 ! swnet_tersrf--output-R- net shortwave radiation of continental sub-surfaces
    487 ! lwnet_tersrf--output-R- net longwave radiation of continental sub-surfaces
    488 ! fluxsens_tersrf--output-R- sensible heat flux of continental sub-surfaces
    489 ! fluxlat_tersrf--output-R- latent heat flux of continental sub-surfaces
    490 
    491     USE carbon_cycle_mod,   ONLY : carbon_cycle_cpl, carbon_cycle_tr, level_coupling_esm
    492     USE carbon_cycle_mod,   ONLY : co2_send, nbcf_out, fields_out, yfields_out, cfname_out
    493     use hbtm_mod, only: hbtm
    494     USE indice_sol_mod
    495     USE time_phylmdz_mod,   ONLY : day_ini,annee_ref,itau_phy
    496     USE mod_grid_phy_lmdz,  ONLY : nbp_lon, nbp_lat, grid1dto2d_glo
    497     USE print_control_mod,  ONLY : prt_level,lunout
    498 #ifdef ISO
    499   USE isotopes_mod, ONLY: Rdefault,iso_eau
    500 #ifdef ISOVERIF
    501         USE isotopes_verif_mod
    502 #endif
    503 #ifdef ISOTRAC
    504         USE isotrac_mod, only: index_iso
    505 #endif
    506 #endif
    507 USE dimpft_mod_h
    508     USE flux_arp_mod_h
    509     USE compbl_mod_h
    510     USE yoethf_mod_h
    511         USE clesphys_mod_h
    512     USE ioipsl_getin_p_mod, ONLY : getin_p
    513     use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, dter, &
    514          dser, dt_ds, zsig, zmea, &
    515          frac_tersrf, z0m_tersrf, ratio_z0m_z0h_tersrf, albedo_tersrf !AM
    516     use phys_output_var_mod, only: tkt, tks, taur, sss
    517     use lmdz_blowing_snow_ini, only : zeta_bs
    518     use wxios_mod, ONLY: missing_val_xios => missing_val, using_xios
    519     USE netcdf, only: missing_val_netcdf => nf90_fill_real
    520     USE dimsoil_mod_h, ONLY: nsoilmx
    521     USE surf_param_mod, ONLY: eff_surf_param  !AM
    522 
    523     USE yomcst_mod_h
    524 IMPLICIT NONE
    525 
    526     INCLUDE "FCTTRE.h"
    527 !FC
    528 
    529 !****************************************************************************************
    530     REAL,                         INTENT(IN)        :: dtime   ! time interval (s)
    531     REAL,                         INTENT(IN)        :: date0   ! initial day
    532     INTEGER,                      INTENT(IN)        :: itap    ! time step
    533     INTEGER,                      INTENT(IN)        :: jour    ! current day of the year
    534     LOGICAL,                      INTENT(IN)        :: debut   ! true if first run step
    535     LOGICAL,                      INTENT(IN)        :: lafin   ! true if last run step
    536     REAL, DIMENSION(klon),        INTENT(IN)        :: rlon    ! longitudes in degrees
    537     REAL, DIMENSION(klon),        INTENT(IN)        :: rlat    ! latitudes in degrees
    538     REAL, DIMENSION(klon),        INTENT(IN)        :: rugoro  ! rugosity length
    539     REAL, DIMENSION(klon),        INTENT(IN)        :: rmu0    ! cosine of solar zenith angle
    540     REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f  ! rain fall
    541     REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
    542     REAL, DIMENSION(klon),        INTENT(IN)        :: bs_f  ! blowing snow fall
    543     REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
    544     REAL, DIMENSION(klon),        INTENT(IN)        :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface
    545     REAL, DIMENSION(klon),        INTENT(IN)        :: sollw_m ! net longwave radiation at mean surface
    546     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
    547     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
    548     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: qbs       ! blowing snow specific content (kg/kg)
    549     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
    550     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
    551     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: pplay   ! mid-layer pression (Pa)
    552     REAL, DIMENSION(klon,klev+1), INTENT(IN)        :: paprs   ! pression between layers (Pa)
    553     REAL, DIMENSION(klon, nbsrf), INTENT(IN)        :: pctsrf  ! sub-surface fraction
    554 ! Martin
    555     REAL, DIMENSION(klon),        INTENT(IN)        :: lwdown_m ! downward longwave radiation at mean s   
    556     REAL, DIMENSION(klon),        INTENT(IN)        :: gustiness ! gustiness
    557 
    558 !GG
    559     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: pphi    ! geopotential (m2/s2)
    560 !GG
    561     REAL, DIMENSION(klon),        INTENT(IN)        :: cldt    ! total cloud
    562 
    563 #ifdef ISO
    564     REAL, DIMENSION(ntraciso,klon,klev),   INTENT(IN)        :: xt       ! water vapour (kg/kg)
    565     REAL, DIMENSION(ntraciso,klon),        INTENT(IN)        :: xtrain_f  ! rain fall
    566     REAL, DIMENSION(ntraciso,klon),        INTENT(IN)        :: xtsnow_f  ! snow fall
    567 #endif
    568 
    569 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    570 !!    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t_x       ! Temp\'erature hors poche froide
    571 !!    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t_w       ! Temp\'erature dans la poches froide
    572 !!    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q_x       !
    573 !!    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q_w       ! Pareil pour l'humidit\'e
    574     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: wake_dlt  !temperature difference between (w) and (x) (K)
    575     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: wake_dlq  !humidity difference between (w) and (x) (K)
    576     REAL, DIMENSION(klon),        INTENT(IN)        :: wake_s    ! Fraction de poches froides
    577     REAL, DIMENSION(klon),        INTENT(IN)        :: wake_cstar! Vitesse d'expansion des poches froides
    578     REAL, DIMENSION(klon),        INTENT(IN)        :: wake_dens
    579 !!!
    580 #ifdef ISO
    581     REAL, DIMENSION(ntraciso,klon,klev),   INTENT(IN)        :: wake_dlxt   
    582 #endif
    583 ! Input/Output variables
    584 !****************************************************************************************
    585 !jyg<
    586     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: beta    ! Aridity factor
    587 !>jyg
    588     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: ts      ! temperature at surface (K)
    589     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: delta_tsurf !surface temperature difference between
    590                                                                    !wake and off-wake regions
    591 !albedo SB >>>
    592     REAL, DIMENSIOn(6),intent(in) :: SFRWL
    593     REAL, DIMENSION(klon, nsw, nbsrf), INTENT(INOUT)     :: alb_dir,alb_dif
    594 !albedo SB <<<
    595 !jyg Pourquoi ustar et wstar sont-elles INOUT ?
    596     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: ustar   ! u* (m/s)
    597     REAL, DIMENSION(klon, nbsrf+1), INTENT(INOUT)   :: wstar   ! w* (m/s)
    598     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: u10m    ! u speed at 10m
    599     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: v10m    ! v speed at 10m
    600 !jyg<
    601 !!    REAL, DIMENSION(klon, klev+1, nbsrf+1), INTENT(INOUT) :: tke
    602     REAL, DIMENSION(klon, klev+1, nbsrf+1), INTENT(INOUT) :: tke_x
    603 !>jyg
    604 
    605 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    606     REAL, DIMENSION(klon, klev+1, nbsrf+1), INTENT(INOUT) :: wake_dltke ! TKE_w - TKE_x
    607 !!!
    608 
    609 ! Output variables
    610 !****************************************************************************************
    611     REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(OUT)   :: eps_x      ! TKE dissipation rate
    612 
    613     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh     ! drag coefficient for T and Q
    614     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm     ! drag coefficient for wind
    615     REAL, DIMENSION(klon),        INTENT(OUT)       :: zu1        ! u wind speed in first layer
    616     REAL, DIMENSION(klon),        INTENT(OUT)       :: zv1        ! v wind speed in first layer
    617 !albedo SB >>>
    618     REAL, DIMENSION(klon, nsw),   INTENT(OUT)       :: alb_dir_m,alb_dif_m
    619 !albedo SB <<<
    620     ! Martin
    621     REAL, DIMENSION(klon),        INTENT(OUT)       :: alb3_lic
    622     ! Martin
    623     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsens     ! sensible heat flux at surface with inversed sign
    624                                                                   ! (=> positive sign upwards)
    625     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
    626     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    627     REAL, DIMENSION(klon),        INTENT(OUT)       :: icesub_lic ! ice (no snow!) sublimation over ice sheet
    628     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    629 !!! jyg le ???
    630     REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_t_w      !   !
    631     REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_q_w      !      !  Tendances dans les poches
    632     REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_t_x      !   !
    633     REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_q_x      !      !  Tendances hors des poches
    634 !!! jyg
    635     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat  ! latent flux, mean for each grid point
    636     REAL, DIMENSION(klon),        INTENT(OUT)       :: zt2m       ! temperature at 2m, mean for each grid point
    637     INTEGER, DIMENSION(klon, 6),  INTENT(OUT)       :: zn2mout    ! number of times the 2m temperature is out of the [tsol,temp]
    638     REAL, DIMENSION(klon),        INTENT(OUT)       :: qsat2m
    639     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_t        ! change in temperature
    640     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_t_diss       ! change in temperature
    641     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_q        ! change in water vapour
    642     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
    643     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
    644     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_qbs        ! change in blowing snow specific content
    645 
    646 
    647     REAL, INTENT(OUT):: zcoefh(klon, klev+1, nbsrf + 1) ! (klon, klev, nbsrf + 1) => only use (klon, klev, nbsrf+1)
    648     ! coef for turbulent diffusion of T and Q, mean for each grid point
    649 
    650     REAL, INTENT(OUT):: zcoefm(klon, klev+1, nbsrf + 1) ! (klon, klev, nbsrf + 1) => only use (klon, klev, nbsrf+1)
    651     ! coef for turbulent diffusion of U and V (?), mean for each grid point
    652 #ifdef ISO
    653     REAL, DIMENSION(ntraciso,klon),        INTENT(OUT)       :: zxxtevap     ! water vapour flux at surface, positiv upwards
    654     REAL, DIMENSION(ntraciso,klon, klev),  INTENT(OUT)       :: d_xt        ! change in water vapour
    655     REAL, DIMENSION(klon),                 INTENT(OUT)       :: runoff_diag
    656     REAL, DIMENSION(niso,klon),            INTENT(OUT)       :: xtrunoff_diag
    657     REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)       :: d_xt_w
    658     REAL, DIMENSION(ntraciso,klon,klev),   INTENT(OUT)       :: d_xt_x
    659 #endif
    660 
    661 
    662 
    663 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    664     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsens_x   ! Flux sensible hors poche
    665     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsens_w   ! Flux sensible dans la poche
    666     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat_x! Flux latent hors poche
    667     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat_w! Flux latent dans la poche
    668 !!    REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_wake_dlt
    669 !!    REAL, DIMENSION(klon,klev),   INTENT(OUT)       :: d_wake_dlq
    670 
    671 ! Output only for diagnostics
    672     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh_x
    673     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh_w
    674     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm_x
    675     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm_w
    676     REAL, DIMENSION(klon),        INTENT(OUT)       :: kh
    677     REAL, DIMENSION(klon),        INTENT(OUT)       :: kh_x
    678     REAL, DIMENSION(klon),        INTENT(OUT)       :: kh_w
    679 !!!
    680     REAL, DIMENSION(klon),        INTENT(OUT)       :: slab_wfbils! heat balance at surface only for slab at ocean points
    681     REAL, DIMENSION(klon),        INTENT(OUT)       :: qsol     ! water height in the soil (mm)
    682     REAL, DIMENSION(klon),        INTENT(OUT)       :: zq2m       ! water vapour at 2m, mean for each grid point
    683     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblh     ! height of the planetary boundary layer(HPBL)
    684 !!! jyg le 08/02/2012
    685     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblh_x   ! height of the PBL in the off-wake region
    686     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblh_w   ! height of the PBL in the wake region
    687 !!!
    688     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_plcl     ! condensation level
    689 !!! jyg le 08/02/2012
    690     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_plcl_x   ! condensation level in the off-wake region
    691     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_plcl_w   ! condensation level in the wake region
    692 !!!
    693     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_capCL    ! CAPE of PBL
    694     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_oliqCL   ! liquid water intergral of PBL
    695     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_cteiCL   ! cloud top instab. crit. of PBL
    696     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblT     ! temperature at PBLH
    697     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_therm    ! thermal virtual temperature excess
    698     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb1    ! deep cape, mean for each grid point
    699     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb2    ! inhibition, mean for each grid point
    700     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb3    ! point Omega, mean for each grid point
    701     REAL, DIMENSION(klon),        INTENT(OUT)       :: zustar     ! u*
    702     REAL, DIMENSION(klon),        INTENT(OUT)       :: zu10m      ! u speed at 10m, mean for each grid point
    703     REAL, DIMENSION(klon),        INTENT(OUT)       :: zv10m      ! v speed at 10m, mean for each grid point
    704     REAL, DIMENSION(klon),        INTENT(OUT)       :: fder_print ! fder for printing (=fder(i) + dflux_t(i) + dflux_q(i))
    705     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxqsurf    ! humidity at surface, mean for each grid point
    706     REAL, DIMENSION(klon),        INTENT(OUT)       :: delta_qsurf! humidity difference at surface, mean for each grid point
    707     REAL, DIMENSION(klon),        INTENT(OUT)       :: rh2m       ! relative humidity at 2m
    708     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zxfluxu    ! u wind tension, mean for each grid point
    709     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zxfluxv    ! v wind tension, mean for each grid point
    710     REAL, DIMENSION(klon, nbsrf+1), INTENT(INOUT)   :: z0m,z0h      ! rugosity length (m)
    711     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: agesno   ! age of snow at surface
    712     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: solsw      ! net shortwave radiation at surface
    713     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
    714     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
    715     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap       ! evaporation at surface
    716     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
    717     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
    718     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: wfbils     ! heat balance at surface
    719     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: wfevap     ! water balance (evap) at surface weighted by srf
    720     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_t     ! sensible heat flux (CpT) J/m**2/s (W/m**2)
    721                                                                   ! positve orientation downwards
    722     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_u     ! u wind tension (kg m/s)/(m**2 s) or Pascal
    723     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_v     ! v wind tension (kg m/s)/(m**2 s) or Pascal
    724 !FC
    725     REAL, DIMENSION(klon, klev, nbsrf), INTENT(INOUT) :: treedrg  ! tree drag (m)     
    726 !AM heterogeneous continental sub-surfaces
    727     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: tsurf_tersrf     ! surface temperature of continental sub-surfaces (K)               
    728     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: qsurf_tersrf     ! surface specific humidity of continental sub-surfaces (kg/kg)               
    729     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: tsurf_new_tersrf ! surface temperature of continental sub-surfaces (K)               
    730     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: cdragm_tersrf    ! momentum drag coefficient of continental sub-surfaces (-)               
    731     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: cdragh_tersrf    ! heat drag coefficient of continental sub-surfaces (-)               
    732     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: swnet_tersrf     ! net shortwave radiation of continental sub-surfaces (W/m2)               
    733     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: lwnet_tersrf     ! net longwave radiation of continental sub-surfaces (W/m2)               
    734     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: fluxsens_tersrf  ! sensible heat flux of continental sub-surfaces (W/m2)               
    735     REAL, DIMENSION(klon, nbtersrf), INTENT(INOUT) :: fluxlat_tersrf   ! latent heat flux of continental sub-surfaces (W/m2)               
    736     REAL, DIMENSION(klon, nsoilmx, nbtersrf), INTENT(INOUT) :: tsoil_tersrf ! soil temperature of continental sub-surfaces (K)               
    737 #ifdef ISO       
    738     REAL, DIMENSION(niso,klon),   INTENT(OUT)       :: xtsol      ! water height in the soil (mm)
    739     REAL, DIMENSION(ntraciso,klon, nbsrf)           :: xtevap     ! evaporation at surface
    740     REAL, DIMENSION(klon),        INTENT(OUT)       :: h1_diag    ! just diagnostic, not useful
    741 #endif
    742 
    743 
    744 ! Output not needed
    745     REAL, DIMENSION(klon),       INTENT(OUT)        :: dflux_t    ! change of sensible heat flux
    746     REAL, DIMENSION(klon),       INTENT(OUT)        :: dflux_q    ! change of water vapour flux
    747     REAL, DIMENSION(klon),       INTENT(OUT)        :: zxsnow     ! snow at surface, mean for each grid point
    748     REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
    749     REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
    750     REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxqbs    ! blowing snow flux, mean for each grid point
    751     REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
    752     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
    753     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs   ! blowind snow vertical flux (kg/m**2
    754 
    755 #ifdef ISO   
    756     REAL, DIMENSION(ntraciso,klon),              INTENT(OUT) :: dflux_xt    ! change of water vapour flux
    757     REAL, DIMENSION(niso,klon),                  INTENT(OUT) :: zxxtsnow    ! snow at surface, mean for each grid point
    758     REAL, DIMENSION(ntraciso,klon, klev),        INTENT(OUT) :: zxfluxxt    ! water vapour flux, mean for each grid point
    759     REAL, DIMENSION(ntraciso,klon, klev, nbsrf), INTENT(OUT) :: flux_xt     ! water vapour flux(latent flux) (kg/m**2/s) 
    760 #endif
    761 
    762 ! Martin
    763 ! inlandsis
    764     REAL, DIMENSION(klon),       INTENT(OUT)        :: qsnow      ! snow water content
    765     REAL, DIMENSION(klon),       INTENT(OUT)        :: snowhgt    ! snow height
    766     REAL, DIMENSION(klon),       INTENT(OUT)        :: to_ice     ! snow passed to ice
    767     REAL, DIMENSION(klon),       INTENT(OUT)        :: sissnow    ! snow in snow model
    768     REAL, DIMENSION(klon),       INTENT(OUT)        :: runoff     ! runoff on land ice
    769 ! Martin
    770 !GG
    771     REAL, DIMENSION(klon),       INTENT(INOUT)        :: hice      ! hice
    772     REAL, DIMENSION(klon),       INTENT(INOUT)        :: tice      ! tice
    773     REAL, DIMENSION(klon),       INTENT(INOUT)        :: bilg_cumul      ! flux cumulated
    774     REAL, DIMENSION(klon),       INTENT(INOUT)        :: fcds
    775     REAL, DIMENSION(klon),       INTENT(INOUT)        :: fcdi
    776     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dh_basal_growth
    777     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dh_basal_melt
    778     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dh_top_melt
    779     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dh_snow2sic
    780     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dtice_melt
    781     REAL, DIMENSION(klon),       INTENT(INOUT)        :: dtice_snow2sic
    782 !GG
    783 
    784 ! Other local variables
    785 !****************************************************************************************
    786 ! >> PC
    787     INTEGER                            :: ierr
    788     INTEGER                            :: n
    789 ! << PC
    790     INTEGER                            :: iflag_split, iflag_split_ref
    791     INTEGER                            :: i, k, nsrf
    792     INTEGER                            :: knon, j
    793     INTEGER                            :: idayref
    794     INTEGER , DIMENSION(klon)          :: ni
    795     REAL                               :: yt1_new
    796     REAL                               :: zx_alf1, zx_alf2 !valeur ambiante par extrapola
    797     REAL                               :: amn, amx
    798     REAL                               :: f1 ! fraction de longeurs visibles parmi tout SW intervalle
    799     REAL, DIMENSION(klon)              :: r_co2_ppm     ! taux CO2 atmosphere
    800     REAL, DIMENSION(klon)              :: yts, yz0m, yz0h, ypct
    801     REAL, DIMENSION(klon)              :: yz0h_old
    802 !albedo SB >>>
    803     REAL, DIMENSION(klon)              :: yalb,yalb_vis
    804 !albedo SB <<<
    805     REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1, yqbs1
    806     REAL, DIMENSION(klon)              :: yqa
    807     REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    808     REAL, DIMENSION(klon)              :: yrain_f, ysnow_f, ybs_f
    809 #ifdef ISO
    810     REAL, DIMENSION(ntraciso,klon)     :: yxt1
    811     REAL, DIMENSION(niso,klon)         :: yxtsnow, yxtsol   
    812     REAL, DIMENSION(ntraciso,klon)     :: yxtrain_f, yxtsnow_f
    813     REAL, DIMENSION(klon)              :: yrunoff_diag
    814     REAL, DIMENSION(niso,klon)         :: yxtrunoff_diag
    815     REAL, DIMENSION(niso,klon)         :: yRland_ice   
    816 #endif
    817     REAL, DIMENSION(klon)              :: ysolsw, ysollw
    818     REAL, DIMENSION(klon)              :: yfder
    819     REAL, DIMENSION(klon)              :: yrugoro
    820     REAL, DIMENSION(klon)              :: yfluxlat
    821     REAL, DIMENSION(klon)              :: yfluxbs
    822     REAL, DIMENSION(klon)              :: y_d_ts
    823     REAL, DIMENSION(klon)              :: y_flux_t1, y_flux_q1
    824     REAL, DIMENSION(klon)              :: y_dflux_t, y_dflux_q
    825 #ifdef ISO
    826     REAL, DIMENSION(ntraciso,klon)     ::  y_flux_xt1
    827     REAL, DIMENSION(ntraciso,klon)     ::  y_dflux_xt
    828 #endif
    829     REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
    830     REAL, DIMENSION(klon)              :: y_flux_bs, y_flux0
    831     REAL, DIMENSION(klon)              :: yt2m, yq2m, yu10m
    832     INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w
    833     INTEGER, DIMENSION(klon, nbsrf, 6) :: n2mout, n2mout_x, n2mout_w
    834     REAL, DIMENSION(klon)              :: yustar
    835     REAL, DIMENSION(klon)              :: ywstar
    836     REAL, DIMENSION(klon)              :: ywindsp
    837     REAL, DIMENSION(klon)              :: yt10m, yq10m
    838     REAL, DIMENSION(klon)              :: ypblh
    839     REAL, DIMENSION(klon)              :: ylcl
    840     REAL, DIMENSION(klon)              :: ycapCL
    841     REAL, DIMENSION(klon)              :: yoliqCL
    842     REAL, DIMENSION(klon)              :: ycteiCL
    843     REAL, DIMENSION(klon)              :: ypblT
    844     REAL, DIMENSION(klon)              :: ytherm
    845     REAL, DIMENSION(klon)              :: ytrmb1
    846     REAL, DIMENSION(klon)              :: ytrmb2
    847     REAL, DIMENSION(klon)              :: ytrmb3
    848     REAL, DIMENSION(klon)              :: uzon, vmer
    849     REAL, DIMENSION(klon)              :: tair1, qair1, tairsol
    850     REAL, DIMENSION(klon)              :: psfce, patm
    851     REAL, DIMENSION(klon)              :: qairsol, zgeo1, speed, zri1, pref !speed, zri1, pref, added by Fuxing WANG, 04/03/2015
    852     REAL, DIMENSION(klon)              :: yz0h_oupas
    853     REAL, DIMENSION(klon)              :: yfluxsens
    854     REAL, DIMENSION(klon)              :: AcoefH_0, AcoefQ_0, BcoefH_0, BcoefQ_0
    855     REAL, DIMENSION(klon)              :: AcoefH, AcoefQ, BcoefH, BcoefQ
    856 #ifdef ISO
    857     REAL, DIMENSION(ntraciso,klon)     :: AcoefXT, BcoefXT
    858 #endif
    859     REAL, DIMENSION(klon)              :: AcoefU, AcoefV, BcoefU, BcoefV
    860     REAL, DIMENSION(klon)              :: AcoefQBS, BcoefQBS
    861     REAL, DIMENSION(klon)              :: ypsref
    862     REAL, DIMENSION(klon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new, yicesub_lic
    863 !albedo SB >>>
    864     REAL, DIMENSION(klon,nsw)          :: yalb_dir_new, yalb_dif_new
    865 !albedo SB <<<
    866     REAL, DIMENSION(klon)              :: ztsol
    867     REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    868     REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    869     REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
    870     REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
    871     REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q, y_flux_qbs
    872     REAL, DIMENSION(klon,klev)         :: y_flux_u, y_flux_v
    873     REAL, DIMENSION(klon,klev)         :: ycoefh,ycoefm,ycoefq,ycoefqbs
    874     REAL, DIMENSION(klon)              :: ycdragh, ycdragq, ycdragm
    875     REAL, DIMENSION(klon,klev)         :: yu, yv
    876     REAL, DIMENSION(klon,klev)         :: yt, yq, yqbs
    877 #ifdef ISO
    878     REAL, DIMENSION(ntraciso,klon)      :: yxtevap
    879     REAL, DIMENSION(ntraciso,klon,klev) :: y_d_xt
    880     REAL, DIMENSION(ntraciso,klon,klev) :: y_flux_xt
    881     REAL, DIMENSION(ntraciso,klon,klev) :: yxt   
    882 #endif
    883     REAL, DIMENSION(klon,klev)         :: ypplay, ydelp
    884     REAL, DIMENSION(klon,klev)         :: delp
    885     REAL, DIMENSION(klon,klev+1)       :: ypaprs
    886     REAL, DIMENSION(klon,klev+1)       :: ytke, yeps
    887     REAL, DIMENSION(klon,nsoilmx)      :: ytsoil
    888 !FC
    889     REAL, DIMENSION(klon,nvm_lmdz)          :: yveget
    890     REAL, DIMENSION(klon,nvm_lmdz)          :: ylai
    891     REAL, DIMENSION(klon,nvm_lmdz)          :: yheight
    892     REAL, DIMENSION(klon,klev)              :: y_d_u_frein
    893     REAL, DIMENSION(klon,klev)              :: y_d_v_frein
    894     REAL, DIMENSION(klon,klev)              :: y_treedrg
    895 !FC
    896 
    897     CHARACTER(len=80)                  :: abort_message
    898     CHARACTER(len=20)                  :: modname = 'pbl_surface'
    899     LOGICAL, PARAMETER                 :: zxli=.FALSE. ! utiliser un jeu de fonctions simples
    900     LOGICAL, PARAMETER                 :: check=.FALSE.
    901 
    902 !!! nrlmd le 02/05/2011
    903 !!! jyg le 07/02/2012
    904     REAL, DIMENSION(klon)              :: ywake_s, ywake_cstar, ywake_dens
    905 !!!
    906     REAL, DIMENSION(klon,klev+1)       :: ytke_x, ytke_w, yeps_x, yeps_w
    907     REAL, DIMENSION(klon,klev+1)       :: ywake_dltke
    908     REAL, DIMENSION(klon,klev)         :: yu_x, yv_x, yu_w, yv_w
    909     REAL, DIMENSION(klon,klev)         :: yt_x, yq_x, yt_w, yq_w
    910     REAL, DIMENSION(klon,klev)         :: ycoefh_x, ycoefm_x, ycoefh_w, ycoefm_w
    911     REAL, DIMENSION(klon,klev)         :: ycoefq_x, ycoefq_w
    912     REAL, DIMENSION(klon)              :: ycdragh_x, ycdragh_w, ycdragq_x, ycdragq_w
    913     REAL, DIMENSION(klon)              :: ycdragm_x, ycdragm_w
    914     REAL, DIMENSION(klon)              :: AcoefH_x, AcoefQ_x, BcoefH_x, BcoefQ_x
    915     REAL, DIMENSION(klon)              :: AcoefH_w, AcoefQ_w, BcoefH_w, BcoefQ_w
    916     REAL, DIMENSION(klon)              :: AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x
    917     REAL, DIMENSION(klon)              :: AcoefU_w, AcoefV_w, BcoefU_w, BcoefV_w
    918     REAL, DIMENSION(klon)              :: y_flux_t1_x, y_flux_q1_x, y_flux_t1_w, y_flux_q1_w
    919     REAL, DIMENSION(klon)              :: y_flux_u1_x, y_flux_v1_x, y_flux_u1_w, y_flux_v1_w
    920     REAL, DIMENSION(klon,klev)         :: y_flux_t_x, y_flux_q_x, y_flux_t_w, y_flux_q_w
    921     REAL, DIMENSION(klon,klev)         :: y_flux_u_x, y_flux_v_x, y_flux_u_w, y_flux_v_w
    922     REAL, DIMENSION(klon)              :: yfluxlat_x, yfluxlat_w
    923     REAL, DIMENSION(klon,klev)         :: y_d_t_x, y_d_q_x, y_d_t_w, y_d_q_w
    924     REAL, DIMENSION(klon,klev)         :: y_d_t_diss_x, y_d_t_diss_w
    925     REAL, DIMENSION(klon,klev)         :: d_t_diss_x, d_t_diss_w
    926     REAL, DIMENSION(klon,klev)         :: y_d_u_x, y_d_v_x, y_d_u_w, y_d_v_w
    927     REAL, DIMENSION(klon, klev, nbsrf) :: flux_t_x, flux_q_x, flux_t_w, flux_q_w
    928     REAL, DIMENSION(klon, klev, nbsrf) :: flux_u_x, flux_v_x, flux_u_w, flux_v_w
    929     REAL, DIMENSION(klon, nbsrf)       :: fluxlat_x, fluxlat_w
    930     REAL, DIMENSION(klon, klev)        :: zxfluxt_x, zxfluxq_x, zxfluxt_w, zxfluxq_w
    931     REAL, DIMENSION(klon, klev)        :: zxfluxu_x, zxfluxv_x, zxfluxu_w, zxfluxv_w
    932     REAL                               :: zx_qs_surf, zcor_surf, zdelta_surf
    933 !jyg<
    934     REAL, DIMENSION(klon)              :: ybeta
    935     REAL, DIMENSION(klon)              :: ybeta_prev
    936 !>jyg
    937     REAL, DIMENSION(klon, klev)        :: d_u_x
    938     REAL, DIMENSION(klon, klev)        :: d_u_w
    939     REAL, DIMENSION(klon, klev)        :: d_v_x
    940     REAL, DIMENSION(klon, klev)        :: d_v_w
    941 
    942     REAL, DIMENSION(klon,klev)         :: CcoefH, CcoefQ, DcoefH, DcoefQ
    943     REAL, DIMENSION(klon,klev)         :: CcoefU, CcoefV, DcoefU, DcoefV
    944     REAL, DIMENSION(klon,klev)         :: CcoefQBS, DcoefQBS
    945     REAL, DIMENSION(klon,klev)         :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x
    946     REAL, DIMENSION(klon,klev)         :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w
    947     REAL, DIMENSION(klon,klev)         :: CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x
    948     REAL, DIMENSION(klon,klev)         :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w
    949     REAL, DIMENSION(klon,klev)         :: Kcoef_hq, Kcoef_m, gama_h, gama_q
    950     REAL, DIMENSION(klon,klev)         :: gama_qbs, Kcoef_qbs
    951     REAL, DIMENSION(klon,klev)         :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x
    952     REAL, DIMENSION(klon,klev)         :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w
    953     REAL, DIMENSION(klon)              :: alf_1, alf_2, alf_1_x, alf_2_x, alf_1_w, alf_2_w
    954 #ifdef ISO
    955     REAL, DIMENSION(ntraciso,klon,klev)         :: yxt_x, yxt_w
    956     REAL, DIMENSION(ntraciso,klon)              :: y_flux_xt1_x , y_flux_xt1_w   
    957     REAL, DIMENSION(ntraciso,klon,klev)         :: y_flux_xt_x,y_d_xt_x,zxfluxxt_x
    958     REAL, DIMENSION(ntraciso,klon,klev)         :: y_flux_xt_w,y_d_xt_w,zxfluxxt_w
    959     REAL, DIMENSION(ntraciso,klon,klev,nbsrf)   :: flux_xt_x, flux_xt_w
    960     REAL, DIMENSION(ntraciso,klon)              :: AcoefXT_x, BcoefXT_x
    961     REAL, DIMENSION(ntraciso,klon)              :: AcoefXT_w, BcoefXT_w
    962     REAL, DIMENSION(ntraciso,klon,klev)         :: CcoefXT, DcoefXT
    963     REAL, DIMENSION(ntraciso,klon,klev)         :: CcoefXT_x, DcoefXT_x
    964     REAL, DIMENSION(ntraciso,klon,klev)         :: CcoefXT_w, DcoefXT_w
    965     REAL, DIMENSION(ntraciso,klon,klev)         :: gama_xt,gama_xt_x,gama_xt_w
    966 #endif
    967 !!!
    968 !!!jyg le 08/02/2012
    969     REAL, DIMENSION(klon, nbsrf)       :: windsp
    970 !
    971     REAL, DIMENSION(klon, nbsrf)       :: t2m_x
    972     REAL, DIMENSION(klon, nbsrf)       :: q2m_x
    973     REAL, DIMENSION(klon)              :: rh2m_x
    974     REAL, DIMENSION(klon)              :: qsat2m_x
    975     REAL, DIMENSION(klon, nbsrf)       :: u10m_x
    976     REAL, DIMENSION(klon, nbsrf)       :: v10m_x
    977     REAL, DIMENSION(klon, nbsrf)       :: ustar_x
    978     REAL, DIMENSION(klon, nbsrf)       :: wstar_x
    979 !             
    980     REAL, DIMENSION(klon, nbsrf)       :: pblh_x
    981     REAL, DIMENSION(klon, nbsrf)       :: plcl_x
    982     REAL, DIMENSION(klon, nbsrf)       :: capCL_x
    983     REAL, DIMENSION(klon, nbsrf)       :: oliqCL_x
    984     REAL, DIMENSION(klon, nbsrf)       :: cteiCL_x
    985     REAL, DIMENSION(klon, nbsrf)       :: pblt_x
    986     REAL, DIMENSION(klon, nbsrf)       :: therm_x
    987     REAL, DIMENSION(klon, nbsrf)       :: trmb1_x
    988     REAL, DIMENSION(klon, nbsrf)       :: trmb2_x
    989     REAL, DIMENSION(klon, nbsrf)       :: trmb3_x
    990 !
    991     REAL, DIMENSION(klon, nbsrf)       :: t2m_w
    992     REAL, DIMENSION(klon, nbsrf)       :: q2m_w
    993     REAL, DIMENSION(klon)              :: rh2m_w
    994     REAL, DIMENSION(klon)              :: qsat2m_w
    995     REAL, DIMENSION(klon, nbsrf)       :: u10m_w
    996     REAL, DIMENSION(klon, nbsrf)       :: v10m_w
    997     REAL, DIMENSION(klon, nbsrf)       :: ustar_w
    998     REAL, DIMENSION(klon, nbsrf)       :: wstar_w
    999 !                           
    1000     REAL, DIMENSION(klon, nbsrf)       :: pblh_w
    1001     REAL, DIMENSION(klon, nbsrf)       :: plcl_w
    1002     REAL, DIMENSION(klon, nbsrf)       :: capCL_w
    1003     REAL, DIMENSION(klon, nbsrf)       :: oliqCL_w
    1004     REAL, DIMENSION(klon, nbsrf)       :: cteiCL_w
    1005     REAL, DIMENSION(klon, nbsrf)       :: pblt_w
    1006     REAL, DIMENSION(klon, nbsrf)       :: therm_w
    1007     REAL, DIMENSION(klon, nbsrf)       :: trmb1_w
    1008     REAL, DIMENSION(klon, nbsrf)       :: trmb2_w
    1009     REAL, DIMENSION(klon, nbsrf)       :: trmb3_w
    1010 !
    1011     REAL, DIMENSION(klon)       :: yt2m_x
    1012     REAL, DIMENSION(klon)       :: yq2m_x
    1013     REAL, DIMENSION(klon)       :: yt10m_x
    1014     REAL, DIMENSION(klon)       :: yq10m_x
    1015     REAL, DIMENSION(klon)       :: yu10m_x
    1016     REAL, DIMENSION(klon)       :: yv10m_x
    1017     REAL, DIMENSION(klon)       :: yustar_x
    1018     REAL, DIMENSION(klon)       :: ywstar_x
    1019 !             
    1020     REAL, DIMENSION(klon)       :: ypblh_x
    1021     REAL, DIMENSION(klon)       :: ylcl_x
    1022     REAL, DIMENSION(klon)       :: ycapCL_x
    1023     REAL, DIMENSION(klon)       :: yoliqCL_x
    1024     REAL, DIMENSION(klon)       :: ycteiCL_x
    1025     REAL, DIMENSION(klon)       :: ypblt_x
    1026     REAL, DIMENSION(klon)       :: ytherm_x
    1027     REAL, DIMENSION(klon)       :: ytrmb1_x
    1028     REAL, DIMENSION(klon)       :: ytrmb2_x
    1029     REAL, DIMENSION(klon)       :: ytrmb3_x
    1030 !
    1031     REAL, DIMENSION(klon)       :: yt2m_w
    1032     REAL, DIMENSION(klon)       :: yq2m_w
    1033     REAL, DIMENSION(klon)       :: yt10m_w
    1034     REAL, DIMENSION(klon)       :: yq10m_w
    1035     REAL, DIMENSION(klon)       :: yu10m_w
    1036     REAL, DIMENSION(klon)       :: yv10m_w
    1037     REAL, DIMENSION(klon)       :: yustar_w
    1038     REAL, DIMENSION(klon)       :: ywstar_w
    1039 !                       
    1040     REAL, DIMENSION(klon)       :: ypblh_w
    1041     REAL, DIMENSION(klon)       :: ylcl_w
    1042     REAL, DIMENSION(klon)       :: ycapCL_w
    1043     REAL, DIMENSION(klon)       :: yoliqCL_w
    1044     REAL, DIMENSION(klon)       :: ycteiCL_w
    1045     REAL, DIMENSION(klon)       :: ypblt_w
    1046     REAL, DIMENSION(klon)       :: ytherm_w
    1047     REAL, DIMENSION(klon)       :: ytrmb1_w
    1048     REAL, DIMENSION(klon)       :: ytrmb2_w
    1049     REAL, DIMENSION(klon)       :: ytrmb3_w
    1050 !
    1051     REAL, DIMENSION(klon)       :: uzon_x, vmer_x, speed_x, zri1_x, pref_x !speed_x, zri1_x, pref_x, added by Fuxing WANG, 04/03/2015
    1052     REAL, DIMENSION(klon)       :: zgeo1_x, tair1_x, qair1_x, tairsol_x
    1053 !
    1054     REAL, DIMENSION(klon)       :: uzon_w, vmer_w, speed_w, zri1_w, pref_w !speed_w, zri1_w, pref_w, added by Fuxing WANG, 04/03/2015
    1055     REAL, DIMENSION(klon)       :: zgeo1_w, tair1_w, qair1_w, tairsol_w
    1056     REAL, DIMENSION(klon)       :: yus0, yvs0
    1057 
    1058 !!! jyg le 25/03/2013
    1059 !!    Variables intermediaires pour le raccord des deux colonnes \`a la surface
    1060 !jyg<
    1061 !!    REAL   ::   dd_Ch
    1062 !!    REAL   ::   dd_Cm
    1063 !!    REAL   ::   dd_Kh
    1064 !!    REAL   ::   dd_Km
    1065 !!    REAL   ::   dd_u
    1066 !!    REAL   ::   dd_v
    1067 !!    REAL   ::   dd_t
    1068 !!    REAL   ::   dd_q
    1069 !!    REAL   ::   dd_AH
    1070 !!    REAL   ::   dd_AQ
    1071 !!    REAL   ::   dd_AU
    1072 !!    REAL   ::   dd_AV
    1073 !!    REAL   ::   dd_BH
    1074 !!    REAL   ::   dd_BQ
    1075 !!    REAL   ::   dd_BU
    1076 !!    REAL   ::   dd_BV
    1077 !!
    1078 !!    REAL   ::   dd_KHp
    1079 !!    REAL   ::   dd_KQp
    1080 !!    REAL   ::   dd_KUp
    1081 !!    REAL   ::   dd_KVp
    1082 !>jyg
    1083 
    1084 !!!
    1085 !!! nrlmd le 13/06/2011
    1086     REAL, DIMENSION(klon)              :: y_delta_flux_t1, y_delta_flux_q1, y_delta_flux_u1, y_delta_flux_v1
    1087     REAL, DIMENSION(klon)              :: y_delta_tsurf, y_delta_tsurf_new
    1088     REAL, DIMENSION(klon)              :: delta_coef, tau_eq
    1089     REAL, DIMENSION(klon)              :: HTphiT_b, dd_HTphiT, HTphiQ_b, dd_HTphiQ, HTRn_b, dd_HTRn
    1090     REAL, DIMENSION(klon)              :: phiT0_b, dphiT0, phiQ0_b, dphiQ0, Rn0_b, dRn0
    1091     REAL, DIMENSION(klon)              :: y_delta_qsurf
    1092     REAL, DIMENSION(klon)              :: y_delta_qsats
    1093     REAL, DIMENSION(klon)              :: yg_T, yg_Q
    1094     REAL, DIMENSION(klon)              :: yGamma_dTs_phiT, yGamma_dQs_phiQ
    1095     REAL, DIMENSION(klon)              :: ydTs_ins, ydqs_ins
    1096 !
    1097     REAL, PARAMETER                    :: facteur=2./sqrt(3.14)
    1098     REAL, PARAMETER                    :: inertia=2000.
    1099     REAL, DIMENSION(klon)              :: ydtsurf_th
    1100     REAL                               :: zdelta_surf_x,zdelta_surf_w,zx_qs_surf_x,zx_qs_surf_w
    1101     REAL                               :: zcor_surf_x,zcor_surf_w
    1102     REAL                               :: mod_wind_x, mod_wind_w
    1103     REAL                               :: rho1
    1104     REAL, DIMENSION(klon)              :: Kech_h           ! Coefficient d'echange pour l'energie
    1105     REAL, DIMENSION(klon)              :: Kech_h_x, Kech_h_w
    1106     REAL, DIMENSION(klon)              :: Kech_m
    1107     REAL, DIMENSION(klon)              :: Kech_m_x, Kech_m_w
    1108     REAL, DIMENSION(klon)              :: yts_x, yts_w
    1109     REAL, DIMENSION(klon)              :: yqsatsrf0_x, yqsatsrf0_w
    1110     REAL, DIMENSION(klon)              :: yqsurf_x, yqsurf_w
    1111 !jyg<
    1112 !!    REAL, DIMENSION(klon)              :: Kech_Hp, Kech_H_xp, Kech_H_wp
    1113 !!    REAL, DIMENSION(klon)              :: Kech_Qp, Kech_Q_xp, Kech_Q_wp
    1114 !!    REAL, DIMENSION(klon)              :: Kech_Up, Kech_U_xp, Kech_U_wp
    1115 !!    REAL, DIMENSION(klon)              :: Kech_Vp, Kech_V_xp, Kech_V_wp
    1116 !>jyg
    1117 
    1118     REAL                               :: fact_cdrag
    1119     REAL                               :: z1lay
    1120 
    1121     REAL                               :: vent
    1122 !
    1123 ! For debugging with IOIPSL
    1124     INTEGER, DIMENSION(nbp_lon*nbp_lat)    :: ndexbg
    1125     REAL                               :: zjulian
    1126     REAL, DIMENSION(klon)              :: tabindx
    1127     REAL, DIMENSION(nbp_lon,nbp_lat)         :: zx_lon, zx_lat
    1128     REAL, DIMENSION(nbp_lon,nbp_lat)         :: debugtab
    1129 
    1130 
    1131     REAL, DIMENSION(klon,nbsrf)        :: pblh         ! height of the planetary boundary layer
    1132     REAL, DIMENSION(klon,nbsrf)        :: plcl         ! condensation level
    1133     REAL, DIMENSION(klon,nbsrf)        :: capCL
    1134     REAL, DIMENSION(klon,nbsrf)        :: oliqCL
    1135     REAL, DIMENSION(klon,nbsrf)        :: cteiCL
    1136     REAL, DIMENSION(klon,nbsrf)        :: pblT
    1137     REAL, DIMENSION(klon,nbsrf)        :: therm
    1138     REAL, DIMENSION(klon,nbsrf)        :: trmb1        ! deep cape
    1139     REAL, DIMENSION(klon,nbsrf)        :: trmb2        ! inhibition
    1140     REAL, DIMENSION(klon,nbsrf)        :: trmb3        ! point Omega
    1141     REAL, DIMENSION(klon,nbsrf)        :: zx_rh2m, zx_qsat2m
    1142     REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    1143     REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
    1144     REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    1145     REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    1146     REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
    1147 
    1148     REAL                               :: zx_qs1, zcor1, zdelta1
    1149 
    1150     ! Martin
    1151     REAL, DIMENSION(klon, nbsrf)       :: sollwd ! net longwave radiation at surface
    1152     REAL, DIMENSION(klon)              :: ytoice
    1153     REAL, DIMENSION(klon)              :: ysnowhgt, yqsnow, ysissnow, yrunoff
    1154     REAL, DIMENSION(klon)              :: yzmea
    1155     REAL, DIMENSION(klon)              :: yzsig
    1156     REAL, DIMENSION(klon)              :: ycldt
    1157     REAL, DIMENSION(klon)              :: yrmu0
    1158     ! Martin
    1159     REAL, DIMENSION(klon)              :: yri0
    1160 
    1161     REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, &
    1162          ydser, ydt_ds, ytkt, ytks, ytaur, ysss
    1163     ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser,
    1164     ! dt_ds, tkt, tks, taur, sss on ocean points
    1165     REAL :: missing_val
    1166 
    1167     ! GG
    1168     REAL, DIMENSION(klon,klev)         :: ytheta
    1169     REAL, DIMENSION(klon,klev)         :: ypphii
    1170     REAL, DIMENSION(klon,klev)         :: ypphi
    1171     REAL, DIMENSION(klon,klev)         :: ydthetadz
    1172     REAL, DIMENSION(klon)              :: ydthetadz300
    1173     REAL, DIMENSION(klon)              :: Ampl
    1174     ! GG
    1175 
    1176     ! AM !
    1177     REAL, DIMENSION(klon) ::  albedo_eff
    1178     REAL, DIMENSION(klon, nbtersrf) :: yfrac_tersrf, yz0m_tersrf, yz0h_tersrf
    1179 #ifdef ISO
    1180     REAL, DIMENSION(klon)       :: h1
    1181     INTEGER                     :: ixt
    1182 !#ifdef ISOVERIF
    1183 !    integer iso_verif_positif_nostop
    1184 !#endif   
    1185 #endif
    1186 
    1187 !****************************************************************************************
    1188 ! End of declarations
    1189 !****************************************************************************************
    1190       IF (using_xios) THEN
    1191         missing_val=missing_val_xios
    1192       ELSE
    1193         missing_val=missing_val_netcdf
    1194       ENDIF
    1195 
    1196       IF (prt_level >=10) print *,' -> pbl_surface, itap ',itap
    1197 !
    1198 !!jyg      iflag_split = mod(iflag_pbl_split,2)
    1199 !!jyg      iflag_split = mod(iflag_pbl_split,10)
    1200 !
    1201 ! Flags controlling the splitting of the turbulent boundary layer:
    1202 !   iflag_split_ref = 0  ==> no splitting
    1203 !                   = 1  ==> splitting without coupling with surface temperature
    1204 !                   = 2  ==> splitting with coupling with surface temperature over land
    1205 !                   = 3  ==> splitting over ocean; no splitting over land
    1206 !   iflag_split: actual flag controlling the splitting.
    1207 !   iflag_split = iflag_split_ref outside the sub-surface loop
    1208 !               = iflag_split_ref if iflag_split_ref = 0, 1, or 2
    1209 !               = 0 over land  if iflga_split_ref = 3
    1210 !               = 1 over ocean if iflga_split_ref = 3
    1211 
    1212       iflag_split_ref = mod(iflag_pbl_split,10)
    1213       iflag_split = iflag_split_ref
    1214 
    1215 #ifdef ISO     
    1216 #ifdef ISOVERIF
    1217       DO i=1,klon
    1218         DO ixt=1,niso
    1219           CALL iso_verif_noNaN(xtsol(ixt,i),'pbl_surface 608')
    1220         ENDDO
    1221       ENDDO
    1222 #endif
    1223 #ifdef ISOVERIF
    1224       DO i=1,klon 
    1225         IF (iso_eau >= 0) THEN 
    1226           CALL iso_verif_egalite_choix(Rland_ice(iso_eau,i),1.0, &
    1227      &         'pbl_surf_mod 585',errmax,errmaxrel)
    1228           CALL iso_verif_egalite_choix(xtsnow_f(iso_eau,i),snow_f(i), &
    1229      &         'pbl_surf_mod 594',errmax,errmaxrel)
    1230           IF (iso_verif_egalite_choix_nostop(xtsol(iso_eau,i),qsol(i), &
    1231      &         'pbl_surf_mod 596',errmax,errmaxrel) == 1) THEN
    1232                 WRITE(*,*) 'i=',i
    1233                 STOP
    1234           ENDIF
    1235           DO nsrf=1,nbsrf
    1236             CALL iso_verif_egalite_choix(xtsnow(iso_eau,i,nsrf),snow(i,nsrf), &
    1237      &         'pbl_surf_mod 598',errmax,errmaxrel)
    1238           ENDDO
    1239         ENDIF !IF (iso_eau >= 0) THEN   
    1240       ENDDO !DO i=1,knon 
    1241       DO k=1,klev
    1242         DO i=1,klon 
    1243           IF (iso_eau >= 0) THEN 
    1244             CALL iso_verif_egalite_choix(xt(iso_eau,i,k),q(i,k), &
    1245      &           'pbl_surf_mod 595',errmax,errmaxrel)
    1246           ENDIF !IF (iso_eau >= 0) THEN 
    1247         ENDDO !DO i=1,knon 
    1248       ENDDO !DO k=1,klev
    1249 #endif
    1250 #endif
    1251 
    1252 
    1253          
    1254 !****************************************************************************************
    1255 ! Force soil water content to qsol0 if qsol0>0 and VEGET=F (use bucket
    1256 ! instead of ORCHIDEE)
    1257     IF (qsol0>=0.) THEN
    1258       PRINT*,'WARNING : On impose qsol=',qsol0
    1259       qsol(:)=qsol0
    1260 #ifdef ISO
    1261       DO ixt=1,niso
    1262         xtsol(ixt,:)=qsol0*Rdefault(ixt)
    1263       ENDDO
    1264 #ifdef ISOTRAC     
    1265       DO ixt=1+niso,ntraciso
    1266         xtsol(ixt,:)=qsol0*Rdefault(index_iso(ixt))
    1267       ENDDO
    1268 #endif       
    1269 #endif
    1270     ENDIF
    1271 !****************************************************************************************
    1272 
    1273 !****************************************************************************************
    1274 ! 2) Initialization to zero
    1275 !****************************************************************************************
    1276 !
    1277 ! 2a) Initialization of all argument variables with INTENT(OUT)
    1278 !****************************************************************************************
    1279  cdragh(:)=0. ; cdragm(:)=0.
    1280  zu1(:)=0. ; zv1(:)=0.
    1281  yus0(:)=0. ; yvs0(:)=0.
    1282 !albedo SB >>>
    1283   alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    1284 !albedo SB <<<
    1285  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    1286  d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    1287  zxfluxlat(:)=0.
    1288  zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    1289  zn2mout(:,:)=0 ;
    1290  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    1291  zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    1292  zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
    1293  cdragh_x(:)=0. ; cdragh_w(:)=0. ; cdragm_x(:)=0. ; cdragm_w(:)=0.
    1294  kh(:)=0. ; kh_x(:)=0. ; kh_w(:)=0.
    1295  slab_wfbils(:)=0.
    1296  s_pblh(:)=0. ; s_pblh_x(:)=0. ; s_pblh_w(:)=0.
    1297  s_plcl(:)=0. ; s_plcl_x(:)=0. ; s_plcl_w(:)=0.
    1298  s_capCL(:)=0. ; s_oliqCL(:)=0. ; s_cteiCL(:)=0. ; s_pblT(:)=0.
    1299  s_therm(:)=0.
    1300  s_trmb1(:)=0. ; s_trmb2(:)=0. ; s_trmb3(:)=0.
    1301  zustar(:)=0.
    1302  zu10m(:)=0. ; zv10m(:)=0.
    1303  fder_print(:)=0.
    1304  zxqsurf(:)=0.
    1305  delta_qsurf(:) = 0.
    1306  zxfluxu(:,:)=0. ; zxfluxv(:,:)=0.
    1307  solsw(:,:)=0. ; sollw(:,:)=0.
    1308  d_ts(:,:)=0.
    1309  evap(:,:)=0.
    1310  snowerosion(:,:)=0.
    1311  fluxlat(:,:)=0.
    1312  wfbils(:,:)=0. ; wfevap(:,:)=0. ;
    1313  flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
    1314  flux_qbs(:,:,:)=0.
    1315  dflux_t(:)=0. ; dflux_q(:)=0.
    1316  zxsnow(:)=0.
    1317  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    1318  qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    1319  runoff(:)=0. ; icesub_lic(:)=0.
    1320 #ifdef ISO
    1321 zxxtevap(:,:)=0.
    1322  d_xt(:,:,:)=0.
    1323  d_xt_x(:,:,:)=0.
    1324  d_xt_w(:,:,:)=0.
    1325  flux_xt(:,:,:,:)=0.
    1326 ! xtsnow(:,:,:)=0.! attention, xtsnow est l'équivalent de snow et non de qsnow
    1327  xtevap(:,:,:)=0.
    1328 #endif
    1329     IF (iflag_pbl<20.or.iflag_pbl>=30) THEN
    1330        zcoefh(:,:,:) = 0.0
    1331        zcoefh(:,1,:) = 999999. ! zcoefh(:,k=1) should never be used
    1332        zcoefm(:,:,:) = 0.0
    1333        zcoefm(:,1,:) = 999999. !
    1334     ELSE
    1335       zcoefm(:,:,is_ave)=0.
    1336       zcoefh(:,:,is_ave)=0.
    1337     ENDIF
    1338 !!
    1339 !  The components "is_ave" of tke_x and wake_deltke are "OUT" variables
    1340 !jyg<
    1341 !!    tke(:,:,is_ave)=0.
    1342     tke_x(:,:,is_ave)=0.
    1343     eps_x(:,:,is_ave)=0.
    1344 
    1345     wake_dltke(:,:,is_ave)=0.
    1346 !>jyg
    1347 !!! jyg le 23/02/2013
    1348     t2m(:,:)       = 999999.     ! t2m and q2m are meaningfull only over sub-surfaces
    1349     q2m(:,:)       = 999999.     ! actually present in the grid cell.
    1350 !!!
    1351     rh2m(:) = 0. ; qsat2m(:) = 0.
    1352 !!!
    1353 !!! jyg le 10/02/2012
    1354     rh2m_x(:) = 0. ; qsat2m_x(:) = 0. ; rh2m_w(:) = 0. ; qsat2m_w(:) = 0.
    1355 
    1356 ! 2b) Initialization of all local variables that will be compressed later
    1357 !****************************************************************************************
    1358 !!    cdragh = 0.0  ; cdragm = 0.0     ; dflux_t = 0.0   ; dflux_q = 0.0
    1359     ypct = 0.0    ; yts = 0.0        ; ysnow = 0.0
    1360 !!    zv1 = 0.0     ; yqsurf = 0.0
    1361 !albedo SB >>>
    1362     yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    1363 !albedo SB <<<
    1364     yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    1365     ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yz0h_oupas = 0.0 ; yu1 = 0.0   
    1366     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    1367     ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    1368     yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
    1369     yqbs(:,:)=0.0 
    1370     yrugoro = 0.0 ; ywindsp = 0.0   
    1371 !!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1372     yfluxlat=0.0 ; y_flux0(:)=0.0
    1373 !!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    1374 !!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
    1375     yqsol = 0.0   
    1376 
    1377     ytke=0.
    1378     yeps=0.
    1379     yri0(:)=0.
    1380 !FC
    1381     y_treedrg=0.
    1382 
    1383     ! Martin
    1384     ysnowhgt = 0.0; yqsnow = 0.0     ; yrunoff = 0.0   ; ytoice =0.0
    1385     yalb3_new = 0.0  ; ysissnow = 0.0
    1386     ycldt = 0.0      ; yrmu0 = 0.0
    1387     ! Martin
    1388     y_d_qbs(:,:)=0.0
    1389 
    1390 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    1391     ytke_x=0.     ; ytke_w=0.        ; ywake_dltke=0.
    1392     yeps_x=0.     ; yeps_w=0.
    1393     y_d_t_x=0.    ; y_d_t_w=0.       ; y_d_q_x=0.      ; y_d_q_w=0.
    1394 !!    d_t_w=0.      ; d_q_w=0.         
    1395 !!    d_t_x=0.      ; d_q_x=0.
    1396 !!    d_wake_dlt=0.    ; d_wake_dlq=0.
    1397     yfluxlat_x=0. ; yfluxlat_w=0.
    1398     ywake_s=0.    ; ywake_cstar=0.   ;ywake_dens=0.
    1399 !!!
    1400 !!! nrlmd le 13/06/2011
    1401     tau_eq=0.     ; delta_coef=0.
    1402     y_delta_flux_t1=0.
    1403     ydtsurf_th=0.
    1404     yts_x(:)=0.      ; yts_w(:)=0.
    1405     y_delta_tsurf(:)=0. ; y_delta_qsurf(:)=0.
    1406     yqsurf_x(:)=0.      ; yqsurf_w(:)=0.
    1407     yg_T(:) = 0. ;        yg_Q(:) = 0.
    1408     yGamma_dTs_phiT(:) = 0. ; yGamma_dQs_phiQ(:) = 0.
    1409     ydTs_ins(:) = 0. ; ydqs_ins(:) = 0.
    1410 
    1411 !!!
    1412     ytsoil = 999999.
    1413 !FC
    1414     y_d_u_frein(:,:)=0.
    1415     y_d_v_frein(:,:)=0.
    1416 !FC
    1417 
    1418 #ifdef ISO
    1419    yxtrain_f = 0.0 ; yxtsnow_f = 0.0
    1420    yxtsnow  = 0.0
    1421    yxt = 0.0
    1422    yxtsol = 0.0
    1423    flux_xt = 0.0
    1424    yRland_ice = 0.0
    1425 !   d_xt = 0.0     
    1426    y_dflux_xt = 0.0 
    1427    dflux_xt=0.0
    1428    y_d_xt_x=0.      ; y_d_xt_w=0.       
    1429 #endif
    1430 
    1431 ! >> PC
    1432 !the yfields_out variable is defined in (klon,nbcf_out) even if it is used on
    1433 !the ORCHIDEE grid and as such should be defined in yfields_out(knon,nbcf_out) but
    1434 !the knon variable is not known at that level of pbl_surface_mod
    1435 
    1436 !the yfields_in variable is defined in (klon,nbcf_in) even if it is used on the
    1437 !ORCHIDEE grid and as such should be defined in yfields_in(knon,nbcf_in) but the
    1438 !knon variable is not known at that level of pbl_surface_mod
    1439 
    1440    yfields_out(:,:) = 0.
    1441 ! << PC
    1442 
    1443 !GG
    1444   ypphi = 0.0 
    1445 !GG
    1446 
    1447 
    1448 ! 2c) Initialization of all local variables computed within the subsurface loop and used later on
    1449 !****************************************************************************************
    1450     d_t_diss_x(:,:) = 0. ;        d_t_diss_w(:,:) = 0.
    1451     d_u_x(:,:)=0. ;               d_u_w(:,:)=0.
    1452     d_v_x(:,:)=0. ;               d_v_w(:,:)=0.
    1453     flux_t_x(:,:,:)=0. ;          flux_t_w(:,:,:)=0.
    1454     flux_q_x(:,:,:)=0. ;          flux_q_w(:,:,:)=0.
    1455 !
    1456 !jyg<
    1457     flux_u_x(:,:,:)=0. ;          flux_u_w(:,:,:)=0.
    1458     flux_v_x(:,:,:)=0. ;          flux_v_w(:,:,:)=0.
    1459     fluxlat_x(:,:)=0. ;           fluxlat_w(:,:)=0.
    1460 !>jyg
    1461 #ifdef ISO
    1462     flux_xt_x(:,:,:,:)=0. ;          flux_xt_w(:,:,:,:)=0.
    1463 #endif
    1464 !
    1465 !jyg<
    1466 ! pblh,plcl,capCL,cteiCL ... are meaningfull only over sub-surfaces
    1467 ! actually present in the grid cell  ==> value set to 999999.
    1468 !                           
    1469 !jyg<
    1470        ustar(:,:)   = 999999.
    1471        wstar(:,:)   = 999999.
    1472        windsp(:,:)  = SQRT(u10m(:,:)**2 + v10m(:,:)**2 )
    1473        u10m(:,:)    = 999999.
    1474        v10m(:,:)    = 999999.
    1475 !>jyg
    1476 !
    1477        pblh(:,:)   = 999999.        ! Hauteur de couche limite
    1478        plcl(:,:)   = 999999.        ! Niveau de condensation de la CLA
    1479        capCL(:,:)  = 999999.        ! CAPE de couche limite
    1480        oliqCL(:,:) = 999999.        ! eau_liqu integree de couche limite
    1481        cteiCL(:,:) = 999999.        ! cloud top instab. crit. couche limite
    1482        pblt(:,:)   = 999999.        ! T a la Hauteur de couche limite
    1483        therm(:,:)  = 999999.
    1484        trmb1(:,:)  = 999999.        ! deep_cape
    1485        trmb2(:,:)  = 999999.        ! inhibition
    1486        trmb3(:,:)  = 999999.        ! Point Omega
    1487 !
    1488        t2m_x(:,:)    = 999999.
    1489        q2m_x(:,:)    = 999999.
    1490        ustar_x(:,:)   = 999999.
    1491        wstar_x(:,:)   = 999999.
    1492        u10m_x(:,:)   = 999999.
    1493        v10m_x(:,:)   = 999999.
    1494 !                           
    1495        pblh_x(:,:)   = 999999.      ! Hauteur de couche limite
    1496        plcl_x(:,:)   = 999999.      ! Niveau de condensation de la CLA
    1497        capCL_x(:,:)  = 999999.      ! CAPE de couche limite
    1498        oliqCL_x(:,:) = 999999.      ! eau_liqu integree de couche limite
    1499        cteiCL_x(:,:) = 999999.      ! cloud top instab. crit. couche limite
    1500        pblt_x(:,:)   = 999999.      ! T a la Hauteur de couche limite
    1501        therm_x(:,:)  = 999999.     
    1502        trmb1_x(:,:)  = 999999.      ! deep_cape
    1503        trmb2_x(:,:)  = 999999.      ! inhibition
    1504        trmb3_x(:,:)  = 999999.      ! Point Omega
    1505 !
    1506        t2m_w(:,:)    = 999999.
    1507        q2m_w(:,:)    = 999999.
    1508        ustar_w(:,:)   = 999999.
    1509        wstar_w(:,:)   = 999999.
    1510        u10m_w(:,:)   = 999999.
    1511        v10m_w(:,:)   = 999999.
    1512                            
    1513        pblh_w(:,:)   = 999999.      ! Hauteur de couche limite
    1514        plcl_w(:,:)   = 999999.      ! Niveau de condensation de la CLA
    1515        capCL_w(:,:)  = 999999.      ! CAPE de couche limite
    1516        oliqCL_w(:,:) = 999999.      ! eau_liqu integree de couche limite
    1517        cteiCL_w(:,:) = 999999.      ! cloud top instab. crit. couche limite
    1518        pblt_w(:,:)   = 999999.      ! T a la Hauteur de couche limite
    1519        therm_w(:,:)  = 999999.     
    1520        trmb1_w(:,:)  = 999999.      ! deep_cape
    1521        trmb2_w(:,:)  = 999999.      ! inhibition
    1522        trmb3_w(:,:)  = 999999.      ! Point Omega
    1523 !!!     
    1524 !
    1525 !!!
    1526 !****************************************************************************************
    1527 ! 3) - Calculate pressure thickness of each layer
    1528 !    - Calculate the wind at first layer
    1529 !    - Mean calculations of albedo
    1530 !    - Calculate net radiance at sub-surface
    1531 !****************************************************************************************
    1532     DO k = 1, klev
    1533        DO i = 1, klon
    1534           delp(i,k) = paprs(i,k)-paprs(i,k+1)
    1535        ENDDO
    1536     ENDDO
    1537 
    1538 !****************************************************************************************
    1539 ! Test for rugos........ from physiq.. A la fin plutot???
    1540 !
    1541 !****************************************************************************************
    1542 
    1543     DO nsrf = 1, nbsrf
    1544        DO i = 1, klon
    1545           z0m(i,nsrf) = MAX(z0m(i,nsrf),z0min)
    1546           z0h(i,nsrf) = MAX(z0h(i,nsrf),z0min)
    1547        ENDDO
    1548     ENDDO
    1549 
    1550     ! AM heterogeneous continental subsurfaces
    1551     ! compute time-independent effective surface parameters
    1552     IF (iflag_hetero_surf .GT. 0) THEN
    1553       CALL eff_surf_param(klon, nbtersrf, albedo_tersrf, frac_tersrf, 'ARI', albedo_eff)
    1554     ENDIF
    1555 
    1556 ! Mean calculations of albedo
    1557 !
    1558 ! * alb  : mean albedo for whole SW interval
    1559 !
    1560 ! Mean albedo for grid point
    1561 ! * alb_m  : mean albedo at whole SW interval
    1562 
    1563     alb_dir_m(:,:) = 0.0
    1564     alb_dif_m(:,:) = 0.0
    1565     DO k = 1, nsw
    1566      DO nsrf = 1, nbsrf
    1567        DO i = 1, klon
    1568           ! AM heterogeneous continental sub-surfaces
    1569           IF (nsrf .EQ. is_ter .AND. iflag_hetero_surf .GT. 0) THEN
    1570             alb_dir(i,k,nsrf) = albedo_eff(i)
    1571             alb_dif(i,k,nsrf) = albedo_eff(i)
    1572           ENDIF
    1573           !
    1574           alb_dir_m(i,k) = alb_dir_m(i,k) + alb_dir(i,k,nsrf) * pctsrf(i,nsrf)
    1575           alb_dif_m(i,k) = alb_dif_m(i,k) + alb_dif(i,k,nsrf) * pctsrf(i,nsrf)
    1576        ENDDO
    1577      ENDDO
    1578     ENDDO
    1579 
    1580 ! We here suppose the fraction f1 of incoming radiance of visible radiance
    1581 ! as a fraction of all shortwave radiance
    1582     f1 = 0.5
    1583 !    f1 = 1    ! put f1=1 to recreate old calculations
    1584 
    1585 !f1 is already included with SFRWL values in each surf files
    1586     alb=0.0
    1587     DO k=1,nsw
    1588       DO nsrf = 1, nbsrf
    1589         DO i = 1, klon
    1590             alb(i,nsrf) = alb(i,nsrf) + alb_dir(i,k,nsrf)*SFRWL(k)
    1591         ENDDO
    1592       ENDDO
    1593     ENDDO
    1594 
    1595     alb_m=0.0
    1596     DO k = 1,nsw
    1597       DO i = 1, klon
    1598         alb_m(i) = alb_m(i) + alb_dir_m(i,k)*SFRWL(k)
    1599       ENDDO
    1600     ENDDO
    1601 !albedo SB <<<
    1602 
    1603 
    1604 
    1605 ! Calculation of mean temperature at surface grid points
    1606     ztsol(:) = 0.0
    1607     DO nsrf = 1, nbsrf
    1608        DO i = 1, klon
    1609           ztsol(i) = ztsol(i) + ts(i,nsrf)*pctsrf(i,nsrf)
    1610        ENDDO
    1611     ENDDO
    1612 
    1613 ! Linear distrubution on sub-surface of long- and shortwave net radiance
    1614     DO nsrf = 1, nbsrf
    1615        DO i = 1, klon
    1616           sollw(i,nsrf) = sollw_m(i) + 4.0*RSIGMA*ztsol(i)**3 * (ztsol(i)-ts(i,nsrf))
    1617 !--OB this line is not satisfactory because alb is the direct albedo not total albedo
    1618           solsw(i,nsrf) = solsw_m(i) * (1.-alb(i,nsrf)) / (1.-alb_m(i))
    1619        ENDDO
    1620     ENDDO
    1621 !
    1622 !<al1: second order corrections
    1623 !- net = dwn -up; up=sig( T4 + 4sum%T3T' + 6sum%T2T'2 +...)
    1624    IF (iflag_order2_sollw == 1) THEN
    1625     meansqT(:) = 0. ! as working buffer
    1626     DO nsrf = 1, nbsrf
    1627      DO i = 1, klon
    1628       meansqT(i) = meansqT(i)+(ts(i,nsrf)-ztsol(i))**2 *pctsrf(i,nsrf)
    1629      ENDDO
    1630     ENDDO
    1631     DO nsrf = 1, nbsrf
    1632      DO i = 1, klon
    1633       sollw(i,nsrf) = sollw(i,nsrf) &
    1634                 + 6.0*RSIGMA*ztsol(i)**2 *(meansqT(i)-(ztsol(i)-ts(i,nsrf))**2)
    1635      ENDDO
    1636     ENDDO
    1637    ENDIF   ! iflag_order2_sollw == 1
    1638 !>al1
    1639 
    1640 !--OB add diffuse fraction of SW down
    1641    DO n=1,nbcf_out
    1642        IF (cfname_out(n) == "swdownfdiff" ) fields_out(:,n) = solswfdiff_m(:)
    1643    ENDDO
    1644 ! >> PC
    1645    IF (carbon_cycle_cpl .AND. carbon_cycle_tr .AND. nbcf_out.GT.0 ) THEN
    1646        r_co2_ppm(:) = co2_send(:)
    1647        DO n=1,nbcf_out
    1648            IF (cfname_out(n) == "atmco2" ) fields_out(:,n) = co2_send(:)
    1649        ENDDO
    1650    ENDIF
    1651    IF ( .NOT. carbon_cycle_tr .AND. nbcf_out.GT.0 ) THEN
    1652        r_co2_ppm(:) = co2_ppm     ! Constant field
    1653        DO n=1,nbcf_out
    1654            IF (cfname_out(n) == "atmco2" ) fields_out(:,n) = co2_ppm
    1655        ENDDO
    1656    ENDIF
    1657 ! << PC
    1658 
    1659 !****************************************************************************************
    1660 ! 4) Loop over different surfaces
    1661 !
    1662 ! Only points containing a fraction of the sub surface will be treated.
    1663 !
    1664 !****************************************************************************************
    1665                                                                           !<<<<<<<<<<<<<
    1666     loop_nbsrf: DO nsrf = 1, nbsrf                                        !<<<<<<<<<<<<<
    1667                                                                           !<<<<<<<<<<<<<
    1668        IF (prt_level >=10) print *,' Loop nsrf ',nsrf
    1669 !
    1670        IF (iflag_split_ref == 3) THEN
    1671          IF (nsrf == is_oce) THEN
    1672             iflag_split = 1
    1673          ELSE
    1674             iflag_split=0
    1675          ENDIF   !! (nsrf == is_oce)
    1676        ELSE                     
    1677          iflag_split = iflag_split_ref
    1678        ENDIF   !! (iflag_split_ref == 3)
    1679 
    1680 ! Search for index(ni) and size(knon) of domaine to treat
    1681        ni(:) = 0
    1682        knon  = 0
    1683        DO i = 1, klon
    1684           IF (pctsrf(i,nsrf) > 0.) THEN
    1685              knon = knon + 1
    1686              ni(knon) = i
    1687           ENDIF
    1688        ENDDO
    1689 
    1690 !!! jyg le 19/08/2012
    1691 !       IF (knon <= 0) THEN
    1692 !         IF (prt_level >= 10) print *,' no grid point for nsrf= ',nsrf
    1693 !         cycle loop_nbsrf
    1694 !       ENDIF
    1695 !!!
    1696 
    1697      
    1698 !****************************************************************************************
    1699 ! 5) Compress variables
    1700 !
    1701 !****************************************************************************************
    1702 
    1703 !
    1704 !jyg<    (20190926)
    1705 !   Provisional : set ybeta to standard values
    1706        IF (nsrf .NE. is_ter) THEN
    1707            ybeta(1:knon) = 1.
    1708        ELSE
    1709            IF (iflag_split .EQ. 0) THEN
    1710               ybeta(1:knon) = 1.
    1711            ELSE
    1712              DO j = 1, knon
    1713                 i = ni(j)
    1714                 ybeta(j)   = beta(i,nsrf)
    1715              ENDDO
    1716            ENDIF  ! (iflag_split .LE.1)
    1717        ENDIF !  (nsrf .NE. is_ter)
    1718 !>jyg
    1719 !
    1720        DO j = 1, knon
    1721           i = ni(j)
    1722           ypct(j)    = pctsrf(i,nsrf)
    1723           yts(j)     = ts(i,nsrf)
    1724           ysnow(j)   = snow(i,nsrf)
    1725           yqsurf(j)  = qsurf(i,nsrf)
    1726           yalb(j)    = alb(i,nsrf)
    1727 !albedo SB >>>
    1728           yalb_vis(j) = alb_dir(i,1,nsrf)
    1729           IF (nsw==6) THEN
    1730             yalb_vis(j)=(alb_dir(i,1,nsrf)*SFRWL(1)+alb_dir(i,2,nsrf)*SFRWL(2) &
    1731               +alb_dir(i,3,nsrf)*SFRWL(3))/(SFRWL(1)+SFRWL(2)+SFRWL(3))
    1732           ENDIF
    1733 !albedo SB <<<
    1734           yrain_f(j) = rain_f(i)
    1735           ysnow_f(j) = snow_f(i)
    1736           ybs_f(j)   = bs_f(i)
    1737           yagesno(j) = agesno(i,nsrf)
    1738           yfder(j)   = fder(i)
    1739           ylwdown(j) = lwdown_m(i)
    1740           ygustiness(j) = gustiness(i)
    1741           ysolsw(j)  = solsw(i,nsrf)
    1742           ysollw(j)  = sollw(i,nsrf)
    1743           yz0m(j)  = z0m(i,nsrf)
    1744           yz0h(j)  = z0h(i,nsrf)
    1745           yrugoro(j) = rugoro(i)
    1746           yu1(j)     = u(i,1)
    1747           yv1(j)     = v(i,1)
    1748           yqbs1(j)   = qbs(i,1)
    1749           ypaprs(j,klev+1) = paprs(i,klev+1)
    1750 !jyg<
    1751 !!          ywindsp(j) = SQRT(u10m(i,nsrf)**2 + v10m(i,nsrf)**2 )
    1752           ywindsp(j) = windsp(i,nsrf)
    1753 !>jyg
    1754           ! Martin and Etienne
    1755           yzmea(j)   = zmea(i)
    1756           yzsig(j)   = zsig(i)
    1757           ycldt(j)   = cldt(i)
    1758           yrmu0(j)   = rmu0(i)
    1759           ! Martin
    1760 !!! nrlmd le 13/06/2011
    1761           y_delta_tsurf(j)=delta_tsurf(i,nsrf)
    1762           yfluxbs(j)=0.0
    1763           y_flux_bs(j) = 0.0
    1764 !!!
    1765 #ifdef ISO
    1766           DO ixt=1,ntraciso
    1767             yxtrain_f(ixt,j) = xtrain_f(ixt,i)
    1768             yxtsnow_f(ixt,j) = xtsnow_f(ixt,i) 
    1769           ENDDO
    1770           DO ixt=1,niso
    1771             yxtsnow(ixt,j)   = xtsnow(ixt,i,nsrf)
    1772           ENDDO   
    1773           !IF (nsrf == is_lic) THEN
    1774           DO ixt=1,niso
    1775             yRland_ice(ixt,j)= Rland_ice(ixt,i) 
    1776           ENDDO   
    1777           !endif !IF (nsrf == is_lic) THEN
    1778 #ifdef ISOVERIF
    1779           IF (iso_eau >= 0) THEN
    1780               call iso_verif_egalite_choix(ysnow_f(j), &
    1781      &          yxtsnow_f(iso_eau,j),'pbl_surf_mod 862', &
    1782      &          errmax,errmaxrel)
    1783               call iso_verif_egalite_choix(ysnow(j), &
    1784      &          yxtsnow(iso_eau,j),'pbl_surf_mod 872', &
    1785      &          errmax,errmaxrel)
    1786           ENDIF
    1787 #endif
    1788 #ifdef ISOVERIF
    1789          DO ixt=1,ntraciso
    1790            call iso_verif_noNaN(yxtsnow_f(ixt,j),'pbl_surf_mod 921')
    1791          ENDDO
    1792 #endif
    1793 #endif
    1794        ENDDO
    1795 ! >> PC
    1796 !--compressing fields_out onto ORCHIDEE grid
    1797 !--these fields are shared and used directly surf_land_orchidee_mod
    1798        DO n = 1, nbcf_out
    1799          DO j = 1, knon
    1800            i = ni(j)
    1801            yfields_out(j,n) = fields_out(i,n)
    1802          ENDDO
    1803        ENDDO
    1804 ! << PC
    1805        DO k = 1, klev
    1806           DO j = 1, knon
    1807              i = ni(j)
    1808              ypaprs(j,k) = paprs(i,k)
    1809              ypplay(j,k) = pplay(i,k)
    1810              ydelp(j,k)  = delp(i,k)
    1811           ENDDO
    1812        ENDDO
    1813 !
    1814 !!! jyg le 07/02/2012 et le 10/04/2013
    1815         DO k = 1, klev+1
    1816           DO j = 1, knon
    1817              i = ni(j)
    1818 !jyg<
    1819 !!             ytke(j,k)   = tke(i,k,nsrf)
    1820              ytke(j,k)   = tke_x(i,k,nsrf)
    1821           ENDDO
    1822         ENDDO
    1823 !>jyg
    1824         DO k = 1, klev
    1825           DO j = 1, knon
    1826              i = ni(j)
    1827              y_treedrg(j,k) =  treedrg(i,k,nsrf)
    1828              yu(j,k) = u(i,k)
    1829              yv(j,k) = v(i,k)
    1830              yt(j,k) = t(i,k)
    1831              yq(j,k) = q(i,k)
    1832              yqbs(j,k)=qbs(i,k)
    1833 !! GG
    1834              ypphi(j,k) = pphi(i,k)
    1835 !!
    1836 
    1837 #ifdef ISO
    1838              DO ixt=1,ntraciso   
    1839                yxt(ixt,j,k) = xt(ixt,i,k)
    1840              ENDDO !DO ixt=1,ntraciso
    1841 #endif
    1842           ENDDO
    1843         ENDDO
    1844 !
    1845        IF (iflag_split.GE.1) THEN
    1846 !!! nrlmd le 02/05/2011
    1847         DO k = 1, klev
    1848           DO j = 1, knon
    1849              i = ni(j)
    1850              yu_x(j,k) = u(i,k)
    1851              yv_x(j,k) = v(i,k)
    1852              yt_x(j,k) = t(i,k)-wake_s(i)*wake_dlt(i,k)
    1853              yq_x(j,k) = q(i,k)-wake_s(i)*wake_dlq(i,k)
    1854              yu_w(j,k) = u(i,k)
    1855              yv_w(j,k) = v(i,k)
    1856              yt_w(j,k) = t(i,k)+(1.-wake_s(i))*wake_dlt(i,k)
    1857              yq_w(j,k) = q(i,k)+(1.-wake_s(i))*wake_dlq(i,k)
    1858 !!!
    1859 #ifdef ISO
    1860              DO ixt=1,ntraciso
    1861                yxt_x(ixt,j,k) = xt(ixt,i,k)-wake_s(i)*wake_dlxt(ixt,i,k)
    1862                yxt_w(ixt,j,k) = xt(ixt,i,k)+(1.-wake_s(i))*wake_dlxt(ixt,i,k)
    1863              ENDDO
    1864 #endif
    1865           ENDDO
    1866         ENDDO
    1867 
    1868         IF (prt_level .ge. 10) THEN
    1869           print *,'pbl_surface, wake_s(1), wake_dlt(1,:) ', wake_s(1), wake_dlt(1,:)
    1870           print *,'pbl_surface, wake_s(1), wake_dlq(1,:) ', wake_s(1), wake_dlq(1,:)
    1871         ENDIF
    1872 
    1873 !!! nrlmd le 02/05/2011
    1874         DO k = 1, klev+1
    1875           DO j = 1, knon
    1876              i = ni(j)
    1877 !jyg<
    1878 !!             ytke_x(j,k) = tke(i,k,nsrf)-wake_s(i)*wake_dltke(i,k,nsrf)
    1879 !!             ytke_w(j,k) = tke(i,k,nsrf)+(1.-wake_s(i))*wake_dltke(i,k,nsrf)
    1880 !!             ywake_dltke(j,k) = wake_dltke(i,k,nsrf)
    1881 !!             ytke(j,k)     = tke(i,k,nsrf)
    1882 !
    1883              ytke_x(j,k)      = tke_x(i,k,nsrf)
    1884              ytke(j,k)        = tke_x(i,k,nsrf)+wake_s(i)*wake_dltke(i,k,nsrf)
    1885              ytke_w(j,k)      = tke_x(i,k,nsrf)+wake_dltke(i,k,nsrf)
    1886              ywake_dltke(j,k) = wake_dltke(i,k,nsrf)
    1887            
    1888 !>jyg
    1889           ENDDO
    1890         ENDDO
    1891 !!!
    1892 !!! jyg le 07/02/2012
    1893         DO j = 1, knon
    1894           i = ni(j)
    1895           ywake_s(j)=wake_s(i)
    1896           ywake_cstar(j)=wake_cstar(i)
    1897           ywake_dens(j)=wake_dens(i)
    1898         ENDDO
    1899 !!!
    1900 !!! nrlmd le 13/06/2011
    1901         DO j=1,knon
    1902          yts_x(j)=yts(j)-ywake_s(j)*y_delta_tsurf(j)
    1903          yts_w(j)=yts(j)+(1.-ywake_s(j))*y_delta_tsurf(j)
    1904         ENDDO
    1905 !!!
    1906        ENDIF  ! (iflag_split .ge.1)
    1907 !!!
    1908        DO k = 1, nsoilmx
    1909           DO j = 1, knon
    1910              i = ni(j)
    1911              ytsoil(j,k) = ftsoil(i,k,nsrf)
    1912           ENDDO
    1913        ENDDO
    1914        
    1915        ! qsol(water height in soil) only for bucket continental model
    1916        IF ( nsrf .EQ. is_ter .AND. .NOT. ok_veget ) THEN
    1917           DO j = 1, knon
    1918              i = ni(j)
    1919              yqsol(j) = qsol(i)
    1920 #ifdef ISO
    1921              DO ixt=1,niso
    1922                yxtsol(ixt,j) = xtsol(ixt,i)
    1923              ENDDO
    1924 #endif
    1925           ENDDO
    1926        ENDIF
    1927 
    1928        if (nsrf == is_oce .and. activate_ocean_skin >= 1) then
    1929           if (activate_ocean_skin == 2 .and. type_ocean == "couple") then
    1930              ydelta_sal(:knon) = delta_sal(ni(:knon))
    1931              ydelta_sst(:knon) = delta_sst(ni(:knon))
    1932              ydter(:knon) = dter(ni(:knon))
    1933              ydser(:knon) = dser(ni(:knon))
    1934              ydt_ds(:knon) = dt_ds(ni(:knon))
    1935           end if
    1936          
    1937           yds_ns(:knon) = ds_ns(ni(:knon))
    1938           ydt_ns(:knon) = dt_ns(ni(:knon))
    1939        end if
    1940        
    1941 !****************************************************************************************
    1942 ! 6a) Calculate coefficients for turbulent diffusion at surface, cdragh et cdragm.
    1943 !
    1944 !****************************************************************************************
    1945 
    1946 
    1947 !!! jyg le 07/02/2012
    1948        IF (iflag_split .eq.0) THEN
    1949 !!!
    1950 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    1951 ! Faire disparaitre les lignes commentees fin 2015 (le temps des tests)
    1952 !       CALL clcdrag( knon, nsrf, ypaprs, ypplay, &
    1953 !           yu(:,1), yv(:,1), yt(:,1), yq(:,1), &
    1954 !           yts, yqsurf, yrugos, &
    1955 !           ycdragm, ycdragh )
    1956 ! Fuxing WANG, 04/03/2015, replace the clcdrag by the merged version: cdrag
    1957         DO i = 1, knon
    1958 !          print*,'PBL ',i,RD
    1959 !          print*,'PBL ',yt(i,1),ypaprs(i,1),ypplay(i,1)
    1960            zgeo1(i) = RD * yt(i,1) / (0.5*(ypaprs(i,1)+ypplay(i,1))) &
    1961                 * (ypaprs(i,1)-ypplay(i,1))
    1962            speed(i) = SQRT(yu(i,1)**2+yv(i,1)**2)
    1963         ENDDO
    1964 
    1965         !!! AM heterogeneous continental subsurfaces
    1966         IF (nsrf .EQ. is_ter) THEN
    1967           ! compute time-dependent effective surface parameters (function of zgeo1) !! AM
    1968           IF (iflag_hetero_surf .GT. 0) THEN
    1969             DO n=1,nbtersrf
    1970               DO j=1,knon
    1971                 i = ni(j)
    1972                 yfrac_tersrf(j,n) = frac_tersrf(i,n)
    1973                 yz0m_tersrf(j,n) = z0m_tersrf(i,n)
    1974                 IF (ratio_z0m_z0h_tersrf(i,n) .NE. 0.) THEN
    1975                   yz0h_tersrf(j,n) = z0m_tersrf(i,n) / ratio_z0m_z0h_tersrf(i,n)
    1976                 ELSE
    1977                   yz0h_tersrf(j,n) = 0.
    1978                 ENDIF
    1979               ENDDO
    1980             ENDDO
    1981             !
    1982             CALL eff_surf_param(knon, nbtersrf, yz0m_tersrf, yfrac_tersrf, 'CDN', yz0m, zgeo1/RG)
    1983             CALL eff_surf_param(knon, nbtersrf, yz0h_tersrf, yfrac_tersrf, 'CDN', yz0h, zgeo1/RG)
    1984             !
    1985           ENDIF
    1986         ENDIF
    1987 
    1988 !
    1989         CALL cdrag(knon, nsrf, &
    1990             speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), s_pblh, &
    1991             yts, yqsurf, yz0m, yz0h, yri0, 0, &
    1992             ycdragm, ycdragh, zri1, pref, rain_f, zxtsol, ypplay(:,1))
    1993 
    1994 ! --- special Dice: on force cdragm ( a defaut de forcer ustar) MPL 05082013
    1995      IF (ok_prescr_ust) THEN
    1996       DO i = 1, knon
    1997        print *,'ycdragm avant=',ycdragm(i)
    1998        vent= sqrt(yu(i,1)*yu(i,1)+yv(i,1)*yv(i,1))
    1999 !      ycdragm(i) = ust*ust/(1.+(yu(i,1)*yu(i,1)+yv(i,1)*yv(i,1)))
    2000 !      ycdragm(i) = ust*ust/((1.+sqrt(yu(i,1)*yu(i,1)+yv(i,1)*yv(i,1))) &
    2001 !     *sqrt(yu(i,1)*yu(i,1)+yv(i,1)*yv(i,1)))
    2002        ycdragm(i) = ust*ust/(1.+vent)/vent
    2003 !      print *,'ycdragm ust yu yv apres=',ycdragm(i),ust,yu(i,1),yv(i,1)
    2004       ENDDO
    2005      ENDIF
    2006 
    2007         IF (prt_level >=10) print *,'cdrag -> ycdragh ', ycdragh(1:knon)
    2008        ELSE  !(iflag_split .eq.0)
    2009 
    2010 ! Faire disparaitre les lignes commentees fin 2015 (le temps des tests)
    2011 !       CALL clcdrag( knon, nsrf, ypaprs, ypplay, &
    2012 !           yu_x(:,1), yv_x(:,1), yt_x(:,1), yq_x(:,1), &
    2013 !           yts_x, yqsurf, yrugos, &
    2014 !           ycdragm_x, ycdragh_x )
    2015 ! Fuxing WANG, 04/03/2015, replace the clcdrag by the merged version: cdrag
    2016         DO i = 1, knon
    2017            zgeo1_x(i) = RD * yt_x(i,1) / (0.5*(ypaprs(i,1)+ypplay(i,1))) &
    2018                 * (ypaprs(i,1)-ypplay(i,1))
    2019            speed_x(i) = SQRT(yu_x(i,1)**2+yv_x(i,1)**2)
    2020         ENDDO
    2021 
    2022 
    2023             CALL cdrag(knon, nsrf, &
    2024             speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),s_pblh_x,&
    2025             yts_x, yqsurf_x, yz0m, yz0h, yri0, 0, &
    2026             ycdragm_x, ycdragh_x, zri1_x, pref_x, rain_f, zxtsol, ypplay(:,1) )
    2027 
    2028 ! --- special Dice. JYG+MPL 25112013
    2029         IF (ok_prescr_ust) THEN
    2030          DO i = 1, knon
    2031 !         print *,'ycdragm_x avant=',ycdragm_x(i)
    2032           vent= sqrt(yu_x(i,1)*yu_x(i,1)+yv_x(i,1)*yv_x(i,1))
    2033           ycdragm_x(i) = ust*ust/(1.+vent)/vent
    2034 !         print *,'ycdragm_x ust yu yv apres=',ycdragm_x(i),ust,yu_x(i,1),yv_x(i,1)
    2035          ENDDO
    2036         ENDIF
    2037         IF (prt_level >=10) print *,'clcdrag -> ycdragh_x ', ycdragh_x(1:knon)
    2038 !
    2039 ! Faire disparaitre les lignes commentees fin 2015 (le temps des tests)
    2040 !        CALL clcdrag( knon, nsrf, ypaprs, ypplay, &
    2041 !            yu_w(:,1), yv_w(:,1), yt_w(:,1), yq_w(:,1), &
    2042 !            yts_w, yqsurf, yz0m, &
    2043 !            ycdragm_w, ycdragh_w )
    2044 ! Fuxing WANG, 04/03/2015, replace the clcdrag by the merged version: cdrag
    2045         DO i = 1, knon
    2046            zgeo1_w(i) = RD * yt_w(i,1) / (0.5*(ypaprs(i,1)+ypplay(i,1))) &
    2047                 * (ypaprs(i,1)-ypplay(i,1))
    2048            speed_w(i) = SQRT(yu_w(i,1)**2+yv_w(i,1)**2)
    2049         ENDDO
    2050         CALL cdrag(knon, nsrf, &
    2051             speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),s_pblh_w,&
    2052             yts_w, yqsurf_w, yz0m, yz0h, yri0, 0, &
    2053             ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) )
    2054 !
    2055         IF(ok_bug_zg_wk_pbl) THEN
    2056          zgeo1(1:knon) = wake_s(1:knon)*zgeo1_w(1:knon) + (1.-wake_s(1:knon))*zgeo1_x(1:knon)
    2057         ELSE
    2058          zgeo1(1:knon) = ywake_s(1:knon)*zgeo1_w(1:knon) + (1.-ywake_s(1:knon))*zgeo1_x(1:knon)
    2059         ENDIF
    2060 
    2061 ! --- special Dice. JYG+MPL 25112013 puis BOMEX
    2062         IF (ok_prescr_ust) THEN
    2063          DO i = 1, knon
    2064 !         print *,'ycdragm_w avant=',ycdragm_w(i)
    2065           vent= sqrt(yu_w(i,1)*yu_w(i,1)+yv_w(i,1)*yv_w(i,1))
    2066           ycdragm_w(i) = ust*ust/(1.+vent)/vent
    2067 !         print *,'ycdragm_w ust yu yv apres=',ycdragm_w(i),ust,yu_w(i,1),yv_w(i,1)
    2068          ENDDO
    2069         ENDIF
    2070         IF (prt_level >=10) print *,'clcdrag -> ycdragh_w ', ycdragh_w(1:knon)
    2071 !!!
    2072        ENDIF  ! (iflag_split .eq.0)
    2073 !!!
    2074        
    2075 
    2076 !****************************************************************************************
    2077 ! 6b) Calculate coefficients for turbulent diffusion in the atmosphere, ycoefh et ycoefm.
    2078 !
    2079 !****************************************************************************************
    2080 
    2081 !!! jyg le 07/02/2012
    2082        IF (iflag_split .eq.0) THEN
    2083 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    2084       IF (prt_level >=10) THEN
    2085       print *,' args coef_diff_turb: yu ',  yu(1:knon,:) 
    2086       print *,' args coef_diff_turb: yv ',  yv(1:knon,:)   
    2087       print *,' args coef_diff_turb: yq ',  yq(1:knon,:)   
    2088       print *,' args coef_diff_turb: yt ',  yt(1:knon,:)   
    2089       print *,' args coef_diff_turb: yts ', yts(1:knon)
    2090       print *,' args coef_diff_turb: yz0m ', yz0m(1:knon)
    2091       print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
    2092       print *,' args coef_diff_turb: ycdragm ', ycdragm(1:knon)
    2093       print *,' args coef_diff_turb: ycdragh ', ycdragh(1:knon)
    2094       print *,' args coef_diff_turb: ytke ', ytke(1:knon,:)   
    2095        ENDIF
    2096 
    2097         IF (iflag_pbl>=50) THEN
    2098         CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm(1:knon), ycdragh(1:knon),yus0(1:knon),yvs0(1:knon),yts(1:knon), &
    2099                   yu(1:knon,:),yv(1:knon,:),yt(1:knon,:),yq(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),       &
    2100                   ytke(1:knon,:),yeps(1:knon,:), ycoefm(1:knon,:), ycoefh(1:knon,:))
    2101 
    2102         ELSE
    2103 
    2104         CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    2105             ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, &
    2106             ycoefm, ycoefh, ytke, yeps, y_treedrg)
    2107 !            ycoefm, ycoefh, ytke)
    2108 !FC y_treedrg ajoute
    2109        IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN
    2110 ! In this case, coef_diff_turb is called for the Cd only
    2111        DO k = 2, klev
    2112           DO j = 1, knon
    2113              i = ni(j)
    2114              ycoefh(j,k)   = zcoefh(i,k,nsrf)
    2115              ycoefm(j,k)   = zcoefm(i,k,nsrf)
    2116           ENDDO
    2117        ENDDO
    2118        ENDIF
    2119 
    2120        ENDIF ! iflag_pbl >= 50
    2121 
    2122         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh(1:knon,:)
    2123 
    2124 
    2125        ELSE  !(iflag_split .eq.0)
    2126 
    2127      
    2128       IF (prt_level >=10) THEN
    2129       print *,' args coef_diff_turb: yu_x ',  yu_x(1:knon,:)     
    2130       print *,' args coef_diff_turb: yv_x ',  yv_x(1:knon,:)     
    2131       print *,' args coef_diff_turb: yq_x ',  yq_x(1:knon,:)     
    2132       print *,' args coef_diff_turb: yt_x ',  yt_x(1:knon,:)     
    2133       print *,' args coef_diff_turb: yts_x ', yts_x(1:knon)
    2134       print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
    2135       print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x(1:knon)
    2136       print *,' args coef_diff_turb: ycdragh_x ', ycdragh_x(1:knon)
    2137       print *,' args coef_diff_turb: ytke_x ', ytke_x(1:knon,:)   
    2138       ENDIF
    2139 
    2140 
    2141         IF (iflag_pbl>=50) THEN
    2142      
    2143         CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_x(1:knon),ycdragh_x(1:knon),yus0(1:knon),yvs0(1:knon),yts_x(1:knon),    &
    2144                        yu_x(1:knon,:),yv_x(1:knon,:),yt_x(1:knon,:),yq_x(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),  &
    2145                        ytke_x(1:knon,:),yeps_x(1:knon,:),ycoefm_x(1:knon,:), ycoefh_x(1:knon,:))
    2146 
    2147         ELSE
    2148 
    2149         CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    2150             ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf_x, ycdragm_x, &
    2151             ycoefm_x, ycoefh_x, ytke_x,yeps_x,y_treedrg)
    2152 !            ycoefm_x, ycoefh_x, ytke_x)
    2153 !FC doit on le mettre ( on ne l utilise pas si il y a du spliting)
    2154        IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN
    2155 ! In this case, coef_diff_turb is called for the Cd only
    2156        DO k = 2, klev
    2157           DO j = 1, knon
    2158              i = ni(j)
    2159              ycoefh_x(j,k)   = zcoefh(i,k,nsrf)
    2160              ycoefm_x(j,k)   = zcoefm(i,k,nsrf)
    2161           ENDDO
    2162        ENDDO
    2163        ENDIF
    2164 
    2165         ENDIF ! iflag_pbl >= 50
    2166 
    2167         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x(1:knon,:)
    2168 !
    2169       IF (prt_level >=10) THEN
    2170       print *,' args coef_diff_turb: yu_w ',  yu_w(1:knon,:)
    2171       print *,' args coef_diff_turb: yv_w ',  yv_w(1:knon,:) 
    2172       print *,' args coef_diff_turb: yq_w ',  yq_w(1:knon,:) 
    2173       print *,' args coef_diff_turb: yt_w ',  yt_w(1:knon,:) 
    2174       print *,' args coef_diff_turb: yts_w ', yts_w(1:knon)
    2175       print *,' args coef_diff_turb: yqsurf ', yqsurf(1:knon) 
    2176       print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w(1:knon)
    2177       print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w(1:knon)
    2178       print *,' args coef_diff_turb: ytke_w ', ytke_w(1:knon,:)
    2179       ENDIF
    2180      
    2181         IF (iflag_pbl>=50) THEN
    2182        
    2183         CALL call_atke(dtime,knon,klev,nsrf,ni,ycdragm_w(1:knon),ycdragh_w(1:knon),yus0(1:knon),yvs0(1:knon),yts_w(1:knon), &
    2184                 yu_w(1:knon,:),yv_w(1:knon,:),yt_w(1:knon,:),yq_w(1:knon,:),ypplay(1:knon,:),ypaprs(1:knon,:),      &
    2185                 ytke_w(1:knon,:),yeps_w(1:knon,:),ycoefm_w(1:knon,:),ycoefh_w(1:knon,:))
    2186 
    2187         ELSE
    2188 
    2189         CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
    2190             ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf_w, ycdragm_w, &
    2191             ycoefm_w, ycoefh_w, ytke_w,yeps_w,y_treedrg)
    2192 !            ycoefm_w, ycoefh_w, ytke_w)
    2193        IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN
    2194 ! In this case, coef_diff_turb is called for the Cd only
    2195        DO k = 2, klev
    2196           DO j = 1, knon
    2197              i = ni(j)
    2198              ycoefh_w(j,k)   = zcoefh(i,k,nsrf)
    2199              ycoefm_w(j,k)   = zcoefm(i,k,nsrf)
    2200           ENDDO
    2201        ENDDO
    2202        ENDIF
    2203 
    2204        ENDIF ! iflag_pbl >= 50
    2205 
    2206 
    2207         IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w(1:knon,:)
    2208 
    2209 !!!jyg le 10/04/2013
    2210 !!   En attendant de traiter le transport des traceurs dans les poches froides, formule
    2211 !!   arbitraire pour ycoefh et ycoefm
    2212       DO k = 2,klev
    2213         DO j = 1,knon
    2214          ycoefh(j,k) = ycoefh_x(j,k) + ywake_s(j)*(ycoefh_w(j,k) - ycoefh_x(j,k))
    2215          ycoefm(j,k) = ycoefm_x(j,k) + ywake_s(j)*(ycoefm_w(j,k) - ycoefm_x(j,k))
    2216         ENDDO
    2217       ENDDO
    2218 
    2219 
    2220        ENDIF  ! (iflag_split .eq.0)
    2221 
    2222        
    2223 !****************************************************************************************
    2224 !
    2225 ! 8) "La descente" - "The downhill"
    2226 
    2227 !  climb_hq_down and climb_wind_down calculate the coefficients
    2228 !  Ccoef_X et Dcoef_X for X=[H, Q, U, V].
    2229 !  Only the coefficients at surface for H and Q are returned.
    2230 !
    2231 !****************************************************************************************
    2232 
    2233 ! - Calculate the coefficients Ccoef_H, Ccoef_Q, Dcoef_H and Dcoef_Q
    2234 !!! jyg le 07/02/2012
    2235        IF (iflag_split .eq.0) THEN
    2236 !!!
    2237 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    2238         CALL climb_hq_down(knon, ni, ycoefh, ypaprs, ypplay, &
    2239             ydelp, yt, yq, dtime, &
    2240 !!! jyg le 09/05/2011
    2241             CcoefH, CcoefQ, DcoefH, DcoefQ, &
    2242             Kcoef_hq, gama_q, gama_h, &
    2243 !!!
    2244             AcoefH, AcoefQ, BcoefH, BcoefQ &
    2245 #ifdef ISO
    2246          &   ,yxt, CcoefXT, DcoefXT, gama_xt, AcoefXT, BcoefXT &
    2247 #endif               
    2248          &   )
    2249        ELSE  !(iflag_split .eq.0)
    2250         CALL climb_hq_down(knon, ni, ycoefh_x, ypaprs, ypplay, &
    2251             ydelp, yt_x, yq_x, dtime, &
    2252 !!! nrlmd le 02/05/2011
    2253             CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x, &
    2254             Kcoef_hq_x, gama_q_x, gama_h_x, &
    2255 !!!
    2256             AcoefH_x, AcoefQ_x, BcoefH_x, BcoefQ_x &
    2257 #ifdef ISO
    2258          &   ,yxt_x, CcoefXT_x, DcoefXT_x, gama_xt_x, AcoefXT_x, BcoefXT_x &
    2259 #endif               
    2260          &   )
    2261 !!!
    2262        IF (prt_level >=10) THEN
    2263          PRINT *,'pbl_surface (climb_hq_down.x->) AcoefH_x ',AcoefH_x
    2264          PRINT *,'pbl_surface (climb_hq_down.x->) AcoefQ_x ',AcoefQ_x
    2265          PRINT *,'pbl_surface (climb_hq_down.x->) BcoefH_x ',BcoefH_x
    2266          PRINT *,'pbl_surface (climb_hq_down.x->) BcoefQ_x ',BcoefQ_x
    2267        ENDIF
    2268 !
    2269         CALL climb_hq_down(knon, ni, ycoefh_w, ypaprs, ypplay, &
    2270             ydelp, yt_w, yq_w, dtime, &
    2271 !!! nrlmd le 02/05/2011
    2272             CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w, &
    2273             Kcoef_hq_w, gama_q_w, gama_h_w, &
    2274 !!!
    2275             AcoefH_w, AcoefQ_w, BcoefH_w, BcoefQ_w &
    2276 #ifdef ISO
    2277          &   ,yxt_w, CcoefXT_w, DcoefXT_w, gama_xt_w, AcoefXT_w, BcoefXT_w &
    2278 #endif               
    2279          &   )
    2280 !!!
    2281        IF (prt_level >=10) THEN
    2282          PRINT *,'pbl_surface (climb_hq_down.w->) AcoefH_w ',AcoefH_w
    2283          PRINT *,'pbl_surface (climb_hq_down.w->) AcoefQ_w ',AcoefQ_w
    2284          PRINT *,'pbl_surface (climb_hq_down.w->) BcoefH_w ',BcoefH_w
    2285          PRINT *,'pbl_surface (climb_hq_down.w->) BcoefQ_w ',BcoefQ_w
    2286        ENDIF
    2287 !!!
    2288        ENDIF  ! (iflag_split .eq.0)
    2289 !!!
    2290 
    2291 ! - Calculate the coefficients Ccoef_U, Ccoef_V, Dcoef_U and Dcoef_V
    2292 !!! jyg le 07/02/2012
    2293        IF (iflag_split .eq.0) THEN
    2294 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    2295         CALL climb_wind_down(knon, ni, dtime, ycoefm, ypplay, ypaprs, yt, ydelp, yu, yv, &
    2296 !!! jyg le 09/05/2011
    2297             CcoefU, CcoefV, DcoefU, DcoefV, &
    2298             Kcoef_m, alf_1, alf_2, &
    2299 !!!
    2300             AcoefU, AcoefV, BcoefU, BcoefV)
    2301        ELSE  ! (iflag_split .eq.0)
    2302         CALL climb_wind_down(knon, ni, dtime, ycoefm_x, ypplay, ypaprs, yt_x, ydelp, yu_x, yv_x, &
    2303 !!! nrlmd le 02/05/2011
    2304             CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, &
    2305             Kcoef_m_x, alf_1_x, alf_2_x, &
    2306 !!!
    2307             AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x)
    2308 !
    2309         CALL climb_wind_down(knon, ni, dtime, ycoefm_w, ypplay, ypaprs, yt_w, ydelp, yu_w, yv_w, &
    2310 !!! nrlmd le 02/05/2011
    2311             CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w, &
    2312             Kcoef_m_w, alf_1_w, alf_2_w, &
    2313 !!!
    2314             AcoefU_w, AcoefV_w, BcoefU_w, BcoefV_w)
    2315 !!!     
    2316        ENDIF  ! (iflag_split .eq.0)
    2317 !!!
    2318 
    2319 ! For blowing snow:
    2320     IF (ok_bs) THEN
    2321      ! following Bintanja et al 2000, part II and Vionnet V PhD thesis
    2322      ! we assume that the eddy diffsivity coefficient for
    2323      ! suspended particles is a fraction of Kh
    2324      do k=1,klev
    2325         do j=1,knon
    2326            ycoefqbs(j,k)=ycoefh(j,k)*zeta_bs
    2327         enddo
    2328      enddo
    2329      CALL climb_qbs_down(knon, ni, ycoefqbs, ypaprs, ypplay, &
    2330      ydelp, yt, yqbs, dtime, &
    2331      CcoefQBS, DcoefQBS, &
    2332      Kcoef_qbs, gama_qbs, &
    2333      AcoefQBS, BcoefQBS)
    2334     ENDIF
    2335 
    2336 !****************************************************************************************
    2337 ! 9) Small calculations
    2338 !
    2339 !****************************************************************************************
    2340 
    2341 ! - Reference pressure is given the values at surface level         
    2342        ypsref(:) = ypaprs(:,1) 
    2343 
    2344 ! - CO2 field on 2D grid to be sent to ORCHIDEE
    2345 !   Transform to compressed field
    2346        IF (carbon_cycle_cpl) THEN
    2347           DO i=1,knon
    2348              r_co2_ppm(i) = co2_send(ni(i))
    2349           ENDDO
    2350        ELSE
    2351           r_co2_ppm(:) = co2_ppm     ! Constant field
    2352        ENDIF
    2353 
    2354 !!! nrlmd le 02/05/2011  -----------------------On raccorde les 2 colonnes dans la couche 1
    2355 !----------------------------------------------------------------------------------------
    2356 !!! jyg le 07/02/2012
    2357 !!! jyg le 01/02/2017
    2358        IF (iflag_split .eq. 0) THEN
    2359          yt1(:) = yt(:,1)
    2360          yq1(:) = yq(:,1)
    2361 #ifdef ISO
    2362          yxt1(:,:) = yxt(:,:,1)
    2363 #endif
    2364 
    2365        ELSE IF (iflag_split .ge. 1) THEN
    2366 #ifdef ISO
    2367         call abort_physic('pbl_surface_mod 2149','isos pas encore dans iflag_split=1',1)
    2368 #endif
    2369 
    2370 !
    2371 ! Cdragq computation
    2372 ! ------------------
    2373     !******************************************************************************
    2374     ! Cdragq computed from cdrag
    2375     ! The difference comes only from a factor (f_z0qh_oce) on z0, so that
    2376     ! it can be computed inside wx_pbl0_merge
    2377     ! More complicated appraches may require the propagation through
    2378     ! pbl_surface of an independant cdragq variable.
    2379     !******************************************************************************
    2380 !
    2381     IF ( f_z0qh_oce .ne. 1. .and. nsrf .eq.is_oce) THEN
    2382        ! Si on suit les formulations par exemple de Tessel, on
    2383        ! a z0h=0.4*nu/u*, z0q=0.62*nu/u*, d'ou f_z0qh_oce=0.62/0.4=1.55
    2384 !!       ycdragq_x(1:knon)=ycdragh_x(1:knon)*                                      &
    2385 !!            log(z1lay(1:knon)/yz0h(1:knon))/log(z1lay(1:knon)/(f_z0qh_oce*yz0h(1:knon)))
    2386 !!       ycdragq_w(1:knon)=ycdragh_w(1:knon)*                                      &
    2387 !!            log(z1lay(1:knon)/yz0h(1:knon))/log(z1lay(1:knon)/(f_z0qh_oce*yz0h(1:knon)))
    2388 !
    2389        DO j = 1,knon
    2390          z1lay = zgeo1(j)/RG
    2391          fact_cdrag = log(z1lay/yz0h(j))/log(z1lay/(f_z0qh_oce*yz0h(j)))
    2392          ycdragq_x(j)=ycdragh_x(j)*fact_cdrag
    2393          ycdragq_w(j)=ycdragh_w(j)*fact_cdrag
    2394 !!     Print *,'YYYYpbl0: fact_cdrag ', fact_cdrag
    2395        ENDDO  ! j = 1,knon
    2396 !
    2397 !!  Print *,'YYYYpbl0: z1lay, yz0h, f_z0qh_oce, ycdragh_w, ycdragq_w ', &
    2398 !!                z1lay, yz0h(1:knon), f_z0qh_oce, ycdragh_w(1:knon), ycdragq_w(1:knon)
    2399     ELSE
    2400        ycdragq_x(1:knon)=ycdragh_x(1:knon)
    2401        ycdragq_w(1:knon)=ycdragh_w(1:knon)
    2402     ENDIF  ! ( f_z0qh_oce .ne. 1. .and. nsrf .eq.is_oce)
    2403 !
    2404          CALL wx_pbl_prelim_0(knon, nsrf, dtime, ypplay, ypaprs, ywake_s,  &
    2405                          yts, y_delta_tsurf, ygustiness, &
    2406                          yt_x, yt_w, yq_x, yq_w, &
    2407                          yu_x, yu_w, yv_x, yv_w, &
    2408                          ycdragh_x, ycdragh_w, ycdragq_x, ycdragq_w, &
    2409                          ycdragm_x, ycdragm_w, &
    2410                          AcoefH_x, AcoefH_w, AcoefQ_x, AcoefQ_w, &
    2411                          AcoefU_x, AcoefU_w, AcoefV_x, AcoefV_w, &
    2412                          BcoefH_x, BcoefH_w, BcoefQ_x, BcoefQ_w, &
    2413                          BcoefU_x, BcoefU_w, BcoefV_x, BcoefV_w, &
    2414                          Kech_h_x, Kech_h_w, Kech_h  &
    2415                          )
    2416          CALL wx_pbl_prelim_beta(knon, dtime, ywake_s, ybeta,  &
    2417                          BcoefQ_x, BcoefQ_w  &
    2418                          )
    2419          CALL wx_pbl0_merge(knon, ypplay, ypaprs,  &
    2420                          ywake_s, ydTs0, ydqs0, &
    2421                          yt_x, yt_w, yq_x, yq_w, &
    2422                          yu_x, yu_w, yv_x, yv_w, &
    2423                          ycdragh_x, ycdragh_w, ycdragq_x, ycdragq_w, &
    2424                          ycdragm_x, ycdragm_w, &
    2425                          AcoefH_x, AcoefH_w, AcoefQ_x, AcoefQ_w, &
    2426                          AcoefU_x, AcoefU_w, AcoefV_x, AcoefV_w, &
    2427                          BcoefH_x, BcoefH_w, BcoefQ_x, BcoefQ_w, &
    2428                          BcoefU_x, BcoefU_w, BcoefV_x, BcoefV_w, &
    2429                          AcoefH_0, AcoefQ_0, AcoefU, AcoefV, &
    2430                          BcoefH_0, BcoefQ_0, BcoefU, BcoefV, &
    2431                          ycdragh, ycdragq, ycdragm, &
    2432                          yt1, yq1, yu1, yv1 &
    2433                          )
    2434          IF (iflag_split .eq. 2 .AND. nsrf .ne. is_oce) THEN
    2435            CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, &
    2436                            ywake_s, ybeta, ywake_cstar, ywake_dens, &
    2437                            AcoefH_x, AcoefH_w, &
    2438                            BcoefH_x, BcoefH_w, &
    2439                            AcoefH_0, AcoefQ_0, BcoefH_0, BcoefQ_0,  &
    2440                            AcoefH, AcoefQ, BcoefH, BcoefQ,  &
    2441                            HTphiT_b, dd_HTphiT, HTphiQ_b, dd_HTphiQ, HTRn_b, dd_HTRn, &
    2442                            phiT0_b, dphiT0, phiQ0_b, dphiQ0, Rn0_b, dRn0, &
    2443                            yg_T, yg_Q, &
    2444                            yGamma_dTs_phiT, yGamma_dQs_phiQ, &
    2445                            ydTs_ins, ydqs_ins &
    2446                            )
    2447          ELSE !
    2448            AcoefH(:) = AcoefH_0(:)
    2449            AcoefQ(:) = AcoefQ_0(:)
    2450            BcoefH(:) = BcoefH_0(:)
    2451            BcoefQ(:) = BcoefQ_0(:)
    2452            yg_T(:) = 0.
    2453            yg_Q(:) = 0.
    2454            yGamma_dTs_phiT(:) = 0.
    2455            yGamma_dQs_phiQ(:) = 0.
    2456            ydTs_ins(:) = 0.
    2457            ydqs_ins(:) = 0.
    2458          ENDIF   ! (iflag_split .eq. 2)
    2459        ENDIF  ! (iflag_split .eq.0)
    2460 !!!
    2461        IF (prt_level >=10) THEN
    2462          DO i = 1, min(1,knon)
    2463            PRINT *,'pbl_surface (merge->): yt(1,:) ',yt(i,:)
    2464            PRINT *,'pbl_surface (merge->): yq(1,:) ',yq(i,:)
    2465            PRINT *,'pbl_surface (merge->): yu(1,:) ',yu(i,:)
    2466            PRINT *,'pbl_surface (merge->): yv(1,:) ',yv(i,:)
    2467            PRINT *,'pbl_surface (merge->): AcoefH(1), AcoefQ(1), AcoefU(1), AcoefV(1) ', &
    2468                                            AcoefH(i), AcoefQ(i), AcoefU(i), AcoefV(i)
    2469            PRINT *,'pbl_surface (merge->): BcoefH(1), BcoefQ(1), BcoefU(1), BcoefV(1) ', &
    2470                                            BcoefH(i), BcoefQ(i), BcoefU(i), BcoefV(i)
    2471          ENDDO
    2472 
    2473        ENDIF
    2474 
    2475 !  Save initial value of z0h for use in evappot (z0h wiil be computed again in the surface models)
    2476           yz0h_old(1:knon) = yz0h(1:knon)
    2477 !
    2478 !****************************************************************************************
    2479 !
    2480 ! Calulate t2m and q2m for the case of calculation at land grid points
    2481 ! t2m and q2m are needed as input to ORCHIDEE
    2482 !
    2483 !****************************************************************************************
    2484        IF (nsrf == is_ter) THEN
    2485 
    2486           DO i = 1, knon
    2487              zgeo1(i) = RD * yt(i,1) / (0.5*(ypaprs(i,1)+ypplay(i,1))) &
    2488                   * (ypaprs(i,1)-ypplay(i,1))
    2489           ENDDO
    2490 
    2491           ! Calculate the temperature et relative humidity at 2m and the wind at 10m
    2492           IF (iflag_new_t2mq2m==1) THEN
    2493            CALL stdlevvarn(klon, knon, is_ter, zxli, &
    2494                yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, &
    2495                yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), &
    2496                yt2m, yq2m, yt10m, yq10m, yu10m, yustar, &
    2497                yn2mout(:, nsrf, :))
    2498           ELSE
    2499           CALL stdlevvar(klon, knon, is_ter, zxli, &
    2500                yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, &
    2501                yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), &
    2502                yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol)
    2503           ENDIF
    2504          
    2505        ENDIF
    2506 
    2507 !****************************************************************************************
    2508 !
    2509 ! 10) Switch according to current surface
    2510 !     It is necessary to start with the continental surfaces because the ocean
    2511 !     needs their run-off.
    2512 !
    2513 !****************************************************************************************
    2514        SELECT CASE(nsrf)
    2515      
    2516        CASE(is_ter)
    2517 !          print*,"DEBUGTS",yts(knon/2),ylwdown(knon/2)
    2518           CALL surf_land(itap, dtime, date0, jour, knon, ni,&
    2519                rlon, rlat, yrmu0, &
    2520                debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    2521 !!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2522                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    2523                AcoefH, AcoefQ, BcoefH, BcoefQ, &
    2524                AcoefU, AcoefV, BcoefU, BcoefV, &
    2525                ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2526                ylwdown, yq2m, yt2m, &
    2527                ysnow, yqsol, yagesno, ytsoil, &
    2528                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    2529                yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    2530                y_flux_u1, y_flux_v1, &
    2531                yveget,ylai,yheight, tsurf_tersrf, tsoil_tersrf, qsurf_tersrf, tsurf_new_tersrf, &
    2532                cdragm_tersrf, cdragh_tersrf, &
    2533                swnet_tersrf, lwnet_tersrf, fluxsens_tersrf, fluxlat_tersrf  &
    2534 !GG
    2535 !               yveget,ylai,yheight,hice,tice,bilg_cumul, &
    2536 !               fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
    2537 !               dtice_melt, dtice_snow2sic)
    2538                !GG
    2539 #ifdef ISO
    2540          &      ,yxtrain_f, yxtsnow_f,yxt1, &
    2541          &      yxtsnow,yxtsol,yxtevap,h1, &
    2542          &      yrunoff_diag,yxtrunoff_diag,yRland_ice &
    2543 #endif               
    2544          &      )
    2545 
    2546           tsurf_tersrf(:,:) =  tsurf_new_tersrf(:,:) ! for next time step
    2547 
    2548 !FC quid qd yveget ylai yheight ne sont pas definit
    2549 !FC  yveget,ylai,yheight, &
    2550             IF (ifl_pbltree .ge. 1) THEN
    2551               CALL   freinage(knon, yu, yv, yt, &
    2552 !                yveget,ylai, yheight,ypaprs,ypplay,y_d_u_frein,y_d_v_frein)
    2553                 yveget,ylai, yheight,ypaprs,ypplay,y_treedrg, y_d_u_frein,y_d_v_frein)
    2554             ENDIF
    2555 
    2556                
    2557 ! Special DICE MPL 05082013 puis BOMEX
    2558        IF (ok_prescr_ust) THEN
    2559           DO j=1,knon
    2560 !         ysnow(:)=0.
    2561 !         yqsol(:)=0.
    2562 !         yagesno(:)=50.
    2563 !         ytsoil(:,:)=300.
    2564 !         yz0_new(:)=0.001
    2565 !         yevap(:)=flat/RLVTT
    2566 !         yfluxlat(:)=-flat
    2567 !         yfluxsens(:)=-fsens
    2568 !         yqsurf(:)=0.
    2569 !         ytsurf_new(:)=tg
    2570 !         y_dflux_t(:)=0.
    2571 !         y_dflux_q(:)=0.
    2572           y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
    2573           y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
    2574           ENDDO
    2575       ENDIF
    2576 
    2577 #ifdef ISOVERIF
    2578         DO j=1,knon
    2579           DO ixt=1,ntraciso
    2580             CALL iso_verif_noNaN(yxtevap(ixt,j), &
    2581          &      'pbl_surface 1056a: apres surf_land')
    2582           ENDDO
    2583           DO ixt=1,niso
    2584             CALL iso_verif_noNaN(yxtsol(ixt,j), &
    2585          &      'pbl_surface 1056b: apres surf_land')
    2586           ENDDO
    2587         ENDDO
    2588 #endif
    2589 #ifdef ISOVERIF
    2590 !        write(*,*) 'pbl_surface_mod 1038: sortie surf_land'
    2591         DO j=1,knon
    2592           IF (iso_eau >= 0) THEN     
    2593                  CALL iso_verif_egalite(yxtsnow(iso_eau,j), &
    2594      &                                  ysnow(j),'pbl_surf_mod 1043')
    2595           ENDIF !if (iso_eau.gt.0) then
    2596         ENDDO !DO i=1,klon
    2597 #endif
    2598    
    2599        CASE(is_lic)
    2600           ! Martin
    2601 
    2602           IF (landice_opt .LT. 2) THEN
    2603              ! Land ice is treated by LMDZ and not by ORCHIDEE
    2604              CALL surf_landice(itap, dtime, knon, ni, &
    2605                   rlon, rlat, debut, lafin, &
    2606                   yrmu0, ylwdown, yalb, zgeo1, &
    2607                   ysolsw, ysollw, yts, ypplay(:,1), &
    2608                   ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    2609                   AcoefH, AcoefQ, BcoefH, BcoefQ, &
    2610                   AcoefU, AcoefV, BcoefU, BcoefV, &
    2611                   AcoefQBS, BcoefQBS, &
    2612                   ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2613                   ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    2614                   ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yicesub_lic, yfluxsens,yfluxlat, &
    2615                   yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    2616                   yzmea, yzsig, ycldt, &
    2617                   ysnowhgt, yqsnow, ytoice, ysissnow, &
    2618                   yalb3_new, yrunoff, &
    2619                   y_flux_u1, y_flux_v1 &
    2620 #ifdef ISO
    2621                   &    ,yxtrain_f, yxtsnow_f,yxt1,yRland_ice &
    2622                   &    ,yxtsnow,yxtsol,yxtevap &
    2623 #endif             
    2624                   &    )
    2625              
    2626              !jyg<
    2627              !!          alb3_lic(:)=0.
    2628              !>jyg
    2629              DO j = 1, knon
    2630                 i = ni(j)
    2631                 alb3_lic(i) = yalb3_new(j)
    2632                 snowhgt(i)   = ysnowhgt(j)
    2633                 qsnow(i)     = yqsnow(j)
    2634                 to_ice(i)    = ytoice(j)
    2635                 sissnow(i)   = ysissnow(j)
    2636                 runoff(i)    = yrunoff(j)
    2637                 icesub_lic(i) = yicesub_lic(j)*ypct(j)
    2638              ENDDO
    2639              ! Martin
    2640              ! Special DICE MPL 05082013 puis BOMEX MPL 20150410
    2641              IF (ok_prescr_ust) THEN
    2642                 DO j=1,knon
    2643                    y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
    2644                    y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
    2645                 ENDDO
    2646              ENDIF
    2647 
    2648 #ifdef ISOVERIF
    2649              DO j=1,knon
    2650                DO ixt=1,ntraciso
    2651                  CALL iso_verif_noNaN(yxtevap(ixt,j), &
    2652                         &             'pbl_surface 1095a: apres surf_landice')
    2653                ENDDO
    2654                 do ixt=1,niso
    2655                    call iso_verif_noNaN(yxtsol(ixt,j), &
    2656                         &      'pbl_surface 1095b: apres surf_landice')
    2657                 enddo
    2658              enddo
    2659 #endif
    2660 #ifdef ISOVERIF
    2661              !write(*,*) 'pbl_surface_mod 1060: sortie surf_landice'
    2662              do j=1,knon
    2663                IF (iso_eau >= 0) THEN     
    2664                  CALL iso_verif_egalite(yxtsnow(iso_eau,j), &
    2665                         &               ysnow(j),'pbl_surf_mod 1064')
    2666                ENDIF !if (iso_eau >= 0) THEN
    2667              ENDDO !DO i=1,klon
    2668 #endif
    2669            
    2670           END IF
    2671          
    2672        CASE(is_oce)
    2673 
    2674 !GG
    2675 ! calculate length scale PBL
    2676 
    2677         if (iflag_leads == 1) then
    2678         ydthetadz = 999999.
    2679         ypphii = 999999.
    2680         ytheta = 999999.
    2681 
    2682         DO k = 1, klev
    2683           DO j = 1, knon
    2684              ytheta(j,k) = yt(j,k)*(ypplay(j,k)/1.e5)**(RD/RCPD)
    2685           ENDDO
    2686         ENDDO
    2687 
    2688         DO k = 2, klev
    2689           DO j = 1, knon
    2690              ydthetadz(j,k) = RG*( ytheta(j,k) - ytheta(j,k-1) ) / ( ypphi(j,k) - ypphi(j,k-1) )
    2691              ypphii(j,k) = (ypphi(j,k)+ypphi(j,k-1))/(RG*2.)
    2692           ENDDO
    2693         ENDDO
    2694 
    2695         DO j = 1, knon
    2696             ! print *, "ypphii(j,:)=", ypphii(j,:)
    2697             ! print *, "ypplay(j,:)=", ypplay(j,:)
    2698             ! print *, "ytheta(j,:)=", ytheta(j,:)
    2699             ! print *, "minloc(abs(ypphii(j,:)-300))=",
    2700             ! minloc(abs(ypphii(j,:)-300),1)
    2701              k= minloc(abs(ypphii(j,:)-300),1)
    2702              ydthetadz300(j)=ydthetadz(j,k)
    2703         ENDDO
    2704         end if
    2705 !GG
    2706            CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb_vis, &
    2707                ywindsp, yrmu0, yfder, yts, &
    2708                itap, dtime, jour, knon, ni, &
    2709 !!jyg               ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2710                ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    2711                AcoefH, AcoefQ, BcoefH, BcoefQ, &
    2712                AcoefU, AcoefV, BcoefU, BcoefV, &
    2713                ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2714                ysnow, yqsurf, yagesno, &
    2715                yz0m, yz0h, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
    2716                ytsurf_new, y_dflux_t, y_dflux_q, slab_wfbils, &
    2717                y_flux_u1, y_flux_v1, ydelta_sst(:knon), ydelta_sal(:knon), &
    2718                yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), &
    2719            !GG    ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss)
    2720                ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss, &
    2721                ydthetadz300,Ampl                 &
    2722            !GG
    2723 #ifdef ISO
    2724          &      ,yxtrain_f, yxtsnow_f,yxt1,Roce, &
    2725          &      yxtsnow,yxtevap,h1 &
    2726 #endif               
    2727          &      )
    2728       IF (prt_level >=10) THEN
    2729           print *,'arg de surf_ocean: ycdragh ',ycdragh(1:knon)
    2730           print *,'arg de surf_ocean: ycdragm ',ycdragm(1:knon)
    2731           print *,'arg de surf_ocean: yt ', yt(1:knon,:)
    2732           print *,'arg de surf_ocean: yq ', yq(1:knon,:)
    2733           print *,'arg de surf_ocean: yts ', yts(1:knon)
    2734           print *,'arg de surf_ocean: AcoefH ',AcoefH(1:knon)
    2735           print *,'arg de surf_ocean: AcoefQ ',AcoefQ(1:knon)
    2736           print *,'arg de surf_ocean: BcoefH ',BcoefH(1:knon)
    2737           print *,'arg de surf_ocean: BcoefQ ',BcoefQ(1:knon)
    2738           print *,'arg de surf_ocean: yevap ',yevap(1:knon)
    2739           print *,'arg de surf_ocean: yfluxsens ',yfluxsens(1:knon)
    2740           print *,'arg de surf_ocean: yfluxlat ',yfluxlat(1:knon)
    2741           print *,'arg de surf_ocean: ytsurf_new ',ytsurf_new(1:knon)
    2742        ENDIF
    2743 ! Special DICE MPL 05082013 puis BOMEX MPL 20150410
    2744        IF (ok_prescr_ust) THEN
    2745           DO j=1,knon
    2746           y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
    2747           y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
    2748           ENDDO
    2749       ENDIF
    2750          
    2751        CASE(is_sic)
    2752           CALL surf_seaice( &
    2753 !albedo SB >>>
    2754                rlon, rlat, ysolsw, ysollw, yalb_vis, yfder, &
    2755 !albedo SB <<<
    2756                itap, dtime, jour, knon, ni, &
    2757                lafin, &
    2758 !!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2759                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
    2760                AcoefH, AcoefQ, BcoefH, BcoefQ, &
    2761                AcoefU, AcoefV, BcoefU, BcoefV, &
    2762                ypsref, yu1, yv1, ygustiness, pctsrf, &
    2763                ysnow, yqsurf, yqsol, yagesno, ytsoil, &
    2764 !albedo SB >>>
    2765                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
    2766 !albedo SB <<<
    2767                ytsurf_new, y_dflux_t, y_dflux_q, &
    2768 !GG               y_flux_u1, y_flux_v1)
    2769                y_flux_u1, y_flux_v1, &
    2770                hice,tice,bilg_cumul, &
    2771                fcds, fcdi, dh_basal_growth, dh_basal_melt, dh_top_melt, dh_snow2sic, &
    2772                dtice_melt, dtice_snow2sic     &
    2773 !GG
    2774 #ifdef ISO
    2775          &      ,yxtrain_f, yxtsnow_f,yxt1,Roce, &
    2776          &      yxtsnow,yxtsol,yxtevap,Rland_ice &
    2777 #endif               
    2778          &      )
    2779          
    2780 ! Special DICE MPL 05082013 puis BOMEX MPL 20150410
    2781        IF (ok_prescr_ust) THEN
    2782           DO j=1,knon
    2783           y_flux_u1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yu(j,1)*ypplay(j,1)/RD/yt(j,1)
    2784           y_flux_v1(j)=ycdragm(j)*(1.+sqrt(yu(j,1)*yu(j,1)+yv(j,1)*yv(j,1)))*yv(j,1)*ypplay(j,1)/RD/yt(j,1)
    2785           ENDDO
    2786        ENDIF
    2787 
    2788 #ifdef ISOVERIF
    2789         DO j=1,knon
    2790           DO ixt=1,ntraciso
    2791             CALL iso_verif_noNaN(yxtevap(ixt,j), &
    2792          &                       'pbl_surface 1165a: apres surf_seaice')
    2793           ENDDO
    2794           DO ixt=1,niso
    2795             CALL iso_verif_noNaN(yxtsol(ixt,j), &
    2796          &      'pbl_surface 1165b: apres surf_seaice')
    2797           ENDDO
    2798         ENDDO
    2799 #endif
    2800 #ifdef ISOVERIF
    2801         !write(*,*) 'pbl_surface_mod 1077: sortie surf_seaice'
    2802         DO j=1,knon
    2803           IF (iso_eau >= 0) THEN     
    2804                  CALL iso_verif_egalite(yxtsnow(iso_eau,j), &
    2805      &                                  ysnow(j),'pbl_surf_mod 1106')
    2806           ENDIF !IF (iso_eau >= 0) THEN
    2807         ENDDO !DO i=1,klon
    2808 #endif
    2809 
    2810        CASE DEFAULT
    2811           WRITE(lunout,*) 'Surface index = ', nsrf
    2812           abort_message = 'Surface index not valid'
    2813           CALL abort_physic(modname,abort_message,1)
    2814        END SELECT
    2815 
    2816 
    2817 !****************************************************************************************
    2818 ! 11) - Calcul the increment of surface temperature
    2819 !
    2820 !****************************************************************************************
    2821 
    2822        IF (evap0>=0.) THEN
    2823           yevap(1:knon)=evap0
    2824           yevap(1:knon)=RLVTT*evap0
    2825        ENDIF
    2826 
    2827        y_d_ts(1:knon)   = ytsurf_new(1:knon) - yts(1:knon)
    2828  
    2829 !****************************************************************************************
    2830 !
    2831 ! 12) "La remontee" - "The uphill"
    2832 !
    2833 !  The fluxes (y_flux_X) and tendancy (y_d_X) are calculated
    2834 !  for X=H, Q, U and V, for all vertical levels.
    2835 !
    2836 !****************************************************************************************
    2837 !!
    2838 !!!
    2839 !!! jyg le 10/04/2013 et EV 10/2020
    2840 
    2841         IF (ok_forc_tsurf) THEN
    2842             DO j=1,knon
    2843                 ytsurf_new(j)=tg
    2844                 y_d_ts(j) = ytsurf_new(j) - yts(j)
    2845             ENDDO
    2846         ENDIF ! ok_forc_tsurf
    2847 
    2848 !!!
    2849         IF (ok_flux_surf) THEN
    2850           IF (prt_level >=10) THEN
    2851            PRINT *,'pbl_surface: fsens flat RLVTT=',fsens,flat,RLVTT
    2852           ENDIF
    2853           y_flux_t1(:) =  fsens
    2854           y_flux_q1(:) =  flat/RLVTT
    2855           yfluxlat(:) =  flat
    2856 !
    2857 !!  Test sur iflag_split retire le 2/02/2018, sans vraiment comprendre la raison de ce test. (jyg)
    2858 !!          IF (iflag_split .eq.0) THEN
    2859              DO j=1,knon
    2860              Kech_h(j) = ycdragh(j) * (1.0+SQRT(yu(j,1)**2+yv(j,1)**2)) * &
    2861                   ypplay(j,1)/(RD*yt(j,1))
    2862              ENDDO
    2863 !!          ENDIF ! (iflag_split .eq.0)
    2864 
    2865           DO j = 1, knon
    2866             yt1_new=(1./RCPD)*(AcoefH(j)+BcoefH(j)*y_flux_t1(j)*dtime)
    2867             ytsurf_new(j)=yt1_new-y_flux_t1(j)/(Kech_h(j)*RCPD)
    2868             ! for cases forced in flux and for which forcing in Ts is needed
    2869             ! to prevent the latter to reach unrealistic value (even if not used,
    2870             ! Ts is calculated and hgardfou can appear during the calculation
    2871             ! of surface saturation humidity for example
    2872             if (ok_forc_tsurf) ytsurf_new(j)=tg
    2873           ENDDO
    2874 
    2875           DO j=1,knon
    2876           y_d_ts(j) = ytsurf_new(j) - yts(j)
    2877           ENDDO
    2878 
    2879         ELSE ! (ok_flux_surf)
    2880           DO j=1,knon
    2881           y_flux_t1(j) =  yfluxsens(j)
    2882           y_flux_q1(j) = -yevap(j)
    2883 #ifdef ISO
    2884           y_flux_xt1(:,:) = -yxtevap(:,:)
    2885 #endif
    2886           ENDDO
    2887         ENDIF ! (ok_flux_surf)
    2888 
    2889         ! flux of blowing snow at the first level
    2890         IF (ok_bs) THEN
    2891         DO j=1,knon
    2892         y_flux_bs(j)=yfluxbs(j)
    2893         ENDDO
    2894         ENDIF
    2895 !
    2896 ! ------------------------------------------------------------------------------
    2897 ! 12a)  Splitting
    2898 ! ------------------------------------------------------------------------------
    2899 
    2900        IF (iflag_split .GE. 1) THEN
    2901 #ifdef ISO
    2902         call abort_physic('pbl_surface_mod 2607','isos pas encore dans iflag_split=1',1)
    2903 #endif
    2904 !
    2905 !
    2906          IF (nsrf .ne. is_oce) THEN
    2907 !
    2908 !         Compute potential evaporation and aridity factor  (jyg, 20200328)
    2909           ybeta_prev(:) = ybeta(:)
    2910              DO j = 1, knon
    2911                yqa(j) = AcoefQ(j) - BcoefQ(j)*yevap(j)*dtime
    2912              ENDDO
    2913 !
    2914           CALL wx_evappot(knon, yqa, yTsurf_new, yevap_pot)
    2915 !
    2916           ybeta(1:knon) = min(yevap(1:knon)/yevap_pot(1:knon), 1.)
    2917          
    2918           IF (prt_level >=10) THEN
    2919            DO j=1,knon
    2920             print*,'y_flux_t1,yfluxlat,wakes' &
    2921  &                ,  y_flux_t1(j), yfluxlat(j), ywake_s(j)
    2922             print*,'beta_prev, beta, ytsurf_new', ybeta_prev(j), ybeta(j), ytsurf_new(j)
    2923             print*,'inertia,facteur,cstar', inertia, facteur,wake_cstar(j)
    2924            ENDDO
    2925           ENDIF  ! (prt_level >=10)
    2926 !
    2927 ! Second call to wx_pbl0_merge and wx_pbl_dts_merge in order to take into account
    2928 ! the update of the aridity coeficient beta.
    2929 !
    2930         CALL wx_pbl_prelim_beta(knon, dtime, ywake_s, ybeta,  &
    2931                         BcoefQ_x, BcoefQ_w  &
    2932                         )
    2933         CALL wx_pbl0_merge(knon, ypplay, ypaprs,  &
    2934                           ywake_s, ydTs0, ydqs0, &
    2935                           yt_x, yt_w, yq_x, yq_w, &
    2936                           yu_x, yu_w, yv_x, yv_w, &
    2937                           ycdragh_x, ycdragh_w, ycdragq_x, ycdragq_w, &
    2938                           ycdragm_x, ycdragm_w, &
    2939                           AcoefH_x, AcoefH_w, AcoefQ_x, AcoefQ_w, &
    2940                           AcoefU_x, AcoefU_w, AcoefV_x, AcoefV_w, &
    2941                           BcoefH_x, BcoefH_w, BcoefQ_x, BcoefQ_w, &
    2942                           BcoefU_x, BcoefU_w, BcoefV_x, BcoefV_w, &
    2943                           AcoefH_0, AcoefQ_0, AcoefU, AcoefV, &
    2944                           BcoefH_0, BcoefQ_0, BcoefU, BcoefV, &
    2945                           ycdragh, ycdragq, ycdragm, &
    2946                           yt1, yq1, yu1, yv1 &
    2947                           )
    2948           IF (iflag_split .eq. 2) THEN
    2949             CALL wx_pbl_dts_merge(knon, dtime, ypplay, ypaprs, &
    2950                             ywake_s, ybeta, ywake_cstar, ywake_dens, &
    2951                             AcoefH_x, AcoefH_w, &
    2952                             BcoefH_x, BcoefH_w, &
    2953                             AcoefH_0, AcoefQ_0, BcoefH_0, BcoefQ_0,  &
    2954                             AcoefH, AcoefQ, BcoefH, BcoefQ,  &
    2955                             HTphiT_b, dd_HTphiT, HTphiQ_b, dd_HTphiQ, HTRn_b, dd_HTRn, &
    2956                             phiT0_b, dphiT0, phiQ0_b, dphiQ0, Rn0_b, dRn0, &
    2957                             yg_T, yg_Q, &
    2958                             yGamma_dTs_phiT, yGamma_dQs_phiQ, &
    2959                             ydTs_ins, ydqs_ins &
    2960                             )
    2961           ELSE !
    2962             AcoefH(:) = AcoefH_0(:)
    2963             AcoefQ(:) = AcoefQ_0(:)
    2964             BcoefH(:) = BcoefH_0(:)
    2965             BcoefQ(:) = BcoefQ_0(:)
    2966             yg_T(:) = 0.
    2967             yg_Q(:) = 0.
    2968             yGamma_dTs_phiT(:) = 0.
    2969             yGamma_dQs_phiQ(:) = 0.
    2970             ydTs_ins(:) = 0.
    2971             ydqs_ins(:) = 0.
    2972           ENDIF   ! (iflag_split .eq. 2)
    2973 !
    2974         ELSE    ! (nsrf .ne. is_oce)
    2975           ybeta(1:knon) = 1.
    2976           yevap_pot(1:knon) = yevap(1:knon)
    2977           AcoefH(:) = AcoefH_0(:)
    2978           AcoefQ(:) = AcoefQ_0(:)
    2979           BcoefH(:) = BcoefH_0(:)
    2980           BcoefQ(:) = BcoefQ_0(:)
    2981           yg_T(:) = 0.
    2982           yg_Q(:) = 0.
    2983           yGamma_dTs_phiT(:) = 0.
    2984           yGamma_dQs_phiQ(:) = 0.
    2985           ydTs_ins(:) = 0.
    2986           ydqs_ins(:) = 0.
    2987         ENDIF   ! (nsrf .ne. is_oce)
    2988 !
    2989         CALL wx_pbl_split(knon, nsrf, dtime, ywake_s, ybeta, iflag_split, &
    2990                        yg_T, yg_Q, &
    2991                        yGamma_dTs_phiT, yGamma_dQs_phiQ, &
    2992                        ydTs_ins, ydqs_ins, &
    2993                        y_flux_t1, y_flux_q1, y_flux_u1, y_flux_v1, &
    2994 !!!!                       HTRn_b, dd_HTRn, HTphiT_b, dd_HTphiT, &
    2995                        phiQ0_b, phiT0_b, &
    2996                        y_flux_t1_x, y_flux_t1_w, &
    2997                        y_flux_q1_x, y_flux_q1_w, &
    2998                        y_flux_u1_x, y_flux_u1_w, &
    2999                        y_flux_v1_x, y_flux_v1_w, &
    3000                        yfluxlat_x, yfluxlat_w, &
    3001                        y_delta_qsats, &
    3002                        y_delta_tsurf_new, y_delta_qsurf &
    3003                        )
    3004 !
    3005          CALL wx_pbl_check(knon, dtime, ypplay, ypaprs, ywake_s, ybeta, iflag_split, &
    3006                        yTs, y_delta_tsurf,  &
    3007                        yqsurf, yTsurf_new,  &
    3008                        y_delta_tsurf_new, y_delta_qsats,  &
    3009                        AcoefH_x, AcoefH_w, &
    3010                        BcoefH_x, BcoefH_w, &
    3011                        AcoefH_0, AcoefQ_0, BcoefH_0, BcoefQ_0,  &
    3012                        AcoefH, AcoefQ, BcoefH, BcoefQ,  &
    3013                        y_flux_t1, y_flux_q1,  &
    3014                        y_flux_t1_x, y_flux_t1_w, &
    3015                        y_flux_q1_x, y_flux_q1_w)
    3016 !
    3017          IF (nsrf .ne. is_oce) THEN
    3018            CALL wx_pbl_dts_check(knon, dtime, ypplay, ypaprs, ywake_s, ybeta, iflag_split, &
    3019                          yTs, y_delta_tsurf,  &
    3020                          yqsurf, yTsurf_new,  &
    3021                          y_delta_qsats, y_delta_tsurf_new, y_delta_qsurf,  &
    3022                          AcoefH_x, AcoefH_w, &
    3023                          BcoefH_x, BcoefH_w, &
    3024                          AcoefH_0, AcoefQ_0, BcoefH_0, BcoefQ_0,  &
    3025                          AcoefH, AcoefQ, BcoefH, BcoefQ,  &
    3026                          HTphiT_b, dd_HTphiT, HTphiQ_b, dd_HTphiQ, HTRn_b, dd_HTRn, &
    3027                          phiT0_b, dphiT0, phiQ0_b, dphiQ0, Rn0_b, dRn0, &
    3028                          yg_T, yg_Q, &
    3029                          yGamma_dTs_phiT, yGamma_dQs_phiQ, &
    3030                          ydTs_ins, ydqs_ins, &
    3031                          y_flux_t1, y_flux_q1,  &
    3032                          y_flux_t1_x, y_flux_t1_w, &
    3033                          y_flux_q1_x, y_flux_q1_w )
    3034          ENDIF   ! (nsrf .ne. is_oce)
    3035 !
    3036        ELSE  ! (iflag_split .ge. 1)
    3037          ybeta(1:knon) = 1.
    3038          yevap_pot(1:knon) = yevap(1:knon)
    3039        ENDIF  ! (iflag_split .ge. 1)
    3040 !
    3041        IF (prt_level >= 10) THEN
    3042          print *,'pbl_surface, ybeta , yevap, yevap_pot ', &
    3043                                ybeta(1:knon) , yevap(1:knon), yevap_pot(1:knon)
    3044        ENDIF  ! (prt_level >= 10)
    3045 !
    3046 !>jyg
    3047 !
    3048  
    3049 !!jyg!!   A reprendre apres reflexion   ===============================================
    3050 !!jyg!!
    3051 !!jyg!!        DO j=1,knon
    3052 !!jyg!!!!! nrlmd le 13/06/2011
    3053 !!jyg!!
    3054 !!jyg!!!----Diffusion dans le sol dans le cas continental seulement
    3055 !!jyg!!       IF (nsrf.eq.is_ter) THEN
    3056 !!jyg!!!----Calcul du coefficient delta_coeff
    3057 !!jyg!!          tau_eq(j)=(ywake_s(j)/2.)*(1./max(wake_cstar(j),0.01))*sqrt(0.4/(3.14*max(wake_dens(j),8e-12)))
    3058 !!jyg!!
    3059 !!jyg!!!          delta_coef(j)=dtime/(inertia*sqrt(tau_eq(j)))
    3060 !!jyg!!          delta_coef(j)=facteur*sqrt(tau_eq(j))/inertia
    3061 !!jyg!!!          delta_coef(j)=0.
    3062 !!jyg!!       ELSE
    3063 !!jyg!!         delta_coef(j)=0.
    3064 !!jyg!!       ENDIF
    3065 !!jyg!!
    3066 !!jyg!!!----Calcul de delta_tsurf
    3067 !!jyg!!         y_delta_tsurf(j)=delta_coef(j)*y_delta_flux_t1(j)
    3068 !!jyg!!
    3069 !!jyg!!!----Si il n'y a pas des poches...
    3070 !!jyg!!         IF (wake_cstar(j).le.0.01) THEN
    3071 !!jyg!!           y_delta_tsurf(j)=0.
    3072 !!jyg!!           y_delta_flux_t1(j)=0.
    3073 !!jyg!!         ENDIF
    3074 !!jyg!!
    3075 !!jyg!!!-----Calcul de ybeta (evap_r\'eelle/evap_potentielle)
    3076 !!jyg!!!!!!! jyg le 23/02/2012
    3077 !!jyg!!!!!!!
    3078 !!jyg!!!!        ybeta(j)=y_flux_q1(j)   /    &
    3079 !!jyg!!!! &        (Kech_h(j)*(yq(j,1)-yqsatsurf(j)))
    3080 !!jyg!!!!!!        ybeta(j)=-1.*yevap(j)   /    &
    3081 !!jyg!!!!!! &        (ywake_s(j)*Kech_h_w(j)*(yq_w(j,1)-yqsatsurf_w(j))+(1.-ywake_s(j))*Kech_h_x(j)*(yq_x(j,1)-yqsatsurf_x(j)))
    3082 !!jyg!!!!!!! fin jyg
    3083 !!jyg!!!!!
    3084 !!jyg!!
    3085 !!jyg!!       ENDDO
    3086 !!jyg!!
    3087 !!jyg!!!!! fin nrlmd le 13/06/2011
    3088 !!jyg!!
    3089        IF (iflag_split .ge. 1) THEN
    3090        IF (prt_level >=10) THEN
    3091         DO j = 1, knon
    3092          print*,'Chx,Chw,Ch', ycdragh_x(j), ycdragh_w(j), ycdragh(j)
    3093          print*,'Khx,Khw,Kh', Kech_h_x(j), Kech_h_w(j), Kech_h(j)
    3094          print*,'t1x, t1w, t1, t1_ancien', &
    3095  &               yt_x(j,1), yt_w(j,1),  yt(j,1), t(j,1)
    3096          print*,'delta_coef,delta_flux,delta_tsurf,tau', delta_coef(j), y_delta_flux_t1(j), y_delta_tsurf(j), tau_eq(j)
    3097         ENDDO
    3098 
    3099         DO j=1,knon
    3100          print*,'fluxT_x, fluxT_w, y_flux_t1, fluxQ_x, fluxQ_w, yfluxlat, wakes' &
    3101  &             , y_flux_t1_x(j), y_flux_t1_w(j), y_flux_t1(j), y_flux_q1_x(j)*RLVTT, y_flux_q1_w(j)*RLVTT, yfluxlat(j), ywake_s(j)
    3102          print*,'beta, ytsurf_new ', ybeta(j), ytsurf_new(j)
    3103          print*,'inertia, facteur, cstar', inertia, facteur,wake_cstar(j)
    3104         ENDDO
    3105        ENDIF  ! (prt_level >=10)
    3106 
    3107 !!! jyg le 07/02/2012
    3108        ENDIF  ! (iflag_split .ge.1)
    3109 !!!
    3110 
    3111 !!! jyg le 07/02/2012
    3112        IF (iflag_split .eq.0) THEN
    3113 !!!
    3114 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    3115         CALL climb_hq_up(knon, ni, dtime, yt, yq, &
    3116             y_flux_q1, y_flux_t1, ypaprs, ypplay, &
    3117 !!! jyg le 07/02/2012
    3118             AcoefH, AcoefQ, BcoefH, BcoefQ, &
    3119             CcoefH, CcoefQ, DcoefH, DcoefQ, &
    3120             Kcoef_hq, gama_q, gama_h, &
    3121 !!!
    3122             y_flux_q(:,:), y_flux_t(:,:), y_d_q(:,:), y_d_t(:,:) &
    3123 #ifdef ISO
    3124         &    ,yxt,y_flux_xt1 &
    3125         &    ,AcoefXT,BcoefXT,CcoefXT,DcoefXT,gama_xt &
    3126         &    ,y_flux_xt(:,:,:),y_d_xt(:,:,:) &
    3127 #endif
    3128         &    )   
    3129        ELSE  !(iflag_split .eq.0)
    3130         CALL climb_hq_up(knon, ni, dtime, yt_x, yq_x, &
    3131             y_flux_q1_x, y_flux_t1_x, ypaprs, ypplay, &
    3132 !!! nrlmd le 02/05/2011
    3133             AcoefH_x, AcoefQ_x, BcoefH_x, BcoefQ_x, &
    3134             CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x, &
    3135             Kcoef_hq_x, gama_q_x, gama_h_x, &
    3136 !!!
    3137             y_flux_q_x(:,:), y_flux_t_x(:,:), y_d_q_x(:,:), y_d_t_x(:,:) &
    3138 #ifdef ISO
    3139         &    ,yxt_x,y_flux_xt1_x &
    3140         &    ,AcoefXT_x,BcoefXT_x,CcoefXT_x,DcoefXT_x,gama_xt_x &
    3141         &    ,y_flux_xt_x(:,:,:),y_d_xt_x(:,:,:) &
    3142 #endif
    3143         &    )   
    3144 !
    3145        CALL climb_hq_up(knon, ni, dtime, yt_w, yq_w, &
    3146             y_flux_q1_w, y_flux_t1_w, ypaprs, ypplay, &
    3147 !!! nrlmd le 02/05/2011
    3148             AcoefH_w, AcoefQ_w, BcoefH_w, BcoefQ_w, &
    3149             CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w, &
    3150             Kcoef_hq_w, gama_q_w, gama_h_w, &
    3151 !!!
    3152             y_flux_q_w(:,:), y_flux_t_w(:,:), y_d_q_w(:,:), y_d_t_w(:,:) &
    3153 #ifdef ISO
    3154         &    ,yxt_w,y_flux_xt1_w &
    3155         &    ,AcoefXT_w,BcoefXT_w,CcoefXT_w,DcoefXT_w,gama_xt_w &
    3156         &    ,y_flux_xt_w(:,:,:),y_d_xt_w(:,:,:) &
    3157 #endif
    3158         &    )   
    3159 !!!
    3160        ENDIF  ! (iflag_split .eq.0)
    3161 !!!
    3162 
    3163 !!! jyg le 07/02/2012
    3164        IF (iflag_split .eq.0) THEN
    3165 !!!
    3166 !!! nrlmd & jyg les 02/05/2011, 13/06/2011, 05/02/2012
    3167         CALL climb_wind_up(knon, ni, dtime, yu, yv, y_flux_u1, y_flux_v1, &
    3168 !!! jyg le 07/02/2012
    3169             AcoefU, AcoefV, BcoefU, BcoefV, &
    3170             CcoefU, CcoefV, DcoefU, DcoefV, &
    3171             Kcoef_m, &
    3172 !!!
    3173             y_flux_u, y_flux_v, y_d_u, y_d_v)
    3174      y_d_t_diss(:,:)=0.
    3175      IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
    3176         CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    3177     &   ,yu,yv,yt,y_d_u,y_d_v,y_d_t,ycdragm,ytke,ycoefm,ycoefh,ycoefq,y_d_t_diss,yustar &
    3178     &   ,iflag_pbl)
    3179      ENDIF
    3180 !     print*,'yamada_c OK'
    3181 
    3182        ELSE  !(iflag_split .eq.0)
    3183         CALL climb_wind_up(knon, ni, dtime, yu_x, yv_x, y_flux_u1_x, y_flux_v1_x, &
    3184 !!! nrlmd le 02/05/2011
    3185             AcoefU_x, AcoefV_x, BcoefU_x, BcoefV_x, &
    3186             CcoefU_x, CcoefV_x, DcoefU_x, DcoefV_x, &
    3187             Kcoef_m_x, &
    3188 !!!
    3189             y_flux_u_x, y_flux_v_x, y_d_u_x, y_d_v_x)
    3190 !
    3191      y_d_t_diss_x(:,:)=0.
    3192      IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
    3193         CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    3194     &   ,yu_x,yv_x,yt_x,y_d_u_x,y_d_v_x,y_d_t_x,ycdragm_x,ytke_x,ycoefm_x,ycoefh_x &
    3195         ,ycoefq_x,y_d_t_diss_x,yustar_x &
    3196     &   ,iflag_pbl)
    3197      ENDIF
    3198 !     print*,'yamada_c OK'
    3199 
    3200         CALL climb_wind_up(knon, ni, dtime, yu_w, yv_w, y_flux_u1_w, y_flux_v1_w, &
    3201 !!! nrlmd le 02/05/2011
    3202             AcoefU_w, AcoefV_w, BcoefU_w, BcoefV_w, &
    3203             CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w, &
    3204             Kcoef_m_w, &
    3205 !!!
    3206             y_flux_u_w, y_flux_v_w, y_d_u_w, y_d_v_w)
    3207 !!!
    3208      y_d_t_diss_w(:,:)=0.
    3209      IF (iflag_pbl>=20 .and. iflag_pbl<30) THEN
    3210         CALL yamada_c(knon, knon,dtime,ypaprs,ypplay &
    3211     &   ,yu_w,yv_w,yt_w,y_d_u_w,y_d_v_w,y_d_t_w,ycdragm_w,ytke_w,ycoefm_w,ycoefh_w &
    3212         ,ycoefq_w,y_d_t_diss_w,yustar_w &
    3213     &   ,iflag_pbl)
    3214      ENDIF
    3215 !     print*,'yamada_c OK'
    3216 !
    3217         IF (prt_level >=10) THEN
    3218          print *, 'After climbing up, lfuxlat_x, fluxlat_w ', &
    3219                yfluxlat_x(1:knon), yfluxlat_w(1:knon)
    3220         ENDIF
    3221 !
    3222        ENDIF  ! (iflag_split .eq.0)
    3223 
    3224        IF (ok_bs) THEN
    3225             CALL climb_qbs_up(knon, ni, dtime, yqbs, &
    3226             y_flux_bs, ypaprs, ypplay, &
    3227             AcoefQBS, BcoefQBS, &
    3228             CcoefQBS, DcoefQBS, &
    3229             Kcoef_qbs, gama_qbs, &
    3230             y_flux_qbs(:,:), y_d_qbs(:,:))
    3231        ENDIF
    3232 
    3233 !!!
    3234 !!
    3235 !!        DO j = 1, knon
    3236 !!          y_dflux_t(j) = y_dflux_t(j) * ypct(j)
    3237 !!          y_dflux_q(j) = y_dflux_q(j) * ypct(j)
    3238 !!        ENDDO
    3239 !!
    3240 !****************************************************************************************
    3241 ! 13) Transform variables for output format :
    3242 !     - Decompress
    3243 !     - Multiply with pourcentage of current surface
    3244 !     - Cumulate in global variable
    3245 !
    3246 !****************************************************************************************
    3247 
    3248 
    3249 !!! jyg le 07/02/2012
    3250        IF (iflag_split.EQ.0) THEN
    3251 !!!
    3252         DO k = 1, klev
    3253            DO j = 1, knon
    3254              i = ni(j)
    3255              y_d_t_diss(j,k)  = y_d_t_diss(j,k) * ypct(j)
    3256              y_d_t(j,k)  = y_d_t(j,k) * ypct(j)
    3257              y_d_q(j,k)  = y_d_q(j,k) * ypct(j)
    3258              y_d_u(j,k)  = y_d_u(j,k) * ypct(j)
    3259              y_d_v(j,k)  = y_d_v(j,k) * ypct(j)
    3260 !FC
    3261              IF  (nsrf .EQ. is_ter .and. ifl_pbltree .GE. 1) THEN
    3262 !            if (y_d_u_frein(j,k).ne.0. ) then
    3263 !        print*, nsrf,'IS_TER ++', y_d_u_frein(j,k)*ypct(j),y_d_u(j,k),j,k
    3264 !            ENDIF
    3265                y_d_u(j,k) =y_d_u(j,k) + y_d_u_frein(j,k)*ypct(j)
    3266                y_d_v(j,k) =y_d_v(j,k) + y_d_v_frein(j,k)*ypct(j)
    3267                treedrg(i,k,nsrf)=y_treedrg(j,k)
    3268              ELSE
    3269                treedrg(i,k,nsrf)=0.
    3270              ENDIF
    3271 !FC
    3272              flux_t(i,k,nsrf) = y_flux_t(j,k)
    3273              flux_q(i,k,nsrf) = y_flux_q(j,k)
    3274              flux_u(i,k,nsrf) = y_flux_u(j,k)
    3275              flux_v(i,k,nsrf) = y_flux_v(j,k)
    3276 
    3277 #ifdef ISO
    3278              DO ixt=1,ntraciso
    3279                 y_d_xt(ixt,j,k)  = y_d_xt(ixt,j,k) * ypct(j)
    3280                 flux_xt(ixt,i,k,nsrf) = y_flux_xt(ixt,j,k)
    3281              ENDDO ! DO ixt=1,ntraciso
    3282              h1_diag(i)=h1(j)
    3283 #endif
    3284 
    3285            ENDDO
    3286         ENDDO
    3287 
    3288 #ifdef ISO
    3289 #ifdef ISOVERIF
    3290         if (iso_eau.gt.0) then
    3291          call iso_verif_egalite_vect2D( &
    3292                 y_d_xt,y_d_q, &
    3293                 'pbl_surface_mod 2600',ntraciso,klon,klev)
    3294         endif       
    3295 #endif
    3296 #endif
    3297 
    3298        ELSE  !(iflag_split .eq.0)
    3299 
    3300 ! Tendances hors poches
    3301         DO k = 1, klev
    3302           DO j = 1, knon
    3303             i = ni(j)
    3304             y_d_t_diss_x(j,k)  = y_d_t_diss_x(j,k) * ypct(j)
    3305             y_d_t_x(j,k)  = y_d_t_x(j,k) * ypct(j)
    3306             y_d_q_x(j,k)  = y_d_q_x(j,k) * ypct(j)
    3307             y_d_u_x(j,k)  = y_d_u_x(j,k) * ypct(j)
    3308             y_d_v_x(j,k)  = y_d_v_x(j,k) * ypct(j)
    3309 
    3310             flux_t_x(i,k,nsrf) = y_flux_t_x(j,k)
    3311             flux_q_x(i,k,nsrf) = y_flux_q_x(j,k)
    3312             flux_u_x(i,k,nsrf) = y_flux_u_x(j,k)
    3313             flux_v_x(i,k,nsrf) = y_flux_v_x(j,k)
    3314 
    3315 #ifdef ISO
    3316             DO ixt=1,ntraciso
    3317               y_d_xt_x(ixt,j,k)  = y_d_xt_x(ixt,j,k) * ypct(j)
    3318               flux_xt_x(ixt,i,k,nsrf) = y_flux_xt_x(ixt,j,k)
    3319             ENDDO ! DO ixt=1,ntraciso
    3320 #endif
    3321           ENDDO
    3322         ENDDO
    3323 
    3324 ! Tendances dans les poches
    3325         DO k = 1, klev
    3326           DO j = 1, knon
    3327             i = ni(j)
    3328             y_d_t_diss_w(j,k)  = y_d_t_diss_w(j,k) * ypct(j)
    3329             y_d_t_w(j,k)  = y_d_t_w(j,k) * ypct(j)
    3330             y_d_q_w(j,k)  = y_d_q_w(j,k) * ypct(j)
    3331             y_d_u_w(j,k)  = y_d_u_w(j,k) * ypct(j)
    3332             y_d_v_w(j,k)  = y_d_v_w(j,k) * ypct(j)
    3333 
    3334             flux_t_w(i,k,nsrf) = y_flux_t_w(j,k)
    3335             flux_q_w(i,k,nsrf) = y_flux_q_w(j,k)
    3336             flux_u_w(i,k,nsrf) = y_flux_u_w(j,k)
    3337             flux_v_w(i,k,nsrf) = y_flux_v_w(j,k)
    3338 
    3339 #ifdef ISO
    3340             DO ixt=1,ntraciso
    3341               y_d_xt_w(ixt,j,k)  = y_d_xt_w(ixt,j,k) * ypct(j)
    3342               flux_xt_w(ixt,i,k,nsrf) = y_flux_xt_w(ixt,j,k)
    3343             ENDDO ! do ixt=1,ntraciso
    3344 #endif
    3345 
    3346           ENDDO
    3347         ENDDO
    3348 
    3349 ! Flux, tendances et Tke moyenne dans la maille
    3350         DO k = 1, klev
    3351           DO j = 1, knon
    3352             i = ni(j)
    3353             flux_t(i,k,nsrf) = flux_t_x(i,k,nsrf)+ywake_s(j)*(flux_t_w(i,k,nsrf)-flux_t_x(i,k,nsrf))
    3354             flux_q(i,k,nsrf) = flux_q_x(i,k,nsrf)+ywake_s(j)*(flux_q_w(i,k,nsrf)-flux_q_x(i,k,nsrf))
    3355             flux_u(i,k,nsrf) = flux_u_x(i,k,nsrf)+ywake_s(j)*(flux_u_w(i,k,nsrf)-flux_u_x(i,k,nsrf))
    3356             flux_v(i,k,nsrf) = flux_v_x(i,k,nsrf)+ywake_s(j)*(flux_v_w(i,k,nsrf)-flux_v_x(i,k,nsrf))
    3357 #ifdef ISO
    3358             DO ixt=1,ntraciso
    3359               flux_xt(ixt,i,k,nsrf) = flux_xt_x(ixt,i,k,nsrf)+ywake_s(j)*(flux_xt_w(ixt,i,k,nsrf)-flux_xt_x(ixt,i,k,nsrf))
    3360             ENDDO ! do ixt=1,ntraciso
    3361 #endif
    3362           ENDDO
    3363         ENDDO
    3364         DO j=1,knon
    3365           yfluxlat(j)=yfluxlat_x(j)+ywake_s(j)*(yfluxlat_w(j)-yfluxlat_x(j))
    3366         ENDDO
    3367         IF (prt_level >=10) THEN
    3368           print *,' nsrf, flux_t(:,1,nsrf), flux_t_x(:,1,nsrf), flux_t_w(:,1,nsrf) ', &
    3369                     nsrf, flux_t(:,1,nsrf), flux_t_x(:,1,nsrf), flux_t_w(:,1,nsrf)
    3370         ENDIF
    3371 
    3372         DO k = 1, klev
    3373           DO j = 1, knon
    3374             y_d_t_diss(j,k) = y_d_t_diss_x(j,k)+ywake_s(j)*(y_d_t_diss_w(j,k) -y_d_t_diss_x(j,k))
    3375             y_d_t(j,k) = y_d_t_x(j,k)+ywake_s(j)*(y_d_t_w(j,k) -y_d_t_x(j,k))
    3376             y_d_q(j,k) = y_d_q_x(j,k)+ywake_s(j)*(y_d_q_w(j,k) -y_d_q_x(j,k))
    3377             y_d_u(j,k) = y_d_u_x(j,k)+ywake_s(j)*(y_d_u_w(j,k) -y_d_u_x(j,k))
    3378             y_d_v(j,k) = y_d_v_x(j,k)+ywake_s(j)*(y_d_v_w(j,k) -y_d_v_x(j,k))
    3379           ENDDO
    3380         ENDDO
    3381 
    3382        ENDIF  ! (iflag_split .eq.0)
    3383 
    3384 
    3385        ! tendencies of blowing snow
    3386        IF (ok_bs) THEN
    3387            DO k = 1, klev   
    3388             DO j = 1, knon
    3389                 i = ni(j)
    3390                 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
    3391                 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
    3392             ENDDO
    3393           ENDDO
    3394        ENDIF
    3395 
    3396 
    3397        DO j = 1, knon
    3398           i = ni(j)
    3399           evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
    3400           if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    3401           beta(i,nsrf) = ybeta(j)                             !jyg
    3402           d_ts(i,nsrf) = y_d_ts(j)
    3403 !albedo SB >>>
    3404           DO k=1,nsw
    3405             alb_dir(i,k,nsrf) = yalb_dir_new(j,k)
    3406             alb_dif(i,k,nsrf) = yalb_dif_new(j,k)
    3407           ENDDO
    3408 !albedo SB <<<
    3409           snow(i,nsrf) = ysnow(j) 
    3410           qsurf(i,nsrf) = yqsurf(j)
    3411           z0m(i,nsrf) = yz0m(j)
    3412           z0h(i,nsrf) = yz0h(j)
    3413           fluxlat(i,nsrf) = yfluxlat(j)
    3414           agesno(i,nsrf) = yagesno(j) 
    3415           cdragh(i) = cdragh(i) + ycdragh(j)*ypct(j)
    3416           cdragm(i) = cdragm(i) + ycdragm(j)*ypct(j)
    3417           dflux_t(i) = dflux_t(i) + y_dflux_t(j)*ypct(j)
    3418           dflux_q(i) = dflux_q(i) + y_dflux_q(j)*ypct(j)
    3419 #ifdef ISO
    3420         DO ixt=1,niso
    3421           xtsnow(ixt,i,nsrf) = yxtsnow(ixt,j) 
    3422         ENDDO
    3423         DO ixt=1,ntraciso
    3424           xtevap(ixt,i,nsrf) = - flux_xt(ixt,i,1,nsrf)
    3425           dflux_xt(ixt,i) = dflux_xt(ixt,i) + y_dflux_xt(ixt,j)*ypct(j)
    3426         ENDDO 
    3427         IF (nsrf == is_lic) THEN
    3428           DO ixt=1,niso
    3429             Rland_ice(ixt,i) = yRland_ice(ixt,j) 
    3430           ENDDO
    3431         ENDIF !IF (nsrf == is_lic) THEN     
    3432 #ifdef ISOVERIF
    3433         IF (iso_eau.gt.0) THEN 
    3434           call iso_verif_egalite_choix(Rland_ice(iso_eau,i),1.0, &
    3435      &         'pbl_surf_mod 1230',errmax,errmaxrel)
    3436         ENDIF !if (iso_eau.gt.0) then
    3437 #endif       
    3438 #endif
    3439        ENDDO
    3440 
    3441 !      print*,'Dans pbl OK2'
    3442 
    3443 !!! jyg le 07/02/2012
    3444        IF (iflag_split .ge.1) THEN
    3445 !!!
    3446 !!! nrlmd le 02/05/2011
    3447         DO j = 1, knon
    3448           i = ni(j)
    3449           fluxlat_x(i,nsrf) = yfluxlat_x(j)
    3450           fluxlat_w(i,nsrf) = yfluxlat_w(j)
    3451 !!!
    3452 !!! nrlmd le 13/06/2011
    3453 !!jyg20170131          delta_tsurf(i,nsrf)=y_delta_tsurf(j)*ypct(j)
    3454 !!jyg20210118          delta_tsurf(i,nsrf)=y_delta_tsurf(j)
    3455           delta_tsurf(i,nsrf)=y_delta_tsurf_new(j)
    3456 !
    3457           delta_qsurf(i) = delta_qsurf(i) + y_delta_qsurf(j)*ypct(j)
    3458 !
    3459           cdragh_x(i) = cdragh_x(i) + ycdragh_x(j)*ypct(j)
    3460           cdragh_w(i) = cdragh_w(i) + ycdragh_w(j)*ypct(j)
    3461           cdragm_x(i) = cdragm_x(i) + ycdragm_x(j)*ypct(j)
    3462           cdragm_w(i) = cdragm_w(i) + ycdragm_w(j)*ypct(j)
    3463           kh(i) = kh(i) + Kech_h(j)*ypct(j)
    3464           kh_x(i) = kh_x(i) + Kech_h_x(j)*ypct(j)
    3465           kh_w(i) = kh_w(i) + Kech_h_w(j)*ypct(j)
    3466 !!!
    3467         ENDDO
    3468 !!!     
    3469        ENDIF  ! (iflag_split .ge.1)
    3470 !!!
    3471 !!! nrlmd le 02/05/2011
    3472 !!jyg le 20/02/2011
    3473 !!        tke_x(:,:,nsrf)=0.
    3474 !!        tke_w(:,:,nsrf)=0.
    3475 !!jyg le 20/02/2011
    3476 !!        DO k = 1, klev+1
    3477 !!          DO j = 1, knon
    3478 !!            i = ni(j)
    3479 !!            wake_dltke(i,k,nsrf) = ytke_w(j,k) - ytke_x(j,k)
    3480 !!            tke(i,k,nsrf)   = ytke_x(j,k) + ywake_s(j)*wake_dltke(i,k,nsrf)
    3481 !!          ENDDO
    3482 !!        ENDDO
    3483 !!jyg le 20/02/2011
    3484 !!        DO k = 1, klev+1
    3485 !!          DO j = 1, knon
    3486 !!            i = ni(j)
    3487 !!            tke(i,k,nsrf)=(1.-ywake_s(j))*tke_x(i,k,nsrf)+ywake_s(j)*tke_w(i,k,nsrf)
    3488 !!          ENDDO
    3489 !!        ENDDO
    3490 !!!
    3491        IF (iflag_split .eq.0) THEN
    3492         wake_dltke(:,:,nsrf) = 0.
    3493         DO k = 1, klev+1
    3494            DO j = 1, knon
    3495               i = ni(j)
    3496 !jyg<
    3497 !!              tke(i,k,nsrf)    = ytke(j,k)
    3498 !!              tke(i,k,is_ave) = tke(i,k,is_ave) + ytke(j,k)*ypct(j)
    3499               tke_x(i,k,nsrf)    = ytke(j,k)
    3500               tke_x(i,k,is_ave)  = tke_x(i,k,is_ave) + ytke(j,k)*ypct(j)
    3501               eps_x(i,k,nsrf)    = yeps(j,k)
    3502               eps_x(i,k,is_ave)  = eps_x(i,k,is_ave) + yeps(j,k)*ypct(j)
    3503 !>jyg
    3504            ENDDO
    3505         ENDDO
    3506 
    3507        ELSE  ! (iflag_split .eq.0)
    3508         DO k = 1, klev+1
    3509           DO j = 1, knon
    3510             i = ni(j)
    3511             wake_dltke(i,k,nsrf) = ytke_w(j,k) - ytke_x(j,k)
    3512 !jyg<
    3513 !!            tke(i,k,nsrf)   = ytke_x(j,k) + ywake_s(j)*wake_dltke(i,k,nsrf)
    3514 !!            tke(i,k,is_ave) = tke(i,k,is_ave) + tke(i,k,nsrf)*ypct(j)
    3515             tke_x(i,k,nsrf)   = ytke_x(j,k)
    3516             tke_x(i,k,is_ave)   = tke_x(i,k,is_ave) + tke_x(i,k,nsrf)*ypct(j)       
    3517             eps_x(i,k,nsrf)   = yeps_x(j,k)
    3518             eps_x(i,k,is_ave)   = eps_x(i,k,is_ave) + eps_x(i,k,nsrf)*ypct(j)
    3519             wake_dltke(i,k,is_ave)   = wake_dltke(i,k,is_ave) + wake_dltke(i,k,nsrf)*ypct(j)
    3520            
    3521 
    3522 !>jyg
    3523           ENDDO
    3524         ENDDO
    3525        ENDIF  ! (iflag_split .eq.0)
    3526 !!!
    3527        DO k = 2, klev
    3528           DO j = 1, knon
    3529              i = ni(j)
    3530              zcoefh(i,k,nsrf) = ycoefh(j,k)
    3531              zcoefm(i,k,nsrf) = ycoefm(j,k)
    3532              zcoefh(i,k,is_ave) = zcoefh(i,k,is_ave) + ycoefh(j,k)*ypct(j)
    3533              zcoefm(i,k,is_ave) = zcoefm(i,k,is_ave) + ycoefm(j,k)*ypct(j)
    3534           ENDDO
    3535        ENDDO
    3536 
    3537 !      print*,'Dans pbl OK3'
    3538 
    3539        IF ( nsrf .EQ. is_ter ) THEN
    3540           DO j = 1, knon
    3541              i = ni(j)
    3542              qsol(i) = yqsol(j)
    3543 #ifdef ISO
    3544              runoff_diag(i)=yrunoff_diag(j)   
    3545              DO ixt=1,niso
    3546                xtsol(ixt,i) = yxtsol(ixt,j)
    3547                xtrunoff_diag(ixt,i)=yxtrunoff_diag(ixt,j)
    3548              ENDDO
    3549 #endif
    3550           ENDDO
    3551        ENDIF
    3552        
    3553 !jyg<
    3554 !!       ftsoil(:,:,nsrf) = 0.
    3555 !>jyg
    3556        DO k = 1, nsoilmx
    3557           DO j = 1, knon
    3558              i = ni(j)
    3559              ftsoil(i, k, nsrf) = ytsoil(j,k)
    3560           ENDDO
    3561        ENDDO
    3562 
    3563 #ifdef ISO
    3564 #ifdef ISOVERIF
    3565        !write(*,*) 'pbl_surface 2858'
    3566        DO i = 1, klon
    3567          DO ixt=1,niso
    3568            call iso_verif_noNaN(xtsol(ixt,i),'pbl_surface 1405')
    3569          ENDDO
    3570        ENDDO
    3571 #endif
    3572 #ifdef ISOVERIF
    3573      IF (iso_eau.gt.0) THEN
    3574         call iso_verif_egalite_vect2D( &
    3575                 y_d_xt,y_d_q, &
    3576                 'pbl_surface_mod 1261',ntraciso,klon,klev)
    3577      ENDIF !if (iso_eau.gt.0) then
    3578 #endif
    3579 #endif
    3580 !!! jyg le 07/02/2012
    3581        IF (iflag_split .ge.1) THEN
    3582 !!!
    3583 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    3584         DO k = 1, klev
    3585           DO j = 1, knon
    3586            i = ni(j)
    3587            d_t_diss_x(i,k) = d_t_diss_x(i,k) + y_d_t_diss_x(j,k)
    3588            d_t_x(i,k) = d_t_x(i,k) + y_d_t_x(j,k)
    3589            d_q_x(i,k) = d_q_x(i,k) + y_d_q_x(j,k)
    3590            d_u_x(i,k) = d_u_x(i,k) + y_d_u_x(j,k)
    3591            d_v_x(i,k) = d_v_x(i,k) + y_d_v_x(j,k)
    3592 !
    3593            d_t_diss_w(i,k) = d_t_diss_w(i,k) + y_d_t_diss_w(j,k)
    3594            d_t_w(i,k) = d_t_w(i,k) + y_d_t_w(j,k)
    3595            d_q_w(i,k) = d_q_w(i,k) + y_d_q_w(j,k)
    3596            d_u_w(i,k) = d_u_w(i,k) + y_d_u_w(j,k)
    3597            d_v_w(i,k) = d_v_w(i,k) + y_d_v_w(j,k)
    3598 #ifdef ISO
    3599            DO ixt=1,ntraciso
    3600              d_xt_x(ixt,i,k) = d_xt_x(ixt,i,k) + y_d_xt_x(ixt,j,k)
    3601              d_xt_w(ixt,i,k) = d_xt_w(ixt,i,k) + y_d_xt_w(ixt,j,k)
    3602            ENDDO ! DO ixt=1,ntraciso
    3603 #endif
    3604 
    3605 !
    3606 !!           d_wake_dlt(i,k) = d_wake_dlt(i,k) + y_d_t_w(i,k)-y_d_t_x(i,k)
    3607 !!           d_wake_dlq(i,k) = d_wake_dlq(i,k) + y_d_q_w(i,k)-y_d_q_x(i,k)
    3608           ENDDO
    3609         ENDDO
    3610 !!!
    3611        ENDIF  ! (iflag_split .ge.1)
    3612 !!!
    3613        
    3614        DO k = 1, klev
    3615           DO j = 1, knon
    3616              i = ni(j)
    3617              d_t_diss(i,k) = d_t_diss(i,k) + y_d_t_diss(j,k)
    3618              d_t(i,k) = d_t(i,k) + y_d_t(j,k)
    3619              d_q(i,k) = d_q(i,k) + y_d_q(j,k)
    3620 #ifdef ISO
    3621              DO ixt=1,ntraciso
    3622                d_xt(ixt,i,k) = d_xt(ixt,i,k) + y_d_xt(ixt,j,k)
    3623              ENDDO !DO ixt=1,ntraciso
    3624 #endif
    3625              d_u(i,k) = d_u(i,k) + y_d_u(j,k)
    3626              d_v(i,k) = d_v(i,k) + y_d_v(j,k)
    3627           ENDDO
    3628        ENDDO
    3629 
    3630 
    3631        IF (ok_bs) THEN
    3632          DO k = 1, klev
    3633          DO j = 1, knon
    3634          i = ni(j)
    3635          d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
    3636          ENDDO
    3637          ENDDO
    3638         ENDIF
    3639 
    3640 #ifdef ISO
    3641 #ifdef ISOVERIF
    3642 !        write(*,*) 'd_q,d_xt(iso_eau,554,19)=',d_q(554,19),d_xt(iso_eau,554,19)
    3643 !        write(*,*) 'pbl_surface 2929: d_q,d_xt(iso_eau,2,1)=',d_q(2,1),d_xt(iso_eau,2,1)
    3644 !        write(*,*) 'y_d_q,y_d_xt(iso_eau,2,1)=',y_d_q(2,1),y_d_xt(iso_eau,2,1)
    3645 !        write(*,*) 'iso_eau.gt.0=',iso_eau.gt.0
    3646         call iso_verif_noNaN_vect2D( &
    3647      &           d_xt, &
    3648      &           'pbl_surface 1385',ntraciso,klon,klev) 
    3649      IF (iso_eau >= 0) THEN
    3650         call iso_verif_egalite_vect2D( &
    3651                 y_d_xt,y_d_q, &
    3652                 'pbl_surface_mod 2945',ntraciso,klon,klev)
    3653         call iso_verif_egalite_vect2D( &
    3654                 d_xt,d_q, &
    3655                 'pbl_surface_mod 1276',ntraciso,klon,klev)
    3656      ENDIF !IF (iso_eau >= 0) THEN
    3657 #endif
    3658 #endif
    3659 
    3660 !      print*,'Dans pbl OK4'
    3661 
    3662        IF (prt_level >=10) THEN
    3663          print *, 'pbl_surface tendencies for w: d_t_w, d_t_x, d_t ', &
    3664           d_t_w(1:knon,1), d_t_x(1:knon,1), d_t(1:knon,1)
    3665        ENDIF
    3666 
    3667        if (nsrf == is_oce .and. activate_ocean_skin >= 1) then
    3668           delta_sal = missing_val
    3669           ds_ns = missing_val
    3670           dt_ns = missing_val
    3671           delta_sst = missing_val
    3672           dter = missing_val
    3673           dser = missing_val
    3674           tkt = missing_val
    3675           tks = missing_val
    3676           taur = missing_val
    3677           sss = missing_val
    3678          
    3679           delta_sal(ni(:knon)) = ydelta_sal(:knon)
    3680           ds_ns(ni(:knon)) = yds_ns(:knon)
    3681           dt_ns(ni(:knon)) = ydt_ns(:knon)
    3682           delta_sst(ni(:knon)) = ydelta_sst(:knon)
    3683           dter(ni(:knon)) = ydter(:knon)
    3684           dser(ni(:knon)) = ydser(:knon)
    3685           tkt(ni(:knon)) = ytkt(:knon)
    3686           tks(ni(:knon)) = ytks(:knon)
    3687           taur(ni(:knon)) = ytaur(:knon)
    3688           sss(ni(:knon)) = ysss(:knon)
    3689 
    3690           if (activate_ocean_skin == 2 .and. type_ocean == "couple") then
    3691              dt_ds = missing_val
    3692              dt_ds(ni(:knon)) = ydt_ds(:knon)
    3693           end if
    3694        end if
    3695 
    3696 
    3697 !****************************************************************************************
    3698 ! 14) Calculate the temperature and relative humidity at 2m and the wind at 10m
    3699 !     Call HBTM
    3700 !
    3701 !****************************************************************************************
    3702 !!!
    3703 !
    3704 #undef T2m     
    3705 #define T2m     
    3706 #ifdef T2m
    3707 ! Calculations of diagnostic t,q at 2m and u, v at 10m
    3708 
    3709 !      print*,'Dans pbl OK41'
    3710 !      print*,'tair1,yt(:,1),y_d_t(:,1)'
    3711 !      print*, tair1,yt(:,1),y_d_t(:,1)
    3712 !!! jyg le 07/02/2012
    3713        IF (iflag_split .eq.0) THEN
    3714         DO j=1, knon
    3715           uzon(j) = yu(j,1) + y_d_u(j,1)
    3716           vmer(j) = yv(j,1) + y_d_v(j,1)
    3717           tair1(j) = yt(j,1) + y_d_t(j,1) + y_d_t_diss(j,1)
    3718           qair1(j) = yq(j,1) + y_d_q(j,1)
    3719           zgeo1(j) = RD * tair1(j) / (0.5*(ypaprs(j,1)+ypplay(j,1))) &
    3720                * (ypaprs(j,1)-ypplay(j,1))
    3721           tairsol(j) = yts(j) + y_d_ts(j)
    3722           qairsol(j) = yqsurf(j)
    3723         ENDDO
    3724        ELSE  ! (iflag_split .eq.0)
    3725         DO j=1, knon
    3726           uzon_x(j) = yu_x(j,1) + y_d_u_x(j,1)
    3727           vmer_x(j) = yv_x(j,1) + y_d_v_x(j,1)
    3728           tair1_x(j) = yt_x(j,1) + y_d_t_x(j,1) + y_d_t_diss_x(j,1)
    3729           qair1_x(j) = yq_x(j,1) + y_d_q_x(j,1)
    3730           zgeo1_x(j) = RD * tair1_x(j) / (0.5*(ypaprs(j,1)+ypplay(j,1))) &
    3731                * (ypaprs(j,1)-ypplay(j,1))
    3732           tairsol(j) = yts(j) + y_d_ts(j)
    3733 !!          tairsol_x(j) = tairsol(j) - ywake_s(j)*y_delta_tsurf(j)
    3734           tairsol_x(j) = tairsol(j) - ywake_s(j)*y_delta_tsurf_new(j)
    3735           qairsol(j) = yqsurf(j)
    3736         ENDDO
    3737         DO j=1, knon
    3738           uzon_w(j) = yu_w(j,1) + y_d_u_w(j,1)
    3739           vmer_w(j) = yv_w(j,1) + y_d_v_w(j,1)
    3740           tair1_w(j) = yt_w(j,1) + y_d_t_w(j,1) + y_d_t_diss_w(j,1)
    3741           qair1_w(j) = yq_w(j,1) + y_d_q_w(j,1)
    3742           zgeo1_w(j) = RD * tair1_w(j) / (0.5*(ypaprs(j,1)+ypplay(j,1))) &
    3743                * (ypaprs(j,1)-ypplay(j,1))
    3744           tairsol_w(j) = tairsol(j) + (1.- ywake_s(j))*y_delta_tsurf(j)
    3745           qairsol(j) = yqsurf(j)
    3746         ENDDO
    3747 !!!     
    3748        ENDIF  ! (iflag_split .eq.0)
    3749 !!!
    3750        DO j=1, knon
    3751 !         i = ni(j)
    3752 !         yz0h_oupas(j) = yz0m(j)
    3753 !         IF(nsrf.EQ.is_oce) THEN
    3754 !            yz0h_oupas(j) = z0m(i,nsrf)
    3755 !         ENDIF
    3756           psfce(j)=ypaprs(j,1)
    3757           patm(j)=ypplay(j,1)
    3758        ENDDO
    3759 
    3760        IF (iflag_pbl_surface_t2m_bug==1) THEN
    3761           yz0h_oupas(1:knon)=yz0m(1:knon)
    3762        ELSE
    3763           yz0h_oupas(1:knon)=yz0h(1:knon)
    3764        ENDIF
    3765        
    3766 !      print*,'Dans pbl OK42A'
    3767 !      print*,'tair1,yt(:,1),y_d_t(:,1)'
    3768 !      print*, tair1,yt(:,1),y_d_t(:,1)
    3769 
    3770 ! Calculate the temperature and relative humidity at 2m and the wind at 10m
    3771 !!! jyg le 07/02/2012
    3772        IF (iflag_split .eq.0) THEN
    3773         IF (iflag_new_t2mq2m==1) THEN
    3774            CALL stdlevvarn(klon, knon, nsrf, zxli, &
    3775             uzon, vmer, tair1, qair1, zgeo1, &
    3776             tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3777             yt2m, yq2m, yt10m, yq10m, yu10m, yustar, &
    3778             yn2mout(:, nsrf, :))
    3779         ELSE
    3780         CALL stdlevvar(klon, knon, nsrf, zxli, &
    3781             uzon, vmer, tair1, qair1, zgeo1, &
    3782             tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3783             yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol)
    3784         ENDIF
    3785        ELSE  !(iflag_split .eq.0)
    3786         IF (iflag_new_t2mq2m==1) THEN
    3787          CALL stdlevvarn(klon, knon, nsrf, zxli, &
    3788             uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, &
    3789             tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3790             yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, &
    3791             yn2mout_x(:, nsrf, :))
    3792          CALL stdlevvarn(klon, knon, nsrf, zxli, &
    3793             uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, &
    3794             tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3795             yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w, &
    3796             yn2mout_w(:, nsrf, :))
    3797         ELSE
    3798         CALL stdlevvar(klon, knon, nsrf, zxli, &
    3799             uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, &
    3800             tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3801             yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, ypblh_x, rain_f, zxtsol)
    3802         CALL stdlevvar(klon, knon, nsrf, zxli, &
    3803             uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, &
    3804             tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, &
    3805             yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w, ypblh_w, rain_f, zxtsol)
    3806         ENDIF
    3807 !!!
    3808        ENDIF  ! (iflag_split .eq.0)
    3809 !!!
    3810 !!! jyg le 07/02/2012
    3811        IF (iflag_split .eq.0) THEN
    3812         DO j=1, knon
    3813           i = ni(j)
    3814           t2m(i,nsrf)=yt2m(j)
    3815           q2m(i,nsrf)=yq2m(j)
    3816      ! u10m, v10m : composantes du vent a 10m sans spirale de Ekman
    3817           ustar(i,nsrf)=yustar(j)
    3818           u10m(i,nsrf)=(yu10m(j) * uzon(j))/max(SQRT(uzon(j)**2+vmer(j)**2), smallestreal)
    3819           v10m(i,nsrf)=(yu10m(j) * vmer(j))/max(SQRT(uzon(j)**2+vmer(j)**2), smallestreal)
    3820 !
    3821           DO k = 1, 6
    3822            n2mout(i,nsrf,k) = yn2mout(j,nsrf,k)
    3823           END DO 
    3824 !
    3825         ENDDO
    3826        ELSE  !(iflag_split .eq.0)
    3827         DO j=1, knon
    3828           i = ni(j)
    3829           t2m_x(i,nsrf)=yt2m_x(j)
    3830           q2m_x(i,nsrf)=yq2m_x(j)
    3831      ! u10m, v10m : composantes du vent a 10m sans spirale de Ekman
    3832           ustar_x(i,nsrf)=yustar_x(j)
    3833           u10m_x(i,nsrf)=(yu10m_x(j) * uzon_x(j))/max(SQRT(uzon_x(j)**2+vmer_x(j)**2), smallestreal)
    3834           v10m_x(i,nsrf)=(yu10m_x(j) * vmer_x(j))/max(SQRT(uzon_x(j)**2+vmer_x(j)**2), smallestreal)
    3835 !
    3836           DO k = 1, 6
    3837            n2mout_x(i,nsrf,k) = yn2mout_x(j,nsrf,k)
    3838           END DO 
    3839 !
    3840         ENDDO
    3841         DO j=1, knon
    3842           i = ni(j)
    3843           t2m_w(i,nsrf)=yt2m_w(j)
    3844           q2m_w(i,nsrf)=yq2m_w(j)
    3845      ! u10m, v10m : composantes du vent a 10m sans spirale de Ekman
    3846           ustar_w(i,nsrf)=yustar_w(j)
    3847           u10m_w(i,nsrf)=(yu10m_w(j) * uzon_w(j))/max(SQRT(uzon_w(j)**2+vmer_w(j)**2), smallestreal)
    3848           v10m_w(i,nsrf)=(yu10m_w(j) * vmer_w(j))/max(SQRT(uzon_w(j)**2+vmer_w(j)**2), smallestreal)
    3849 !
    3850           ustar(i,nsrf) = ustar_x(i,nsrf) + wake_s(i)*(ustar_w(i,nsrf)-ustar_x(i,nsrf))
    3851           u10m(i,nsrf) = u10m_x(i,nsrf) + wake_s(i)*(u10m_w(i,nsrf)-u10m_x(i,nsrf))
    3852           v10m(i,nsrf) = v10m_x(i,nsrf) + wake_s(i)*(v10m_w(i,nsrf)-v10m_x(i,nsrf))
    3853 !
    3854           DO k = 1, 6
    3855            n2mout_w(i,nsrf,k) = yn2mout_w(j,nsrf,k)
    3856           END DO 
    3857 !
    3858         ENDDO
    3859 !!!
    3860        ENDIF  ! (iflag_split .eq.0)
    3861 !!!
    3862 
    3863 !      print*,'Dans pbl OK43'
    3864 !IM Calcule de l'humidite relative a 2m (rh2m) pour diagnostique
    3865 !IM Ajoute dependance type surface
    3866        IF (thermcep) THEN
    3867 !!! jyg le 07/02/2012
    3868        IF (iflag_split .eq.0) THEN
    3869           DO j = 1, knon
    3870              i=ni(j)
    3871              zdelta1 = MAX(0.,SIGN(1., rtt-yt2m(j) ))
    3872              zx_qs1  = r2es * FOEEW(yt2m(j),zdelta1)/paprs(i,1)
    3873              zx_qs1  = MIN(0.5,zx_qs1)
    3874              zcor1   = 1./(1.-RETV*zx_qs1)
    3875              zx_qs1  = zx_qs1*zcor1
    3876              
    3877              rh2m(i)   = rh2m(i)   + yq2m(j)/zx_qs1 * pctsrf(i,nsrf)
    3878              qsat2m(i) = qsat2m(i) + zx_qs1  * pctsrf(i,nsrf)
    3879           ENDDO
    3880        ELSE  ! (iflag_split .eq.0)
    3881           DO j = 1, knon
    3882              i=ni(j)
    3883              zdelta1 = MAX(0.,SIGN(1., rtt-yt2m_x(j) ))
    3884              zx_qs1  = r2es * FOEEW(yt2m_x(j),zdelta1)/paprs(i,1)
    3885              zx_qs1  = MIN(0.5,zx_qs1)
    3886              zcor1   = 1./(1.-RETV*zx_qs1)
    3887              zx_qs1  = zx_qs1*zcor1
    3888              
    3889              rh2m_x(i)   = rh2m_x(i)   + yq2m_x(j)/zx_qs1 * pctsrf(i,nsrf)
    3890              qsat2m_x(i) = qsat2m_x(i) + zx_qs1  * pctsrf(i,nsrf)
    3891           ENDDO
    3892           DO j = 1, knon
    3893              i=ni(j)
    3894              zdelta1 = MAX(0.,SIGN(1., rtt-yt2m_w(j) ))
    3895              zx_qs1  = r2es * FOEEW(yt2m_w(j),zdelta1)/paprs(i,1)
    3896              zx_qs1  = MIN(0.5,zx_qs1)
    3897              zcor1   = 1./(1.-RETV*zx_qs1)
    3898              zx_qs1  = zx_qs1*zcor1
    3899              
    3900              rh2m_w(i)   = rh2m_w(i)   + yq2m_w(j)/zx_qs1 * pctsrf(i,nsrf)
    3901              qsat2m_w(i) = qsat2m_w(i) + zx_qs1  * pctsrf(i,nsrf)
    3902           ENDDO
    3903 !!!     
    3904        ENDIF  ! (iflag_split .eq.0)
    3905 !!!
    3906        ENDIF
    3907 !
    3908        IF (prt_level >=10) THEN
    3909          print *, 'T2m, q2m, RH2m ', &
    3910           t2m(1:knon,:), q2m(1:knon,:), rh2m(1:knon)
    3911        ENDIF
    3912 
    3913 !   print*,'OK pbl 5'
    3914 !
    3915 !!! jyg le 07/02/2012
    3916        IF (iflag_split .eq.0) THEN
    3917         CALL hbtm(knon, ypaprs, ypplay, &
    3918             yt2m,yt10m,yq2m,yq10m,yustar,ywstar, &
    3919             y_flux_t,y_flux_q,yu,yv,yt,yq, &
    3920             ypblh,ycapCL,yoliqCL,ycteiCL,ypblT, &
    3921             ytherm,ytrmb1,ytrmb2,ytrmb3,ylcl)
    3922           IF (prt_level >=10) THEN
    3923        print *,' Arg. de HBTM: yt2m ',yt2m(1:knon)
    3924        print *,' Arg. de HBTM: yt10m ',yt10m(1:knon)
    3925        print *,' Arg. de HBTM: yq2m ',yq2m(1:knon)
    3926        print *,' Arg. de HBTM: yq10m ',yq10m(1:knon)
    3927        print *,' Arg. de HBTM: yustar ',yustar(1:knon)
    3928        print *,' Arg. de HBTM: y_flux_t ',y_flux_t(1:knon,:)
    3929        print *,' Arg. de HBTM: y_flux_q ',y_flux_q(1:knon,:)
    3930        print *,' Arg. de HBTM: yu ',yu(1:knon,:)
    3931        print *,' Arg. de HBTM: yv ',yv(1:knon,:)
    3932        print *,' Arg. de HBTM: yt ',yt(1:knon,:)
    3933        print *,' Arg. de HBTM: yq ',yq(1:knon,:)
    3934           ENDIF
    3935        ELSE  ! (iflag_split .eq.0)
    3936         CALL HBTM(knon, ypaprs, ypplay, &
    3937             yt2m_x,yt10m_x,yq2m_x,yq10m_x,yustar_x,ywstar_x, &
    3938             y_flux_t_x,y_flux_q_x,yu_x,yv_x,yt_x,yq_x, &
    3939             ypblh_x,ycapCL_x,yoliqCL_x,ycteiCL_x,ypblT_x, &
    3940             ytherm_x,ytrmb1_x,ytrmb2_x,ytrmb3_x,ylcl_x)
    3941           IF (prt_level >=10) THEN
    3942        print *,' Arg. de HBTM: yt2m_x ',yt2m_x(1:knon)
    3943        print *,' Arg. de HBTM: yt10m_x ',yt10m_x(1:knon)
    3944        print *,' Arg. de HBTM: yq2m_x ',yq2m_x(1:knon)
    3945        print *,' Arg. de HBTM: yq10m_x ',yq10m_x(1:knon)
    3946        print *,' Arg. de HBTM: yustar_x ',yustar_x(1:knon)
    3947        print *,' Arg. de HBTM: y_flux_t_x ',y_flux_t_x(1:knon,:)
    3948        print *,' Arg. de HBTM: y_flux_q_x ',y_flux_q_x(1:knon,:)
    3949        print *,' Arg. de HBTM: yu_x ',yu_x(1:knon,:)
    3950        print *,' Arg. de HBTM: yv_x ',yv_x(1:knon,:)
    3951        print *,' Arg. de HBTM: yt_x ',yt_x(1:knon,:)
    3952        print *,' Arg. de HBTM: yq_x ',yq_x(1:knon,:)
    3953           ENDIF
    3954         CALL HBTM(knon, ypaprs, ypplay, &
    3955             yt2m_w,yt10m_w,yq2m_w,yq10m_w,yustar_w,ywstar_w, &
    3956             y_flux_t_w,y_flux_q_w,yu_w,yv_w,yt_w,yq_w, &
    3957             ypblh_w,ycapCL_w,yoliqCL_w,ycteiCL_w,ypblT_w, &
    3958             ytherm_w,ytrmb1_w,ytrmb2_w,ytrmb3_w,ylcl_w)
    3959 !!!     
    3960        ENDIF  ! (iflag_split .eq.0)
    3961 !!!
    3962        
    3963 !!! jyg le 07/02/2012
    3964        IF (iflag_split .eq.0) THEN
    3965 !!!
    3966         DO j=1, knon
    3967           i = ni(j)
    3968           pblh(i,nsrf)   = ypblh(j)
    3969           wstar(i,nsrf)  = ywstar(j)
    3970           plcl(i,nsrf)   = ylcl(j)
    3971           capCL(i,nsrf)  = ycapCL(j)
    3972           oliqCL(i,nsrf) = yoliqCL(j)
    3973           cteiCL(i,nsrf) = ycteiCL(j)
    3974           pblT(i,nsrf)   = ypblT(j)
    3975           therm(i,nsrf)  = ytherm(j)
    3976           trmb1(i,nsrf)  = ytrmb1(j)
    3977           trmb2(i,nsrf)  = ytrmb2(j)
    3978           trmb3(i,nsrf)  = ytrmb3(j)
    3979         ENDDO
    3980         IF (prt_level >=10) THEN
    3981           print *, 'After HBTM: pblh ', pblh(1:knon,:)
    3982           print *, 'After HBTM: plcl ', plcl(1:knon,:)
    3983           print *, 'After HBTM: cteiCL ', cteiCL(1:knon,:)
    3984         ENDIF
    3985        ELSE  !(iflag_split .eq.0)
    3986         DO j=1, knon
    3987           i = ni(j)
    3988           pblh_x(i,nsrf)   = ypblh_x(j)
    3989           wstar_x(i,nsrf)  = ywstar_x(j)
    3990           plcl_x(i,nsrf)   = ylcl_x(j)
    3991           capCL_x(i,nsrf)  = ycapCL_x(j)
    3992           oliqCL_x(i,nsrf) = yoliqCL_x(j)
    3993           cteiCL_x(i,nsrf) = ycteiCL_x(j)
    3994           pblT_x(i,nsrf)   = ypblT_x(j)
    3995           therm_x(i,nsrf)  = ytherm_x(j)
    3996           trmb1_x(i,nsrf)  = ytrmb1_x(j)
    3997           trmb2_x(i,nsrf)  = ytrmb2_x(j)
    3998           trmb3_x(i,nsrf)  = ytrmb3_x(j)
    3999         ENDDO
    4000         IF (prt_level >=10) THEN
    4001           print *, 'After HBTM: pblh_x ', pblh_x(1:knon,:)
    4002           print *, 'After HBTM: plcl_x ', plcl_x(1:knon,:)
    4003           print *, 'After HBTM: cteiCL_x ', cteiCL_x(1:knon,:)
    4004         ENDIF
    4005         DO j=1, knon
    4006           i = ni(j)
    4007           pblh_w(i,nsrf)   = ypblh_w(j)
    4008           wstar_w(i,nsrf)  = ywstar_w(j)
    4009           plcl_w(i,nsrf)   = ylcl_w(j)
    4010           capCL_w(i,nsrf)  = ycapCL_w(j)
    4011           oliqCL_w(i,nsrf) = yoliqCL_w(j)
    4012           cteiCL_w(i,nsrf) = ycteiCL_w(j)
    4013           pblT_w(i,nsrf)   = ypblT_w(j)
    4014           therm_w(i,nsrf)  = ytherm_w(j)
    4015           trmb1_w(i,nsrf)  = ytrmb1_w(j)
    4016           trmb2_w(i,nsrf)  = ytrmb2_w(j)
    4017           trmb3_w(i,nsrf)  = ytrmb3_w(j)
    4018         ENDDO
    4019         IF (prt_level >=10) THEN
    4020           print *, 'After HBTM: pblh_w ', pblh_w(1:knon,:)
    4021           print *, 'After HBTM: plcl_w ', plcl_w(1:knon,:)
    4022           print *, 'After HBTM: cteiCL_w ', cteiCL_w(1:knon,:)
    4023         ENDIF
    4024 !!!
    4025        ENDIF  ! (iflag_split .eq.0)
    4026 !!!
    4027 
    4028 !   print*,'OK pbl 6'
    4029 #else
    4030 ! T2m not defined
    4031 ! No calculation
    4032        PRINT*,' Warning !!! No T2m calculation. Output is set to zero.'
    4033 #endif
    4034 
    4035 !****************************************************************************************
    4036 ! 15) End of loop over different surfaces
    4037 !
    4038 !****************************************************************************************
    4039     ENDDO loop_nbsrf
    4040 !
    4041 !----------------------------------------------------------------------------------------
    4042 !   Reset iflag_split
    4043 !
    4044    iflag_split=iflag_split_ref
    4045 
    4046 #ifdef ISO
    4047 #ifdef ISOVERIF
    4048 !        write(*,*) 'pbl_surface tmp 3249: d_q,d_xt(iso_eau,2,1)=',d_q(2,1),d_xt(iso_eau,2,1)
    4049     IF (iso_eau >= 0) THEN
    4050         call iso_verif_egalite_vect2D( &
    4051                 d_xt,d_q, &
    4052                 'pbl_surface_mod 1276',ntraciso,klon,klev)
    4053     ENDIF !IF (iso_eau >= 0) THEN
    4054 #endif
    4055 #endif
    4056 
    4057 !****************************************************************************************
    4058 ! 16) Calculate the mean value over all sub-surfaces for some variables
    4059 !
    4060 !****************************************************************************************
    4061    
    4062     z0m(:,nbsrf+1) = 0.0
    4063     z0h(:,nbsrf+1) = 0.0
    4064     DO nsrf = 1, nbsrf
    4065        DO i = 1, klon
    4066           z0m(i,nbsrf+1) = z0m(i,nbsrf+1) + z0m(i,nsrf)*pctsrf(i,nsrf)
    4067           z0h(i,nbsrf+1) = z0h(i,nbsrf+1) + z0h(i,nsrf)*pctsrf(i,nsrf)
    4068        ENDDO
    4069     ENDDO
    4070 
    4071 !   print*,'OK pbl 7'
    4072     zxfluxt(:,:) = 0.0 ; zxfluxq(:,:) = 0.0
    4073     zxfluxu(:,:) = 0.0 ; zxfluxv(:,:) = 0.0
    4074     zxfluxt_x(:,:) = 0.0 ; zxfluxq_x(:,:) = 0.0
    4075     zxfluxu_x(:,:) = 0.0 ; zxfluxv_x(:,:) = 0.0
    4076     zxfluxt_w(:,:) = 0.0 ; zxfluxq_w(:,:) = 0.0
    4077     zxfluxu_w(:,:) = 0.0 ; zxfluxv_w(:,:) = 0.0
    4078 #ifdef ISO
    4079       zxfluxxt(:,:,:) = 0.0
    4080       zxfluxxt_x(:,:,:) = 0.0
    4081       zxfluxxt_w(:,:,:) = 0.0
    4082 #endif
    4083 
    4084 
    4085 !!! jyg le 07/02/2012
    4086        IF (iflag_split .ge.1) THEN
    4087 !!!
    4088 !!! nrlmd & jyg les 02/05/2011, 05/02/2012
    4089 
    4090         DO nsrf = 1, nbsrf
    4091           DO k = 1, klev
    4092             DO i = 1, klon
    4093               zxfluxt_x(i,k) = zxfluxt_x(i,k) + flux_t_x(i,k,nsrf) * pctsrf(i,nsrf)
    4094               zxfluxq_x(i,k) = zxfluxq_x(i,k) + flux_q_x(i,k,nsrf) * pctsrf(i,nsrf)
    4095               zxfluxu_x(i,k) = zxfluxu_x(i,k) + flux_u_x(i,k,nsrf) * pctsrf(i,nsrf)
    4096               zxfluxv_x(i,k) = zxfluxv_x(i,k) + flux_v_x(i,k,nsrf) * pctsrf(i,nsrf)
    4097 !
    4098               zxfluxt_w(i,k) = zxfluxt_w(i,k) + flux_t_w(i,k,nsrf) * pctsrf(i,nsrf)
    4099               zxfluxq_w(i,k) = zxfluxq_w(i,k) + flux_q_w(i,k,nsrf) * pctsrf(i,nsrf)
    4100               zxfluxu_w(i,k) = zxfluxu_w(i,k) + flux_u_w(i,k,nsrf) * pctsrf(i,nsrf)
    4101               zxfluxv_w(i,k) = zxfluxv_w(i,k) + flux_v_w(i,k,nsrf) * pctsrf(i,nsrf)
    4102 #ifdef ISO
    4103               DO ixt=1,ntraciso
    4104                 zxfluxxt_x(ixt,i,k) = zxfluxxt_x(ixt,i,k) + flux_xt_x(ixt,i,k,nsrf) * pctsrf(i,nsrf)
    4105                 zxfluxxt_w(ixt,i,k) = zxfluxxt_w(ixt,i,k) + flux_xt_w(ixt,i,k,nsrf) * pctsrf(i,nsrf)
    4106               ENDDO ! DO ixt=1,ntraciso
    4107 #endif
    4108             ENDDO
    4109           ENDDO
    4110         ENDDO
    4111 
    4112     DO i = 1, klon
    4113       zxsens_x(i) = - zxfluxt_x(i,1)
    4114       zxsens_w(i) = - zxfluxt_w(i,1)
    4115     ENDDO
    4116 !!!
    4117        ENDIF  ! (iflag_split .ge.1)
    4118 !!!
    4119 
    4120     DO nsrf = 1, nbsrf
    4121        DO k = 1, klev
    4122           DO i = 1, klon
    4123              zxfluxt(i,k) = zxfluxt(i,k) + flux_t(i,k,nsrf) * pctsrf(i,nsrf)
    4124              zxfluxq(i,k) = zxfluxq(i,k) + flux_q(i,k,nsrf) * pctsrf(i,nsrf)
    4125              zxfluxu(i,k) = zxfluxu(i,k) + flux_u(i,k,nsrf) * pctsrf(i,nsrf)
    4126              zxfluxv(i,k) = zxfluxv(i,k) + flux_v(i,k,nsrf) * pctsrf(i,nsrf)
    4127 #ifdef ISO
    4128              DO ixt=1,niso
    4129                zxfluxxt(ixt,i,k) = zxfluxxt(ixt,i,k) + flux_xt(ixt,i,k,nsrf) * pctsrf(i,nsrf)
    4130              ENDDO ! DO ixt=1,niso
    4131 #endif
    4132           ENDDO
    4133        ENDDO
    4134     ENDDO
    4135 
    4136     DO i = 1, klon
    4137        zxsens(i)     = - zxfluxt(i,1) ! flux de chaleur sensible au sol
    4138        zxevap(i)     = - zxfluxq(i,1) ! flux d'evaporation au sol
    4139        fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    4140     ENDDO
    4141 
    4142     ! if blowing snow
    4143     if (ok_bs) then 
    4144        DO nsrf = 1, nbsrf
    4145        DO k = 1, klev
    4146        DO i = 1, klon
    4147          zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
    4148        ENDDO
    4149        ENDDO
    4150        ENDDO
    4151 
    4152        DO i = 1, klon
    4153         zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
    4154        END DO
    4155     endif
    4156 
    4157 #ifdef ISO
    4158     DO i = 1, klon
    4159       DO ixt=1,ntraciso
    4160         zxxtevap(ixt,i)     = - zxfluxxt(ixt,i,1)
    4161       ENDDO
    4162     ENDDO
    4163 #endif
    4164 
    4165 !!!
    4166 
    4167 !
    4168 ! Incrementer la temperature du sol
    4169 !
    4170     zxtsol(:) = 0.0  ; zxfluxlat(:) = 0.0
    4171     zt2m(:) = 0.0    ; zq2m(:) = 0.0 ; zn2mout(:,:) = 0
    4172     zustar(:)=0.0 ; zu10m(:) = 0.0   ; zv10m(:) = 0.0
    4173     s_pblh(:) = 0.0  ; s_plcl(:) = 0.0
    4174 !!! jyg le 07/02/2012
    4175      s_pblh_x(:) = 0.0  ; s_plcl_x(:) = 0.0
    4176      s_pblh_w(:) = 0.0  ; s_plcl_w(:) = 0.0
    4177 !!!
    4178     s_capCL(:) = 0.0 ; s_oliqCL(:) = 0.0
    4179     s_cteiCL(:) = 0.0; s_pblT(:) = 0.0
    4180     s_therm(:) = 0.0 ; s_trmb1(:) = 0.0
    4181     s_trmb2(:) = 0.0 ; s_trmb3(:) = 0.0
    4182     wstar(:,is_ave)=0.
    4183    
    4184 !   print*,'OK pbl 9'
    4185    
    4186 !!! nrlmd le 02/05/2011
    4187     zxfluxlat_x(:) = 0.0  ;  zxfluxlat_w(:) = 0.0
    4188 !!!
    4189    
    4190     DO nsrf = 1, nbsrf
    4191        DO i = 1, klon         
    4192           ts(i,nsrf) = ts(i,nsrf) + d_ts(i,nsrf)
    4193          
    4194           wfbils(i,nsrf) = ( solsw(i,nsrf) + sollw(i,nsrf) &
    4195                + flux_t(i,1,nsrf) + fluxlat(i,nsrf) ) * pctsrf(i,nsrf)
    4196 
    4197           wfevap(i,nsrf) = evap(i,nsrf)*pctsrf(i,nsrf)
    4198 
    4199           zxtsol(i)    = zxtsol(i)    + ts(i,nsrf)      * pctsrf(i,nsrf)
    4200           zxfluxlat(i) = zxfluxlat(i) + fluxlat(i,nsrf) * pctsrf(i,nsrf)
    4201        ENDDO
    4202     ENDDO
    4203 !
    4204 !<al1 order 2 correction to zxtsol, for radiation computations (main atm effect of Ts)
    4205    IF (iflag_order2_sollw == 1) THEN
    4206     meansqT(:) = 0. ! as working buffer
    4207     DO nsrf = 1, nbsrf
    4208      DO i = 1, klon
    4209       meansqT(i) = meansqT(i)+(ts(i,nsrf)-zxtsol(i))**2 *pctsrf(i,nsrf)
    4210      ENDDO
    4211     ENDDO
    4212     zxtsol(:) = zxtsol(:)+1.5*meansqT(:)/zxtsol(:)
    4213    ENDIF   ! iflag_order2_sollw == 1
    4214 !>al1
    4215          
    4216 !!! jyg le 07/02/2012
    4217        IF (iflag_split .eq.0) THEN
    4218         DO nsrf = 1, nbsrf
    4219          DO i = 1, klon         
    4220           zt2m(i)  = zt2m(i)  + t2m(i,nsrf)  * pctsrf(i,nsrf)
    4221           zq2m(i)  = zq2m(i)  + q2m(i,nsrf)  * pctsrf(i,nsrf)
    4222 !
    4223           DO k = 1, 6
    4224            zn2mout(i,k)  = zn2mout(i,k)  + n2mout(i,nsrf,k)  * pctsrf(i,nsrf)
    4225           ENDDO 
    4226 !
    4227           zustar(i) = zustar(i) + ustar(i,nsrf) * pctsrf(i,nsrf)
    4228           wstar(i,is_ave)=wstar(i,is_ave)+wstar(i,nsrf)*pctsrf(i,nsrf)
    4229           zu10m(i) = zu10m(i) + u10m(i,nsrf) * pctsrf(i,nsrf)
    4230           zv10m(i) = zv10m(i) + v10m(i,nsrf) * pctsrf(i,nsrf)
    4231 
    4232           s_pblh(i)   = s_pblh(i)   + pblh(i,nsrf)  * pctsrf(i,nsrf)
    4233           s_plcl(i)   = s_plcl(i)   + plcl(i,nsrf)  * pctsrf(i,nsrf)
    4234           s_capCL(i)  = s_capCL(i)  + capCL(i,nsrf) * pctsrf(i,nsrf)
    4235           s_oliqCL(i) = s_oliqCL(i) + oliqCL(i,nsrf)* pctsrf(i,nsrf)
    4236           s_cteiCL(i) = s_cteiCL(i) + cteiCL(i,nsrf)* pctsrf(i,nsrf)
    4237           s_pblT(i)   = s_pblT(i)   + pblT(i,nsrf)  * pctsrf(i,nsrf)
    4238           s_therm(i)  = s_therm(i)  + therm(i,nsrf) * pctsrf(i,nsrf)
    4239           s_trmb1(i)  = s_trmb1(i)  + trmb1(i,nsrf) * pctsrf(i,nsrf)
    4240           s_trmb2(i)  = s_trmb2(i)  + trmb2(i,nsrf) * pctsrf(i,nsrf)
    4241           s_trmb3(i)  = s_trmb3(i)  + trmb3(i,nsrf) * pctsrf(i,nsrf)
    4242          ENDDO
    4243         ENDDO
    4244        ELSE  !(iflag_split .eq.0)
    4245         DO nsrf = 1, nbsrf
    4246          DO i = 1, klon         
    4247 !!! nrlmd le 02/05/2011
    4248           zxfluxlat_x(i) = zxfluxlat_x(i) + fluxlat_x(i,nsrf) * pctsrf(i,nsrf)
    4249           zxfluxlat_w(i) = zxfluxlat_w(i) + fluxlat_w(i,nsrf) * pctsrf(i,nsrf)
    4250 !!!
    4251 !!! jyg le 08/02/2012
    4252 !!  Pour le moment, on sort les valeurs dans (x) et (w) de pblh et de plcl ;
    4253 !!  pour zt2m, on fait la moyenne surfacique sur les sous-surfaces ;
    4254 !!  pour qsat2m, on fait la moyenne surfacique sur (x) et (w) ;
    4255 !!  pour les autres variables, on sort les valeurs de la region (x).
    4256           zt2m(i)  = zt2m(i)  + (t2m_x(i,nsrf)+wake_s(i)*(t2m_w(i,nsrf)-t2m_x(i,nsrf))) * pctsrf(i,nsrf)
    4257           zq2m(i)  = zq2m(i)  + q2m_x(i,nsrf)  * pctsrf(i,nsrf)
    4258 !
    4259           DO k = 1, 6
    4260            zn2mout(i,k)  = zn2mout(i,k)  + n2mout_x(i,nsrf,k)  * pctsrf(i,nsrf)
    4261           ENDDO
    4262 !
    4263           zustar(i) = zustar(i) + ustar_x(i,nsrf) * pctsrf(i,nsrf)
    4264           wstar(i,is_ave)=wstar(i,is_ave)+wstar_x(i,nsrf)*pctsrf(i,nsrf)
    4265           zu10m(i) = zu10m(i) + u10m_x(i,nsrf) * pctsrf(i,nsrf)
    4266           zv10m(i) = zv10m(i) + v10m_x(i,nsrf) * pctsrf(i,nsrf)
    4267 !
    4268           s_pblh(i)     = s_pblh(i)     + pblh_x(i,nsrf)  * pctsrf(i,nsrf)
    4269           s_pblh_x(i)   = s_pblh_x(i)   + pblh_x(i,nsrf)  * pctsrf(i,nsrf)
    4270           s_pblh_w(i)   = s_pblh_w(i)   + pblh_w(i,nsrf)  * pctsrf(i,nsrf)
    4271 !
    4272           s_plcl(i)     = s_plcl(i)     + plcl_x(i,nsrf)  * pctsrf(i,nsrf)
    4273           s_plcl_x(i)   = s_plcl_x(i)   + plcl_x(i,nsrf)  * pctsrf(i,nsrf)
    4274           s_plcl_w(i)   = s_plcl_w(i)   + plcl_w(i,nsrf)  * pctsrf(i,nsrf)
    4275 !
    4276           s_capCL(i)  = s_capCL(i)  + capCL_x(i,nsrf) * pctsrf(i,nsrf)
    4277           s_oliqCL(i) = s_oliqCL(i) + oliqCL_x(i,nsrf)* pctsrf(i,nsrf)
    4278           s_cteiCL(i) = s_cteiCL(i) + cteiCL_x(i,nsrf)* pctsrf(i,nsrf)
    4279           s_pblT(i)   = s_pblT(i)   + pblT_x(i,nsrf)  * pctsrf(i,nsrf)
    4280           s_therm(i)  = s_therm(i)  + therm_x(i,nsrf) * pctsrf(i,nsrf)
    4281           s_trmb1(i)  = s_trmb1(i)  + trmb1_x(i,nsrf) * pctsrf(i,nsrf)
    4282           s_trmb2(i)  = s_trmb2(i)  + trmb2_x(i,nsrf) * pctsrf(i,nsrf)
    4283           s_trmb3(i)  = s_trmb3(i)  + trmb3_x(i,nsrf) * pctsrf(i,nsrf)
    4284          ENDDO
    4285         ENDDO
    4286         DO i = 1, klon         
    4287           qsat2m(i)= qsat2m_x(i)+ wake_s(i)*(qsat2m_x(i)-qsat2m_w(i))
    4288         ENDDO
    4289 !!!
    4290        ENDIF  ! (iflag_split .eq.0)
    4291 !!!
    4292 
    4293     IF (check) THEN
    4294        amn=MIN(ts(1,is_ter),1000.)
    4295        amx=MAX(ts(1,is_ter),-1000.)
    4296        DO i=2, klon
    4297           amn=MIN(ts(i,is_ter),amn)
    4298           amx=MAX(ts(i,is_ter),amx)
    4299        ENDDO
    4300        PRINT*,' debut apres d_ts min max ftsol(ts)',itap,amn,amx
    4301     ENDIF
    4302 
    4303 !jg ?
    4304 !!$!
    4305 !!$! If a sub-surface does not exsist for a grid point, the mean value for all
    4306 !!$! sub-surfaces is distributed.
    4307 !!$!
    4308 !!$    DO nsrf = 1, nbsrf
    4309 !!$       DO i = 1, klon
    4310 !!$          IF ((pctsrf_new(i,nsrf) .LT. epsfra) .OR. (t2m(i,nsrf).EQ.0.)) THEN
    4311 !!$             ts(i,nsrf)     = zxtsol(i)
    4312 !!$             t2m(i,nsrf)    = zt2m(i)
    4313 !!$             q2m(i,nsrf)    = zq2m(i)
    4314 !!$             u10m(i,nsrf)   = zu10m(i)
    4315 !!$             v10m(i,nsrf)   = zv10m(i)
    4316 !!$
    4317 !!$! Les variables qui suivent sont plus utilise, donc peut-etre pas la peine a les mettre ajour
    4318 !!$             pblh(i,nsrf)   = s_pblh(i)
    4319 !!$             plcl(i,nsrf)   = s_plcl(i)
    4320 !!$             capCL(i,nsrf)  = s_capCL(i)
    4321 !!$             oliqCL(i,nsrf) = s_oliqCL(i)
    4322 !!$             cteiCL(i,nsrf) = s_cteiCL(i)
    4323 !!$             pblT(i,nsrf)   = s_pblT(i)
    4324 !!$             therm(i,nsrf)  = s_therm(i)
    4325 !!$             trmb1(i,nsrf)  = s_trmb1(i)
    4326 !!$             trmb2(i,nsrf)  = s_trmb2(i)
    4327 !!$             trmb3(i,nsrf)  = s_trmb3(i)
    4328 !!$          ENDIF
    4329 !!$       ENDDO
    4330 !!$    ENDDO
    4331 
    4332 
    4333     DO i = 1, klon
    4334        fder(i) = - 4.0*RSIGMA*zxtsol(i)**3
    4335     ENDDO
    4336    
    4337     zxqsurf(:) = 0.0
    4338     zxsnow(:)  = 0.0
    4339 #ifdef ISO
    4340     zxxtsnow(:,:)  = 0.0
    4341 #endif
    4342 
    4343     DO nsrf = 1, nbsrf
    4344        DO i = 1, klon
    4345           zxqsurf(i) = zxqsurf(i) + MAX(qsurf(i,nsrf),0.0) * pctsrf(i,nsrf)
    4346           zxsnow(i)  = zxsnow(i)  + snow(i,nsrf)  * pctsrf(i,nsrf)
    4347 #ifdef ISO
    4348           DO ixt=1,niso
    4349             zxxtsnow(ixt,i)  = zxxtsnow(ixt,i)  + xtsnow(ixt,i,nsrf)  * pctsrf(i,nsrf)
    4350           ENDDO ! DO ixt=1,niso
    4351 #endif
    4352        ENDDO
    4353     ENDDO
    4354 
    4355 ! Premier niveau de vent sortie dans physiq.F
    4356     zu1(:) = u(:,1)
    4357     zv1(:) = v(:,1)
    4358 
    4359   END SUBROUTINE pbl_surface
    4360 
    4361 #endif
    4362 
    4363 
    4364 
    4365 
    4366326
    4367327!
Note: See TracChangeset for help on using the changeset viewer.