Ignore:
Timestamp:
Sep 4, 2023, 10:17:16 AM (17 months ago)
Author:
Laurent Fairhead
Message:

Merged with trunk revision 4586 corresponding to june 2023 testing

Location:
LMDZ6/branches/LMDZ_cdrag_LSCE
Files:
1 deleted
14 edited
5 copied

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_cdrag_LSCE

  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/add_phys_tend_mod.F90

    r4491 r4669  
    1616CONTAINS
    1717
    18 SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap &
     18SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap &
    1919#ifdef ISO
    2020        ,zdxt,zdxtl,zdxti &
     
    6262  ! ------------
    6363  REAL zdu(klon, klev), zdv(klon, klev)
    64   REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev)
     64  REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev)
    6565  CHARACTER *(*) text
    6666  REAL paprs(klon,klev+1)
     
    104104    PRINT *, ' add_pbl_tend, zzdt ', zzdt
    105105    PRINT *, ' add_pbl_tend, zzdq ', zzdq
    106     CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
     106    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
    107107#ifdef ISO
    108108        ,zzdxt,zdxtl,zdxti &
     
    110110        )
    111111  ELSE
    112     CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
     112    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
    113113#ifdef ISO
    114114        ,zdxt,zdxtl,zdxti &
     
    123123! $Id$
    124124!
    125 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text, &
     125SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, &
    126126                          abortphy,flag_inhib_tend, itap, diag_mode &
    127127#ifdef ISO
     
    142142USE dimphy, ONLY: klon, klev
    143143USE phys_state_var_mod, ONLY : phys_tstep
    144 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri
     144USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri
    145145#ifdef ISO
    146146USE phys_local_var_mod, ONLY: xtl_seri, xts_seri, xt_seri
     
    150150USE print_control_mod, ONLY: prt_level
    151151USE cmp_seri_mod
    152 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    153   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     152USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     153  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    154154
    155155#ifdef ISO
     
    167167!------------
    168168REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdu, zdv
    169 REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi
     169REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi, zdqbs
    170170REAL, DIMENSION(klon,klev+1),   INTENT(IN)    :: paprs
    171171CHARACTER*(*),                  INTENT(IN)    :: text
     
    197197! Save variables, used in diagnostic mode (diag_mode=1).
    198198REAL, DIMENSION(klon,klev)   :: sav_u_seri, sav_v_seri
    199 REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_q_seri
     199REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri
    200200REAL, DIMENSION(klon,klev)   :: sav_t_seri
    201201REAL, DIMENSION(klon,klev)   :: sav_zdq
     
    228228! zh_ql_col----  total enthalpy of liquid watter (J/m2)
    229229! zh_qs_col----  total enthalpy of solid watter  (J/m2)
     230! zh_qbs_col----  total enthalpy of blowing snow  (J/m2)
    230231! zqw_col------  total mass of watter vapour (kg/m2)
    231232! zql_col------  total mass of liquid watter (kg/m2)
    232 ! zqs_col------  total mass of solid watter (kg/m2)
     233! zqs_col------  total mass of cloud ice (kg/m2)
     234! zqbs_col------  total mass of blowing snow (kg/m2)
    233235! zek_col------  total kinetic energy (kg/m2)
    234236!
     
    237239REAL zql_col(klon,2)
    238240REAL zqs_col(klon,2)
     241REAL zqbs_col(klon,2)
    239242REAL zek_col(klon,2)
    240243REAL zh_dair_col(klon,2)
    241 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2)
     244REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2)
    242245REAL zh_col(klon,2)
    243246
     
    278281    sav_ql_seri(:,:) = ql_seri(:,:)
    279282    sav_qs_seri(:,:) = qs_seri(:,:)
     283    sav_qbs_seri(:,:) = qbs_seri(:,:)
    280284    sav_q_seri(:,:)  = q_seri(:,:)
    281285    sav_t_seri(:,:)  = t_seri(:,:)
     
    304308
    305309    CALL integr_v(klon, klev, zcpvap, &
    306                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    307                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    308                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     310                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     311                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     312                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    309313
    310314  end if ! end if (fl_ebil .GT. 0)
     
    337341     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
    338342     qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:)
     343     qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:)
    339344#ifdef ISO
    340345     xtl_seri(:,:,:)=xtl_seri(:,:,:)+zdxtl(:,:,:)
     
    601606        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
    602607        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
     608        qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:)
    603609      ENDIF
    604610
     
    615621
    616622    CALL integr_v(klon, klev, zcpvap, &
    617                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    618                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    619                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     623                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     624                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     625                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    620626
    621627    ! ------------------------------------------------
     
    626632    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    627633    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    628     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     634    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     635    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    629636
    630637    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    634641    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    635642    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     643    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    636644
    637645    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    645653    ql_seri(:,:) = sav_ql_seri(:,:)
    646654    qs_seri(:,:) = sav_qs_seri(:,:)
     655    qbs_seri(:,:) = sav_qbs_seri(:,:)
    647656    q_seri(:,:)  = sav_q_seri(:,:)
    648657    t_seri(:,:)  = sav_t_seri(:,:)
     
    659668END SUBROUTINE add_phys_tend
    660669
    661 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &
    662                           zdu,zdv,zdt,zdq,zdql,zdqs,paprs,text)
     670SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, &
     671                          zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text)
    663672!======================================================================
    664673! Ajoute les tendances des variables physiques aux variables
     
    676685USE print_control_mod, ONLY: prt_level
    677686USE cmp_seri_mod
    678 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    679   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     687USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     688  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    680689IMPLICIT none
    681690  include "YOMCST.h"
     
    686695INTEGER, INTENT(IN)                           :: nlon, nlev
    687696REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: uu, vv
    688 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs
     697REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs, qbs
    689698REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdu, zdv
    690 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs
     699REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs, zdqbs
    691700REAL, DIMENSION(nlon,nlev+1),   INTENT(IN)    :: paprs
    692701CHARACTER*(*),                  INTENT(IN)    :: text
     
    695704!--------
    696705REAL, DIMENSION(nlon,nlev)      :: uu_n, vv_n
    697 REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n
     706REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n, qbs_n
    698707
    699708
     
    718727! zqw_col------  total mass of watter vapour (kg/m2)
    719728! zql_col------  total mass of liquid watter (kg/m2)
    720 ! zqs_col------  total mass of solid watter (kg/m2)
     729! zqs_col------  total mass of cloud ice (kg/m2)
     730! zqbs_col------  total mass of blowing snow (kg/m2)
    721731! zek_col------  total kinetic energy (kg/m2)
    722732!
     
    725735REAL zql_col(nlon,2)
    726736REAL zqs_col(nlon,2)
     737REAL zqbs_col(nlon,2)
    727738REAL zek_col(nlon,2)
    728739REAL zh_dair_col(nlon,2)
    729 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2)
     740REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2)
    730741REAL zh_col(nlon,2)
    731742
     
    760771
    761772    CALL integr_v(nlon, nlev, rcpv, &
    762                   temp, qv, ql, qs, uu, vv, zairm, &
    763                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    764                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     773                  temp, qv, ql, qs, qbs, uu, vv, zairm, &
     774                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     775                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    765776
    766777  end if ! end if (fl_ebil .GT. 0)
     
    775786     ql_n(:,:)=ql(:,:)+zdql(:,:)
    776787     qs_n(:,:)=qs(:,:)+zdqs(:,:)
     788     qbs_n(:,:)=qbs(:,:)+zdqbs(:,:)
    777789     temp_n(:,:)=temp(:,:)+zdt(:,:)
    778790
     
    791803
    792804    CALL integr_v(nlon, nlev, rcpv, &
    793                   temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &
    794                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    795                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     805                  temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, &
     806                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     807                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    796808
    797809    ! ------------------------------------------------
     
    802814    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    803815    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    804     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     816    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     817    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    805818
    806819    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    814827    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    815828    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     829    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    816830
    817831    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    824838
    825839SUBROUTINE integr_v(nlon, nlev, zcpvap, &
    826                     temp, qv, ql, qs, uu, vv, zairm,  &
    827                     zqw_col, zql_col, zqs_col, zek_col, zh_dair_col, &
    828                     zh_qw_col, zh_ql_col, zh_qs_col, zh_col)
     840                    temp, qv, ql, qs, qbs, uu, vv, zairm,  &
     841                    zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, &
     842                    zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col)
    829843
    830844IMPLICIT none
     
    833847INTEGER,                    INTENT(IN)    :: nlon,nlev
    834848REAL,                       INTENT(IN)    :: zcpvap
    835 REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, uu, vv
     849REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, qbs, uu, vv
    836850REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: zairm
    837851REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqw_col
    838852REAL, DIMENSION(nlon),      INTENT(OUT)   :: zql_col
    839 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col
     853REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col, zqbs_col
    840854REAL, DIMENSION(nlon),      INTENT(OUT)   :: zek_col
    841855REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_dair_col
    842856REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qw_col
    843857REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_ql_col
    844 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col
     858REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col, zh_qbs_col
    845859REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_col
    846860
     
    852866    zql_col(:) = 0.
    853867    zqs_col(:) = 0.
     868    zqbs_col(:) = 0.
    854869    zek_col(:) = 0.
    855870    zh_dair_col(:) = 0.
     
    857872    zh_ql_col(:) = 0.
    858873    zh_qs_col(:) = 0.
     874    zh_qbs_col(:) = 0.
    859875
    860876!JLD    write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice
     
    869885        zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
    870886        zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
     887        zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k)
    871888        ! Kinetic Energy
    872889        zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k)
     
    877894        zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k)   !jyg
    878895        zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k)   !jyg
     896        zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k)   !jyg
    879897      END DO
    880898    END DO
    881899    ! compute total air enthalpy
    882     zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:)
     900    zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:)
    883901
    884902END SUBROUTINE integr_v
     
    895913USE dimphy, ONLY: klon, klev
    896914USE phys_state_var_mod, ONLY : phys_tstep
    897 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con
     915USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall
    898916USE geometry_mod, ONLY: longitude_deg, latitude_deg
    899917USE print_control_mod, ONLY: prt_level
    900918USE cmp_seri_mod
    901 USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    902   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     919USE phys_output_var_mod, ONLY : d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     920  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    903921USE phys_local_var_mod, ONLY: evap, sens
    904 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri &
     922USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri &
    905923   &  , rain_lsc, snow_lsc
    906924USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd
     
    939957      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) &
    940958    &         + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1)
     959  CASE("bs") param
     960      bilq_bnd = - bs_fall(1)
     961      bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1)
    941962  CASE("convection") param
    942963      bilq_bnd = - rain_con(1) - snow_con(1)
     
    975996  if ( prt_level .GE. 5) then
    976997    write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd
    977     write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1)
    978     write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1)
     998    write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1)
     999    write(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1)
    9791000  end if
    9801001
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/fisrtilp.F90

    r4491 r4669  
    2626  ! flag to include modifications to ensure energy conservation (if flag >0)
    2727  USE add_phys_tend_mod, only : fl_cor_ebil
     28  USE lscp_ini_mod, ONLY: iflag_t_glace,t_glace_min, t_glace_max, exposant_glace
     29  USE lscp_ini_mod, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol
     30  USE lscp_ini_mod, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con
     31  USE lscp_ini_mod, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
     32  USE lscp_ini_mod, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
     33
     34
     35
    2836#ifdef ISO
    2937  USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso
     
    8290  !======================================================================
    8391  include "YOMCST.h"
    84   include "fisrtilp.h"
    85   include "nuage.h" ! JBM (3/14)
    86 
    8792  !
    8893  ! Principaux inputs:
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/pbl_surface_mod.F90

    r4491 r4669  
    2121  USE cpl_mod,             ONLY : gath2cpl
    2222  USE climb_hq_mod,        ONLY : climb_hq_down, climb_hq_up
     23  USE climb_qbs_mod,       ONLY : climb_qbs_down, climb_qbs_up
    2324  USE climb_wind_mod,      ONLY : climb_wind_down, climb_wind_up
    2425  USE coef_diff_turb_mod,  ONLY : coef_diff_turb
     
    261262       rlon,      rlat,      rugoro,   rmu0,          &
    262263       lwdown_m,  cldt,          &
    263        rain_f,    snow_f,    solsw_m,  solswfdiff_m, sollw_m,       &
     264       rain_f,    snow_f,    bs_f, solsw_m,  solswfdiff_m, sollw_m,       &
    264265       gustiness,                                     &
    265        t,         q,        u,        v,             &
     266       t,         q,        qbs, u,        v,             &
    266267!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    267268!!       t_x,       q_x,       t_w,      q_w,           &
     
    275276       beta, &
    276277!>jyg
    277        alb_dir_m,    alb_dif_m,  zxsens,   zxevap,    &
     278       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,  &
    278279       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    279280       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout, &
    280        d_t,       d_q,       d_u,      d_v, d_t_diss, &
     281       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss, &
    281282!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    282283       d_t_w,     d_q_w,                              &
     
    301302       rh2m,      zxfluxu,  zxfluxv,               &
    302303       z0m, z0h,   agesno,  sollw,    solsw,         &
    303        d_ts,      evap,    fluxlat,  t2m,           &
     304       d_ts,      evap,    fluxlat,   t2m,           &
    304305       wfbils,    wfbilo, wfevap, wfrain, wfsnow,   &
    305306       flux_t,   flux_u, flux_v,                    &
     
    307308!jyg<
    308309!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    309        zxfluxt,   zxfluxq,   q2m,      flux_q, tke_x,  &
     310       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x,  &
    310311!>jyg
    311312!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    410411         dser, dt_ds, zsig, zmea
    411412    use phys_output_var_mod, only: tkt, tks, taur, sss
     413    use blowing_snow_ini_mod, only : zeta_bs
    412414#ifdef CPP_XIOS
    413415    USE wxios, ONLY: missing_val
     
    444446    REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f  ! rain fall
    445447    REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
     448    REAL, DIMENSION(klon),        INTENT(IN)        :: bs_f  ! blowing snow fall
    446449    REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
    447450    REAL, DIMENSION(klon),        INTENT(IN)        :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface
     
    449452    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
    450453    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
     454    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: qbs       ! blowing snow specific content (kg/kg)
    451455    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
    452456    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
     
    521525                                                                  ! (=> positive sign upwards)
    522526    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
     527    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    523528    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    524529!!! jyg le ???
     
    537542    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
    538543    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
     544    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_qbs        ! change in blowing snow specific content
     545
    539546
    540547    REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1)
     
    604611    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
    605612    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
    606     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap     ! evaporation at surface
     613    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap       ! evaporation at surface
    607614    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
    608615    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
     
    631638    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
    632639    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
     640    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxqbs    ! blowing snow flux, mean for each grid point
    633641    REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
    634642    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
     643    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs   ! blowind snow vertical flux (kg/m**2
     644
    635645#ifdef ISO   
    636646    REAL, DIMENSION(ntraciso,klon),       INTENT(OUT)        :: dflux_xt    ! change of water vapour flux
     
    683693    REAL, DIMENSION(klon)              :: yalb,yalb_vis
    684694!albedo SB <<<
    685     REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1
     695    REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1, yqbs1
    686696    REAL, DIMENSION(klon)              :: yqa
    687697    REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    688     REAL, DIMENSION(klon)              :: yrain_f, ysnow_f
     698    REAL, DIMENSION(klon)              :: yrain_f, ysnow_f, ybs_f
    689699#ifdef ISO
    690700    REAL, DIMENSION(ntraciso,klon)              :: yxt1
     
    699709    REAL, DIMENSION(klon)              :: yrugoro
    700710    REAL, DIMENSION(klon)              :: yfluxlat
     711    REAL, DIMENSION(klon)              :: yfluxbs
    701712    REAL, DIMENSION(klon)              :: y_d_ts
    702713    REAL, DIMENSION(klon)              :: y_flux_t1, y_flux_q1
     
    707718#endif
    708719    REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
     720    REAL, DIMENSION(klon)              :: y_flux_bs, y_flux0
    709721    REAL, DIMENSION(klon)              :: yt2m, yq2m, yu10m
    710722    INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w
     
    736748#endif
    737749    REAL, DIMENSION(klon)              :: AcoefU, AcoefV, BcoefU, BcoefV
     750    REAL, DIMENSION(klon)              :: AcoefQBS, BcoefQBS
    738751    REAL, DIMENSION(klon)              :: ypsref
    739752    REAL, DIMENSION(klon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new
     
    744757    REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    745758    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    746     REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss
     759    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
    747760    REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
    748     REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q
     761    REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q, y_flux_qbs
    749762    REAL, DIMENSION(klon,klev)         :: y_flux_u, y_flux_v
    750     REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq
     763    REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq, ycoefqbs
    751764    REAL, DIMENSION(klon)              :: ycdragh, ycdragq, ycdragm
    752765    REAL, DIMENSION(klon,klev)         :: yu, yv
    753     REAL, DIMENSION(klon,klev)         :: yt, yq
     766    REAL, DIMENSION(klon,klev)         :: yt, yq, yqbs
    754767#ifdef ISO
    755768    REAL, DIMENSION(ntraciso,klon)              :: yxtevap
     
    819832    REAL, DIMENSION(klon,klev)         :: CcoefH, CcoefQ, DcoefH, DcoefQ
    820833    REAL, DIMENSION(klon,klev)         :: CcoefU, CcoefV, DcoefU, DcoefV
     834    REAL, DIMENSION(klon,klev)         :: CcoefQBS, DcoefQBS
    821835    REAL, DIMENSION(klon,klev)         :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x
    822836    REAL, DIMENSION(klon,klev)         :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w
     
    824838    REAL, DIMENSION(klon,klev)         :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w
    825839    REAL, DIMENSION(klon,klev)         :: Kcoef_hq, Kcoef_m, gama_h, gama_q
     840    REAL, DIMENSION(klon,klev)         :: gama_qbs, Kcoef_qbs
    826841    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x
    827842    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w
     
    10161031    REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    10171032    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     1033    REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    10181034    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    10191035    REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
     
    11891205  alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    11901206!albedo SB <<<
    1191  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0.
     1207 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    11921208 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    11931209 zxfluxlat(:)=0.
    11941210 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    11951211 zn2mout(:,:)=0 ;
    1196  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
     1212 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    11971213 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    11981214 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    12141230 d_ts(:,:)=0.
    12151231 evap(:,:)=0.
     1232 snowerosion(:,:)=0.
    12161233 fluxlat(:,:)=0.
    12171234 wfbils(:,:)=0. ; wfbilo(:,:)=0.
    12181235 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0.
    12191236 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
     1237 flux_qbs(:,:,:)=0.
    12201238 dflux_t(:)=0. ; dflux_q(:)=0.
    12211239 zxsnow(:)=0.
    1222  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.
     1240 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    12231241 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    12241242 runoff(:)=0.
     
    12661284    yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    12671285!albedo SB <<<
    1268     yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0
     1286    yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    12691287    ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yu1 = 0.0   
    1270     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
     1288    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    12711289    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    12721290    yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
     1291    yqbs(:,:)=0.0 
    12731292    yrugoro = 0.0 ; ywindsp = 0.0   
    12741293!!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1275     yfluxlat=0.0
     1294    yfluxlat=0.0 ; y_flux0(:)=0.0
    12761295!!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    12771296!!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
     
    12881307    ycldt = 0.0      ; yrmu0 = 0.0
    12891308    ! Martin
     1309    y_d_qbs(:,:)=0.0
    12901310
    12911311!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    16291649          yrain_f(j) = rain_f(i)
    16301650          ysnow_f(j) = snow_f(i)
     1651          ybs_f(j)   = bs_f(i)
    16311652          yagesno(j) = agesno(i,nsrf)
    16321653          yfder(j)   = fder(i)
     
    16401661          yu1(j)     = u(i,1)
    16411662          yv1(j)     = v(i,1)
     1663          yqbs1(j)   = qbs(i,1)
    16421664          ypaprs(j,klev+1) = paprs(i,klev+1)
    16431665!jyg<
     
    16531675!!! nrlmd le 13/06/2011
    16541676          y_delta_tsurf(j)=delta_tsurf(i,nsrf)
     1677          yfluxbs(j)=0.0
     1678          y_flux_bs(j) = 0.0
    16551679!!!
    16561680#ifdef ISO
     
    17211745             yt(j,k) = t(i,k)
    17221746             yq(j,k) = q(i,k)
     1747             yqbs(j,k)=qbs(i,k)
    17231748#ifdef ISO
    17241749             do ixt=1,ntraciso   
     
    19511976      print *,' args coef_diff_turb: ycdragh ', ycdragh
    19521977      print *,' args coef_diff_turb: ytke ', ytke
    1953 
    19541978       ENDIF
    19551979
     
    19601984
    19611985        ELSE
    1962 
    19631986
    19641987        CALL coef_diff_turb(dtime, nsrf, knon, ni,  &
     
    19812004
    19822005        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh
    1983 !
     2006
     2007
    19842008       ELSE  !(iflag_split .eq.0)
     2009
    19852010      IF (prt_level >=10) THEN
    19862011      print *,' args coef_diff_turb: yu_x ',  yu_x 
     
    20202045       ENDIF
    20212046
    2022        ENDIF ! iflag_pbl >= 50
     2047        ENDIF ! iflag_pbl >= 50
    20232048
    20242049        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x
     
    20342059      print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w
    20352060      print *,' args coef_diff_turb: ytke_w ', ytke_w
    2036        ENDIF
     2061      ENDIF
    20372062
    20382063        IF (iflag_pbl>=50) THEN
     
    20622087
    20632088        IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w
    2064 !
     2089
    20652090!!!jyg le 10/04/2013
    20662091!!   En attendant de traiter le transport des traceurs dans les poches froides, formule
     
    20722097        ENDDO
    20732098      ENDDO
    2074 !!!
    20752099       ENDIF  ! (iflag_split .eq.0)
    2076 !!!
    20772100       
    20782101!****************************************************************************************
     
    21712194       ENDIF  ! (iflag_split .eq.0)
    21722195!!!
     2196
     2197 ! For blowing snow:
     2198    IF (ok_bs) THEN
     2199     ! following Bintanja et al 2000, part II
     2200     ! we assume that the eddy diffsivity coefficient for
     2201     ! suspended particles is larger than Km by a factor zeta_bs
     2202     ! which is equal to 3 by default
     2203     do k=1,klev
     2204        do j=1,knon
     2205           ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs
     2206        enddo
     2207     enddo
     2208     CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, &
     2209     ydelp, yt, yqbs, dtime, &
     2210     CcoefQBS, DcoefQBS, &
     2211     Kcoef_qbs, gama_qbs, &
     2212     AcoefQBS, BcoefQBS)
     2213    ENDIF
     2214
     2215
    21732216
    21742217!****************************************************************************************
     
    23562399               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    23572400!!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2358                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2401               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    23592402               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    23602403               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    23622405               ylwdown, yq2m, yt2m, &
    23632406               ysnow, yqsol, yagesno, ytsoil, &
    2364                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     2407               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    23652408               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    23662409               y_flux_u1, y_flux_v1, &
     
    24332476                  yrmu0, ylwdown, yalb, zgeo1, &
    24342477                  ysolsw, ysollw, yts, ypplay(:,1), &
    2435                   !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2436                   ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2478                  ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    24372479                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    24382480                  AcoefU, AcoefV, BcoefU, BcoefV, &
     2481                  AcoefQBS, BcoefQBS, &
    24392482                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2440                   ysnow, yqsurf, yqsol, yagesno, &
     2483                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    24412484                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2442                   ytsurf_new, y_dflux_t, y_dflux_q, &
     2485                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    24432486                  yzmea, yzsig, ycldt, &
    24442487                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     
    24992542               itap, dtime, jour, knon, ni, &
    25002543!!jyg               ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2501                ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&    ! ym missing init
     2544               ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    25022545               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    25032546               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    26642707          ENDDO
    26652708        ENDIF ! (ok_flux_surf)
     2709
     2710        ! flux of blowing snow at the first level
     2711        IF (ok_bs) THEN
     2712        DO j=1,knon
     2713        y_flux_bs(j)=yfluxbs(j)
     2714        ENDDO
     2715        ENDIF
    26662716!
    26672717! ------------------------------------------------------------------------------
     
    29913041!
    29923042       ENDIF  ! (iflag_split .eq.0)
     3043
     3044       IF (ok_bs) THEN
     3045            CALL climb_qbs_up(knon, dtime, yqbs, &
     3046            y_flux_bs, ypaprs, ypplay, &
     3047            AcoefQBS, BcoefQBS, &
     3048            CcoefQBS, DcoefQBS, &
     3049            Kcoef_qbs, gama_qbs, &
     3050            y_flux_qbs(:,:), y_d_qbs(:,:))
     3051       ENDIF
     3052
    29933053!!!
    29943054!!
     
    31573217!!!
    31583218
    3159 !      print*,'Dans pbl OK1'
    3160 
    3161 !jyg<
    3162 !!       evap(:,nsrf) = - flux_q(:,1,nsrf)
    3163 !>jyg
     3219       ! tendencies of blowing snow
     3220       IF (ok_bs) THEN
     3221           DO k = 1, klev   
     3222            DO j = 1, knon
     3223                i = ni(j)
     3224                y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
     3225                flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
     3226            ENDDO
     3227          ENDDO
     3228       ENDIF
     3229
     3230
    31643231       DO j = 1, knon
    31653232          i = ni(j)
    31663233          evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
     3234          if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    31673235          beta(i,nsrf) = ybeta(j)                             !jyg
    31683236          d_ts(i,nsrf) = y_d_ts(j)
     
    33923460          ENDDO
    33933461       ENDDO
     3462
     3463
     3464       IF (ok_bs) THEN
     3465         DO k = 1, klev
     3466         DO j = 1, knon
     3467         i = ni(j)
     3468         d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
     3469         ENDDO
     3470         ENDDO
     3471        ENDIF
     3472
    33943473
    33953474#ifdef ISO
     
    38943973       fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    38953974    ENDDO
     3975
     3976    ! if blowing snow
     3977    if (ok_bs) then 
     3978       DO nsrf = 1, nbsrf
     3979       DO k = 1, klev
     3980       DO i = 1, klon
     3981         zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
     3982       ENDDO
     3983       ENDDO
     3984       ENDDO
     3985
     3986       DO i = 1, klon
     3987        zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
     3988       END DO
     3989    endif
     3990
     3991   
     3992   
    38963993#ifdef ISO
    38973994    DO i = 1, klon
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyetat0_mod.F90

    r4389 r4669  
    2424       qsol, fevap, z0m, z0h, agesno, &
    2525       du_gwd_rando, du_gwd_front, entr_therm, f0, fm_therm, &
    26        falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, &
    27        ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
    28        rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &
     26       falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, &
     27       ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, radpas, radsol, rain_fall, ratqs, &
     28       rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, &
    2929       solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
    3030       wake_deltat, wake_delta_pbl_TKE, delta_tsurf, beta_aridity, wake_fip, wake_pe, &
     
    349349  found=phyetat0_get(rain_fall,"rain_f","rain fall",0.)
    350350
     351  IF (ok_bs) THEN
     352     found=phyetat0_get(bs_fall,"bs_f","blowing snow fall",0.)
     353  ELSE
     354     bs_fall(:)=0.
     355  ENDIF
     356
     357
    351358!=======================================================================
    352359! Radiation
     
    410417  ancien_ok=ancien_ok.AND.phyetat0_get(prsw_ancien,"PRSWANCIEN","PRSWANCIEN",0.)
    411418
     419  ! cas specifique des variables de la neige soufflee
     420  IF (ok_bs) THEN
     421     ancien_ok=ancien_ok.AND.phyetat0_get(qbs_ancien,"QBSANCIEN","QBSANCIEN",0.)
     422     ancien_ok=ancien_ok.AND.phyetat0_get(prbsw_ancien,"PRBSWANCIEN","PRBSWANCIEN",0.)
     423  ELSE
     424     qbs_ancien(:,:)=0.
     425     prbsw_ancien(:)=0.
     426  ENDIF
     427
     428
    412429  ! Ehouarn: addtional tests to check if t_ancien, q_ancien contain
    413430  !          dummy values (as is the case when generated by ce0l,
     
    423440    ancien_ok=.false.
    424441  ENDIF
     442
     443  IF (ok_bs) THEN
     444    IF ( (maxval(qbs_ancien).EQ.minval(qbs_ancien))       .OR. &
     445         (maxval(prbsw_ancien).EQ.minval(prbsw_ancien)) ) THEN
     446       ancien_ok=.false.
     447    ENDIF
     448  ENDIF
     449
    425450
    426451  found=phyetat0_get(clwcon,"CLWCON","CLWCON",0.)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phyredem.F90

    r4491 r4669  
    1515                                ftsol, beta_aridity, delta_tsurf, falb_dir,  &
    1616                                falb_dif, qsol, fevap, radsol, solsw, sollw, &
    17                                 sollwdown, rain_fall, snow_fall, z0m, z0h,  &
     17                                sollwdown, rain_fall, snow_fall, bs_fall, z0m, z0h, &
    1818                                agesno, zmea, zstd, zsig, zgam, zthe, zpic,  &
    1919                                zval, rugoro, t_ancien, q_ancien,            &
    20                                 prw_ancien, prlw_ancien, prsw_ancien,        &
    21                                 ql_ancien, qs_ancien,  u_ancien,            &
     20                                prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien,      &
     21                                ql_ancien, qs_ancien, qbs_ancien,  u_ancien, &
    2222                                v_ancien, clwcon, rnebcon, ratqs, pbl_tke,   &
    2323                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
     
    260260
    261261    CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien)
     262
     263    IF (ok_bs) THEN
     264       CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall)
     265       CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien)
     266       CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien)
     267    ENDIF
    262268
    263269    CALL put_field(pass,"PRWANCIEN", "PRWANCIEN", prw_ancien)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_local_var_mod.F90

    r4143 r4669  
    1414      REAL, SAVE, ALLOCATABLE :: ql_seri(:,:),qs_seri(:,:)
    1515      !$OMP THREADPRIVATE(ql_seri,qs_seri)
     16      REAL, SAVE, ALLOCATABLE :: qbs_seri(:,:)
     17      !$OMP THREADPRIVATE(qbs_seri)
    1618      REAL, SAVE, ALLOCATABLE :: u_seri(:,:), v_seri(:,:)
    1719      !$OMP THREADPRIVATE(u_seri, v_seri)
     
    2628      REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:)
    2729      !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn)
    28       REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    29       !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
    30       REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
    31       !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
     30      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:)
     31      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn)
     32      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:)
     33      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d)
    3234      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    3335      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    6971      REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:)
    7072      !$OMP THREADPRIVATE(d_u_oli, d_v_oli)
    71       REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_t_diss(:,:)
    72       !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf,d_t_diss)
     73      REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:)
     74      !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss)
    7375      REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:)
    7476      !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf)
     
    7880      REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:)
    7981      !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x)
     82      REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:)
     83      !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs)
    8084!>nrlmd+jyg
    8185      REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:)
     
    313317!$OMP THREADPRIVATE(sens, flwp, fiwp)
    314318!!
     319!FC
     320      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zxfluxt, zxfluxq
     321!$OMP THREADPRIVATE(zxfluxt, zxfluxq)
     322!FC
    315323!!         Wake variables
    316324      REAL,ALLOCATABLE,SAVE,DIMENSION(:)            :: alp_wake
     
    361369      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    362370!$OMP THREADPRIVATE(JrNt)
    363       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    364 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     371      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     372!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    365373      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    366374!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    379387      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    380388!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     389      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     390!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    381391      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    382392!$OMP THREADPRIVATE(zxfqcalving)
     
    567577      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    568578!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    569       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    570 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     579      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     580!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    571581      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    572582!$OMP THREADPRIVATE(Vprecip, zw2)
     
    585595      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rneb,rnebjn,rneblsvol
    586596!$OMP THREADPRIVATE(rneb,rnebjn,rneblsvol)
     597      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: pfraclr,pfracld
     598!$OMP THREADPRIVATE(pfraclr,pfracld)
     599      REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: distcltop
     600!$OMP THREADPRIVATE(distcltop)
    587601
    588602! variables de sorties MM
     
    734748
    735749IMPLICIT NONE
    736       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     750      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    737751      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    738752      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    741755      ALLOCATE(tr_seri(klon,klev,nbtr))
    742756      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    743       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    744       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     757      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     758      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    745759      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    746760      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    765779      ALLOCATE(plul_st(klon),plul_th(klon))
    766780      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    767 
     781      ALLOCATE (d_qbs_vdf(klon,klev))
     782      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    768783      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    769784      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    925940      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    926941      ALLOCATE(JrNt(klon))
    927       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    928       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     942      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     943      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    929944      ALLOCATE(s_lcl(klon))
    930945      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    10121027      ALLOCATE(wfevap(klon, nbsrf), wfrain(klon,nbsrf), wfsnow(klon, nbsrf))
    10131028      ALLOCATE(evap_pot(klon, nbsrf))
     1029! FC
     1030      ALLOCATE(zxfluxq(klon,klev),zxfluxt(klon,klev))
     1031!
    10141032!
    10151033!  Deep convective variables used in phytrac
     
    10551073      ALLOCATE(prfl(klon, klev+1))
    10561074      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     1075      ALLOCATE(bsfl(klon,klev+1))
    10571076      ALLOCATE(zw2(klon, klev+1))
    10581077
     
    10681087      ALLOCATE(beta_prec(klon,klev))
    10691088      ALLOCATE(rneb(klon,klev),rnebjn(klon,klev),rneblsvol(klon,klev))
    1070 
     1089      ALLOCATE(pfraclr(klon,klev),pfracld(klon,klev))
     1090      pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined
     1091      ALLOCATE(distcltop(klon,klev))
    10711092
    10721093      ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon))
     
    11411162USE indice_sol_mod
    11421163IMPLICIT NONE
    1143       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     1164      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    11441165      DEALLOCATE(u_seri,v_seri)
    11451166      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    11471168      DEALLOCATE(tr_seri)
    11481169      DEALLOCATE(d_t_dyn,d_q_dyn)
    1149       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    1150       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     1170      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     1171      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    11511172      DEALLOCATE(d_u_dyn,d_v_dyn)
    11521173      DEALLOCATE(d_tr_dyn)                      !RomP
     
    11711192      DEALLOCATE(plul_st,plul_th)
    11721193      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     1194      DEALLOCATE(d_qbs_vdf)
     1195      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    11731196#ifdef ISO
    11741197      deallocate(xt_seri,xtl_seri,xts_seri)
     
    13081331      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    13091332      DEALLOCATE(JrNt)
    1310       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1311       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1333      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1334      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    13121335      DEALLOCATE(s_pblh, s_pblt, s_therm)
    13131336!
     
    13221345      DEALLOCATE(zxfqcalving, zxfluxlat)
    13231346      DEALLOCATE(zxrunofflic)
     1347      DEALLOCATE(zxustartlic, zxrhoslic)
    13241348      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    13251349      DEALLOCATE(rain_lsc)
     
    13641388      DEALLOCATE(alp_bl_stat, n2, s2)
    13651389      DEALLOCATE(proba_notrig, random_notrig)
     1390!FC
     1391      DEALLOCATE(zxfluxq,zxfluxt)
    13661392
    13671393      DEALLOCATE(dnwd0)
     
    14231449
    14241450
    1425       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1451      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    14261452      DEALLOCATE(zw2)
    14271453
     
    14361462      DEALLOCATE(beta_prec)
    14371463      DEALLOCATE(rneb)
     1464      DEALLOCATE(pfraclr,pfracld)
     1465      DEALLOCATE(distcltop)
    14381466      DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic)
    14391467#ifdef ISO
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_ctrlout_mod.F90

    r4065 r4669  
    378378  TYPE(ctrl_out), SAVE :: o_snow = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), &
    379379    'snow', 'Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     380  TYPE(ctrl_out), SAVE :: o_bsfall = ctrl_out((/ 10, 10, 10, 10, 5, 10, 11, 11, 11, 11/), &
     381    'bsfall', 'Blowing Snow fall', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    380382  TYPE(ctrl_out), SAVE :: o_evap = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    381383    'evap', 'Evaporat', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    382 
     384  TYPE(ctrl_out), SAVE :: o_snowerosion = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     385   'snowerosion', 'blowing snow flux', 'kg/(s*m2)', (/ ('', i=1, 10) /))
     386  TYPE(ctrl_out), SAVE :: o_ustart_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     387    'ustart_lic', 'threshold velocity', 'm/s', (/ ('', i=1, 10) /))
     388  TYPE(ctrl_out), SAVE :: o_rhosnow_lic = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     389    'rhosnow_lic', 'snow density lic', 'kg/m3', (/ ('', i=1, 10) /))
    383390  TYPE(ctrl_out), SAVE :: o_sens_prec_liq_oce = ctrl_out((/ 5, 5, 10, 10, 5, 10, 11, 11, 11, 11/), &
    384391    'sens_rain_oce', 'Sensible heat flux of liquid prec. over ocean', 'W/m2', (/ ('', i=1, 10) /))
     
    743750  TYPE(ctrl_out), SAVE :: o_prsw = ctrl_out((/ 1, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    744751    'prsw', 'Precipitable solid water', 'kg/m2', (/ ('', i=1, 10) /))
     752  TYPE(ctrl_out), SAVE :: o_prbsw = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     753    'prbsw', 'Precipitable blowing snow', 'kg/m2', (/ ('', i=1, 10) /))
    745754  TYPE(ctrl_out), SAVE :: o_s_pblh = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    746755    's_pblh', 'Boundary Layer Height', 'm', (/ ('', i=1, 10) /))
     
    14131422    'ec550aer', 'Extinction at 550nm', 'm^-1', (/ ('', i=1, 10) /))
    14141423  TYPE(ctrl_out), SAVE :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1415     'lwcon', 'Cloud liquid water content', 'kg/kg', (/ ('', i=1, 10) /))
     1424    'lwcon', 'Cloud liquid water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14161425  TYPE(ctrl_out), SAVE :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    1417     'iwcon', 'Cloud ice water content', 'kg/kg', (/ ('', i=1, 10) /))
     1426    'iwcon', 'Cloud ice water content seen by radiation', 'kg/kg', (/ ('', i=1, 10) /))
    14181427  TYPE(ctrl_out), SAVE :: o_temp = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14191428    'temp', 'Air temperature', 'K', (/ ('', i=1, 10) /))
     
    14321441  TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    14331442    'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /))
     1443  TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1444    'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /))
    14341445  TYPE(ctrl_out), SAVE :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14351446    'wvapp', '', '', (/ ('', i=1, 10) /))
     
    14621473  TYPE(ctrl_out), SAVE :: o_rneblsvol = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14631474    'rneblsvol', 'LS Cloud fraction by volume', '-', (/ ('', i=1, 10) /))
     1475  TYPE(ctrl_out), SAVE :: o_pfraclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1476    'pfraclr', 'LS precipitation fraction clear-sky part', '-', (/ ('', i=1, 10) /))
     1477  TYPE(ctrl_out), SAVE :: o_pfracld = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), &
     1478    'pfracld', 'LS precipitation fraction cloudy part', '-', (/ ('', i=1, 10) /))
    14641479  TYPE(ctrl_out), SAVE :: o_rhum = ctrl_out((/ 2, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14651480    'rhum', 'Relative humidity', '-', (/ ('', i=1, 10) /))
     
    14941509  TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14951510    'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1511  TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1512    'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1513  TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1514    'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    14961515  TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14971516    'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /))
     
    15021521  TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15031522    'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /))
     1523  TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1524    'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /))
    15041525  TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15051526    're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /))
     
    15301551  TYPE(ctrl_out), SAVE :: o_stratomask = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15311552    'stratomask', 'Stratospheric fraction', '1', (/ ('', i=1, 10) /))
     1553!FC
     1554  TYPE(ctrl_out), SAVE :: o_zxfluxt = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1555    'fluxt', 'flux h ', 'W/m2', (/ ('', i=1, 10) /))
     1556  TYPE(ctrl_out), SAVE :: o_zxfluxq = ctrl_out((/ 2,  6, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1557    'fluxq', 'flux q ', 'kg/(s*m2)', (/ ('', i=1, 10) /))
    15321558!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    15331559
     
    15991625  TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16001626    'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1627  TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1628    'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1629  TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1630    'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    16011631  TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16021632    'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /))
     
    16731703  TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16741704    'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1705  TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1706    'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1707  TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1708    'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1709  TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1710    'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /))
     1711  TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1712    'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /))
    16751713
    16761714!!!!!!!!!!!!!!!! Specifique thermiques
     
    18351873  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtprecip(:)
    18361874  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap(:)
     1875  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtevap_srf(:,:) ! ajout Camille 8 mai 2023
    18371876  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtplul(:)
    18381877  TYPE(ctrl_out), SAVE, ALLOCATABLE :: o_xtpluc(:)
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_mod.F90

    r4170 r4669  
    178178    ALLOCATE(o_xtpluc(ntraciso))
    179179    ALLOCATE(o_xtevap(ntraciso))
     180    ALLOCATE(o_xtevap_srf(ntraciso,4))
    180181    ALLOCATE(o_xtovap(ntraciso))
    181182    ALLOCATE(o_xtoliq(ntraciso))
     
    558559      o_xtevap  (ixt)=ctrl_out(flag,   'evap'//TRIM(outiso),             'Evaporat.', unit, [('',i=1,nfiles)])
    559560
     561      ! ajout Camille 8 mai 2023
     562      flag = [1, 6, 10, 10, 10, 10, 11, 11, 11, 11]
     563      o_xtevap_srf (ixt,1)=ctrl_out(flag,   'evap_ter'//TRIM(outiso), 'Evap sfc'//clnsurf(1), unit, [('',i=1,nfiles)])
     564      o_xtevap_srf (ixt,2)=ctrl_out(flag,   'evap_lic'//TRIM(outiso), 'Evap sfc'//clnsurf(2), unit, [('',i=1,nfiles)])
     565      o_xtevap_srf (ixt,3)=ctrl_out(flag,   'evap_oce'//TRIM(outiso), 'Evap sfc'//clnsurf(3), unit, [('',i=1,nfiles)])
     566      o_xtevap_srf (ixt,4)=ctrl_out(flag,   'evap_sic'//TRIM(outiso), 'Evap sfc'//clnsurf(4), unit, [('',i=1,nfiles)])
     567
    560568      flag = [2,  3,  4, 10, 10, 10, 11, 11, 11, 11]; unit = 'kg/kg'
    561569      o_xtovap  (ixt)=ctrl_out(flag,   'ovap'//TRIM(outiso),     'Specific humidity', unit, [('',i=1,nfiles)])
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/phys_output_var_mod.F90

    r4374 r4669  
    2929  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
    3030  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
    31   REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! solid watter mass budget for each column (kg/m2/s)
     31  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! cloud ice mass budget for each column (kg/m2/s)
     32  REAL, SAVE, ALLOCATABLE :: d_qbs_col(:)     ! blowing snow mass budget for each column (kg/m2/s)
    3233  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
    3334  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
     
    3536  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
    3637  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
    37   REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of solid watter  for each column (W/m2)
     38  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of cloud ice  for each column (W/m2)
     39  REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:)    ! enthalpy budget of blowing snow for each column (W/m2)
    3840  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
    39   !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col)
    40   !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     41  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col)
     42  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    4143
    4244  ! Outputs used in cloudth_vert to extract the moments of the horizontal and
     
    173175
    174176    allocate (bils_ec(klon),bils_ech(klon),bils_tke(klon),bils_diss(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
    175     allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
    176   &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_col(klon))
    177     d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
    178     d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_col=0.
     177    allocate (d_qw_col(klon), d_ql_col(klon), d_qs_col(klon), d_qbs_col(klon), d_qt_col(klon), d_ek_col(klon), d_h_dair_col(klon) &
     178  &         , d_h_qw_col(klon), d_h_ql_col(klon), d_h_qs_col(klon), d_h_qbs_col(klon), d_h_col(klon))
     179    d_qw_col=0. ; d_ql_col=0. ; d_qs_col=0. ; d_qbs_col=0. ; d_qt_col=0. ; d_ek_col=0. ; d_h_dair_col =0.
     180    d_h_qw_col=0. ; d_h_ql_col=0. ; d_h_qs_col=0. ; d_h_qbs_col=0. ; d_h_col=0.
    179181
    180182    ! Outputs used in cloudth_vert
     
    223225    deallocate(sza_o)
    224226    deallocate (bils_ec,bils_ech,bils_tke,bils_diss,bils_kinetic,bils_enthalp,bils_latent)
    225     deallocate (d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col &
    226   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     227    deallocate (d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
     228  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    227229
    228230    ! Outputs used in cloudth_vert
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/physiq_mod.F90

    r4495 r4669  
    7979    USE wxios, ONLY: g_ctx, wxios_set_context
    8080#endif
    81     USE atke_turbulence_ini_mod, ONLY : atke_ini
    82     USE lscp_ini_mod, ONLY : lscp_ini
    8381    USE lscp_mod, ONLY : lscp
    8482    USE wake_ini_mod, ONLY : wake_ini
    8583    USE yamada_ini_mod, ONLY : yamada_ini
     84    USE atke_turbulence_ini_mod, ONLY : atke_ini
    8685    USE thermcell_ini_mod, ONLY : thermcell_ini
     86    USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs
     87    USE lscp_ini_mod, ONLY : lscp_ini
    8788
    8889    !USE cmp_seri_mod
     
    183184       ! [Variables internes non sauvegardees de la physique]
    184185       ! Variables locales pour effectuer les appels en serie
    185        t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
     186       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    186187       ! Dynamic tendencies (diagnostics)
    187        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    188        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     188       d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_qbs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
     189       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    189190       ! Physic tendencies
    190191       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    203204       plul_st,plul_th, &
    204205       !
    205        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     206       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    206207       d_t_vdf_x, d_t_vdf_w, &
    207208       d_q_vdf_x, d_q_vdf_w, &
    208209       d_ts, &
     210       !
     211       d_t_bs,d_q_bs,d_qbs_bs, &
    209212       !
    210213!       d_t_oli,d_u_oli,d_v_oli, &
     
    254257       cldh, cldl,cldm, cldq, cldt,      &
    255258       JrNt,                             &
    256        dthmin, evap, fder, plcl, plfc,   &
    257        prw, prlw, prsw,                  &
     259       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     260       prw, prlw, prsw, prbsw,                  &
    258261       s_lcl, s_pblh, s_pblt, s_therm,   &
    259262       cdragm, cdragh,                   &
     
    328331       !
    329332       rneblsvol, &
     333       pfraclr,pfracld, &
     334       distcltop, &
    330335       zqsatl, zqsats, &
    331336       qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
     
    343348       fsolsw, wfbils, wfbilo,  &
    344349       wfevap, wfrain, wfsnow,  & 
    345        prfl, psfl, fraca, Vprecip,  &
     350       prfl, psfl,bsfl, fraca, Vprecip,  &
    346351       zw2,  &
    347352       !
     
    355360       beta_prec,  &
    356361       rneb,  &
    357        zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic
     362       zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic, &
     363       zxfluxt,zxfluxq
    358364
    359365
     
    526532    !======================================================================
    527533    !
    528     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    529     INTEGER,SAVE :: ivap, iliq, isol, irneb
    530 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     534    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     535    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     536!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    531537    !
    532538    !
     
    905911    REAL dialiq(klon,klev)  ! eau liquide nuageuse
    906912    REAL diafra(klon,klev)  ! fraction nuageuse
    907     REAL cldliq(klon,klev)  ! eau liquide nuageuse
     913    REAL radocond(klon,klev)  ! eau condensee nuageuse
    908914    !
    909915    !XXX PB
    910916    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
    911     !
    912     REAL zxfluxt(klon, klev)
    913     REAL zxfluxq(klon, klev)
     917    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
     918    !
     919    !FC    REAL zxfluxt(klon, klev)
     920    !FC    REAL zxfluxq(klon, klev)
     921    REAL zxfluxqbs(klon,klev)
    914922    REAL zxfluxu(klon, klev)
    915923    REAL zxfluxv(klon, klev)
     
    10091017    !
    10101018    ! tendance nulles
    1011     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     1019    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    10121020#ifdef ISO
    10131021    REAL, dimension(ntraciso,klon,klev):: dxt0, dxtl0, dxti0
     
    11561164    REAL ztsol(klon)
    11571165    REAL q2m(klon,nbsrf)  ! humidite a 2m
     1166    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1167    REAL qbsfra  ! blowing snow fraction
    11581168#ifdef ISO
    11591169    REAL d_xtw(ntraciso),d_xtl(ntraciso), d_xts(ntraciso)
     
    12341244    !IM 100106 BEG : pouvoir sortir les ctes de la physique
    12351245    include "conema3.h"
    1236     include "fisrtilp.h"
    12371246    include "nuage.h"
    12381247    include "compbl.h"
     
    13721381       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    13731382       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1383       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    13741384       CALL init_etat0_limit_unstruct
    13751385       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    14211431       ENDIF
    14221432
    1423        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1433       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    14241434          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    14251435               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    14401450       ENDIF
    14411451
     1452        IF (ok_bs) THEN
     1453          abort_message='blowing snow cannot be activated with water isotopes yet'
     1454          CALL abort_physic(modname,abort_message, 1)
     1455         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1456             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1457                               'but nqo=', nqo
     1458             abort_message='see above'
     1459             CALL abort_physic(modname,abort_message, 1)
     1460         ENDIF
     1461        ENDIF
    14421462       Ncvpaseq1 = 0
    14431463       dnwd0=0.0
     
    18901910       CALL thermcell_ini(iflag_thermals,prt_level,tau_thermals,lunout, &
    18911911   &    RG,RD,RCPD,RKAPPA,RLVTT,RETV)
    1892        IF (ok_new_lscp) then
    1893            CALL lscp_ini(pdtphys,ok_ice_sursat)
    1894        endif
     1912       CALL lscp_ini(pdtphys,ok_ice_sursat,RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT,RD,RG)
     1913       CALL blowing_snow_ini(prt_level,lunout, &
     1914                             RCPD, RLSTT, RLVTT, RLMLT, &
     1915                             RVTMP2, RTT,RD,RG)
    18951916
    18961917!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    19191940       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    19201941                              pplay, lmax_th, aerosol_couple,                 &
    1921                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1942                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    19221943                              ptconv, read_climoz, clevSTD,                   &
    19231944                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    24062427    dql0(:,:)=0.
    24072428    dqi0(:,:)=0.
     2429    dqbs0(:,:)=0.
    24082430#ifdef ISO
    24092431      dxt0(:,:,:)=0.
     
    24632485          q_seri(i,k)  = qx(i,k,ivap)
    24642486          ql_seri(i,k) = qx(i,k,iliq)
     2487          qbs_seri(i,k) = 0.
    24652488          !CR: ATTENTION, on rajoute la variable glace
    24662489          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    24702493             qs_seri(i,k) = qx(i,k,isol)
    24712494             rneb_seri(i,k) = 0.
    2472           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2495          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    24732496             qs_seri(i,k) = qx(i,k,isol)
     2497             IF (ok_ice_sursat) THEN
    24742498             rneb_seri(i,k) = qx(i,k,irneb)
     2499             ENDIF
     2500             IF (ok_bs) THEN
     2501             qbs_seri(i,k)= qx(i,k,ibs)
     2502             ENDIF
     2503
    24752504          ENDIF
     2505
     2506
    24762507       ENDDO
    24772508    ENDDO
     
    25152546    qql1(:)=0.0
    25162547    DO k = 1, klev
    2517       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2548      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    25182549    ENDDO
    25192550#ifdef ISO
     
    26312662       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    26322663       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2664       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    26332665       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    26342666       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    26372669       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    26382670       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2671       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2672       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    26392673       ! !! RomP >>>   td dyn traceur
    26402674       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    27232757       d_ql_dyn2d(:) = 0.0
    27242758       d_qs_dyn2d(:) = 0.0
     2759       d_qbs_dyn2d(:)= 0.0
    27252760
    27262761#ifdef ISO
     
    27462781       ! !! RomP <<<
    27472782       d_rneb_dyn(:,:)=0.0
     2783       d_qbs_dyn(:,:)=0.0
    27482784       ancien_ok = .TRUE.
    27492785    ENDIF
     
    28782914
    28792915     CALL add_phys_tend &
    2880             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2916            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    28812917               'eva',abortphy,flag_inhib_tend,itap,0 &
    28822918#ifdef ISO
     
    30473083            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    30483084            sollwdown,    cldt,      &
    3049             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     3085            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    30503086            gustiness,                                &
    3051             t_seri,    q_seri,    u_seri,  v_seri,    &
     3087            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    30523088                                !nrlmd+jyg<
    30533089            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    30603096                                !albedo SB >>>
    30613097                                ! albsol1,   albsol2,   sens,    evap,      &
    3062             albsol_dir,   albsol_dif,   sens,    evap,  
     3098            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    30633099                                !albedo SB <<<
    30643100            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    30653101            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    3066             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     3102            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    30673103                                !nrlmd<
    30683104                                !jyg<
     
    30903126            fluxt,   fluxu,  fluxv, &
    30913127            dsens,     devap,     zxsnow, &
    3092             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     3128            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    30933129                                !nrlmd+jyg<
    30943130            wake_delta_pbl_TKE, &
     
    32023238       IF (klon_glo==1) THEN
    32033239          CALL add_pbl_tend &
    3204                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3240               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32053241               'vdf',abortphy,flag_inhib_tend,itap &
    32063242#ifdef ISO
     
    32103246       ELSE
    32113247          CALL add_phys_tend &
    3212                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     3248               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    32133249               'vdf',abortphy,flag_inhib_tend,itap,0 &
    32143250#ifdef ISO
     
    32723308
    32733309    ENDIF
     3310
     3311    ! ==================================================================
     3312    ! Blowing snow sublimation and sedimentation
     3313
     3314    d_t_bs(:,:)=0.
     3315    d_q_bs(:,:)=0.
     3316    d_qbs_bs(:,:)=0.
     3317    bsfl(:,:)=0.
     3318    bs_fall(:)=0.
     3319    IF (ok_bs) THEN
     3320
     3321     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     3322                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     3323
     3324     CALL add_phys_tend &
     3325               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     3326               'bs',abortphy,flag_inhib_tend,itap,0  &
     3327#ifdef ISO                                       
     3328       &    ,dxt0,dxtl0,dxti0 &                   
     3329#endif                                       
     3330       &   )
     3331
     3332    ENDIF
     3333
    32743334    ! =================================================================== c
    32753335    !   Calcul de Qsat
     
    39594019!!
    39604020!!
    3961     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     4021    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    39624022         'convection',abortphy,flag_inhib_tend,itap,0 &
    39634023#ifdef ISO
     
    41914251       !-----------------------------------------------------------------------
    41924252       ! ajout des tendances des poches froides
    4193        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     4253       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    41944254            abortphy,flag_inhib_tend,itap,0 &
    41954255#ifdef ISO
     
    44704530          !
    44714531          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    4472                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
     4532                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0 &
    44734533#ifdef ISO
    44744534     &    ,d_xt_ajs,dxtl0,dxti0 &
     
    45864646          !--------------------------------------------------------------------
    45874647          ! ajout des tendances de l'ajustement sec ou des thermiques
    4588           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     4648          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    45894649               'ajsb',abortphy,flag_inhib_tend,itap,0 &
    45904650#ifdef ISO
     
    46274687         ptconv,ptconvth,clwcon0th, rnebcon0th,     &
    46284688         paprs,pplay,t_seri,q_seri, qtc_cv, sigt_cv, zqsat, &
    4629          pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm, &
     4689         pbl_tke(:,:,is_ave),tke_dissip_ave,l_mix_ave,wprime_ave,t2m,q2m,fm_therm,cell_area, &
    46304690         ratqs,ratqsc,ratqs_inter)
    46314691
     
    47314791         t_seri, q_seri,ptconv,ratqs, &
    47324792         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, rneb_seri, &
    4733          cldliq, picefra, rain_lsc, snow_lsc, &
     4793         pfraclr,pfracld, &
     4794         radocond, picefra, rain_lsc, snow_lsc, &
    47344795         frac_impa, frac_nucl, beta_prec_fisrt, &
    47354796         prfl, psfl, rhcl,  &
    47364797         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    4737          iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, &
     4798         iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &
    47384799         qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, &
    47394800         Tcontr, qcontr, qcontr2, fcontrN, fcontrP )
     
    47434804    CALL fisrtilp(phys_tstep,paprs,pplay, &
    47444805         t_seri, q_seri,ptconv,ratqs, &
    4745          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, &
     4806         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, radocond, &
    47464807         rain_lsc, snow_lsc, &
    47474808         pfrac_impa, pfrac_nucl, pfrac_1nucl, &
     
    47914852!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    47924853!-JLD
    4793     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     4854    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    47944855         'lsc',abortphy,flag_inhib_tend,itap,0 &
    47954856#ifdef ISO
     
    48284889    ENDIF
    48294890
    4830     !---------------------------------------------------------------------------
     4891
     4892!---------------------------------------------------------------------------
    48314893    DO k = 1, klev
    48324894       DO i = 1, klon
    48334895          cldfra(i,k) = rneb(i,k)
    48344896          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
    4835           IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k)
     4897          !EV: en effet etrange, j'ajouterais aussi qs_seri
     4898          !    plus largement, je nettoierais (enleverrais) ces lignes
     4899          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    48364900       ENDDO
    48374901    ENDDO
    48384902
    48394903
    4840 
     4904    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     4905    ! makes sense only if the new large scale condensation scheme is active
     4906    ! with the ok_icefra_lscp flag active as well
     4907
     4908    IF (ok_bs .AND. ok_rad_bs) THEN
     4909       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     4910           DO k=1,klev
     4911             DO i=1,klon
     4912                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     4913                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     4914                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     4915                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     4916             ENDDO
     4917           ENDDO
     4918       ELSE
     4919          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     4920          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     4921          abort_message='inconsistency in cloud phase for blowing snow'
     4922          CALL abort_physic(modname,abort_message,1)
     4923       ENDIF
     4924
     4925    ENDIF
    48414926#ifdef ISO     
    48424927!#ifdef ISOVERIF
     
    50015086          DO i = 1, klon
    50025087             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5003                 cldliq(i,k) = dialiq(i,k)
     5088                radocond(i,k) = dialiq(i,k)
    50045089                cldfra(i,k) = diafra(i,k)
    50055090             ENDIF
     
    50385123                DO i=1,klon
    50395124                   IF (ptconv(i,k).AND.ptconvth(i,k)) THEN
    5040                       cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5125                      radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50415126                      cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    50425127                   ELSE IF (ptconv(i,k)) THEN
    50435128                      cldfra(i,k)=rnebcon(i,k)
    5044                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5129                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50455130                   ENDIF
    50465131                ENDDO
     
    50515136                DO i=1,klon
    50525137                   cldfra(i,k)=min(cldfra(i,k)+rnebcon(i,k),1.)
    5053                    cldliq(i,k)=cldliq(i,k)+rnebcon(i,k)*clwcon(i,k)
     5138                   radocond(i,k)=radocond(i,k)+rnebcon(i,k)*clwcon(i,k)
    50545139                ENDDO
    50555140             ENDDO
     
    50695154                   IF (ptconv(i,k).AND. .NOT.ptconvth(i,k)) THEN
    50705155                      cldfra(i,k)=rnebcon(i,k)
    5071                       cldliq(i,k)=rnebcon(i,k)*clwcon(i,k)
     5156                      radocond(i,k)=rnebcon(i,k)*clwcon(i,k)
    50725157                   ENDIF
    50735158                ENDDO
     
    50805165          ! Ancienne version
    50815166          cldfra(:,:)=min(max(cldfra(:,:),rnebcon(:,:)),1.)
    5082           cldliq(:,:)=cldliq(:,:)+rnebcon(:,:)*clwcon(:,:)
     5167          radocond(:,:)=radocond(:,:)+rnebcon(:,:)*clwcon(:,:)
    50835168       ENDIF
    50845169
     
    51005185          DO i = 1, klon
    51015186             IF (diafra(i,k).GT.cldfra(i,k)) THEN
    5102                 cldliq(i,k) = dialiq(i,k)
     5187                radocond(i,k) = dialiq(i,k)
    51035188                cldfra(i,k) = diafra(i,k)
    51045189             ENDIF
     
    54755560          ENDIF
    54765561          CALL newmicro (flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, &
    5477                paprs, pplay, t_seri, cldliq, picefra, cldfra, &
     5562               paprs, pplay, t_seri, radocond, picefra, cldfra, &
    54785563               cldtau, cldemi, cldh, cldl, cldm, cldt, cldq, &
    54795564               flwp, fiwp, flwc, fiwc, &
    54805565               mass_solu_aero, mass_solu_aero_pi, &
    5481                cldtaupi, latitude_deg, re, fl, ref_liq, ref_ice, &
     5566               cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &
    54825567               ref_liq_pi, ref_ice_pi)
    54835568       ELSE
    54845569          CALL nuage (paprs, pplay, &
    5485                t_seri, cldliq, picefra, cldfra, cldtau, cldemi, &
     5570               t_seri, radocond, picefra, cldfra, cldtau, cldemi, &
    54865571               cldh, cldl, cldm, cldt, cldq, &
    54875572               ok_aie, &
    54885573               mass_solu_aero, mass_solu_aero_pi, &
    5489                bl95_b0, bl95_b1, &
     5574               bl95_b0, bl95_b1, distcltop, &
    54905575               cldtaupi, re, fl)
    54915576       ENDIF
     
    57925877    ENDDO
    57935878
    5794     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
     5879    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0 &
    57955880#ifdef ISO
    57965881     &    ,dxt0,dxtl0,dxti0 &
     
    57985883     &  )
    57995884    CALL prt_enerbil('SW',itap)
    5800     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
     5885    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0 &
    58015886#ifdef ISO
    58025887     &    ,dxt0,dxtl0,dxti0 &
     
    58465931          ! -> condition on zrel_oro can deactivate the drag on tilted planar terrains
    58475932          !    such as ice sheets (work by V. Wiener)
    5848           ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to 
     5933          ! zpmm_orodr_t and zstd_orodr_t are activation thresholds set by F. Lott to
    58495934          ! earn computation time but they are not physical.
    58505935          IF (((zpic(i)-zmea(i)).GT.zpmm_orodr_t).AND.(zstd(i).GT.zstd_orodr_t).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     
    58775962       !-----------------------------------------------------------------------
    58785963       ! ajout des tendances de la trainee de l'orographie
    5879        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     5964       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    58805965            abortphy,flag_inhib_tend,itap,0 &
    58815966#ifdef ISO
     
    59326017
    59336018       ! ajout des tendances de la portance de l'orographie
    5934        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     6019       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    59356020            'lif', abortphy,flag_inhib_tend,itap,0 &
    59366021#ifdef ISO
     
    59616046       d_t_hin(:, :)=0.
    59626047       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    5963             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
     6048            dqi0, dqbs0,paprs, 'hin', abortphy,flag_inhib_tend,itap,0 &
    59646049#ifdef ISO
    59656050     &    ,dxt0,dxtl0,dxti0 &
     
    59836068       ENDDO
    59846069
    5985        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     6070       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    59866071            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    59876072#ifdef ISO
     
    59966081            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    59976082            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    5998        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     6083       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    59996084            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0 &
    60006085#ifdef ISO
     
    60556140       d_xt_ch4_dtime(:,:,:) = d_xt_ch4(:,:,:)*phys_tstep
    60566141#endif
    6057        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     6142       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    60586143            'q_ch4', abortphy,flag_inhib_tend,itap,0 &
    60596144#ifdef ISO
     
    61216206! car on peut s'attendre a ce que les petites echelles produisent aussi de la TKE
    61226207! Mais attention, cela ne va pas dans le sens de la conservation de l'energie!
    6123           IF ((zstd(i).GT.1.0).AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
     6208          IF ((zstd(i).GT.1.0) .AND.(zrel_oro(i).LE.zrel_oro_t)) THEN
    61246209             itest(i)=1
    61256210             igwd=igwd+1
     
    63816466    !
    63826467
    6383     IF (type_trac=='repr') THEN
     6468    IF (type_trac == 'repr') THEN
    63846469!MM pas d'impact, car on recupere q_seri,tr_seri,t_seri via phys_local_var_mod
    63856470!MM                               dans Reprobus
     
    64316516         presnivs, pphis,     pphi,     albsol1, &
    64326517         sh_in,   ch_in,    rhcl,      cldfra,   rneb, &
    6433          diafra,   cldliq,    itop_con, ibas_con, &
     6518         diafra,   radocond,    itop_con, ibas_con, &
    64346519         pmflxr,   pmflxs,    prfl,     psfl, &
    64356520         da,       phi,       mp,       upwd, &
     
    64486533
    64496534     CALL add_phys_tend &
    6450             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     6535            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    64516536             'rep',abortphy,flag_inhib_tend,itap,0)
    64526537        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    65256610    !   prlw = colonne eau liquide
    65266611    !   prlw = colonne eau solide
     6612    !   prbsw = colonne neige soufflee
    65276613    prw(:) = 0.
    65286614    prlw(:) = 0.
    65296615    prsw(:) = 0.
     6616    prbsw(:) = 0.
    65306617    DO k = 1, klev
    65316618       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    65326619       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    65336620       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     6621       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    65346622    ENDDO
    65356623
     
    66026690          ENDIF
    66036691          !--ice_sursat: nqo=4, on ajoute rneb
    6604           IF (nqo == 4) THEN
     6692          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    66056693             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    66066694          ENDIF
     6695
     6696           IF (nqo.ge.4 .and. ok_bs) THEN
     6697             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     6698          ENDIF
     6699
     6700
    66076701       ENDDO
    66086702    ENDDO
     
    66846778    ql_ancien(:,:) = ql_seri(:,:)
    66856779    qs_ancien(:,:) = qs_seri(:,:)
     6780    qbs_ancien(:,:) = qbs_seri(:,:)
    66866781    rneb_ancien(:,:) = rneb_seri(:,:)
    66876782#ifdef ISO
     
    66936788    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    66946789    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     6790    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    66956791    ! !! RomP >>>
    66966792    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    68216917    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    68226918         pplay, lmax_th, aerosol_couple,                 &
    6823          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     6919         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    68246920         ok_sync, ptconv, read_climoz, clevSTD,          &
    68256921         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_land_mod.F90

    r4285 r4669  
    1111       rlon, rlat, yrmu0, &
    1212       debut, lafin, zlev, ccanopy, swnet, lwnet, albedo, &
    13        tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     13       tsurf, p1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1414       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1515       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    1717       lwdown_m, q2m, t2m, &
    1818       snow, qsol, agesno, tsoil, &
    19        z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &   
     19       z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, fluxbs, &   
    2020       qsurf, tsurf_new, dflux_s, dflux_l, &
    2121       flux_u1, flux_v1 , &
     
    9494    REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
    9595    REAL, DIMENSION(klon), INTENT(IN)       :: cdragh, cdragm
    96     REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow
     96    REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
    9797    REAL, DIMENSION(klon), INTENT(IN)       :: temp_air, spechum
    9898    REAL, DIMENSION(klon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    129129!albedo SB <<<
    130130    REAL, DIMENSION(klon), INTENT(OUT)       :: evap
    131     REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat
     131    REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
    132132    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    133133    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
     
    152152    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    153153    REAL, DIMENSION(klon) :: u0, v0     ! surface speed
     154    REAL, DIMENSION(klon) :: precip_totsnow     ! total solid precip
    154155    INTEGER               :: i
    155156
     
    166167#endif 
    167168
     169!****************************************************************************************
     170!Total solid precip
     171
     172IF (ok_bs) THEN
     173precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     174ELSE
     175precip_totsnow(:)=precip_snow(:)
     176ENDIF
     177!****************************************************************************************
    168178#ifdef ISO
    169179#ifdef ISOVERIF
     
    228238            zlev,  u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, &
    229239            cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, &
    230             precip_rain, precip_snow, lwdown_m, swnet, swdown, &
     240            precip_rain, precip_totsnow, lwdown_m, swnet, swdown, &
    231241            pref_tmp, q2m, t2m, &
    232             evap, fluxsens, fluxlat, &             
     242            evap, fluxsens, fluxlat,  &             
    233243            tsol_rad, tsurf_new, alb1_new, alb2_new, &
    234244            emis_new, z0m, z0h, qsurf, &
     
    277287#endif
    278288       CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    279             tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, &
     289            tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, &
    280290            spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, &
    281291            u1, v1, gustiness, rugoro, swnet, lwnet, &
     
    293303    ENDIF ! ok_veget
    294304
     305        ! blowing snow not treated yet over land
     306        fluxbs(:)=0.
    295307!****************************************************************************************
    296308! Calculation for all land models
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_landice_mod.F90

    r4285 r4669  
    1212       rmu0, lwdownm, albedo, pphi1, &
    1313       swnet, lwnet, tsurf, p1lay, &
    14        cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     14       cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1515       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1616       AcoefU, AcoefV, BcoefU, BcoefV, &
     17       AcoefQBS, BcoefQBS, &
    1718       ps, u1, v1, gustiness, rugoro, pctsrf, &
    18        snow, qsurf, qsol, agesno, &
    19        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &
     19       snow, qsurf, qsol, qbs1, agesno, &
     20       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
    2021       tsurf_new, dflux_s, dflux_l, &
    2122       alt, slope, cloudf, &
     
    3435    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3536    USE calcul_fluxs_mod
    36     USE phys_output_var_mod
     37    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
     38    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3739#ifdef ISO   
    3840    USE fonte_neige_mod,  ONLY : xtrun_off_lic
     
    4850!FC
    4951    USE ioipsl_getin_p_mod, ONLY : getin_p
    50 
     52    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs, iflag_saltation_bs
    5153
    5254#ifdef CPP_INLANDSIS
     
    7274    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    7375    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    74     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     76    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    7577    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    7678    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
    7779    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
    7880    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
     81    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefQBS, BcoefQBS
    7982    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    80     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     83    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    8184    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    8285    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    118121!albedo SB <<<
    119122    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     123    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    120124    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    121125    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    179183
    180184    REAL,DIMENSION(klon) :: alb1,alb2
     185    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    181186    REAL, DIMENSION (klon,6) :: alb6
     187    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, rhod
     188    REAL                   :: lambdasalt,fluxsalt, csalt, nunu, aa, bb, cc
     189    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     190    REAL, DIMENSION(klon)  :: ws1, rhos, ustart, qsalt
    182191! End definition
    183192!****************************************************************************************
     
    214223           PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
    215224 
    216 !  z0m=1.e-3
    217 !  z0h = z0m
    218225  firstcall=.false.
    219226  ENDIF
    220227!******************************************************************************************
    221 !
     228
    222229! Initialize output variables
    223230    alb3(:) = 999999.
    224231    alb2(:) = 999999.
    225232    alb1(:) = 999999.
    226    
     233    fluxbs(:)=0. 
    227234    runoff(:) = 0.
    228235!****************************************************************************************
     
    232239    radsol(:) = 0.0
    233240    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     241
     242!****************************************************************************************
    234243
    235244!****************************************************************************************
     
    327336
    328337
    329 
    330338    ELSE
    331339
     
    342350    IF (soil_model) THEN
    343351       CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, &
    344     & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    345 
     352        & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
    346353       cal(1:knon) = RCPD / soilcap(1:knon)
    347354       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
     
    406413         flux_u1, flux_v1)
    407414
    408 !****************************************************************************************
    409 ! Calculate snow height, age, run-off,..
     415
     416!****************************************************************************************
     417! Calculate albedo
     418!
     419!****************************************************************************************
     420 
     421    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
     422
     423
     424! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     425! I therefore comment them
     426!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     427!         0.6 * (1.0-zfra(1:knon))
     428!
     429!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     430!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
     431!       alb1(1 : knon)  = 0.82
     432!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
     433!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
     434!IM: KstaTER0.77 & LMD_ARMIP6   
     435
     436! Attantion: alb1 and alb2 are not the same!
     437    alb1(1:knon)  = alb_vis_sno_lic
     438    alb2(1:knon)  = alb_nir_sno_lic
     439
     440
     441!****************************************************************************************
     442! Rugosity
     443!
     444!****************************************************************************************
     445    z0m = z0m_landice
     446    z0h = z0h_landice
     447    !z0m = SQRT(z0m**2+rugoro**2)
     448
     449
     450
     451  ! Simple blowing snow param
     452  if (ok_bs) then
     453       ustart0 = 0.211
     454       rhoice = 920.0
     455       rho0 = 200.0
     456       rhomax=450.0
     457       rhohard=400.0
     458       tau_dens0=86400.0*10.  ! 10 days by default, in s
     459       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     460
     461       ! computation of threshold friction velocity
     462       ! which depends on surface snow density
     463       do i = 1, knon
     464           ! estimation of snow density
     465           ! snow density increases with snow age and
     466           ! increases even faster in case of sedimentation of blowing snow
     467           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     468           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     469           ! blowing snow flux formula used in MAR
     470           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     471           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     472           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     473           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     474           ! rhohard<450)
     475       enddo
     476       
     477       ! computation of qbs at the top of the saltation layer
     478       ! two formulations possible
     479       ! pay attention that qbs is a mixing ratio and has to be converted
     480       ! to specific content
     481       
     482       if (iflag_saltation_bs .eq. 1) then
     483       ! expression from CRYOWRF (Sharma et al. 2022)
     484          aa=2.6
     485          bb=2.5
     486          cc=2.0
     487          lambdasalt=0.45
     488          do i =1, knon
     489               rhod=p1lay(i)/RD/temp_air(i)
     490               nunu=max(ustar(i)/ustart(i),1.e-3)
     491               fluxsalt=rhod/RG*(ustar(i)**3)*(1.-nunu**(-2)) * &
     492                        (aa+bb*nunu**(-2)+cc*nunu**(-1)) 
     493               csalt=fluxsalt/(2.8*ustart(i))
     494               hsalt=0.08436*ustar(i)**1.27
     495               qsalt(i)=1./rhod*csalt*lambdasalt*RG/(max(ustar(i)**2,1E-6)) &
     496                       * exp(-lambdasalt*RG*hsalt/max(ustar(i)**2,1E-6))
     497               qsalt(i)=max(qsalt(i),0.)
     498          enddo
     499
     500
     501       else
     502       ! default formulation from MAR model (Amory et al. 2021, Gallee et al. 2001)       
     503          do i=1, knon
     504              esalt=1./(3.25*max(ustar(i),0.001))
     505              hsalt=0.08436*ustar(i)**1.27
     506              qsalt(i)=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     507              !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     508          enddo
     509       endif
     510
     511        ! calculation of erosion (emission flux towards the first atmospheric level)
     512        ! consistent with implicit resolution of turbulent mixing equation
     513       do i=1, knon
     514              rhod=p1lay(i)/RD/temp_air(i)
     515              fluxbs(i)=rhod*ws1(i)*cdragm(i)*zeta_bs*(AcoefQBS(i)-qsalt(i)) &
     516                       / (1.-rhod*ws1(i)*zeta_bs*cdragm(i)*BcoefQBS(i)*dtime)
     517              !fluxbs(i)= zeta_bs*rhod*ws1(i)*cdragm(i)*(qbs1(i)-qsalt(i))
     518       enddo
     519
     520       ! for outputs
     521       do j = 1, knon
     522          i = knindex(j)
     523          zxustartlic(i) = ustart(j)
     524          zxrhoslic(i) = rhos(j)
     525       enddo
     526
     527  endif
     528
     529
     530
     531!****************************************************************************************
     532! Calculate surface snow amount
    410533!   
    411534!****************************************************************************************
     535    IF (ok_bs) THEN
     536      precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     537      evap_totsnow(:)=evap(:)-fluxbs(:) ! flux bs is positive towards the surface (snow erosion)
     538    ELSE
     539      precip_totsnow(:)=precip_snow(:)
     540      evap_totsnow(:)=evap(:)
     541    ENDIF
     542
    412543    CALL fonte_neige(knon, is_lic, knindex, dtime, &
    413          tsurf, precip_rain, precip_snow, &
    414          snow, qsol, tsurf_new, evap &
     544         tsurf, precip_rain, precip_totsnow, &
     545         snow, qsol, tsurf_new, evap_totsnow &
    415546#ifdef ISO   
    416547     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
     
    446577
    447578
    448 !****************************************************************************************
    449 ! Calculate albedo
    450 !
    451 !****************************************************************************************
    452     CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    453 
    454     WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    455     zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    456     alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    457          0.6 * (1.0-zfra(1:knon))
    458 !
    459 !IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
    460 !       alb1(1 : knon)  = 0.6 !IM cf FH/GK
    461 !       alb1(1 : knon)  = 0.82
    462 !       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
    463 !       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
    464 !IM: KstaTER0.77 & LMD_ARMIP6   
    465 
    466 ! Attantion: alb1 and alb2 are not the same!
    467     alb1(1:knon)  = alb_vis_sno_lic
    468     alb2(1:knon)  = alb_nir_sno_lic
    469 
    470 
    471 !****************************************************************************************
    472 ! Rugosity
    473 !
    474 !****************************************************************************************
    475     z0m=1.e-3
    476     z0h = z0m
    477     z0m = SQRT(z0m**2+rugoro**2)
    478 
     579    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     580    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    479581
    480582
     
    494596          run_off_lic_frac(j) = pctsrf(i,is_lic)
    495597       ENDDO
    496        
     598
    497599       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac)
    498600    ENDIF
     
    501603    runoff(1:knon)=run_off_lic(1:knon)/dtime
    502604
    503  
    504 !****************************************************************************************
    505 ! Etienne: comment these lines because of duplication just below
    506 !       snow_o=0.
    507 !       zfra_o = 0.
    508 !       DO j = 1, knon
    509 !           i = knindex(j)
    510 !           snow_o(i) = snow(j)
    511 !           zfra_o(i) = zfra(j)
    512 !       ENDDO
    513 !
    514 !****************************************************************************************
    515605       snow_o=0.
    516606       zfra_o = 0.
     
    553643!albedo SB <<<
    554644
    555  
    556  
    557645
    558646  END SUBROUTINE surf_landice
  • LMDZ6/branches/LMDZ_cdrag_LSCE/libf/phylmdiso/surf_ocean_mod.F90

    r4374 r4669  
    1313       windsp, rmu0, fder, tsurf_in, &
    1414       itime, dtime, jour, knon, knindex, &
    15        p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     15       p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
    1616       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    1717       AcoefU, AcoefV, BcoefU, BcoefV, &
     
    7272    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh
    7373    REAL, DIMENSION(klon), INTENT(IN)        :: cdragm
    74     REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
     74    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow, precip_bs
    7575    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
    7676    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    169169    REAL, DIMENSION(klon) :: radsol
    170170    REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation
     171    REAL, DIMENSION(klon) :: precip_totsnow
    171172    CHARACTER(len=20),PARAMETER :: modname="surf_ocean"
    172173    real rhoa(knon) ! density of moist air  (kg / m3)
     
    200201    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
    201202
     203
     204    !****************************************************************************************
     205    !Total solid precip
     206
     207    IF (ok_bs) THEN
     208       precip_totsnow(:)=precip_snow(:)+precip_bs(:)
     209    ELSE
     210       precip_totsnow(:)=precip_snow(:)
     211    ENDIF
     212
    202213    !******************************************************************************
    203214    ! Cdragq computed from cdrag
     
    227238            windsp, fder, &
    228239            itime, dtime, knon, knindex, &
    229             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow,temp_air,spechum,&
     240            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,&
    230241            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    231242            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    239250       CALL ocean_slab_noice( &
    240251            itime, dtime, jour, knon, knindex, &
    241             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum,&
     252            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,&
    242253            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    243254            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    250261       CALL ocean_forced_noice( &
    251262            itime, dtime, jour, knon, knindex, &
    252             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, &
     263            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, &
    253264            temp_air, spechum, &
    254265            AcoefH, AcoefQ, BcoefH, BcoefQ, &
     
    370381       call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, &
    371382            u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), &
    372             rain = precip_rain(:knon) + precip_snow(:knon), &
     383            rain = precip_rain(:knon) + precip_totsnow(:knon), &
    373384            hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
    374385            rnl = - lwnet(:knon), &
Note: See TracChangeset for help on using the changeset viewer.