Ignore:
Timestamp:
May 3, 2023, 6:21:08 PM (19 months ago)
Author:
evignon
Message:

merge de la branche blowing snow vers la trunk
premiere tentative
Etienne

Location:
LMDZ6/trunk
Files:
20 edited
4 copied

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk

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

    r3435 r4523  
    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  ! ======================================================================
    2020  ! Ajoute les tendances de couche limite, soit determinees par la
     
    4949  ! ------------
    5050  REAL zdu(klon, klev), zdv(klon, klev)
    51   REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev)
     51  REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev)
    5252  CHARACTER *(*) text
    5353  REAL paprs(klon,klev+1)
     
    7676    PRINT *, ' add_pbl_tend, zzdt ', zzdt
    7777    PRINT *, ' add_pbl_tend, zzdq ', zzdq
    78     CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)
     78    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0)
    7979  ELSE
    80     CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, paprs, text,abortphy,flag_inhib_tend, itap, 0)
     80    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0)
    8181  END IF
    8282
     
    8787! $Id: add_phys_tend.F90 2611 2016-08-03 15:41:26Z jyg $
    8888!
    89 SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,paprs,text, &
     89SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, &
    9090                          abortphy,flag_inhib_tend, itap, diag_mode)
    9191!======================================================================
     
    102102USE dimphy, ONLY: klon, klev
    103103USE phys_state_var_mod, ONLY : phys_tstep
    104 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri
     104USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri
    105105USE phys_state_var_mod, ONLY: ftsol
    106106USE geometry_mod, ONLY: longitude_deg, latitude_deg
    107107USE print_control_mod, ONLY: prt_level
    108108USE cmp_seri_mod
    109 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 &
    110   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     109USE 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 &
     110  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    111111IMPLICIT none
    112112  include "YOMCST.h"
     
    116116!------------
    117117REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdu, zdv
    118 REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi
     118REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi, zdqbs
    119119REAL, DIMENSION(klon,klev+1),   INTENT(IN)    :: paprs
    120120CHARACTER*(*),                  INTENT(IN)    :: text
     
    136136! Save variables, used in diagnostic mode (diag_mode=1).
    137137REAL, DIMENSION(klon,klev)   :: sav_u_seri, sav_v_seri
    138 REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_q_seri
     138REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri
    139139REAL, DIMENSION(klon,klev)   :: sav_t_seri
    140140REAL, DIMENSION(klon,klev)   :: sav_zdq
     
    163163! zh_ql_col----  total enthalpy of liquid watter (J/m2)
    164164! zh_qs_col----  total enthalpy of solid watter  (J/m2)
     165! zh_qbs_col----  total enthalpy of blowing snow  (J/m2)
    165166! zqw_col------  total mass of watter vapour (kg/m2)
    166167! zql_col------  total mass of liquid watter (kg/m2)
    167 ! zqs_col------  total mass of solid watter (kg/m2)
     168! zqs_col------  total mass of cloud ice (kg/m2)
     169! zqbs_col------  total mass of blowing snow (kg/m2)
    168170! zek_col------  total kinetic energy (kg/m2)
    169171!
     
    172174REAL zql_col(klon,2)
    173175REAL zqs_col(klon,2)
     176REAL zqbs_col(klon,2)
    174177REAL zek_col(klon,2)
    175178REAL zh_dair_col(klon,2)
    176 REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2)
     179REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2)
    177180REAL zh_col(klon,2)
    178181
     
    213216    sav_ql_seri(:,:) = ql_seri(:,:)
    214217    sav_qs_seri(:,:) = qs_seri(:,:)
     218    sav_qbs_seri(:,:) = qbs_seri(:,:)
    215219    sav_q_seri(:,:)  = q_seri(:,:)
    216220    sav_t_seri(:,:)  = t_seri(:,:)
     
    236240
    237241    CALL integr_v(klon, klev, zcpvap, &
    238                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    239                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    240                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     242                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     243                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     244                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    241245
    242246  end if ! end if (fl_ebil .GT. 0)
     
    250254     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
    251255     qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:)
     256     qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:)
    252257
    253258!======================================================================
     
    432437        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
    433438        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
     439        qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:)
    434440      ENDIF
    435441
     
    446452
    447453    CALL integr_v(klon, klev, zcpvap, &
    448                   t_seri, q_seri, ql_seri, qs_seri, u_seri, v_seri, zairm, &
    449                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    450                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     454                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
     455                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     456                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    451457
    452458    ! ------------------------------------------------
     
    457463    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    458464    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    459     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     465    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     466    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    460467
    461468    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    465472    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    466473    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     474    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    467475
    468476    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    476484    ql_seri(:,:) = sav_ql_seri(:,:)
    477485    qs_seri(:,:) = sav_qs_seri(:,:)
     486    qbs_seri(:,:) = sav_qbs_seri(:,:)
    478487    q_seri(:,:)  = sav_q_seri(:,:)
    479488    t_seri(:,:)  = sav_t_seri(:,:)
     
    484493END SUBROUTINE add_phys_tend
    485494
    486 SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, &
    487                           zdu,zdv,zdt,zdq,zdql,zdqs,paprs,text)
     495SUBROUTINE diag_phys_tend (nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, &
     496                          zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text)
    488497!======================================================================
    489498! Ajoute les tendances des variables physiques aux variables
     
    501510USE print_control_mod, ONLY: prt_level
    502511USE cmp_seri_mod
    503 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 &
    504   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     512USE 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 &
     513  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    505514IMPLICIT none
    506515  include "YOMCST.h"
     
    511520INTEGER, INTENT(IN)                           :: nlon, nlev
    512521REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: uu, vv
    513 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs
     522REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs, qbs
    514523REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdu, zdv
    515 REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs
     524REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs, zdqbs
    516525REAL, DIMENSION(nlon,nlev+1),   INTENT(IN)    :: paprs
    517526CHARACTER*(*),                  INTENT(IN)    :: text
     
    520529!--------
    521530REAL, DIMENSION(nlon,nlev)      :: uu_n, vv_n
    522 REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n
     531REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n, qbs_n
    523532
    524533
     
    543552! zqw_col------  total mass of watter vapour (kg/m2)
    544553! zql_col------  total mass of liquid watter (kg/m2)
    545 ! zqs_col------  total mass of solid watter (kg/m2)
     554! zqs_col------  total mass of cloud ice (kg/m2)
     555! zqbs_col------  total mass of blowing snow (kg/m2)
    546556! zek_col------  total kinetic energy (kg/m2)
    547557!
     
    550560REAL zql_col(nlon,2)
    551561REAL zqs_col(nlon,2)
     562REAL zqbs_col(nlon,2)
    552563REAL zek_col(nlon,2)
    553564REAL zh_dair_col(nlon,2)
    554 REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2)
     565REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2)
    555566REAL zh_col(nlon,2)
    556567
     
    585596
    586597    CALL integr_v(nlon, nlev, rcpv, &
    587                   temp, qv, ql, qs, uu, vv, zairm, &
    588                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    589                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     598                  temp, qv, ql, qs, qbs, uu, vv, zairm, &
     599                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     600                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    590601
    591602  end if ! end if (fl_ebil .GT. 0)
     
    600611     ql_n(:,:)=ql(:,:)+zdql(:,:)
    601612     qs_n(:,:)=qs(:,:)+zdqs(:,:)
     613     qbs_n(:,:)=qbs(:,:)+zdqbs(:,:)
    602614     temp_n(:,:)=temp(:,:)+zdt(:,:)
    603615
     
    616628
    617629    CALL integr_v(nlon, nlev, rcpv, &
    618                   temp_n, qv_n, ql_n, qs_n, uu_n, vv_n, zairm, &
    619                     zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
    620                     zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_col(:,n))
     630                  temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, &
     631                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
     632                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
    621633
    622634    ! ------------------------------------------------
     
    627639    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
    628640    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
    629     d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:)
     641    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
     642    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
    630643
    631644    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
     
    639652    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
    640653    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
     654    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
    641655
    642656    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
     
    649663
    650664SUBROUTINE integr_v(nlon, nlev, zcpvap, &
    651                     temp, qv, ql, qs, uu, vv, zairm,  &
    652                     zqw_col, zql_col, zqs_col, zek_col, zh_dair_col, &
    653                     zh_qw_col, zh_ql_col, zh_qs_col, zh_col)
     665                    temp, qv, ql, qs, qbs, uu, vv, zairm,  &
     666                    zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, &
     667                    zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col)
    654668
    655669IMPLICIT none
     
    658672INTEGER,                    INTENT(IN)    :: nlon,nlev
    659673REAL,                       INTENT(IN)    :: zcpvap
    660 REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, uu, vv
     674REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, qbs, uu, vv
    661675REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: zairm
    662676REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqw_col
    663677REAL, DIMENSION(nlon),      INTENT(OUT)   :: zql_col
    664 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col
     678REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col, zqbs_col
    665679REAL, DIMENSION(nlon),      INTENT(OUT)   :: zek_col
    666680REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_dair_col
    667681REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qw_col
    668682REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_ql_col
    669 REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col
     683REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col, zh_qbs_col
    670684REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_col
    671685
     
    677691    zql_col(:) = 0.
    678692    zqs_col(:) = 0.
     693    zqbs_col(:) = 0.
    679694    zek_col(:) = 0.
    680695    zh_dair_col(:) = 0.
     
    682697    zh_ql_col(:) = 0.
    683698    zh_qs_col(:) = 0.
     699    zh_qbs_col(:) = 0.
    684700
    685701!JLD    write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice
     
    694710        zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
    695711        zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
     712        zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k)
    696713        ! Kinetic Energy
    697714        zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k)
     
    702719        zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k)   !jyg
    703720        zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k)   !jyg
     721        zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k)   !jyg
    704722      END DO
    705723    END DO
    706724    ! compute total air enthalpy
    707     zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:)
     725    zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:)
    708726
    709727END SUBROUTINE integr_v
     
    720738USE dimphy, ONLY: klon, klev
    721739USE phys_state_var_mod, ONLY : phys_tstep
    722 USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con
     740USE phys_state_var_mod, ONLY : topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall
    723741USE geometry_mod, ONLY: longitude_deg, latitude_deg
    724742USE print_control_mod, ONLY: prt_level
    725743USE cmp_seri_mod
    726 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 &
    727   &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col
     744USE 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 &
     745  &           , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
    728746USE phys_local_var_mod, ONLY: evap, sens
    729 USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, q_seri, t_seri &
     747USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri &
    730748   &  , rain_lsc, snow_lsc
    731749USE climb_hq_mod, ONLY : d_h_col_vdf, f_h_bnd
     
    764782      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) &
    765783    &         + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1)
     784  CASE("bs") param
     785      bilq_bnd = - bs_fall(1)
     786      bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1)
    766787  CASE("convection") param
    767788      bilq_bnd = - rain_con(1) - snow_con(1)
     
    800821  if ( prt_level .GE. 5) then
    801822    write(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd
    802     write(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1)
    803     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)
     823    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)
     824    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)
    804825  end if
    805826
  • LMDZ6/trunk/libf/phylmd/clesphys.h

    r4458 r4523  
    100100       LOGICAL :: ok_daily_climoz
    101101       LOGICAL :: ok_new_lscp
     102       LOGICAL :: ok_bs, ok_rad_bs
    102103! flag to bypass or not the phytrac module
    103104       INTEGER :: iflag_phytrac
     
    150151     &     , ok_chlorophyll,ok_conserv_q, adjust_tropopause             &
    151152     &     , ok_daily_climoz, ok_all_xml, ok_lwoff                      &
    152      &     , iflag_phytrac, ok_new_lscp                                 &
     153     &     , iflag_phytrac, ok_new_lscp, ok_bs, ok_rad_bs               &
    153154     &     ,  iflag_thermals,nsplit_thermals, tau_thermals   
    154155       save /clesphys/
  • LMDZ6/trunk/libf/phylmd/conf_phys_m.F90

    r4466 r4523  
    255255    LOGICAL, SAVE :: ok_new_lscp_omp
    256256    LOGICAL, SAVE :: ok_icefra_lscp_omp
     257    LOGICAL, SAVE :: ok_bs_omp, ok_rad_bs_omp
    257258
    258259
     
    23592360    !Config Help = ...
    23602361
     2362
     2363
     2364    ok_bs_omp = .FALSE.
     2365    CALL getin('ok_bs', ok_bs_omp)
     2366    !
     2367    !Config Key  = ok_bs_omp
     2368    !Config Desc = include blowing snow
     2369    !Config Def  = .FALSE.
     2370    !Config Help = ...
     2371
     2372
     2373    ok_rad_bs_omp = .FALSE.
     2374    CALL getin('ok_rad_bs', ok_rad_bs_omp)
     2375    !
     2376    !Config Key  = ok_rad_bs_omp
     2377    !Config Desc = include blowing snow radiative effect
     2378    !Config Def  = .FALSE.
     2379    !Config Help = ...
    23612380
    23622381    ecrit_LES_omp = 1./8.
     
    24732492    inertie_lic = inertie_lic_omp
    24742493    inertie_sno = inertie_sno_omp
     2494    ok_bs = ok_bs_omp
     2495    ok_rad_bs=ok_rad_bs_omp
    24752496    rad_froid = rad_froid_omp
    24762497    rad_chau1 = rad_chau1_omp
     
    29823003    WRITE(lunout,*) ' inertie_lic = ', inertie_lic
    29833004    WRITE(lunout,*) ' inertie_sno = ', inertie_sno
     3005    WRITE(lunout,*) ' ok_bs = ', ok_bs
     3006    WRITE(lunout,*) ' ok_rad_bs = ', ok_rad_bs
    29843007    WRITE(lunout,*) ' f_cdrag_ter = ',f_cdrag_ter
    29853008    WRITE(lunout,*) ' f_cdrag_oce = ',f_cdrag_oce
  • LMDZ6/trunk/libf/phylmd/fonte_neige_mod.F90

    r3900 r4523  
    164164    REAL, DIMENSION(klon), INTENT(IN)    :: precip_rain
    165165    REAL, DIMENSION(klon), INTENT(IN)    :: precip_snow
    166    
    167 ! Input/Output variables
     166
     167    ! Input/Output variables
    168168!****************************************************************************************
    169169
  • LMDZ6/trunk/libf/phylmd/infotrac_phy.F90

    r4500 r4523  
    6868!  | longName    | Long name (with adv. scheme suffix) for outputs      | ttext       |                        |
    6969!  | type        | Type (so far: tracer or tag)                         | /           | tracer,tag             |
    70 !  | phase       | Phases list ("g"as / "l"iquid / "s"olid)             | /           | [g][l][s]              |
     70!  | phase       | Phases list ("g"as / "l"iquid / "s"olid / "b"lowing) | /           | [g][l][s][b]           |
    7171!  | component   | Name(s) of the merged/cumulated section(s)           | /           | coma-separated names   |
    7272!  | iGeneration | Generation (>=1)                                     | /           |                        |
     
    9393!  | trac   | ntiso  | Isotopes + tagging tracers list + number         | / | ntraciso       |                 |
    9494!  | zone   | nzone  | Geographic tagging zones   list + number         | / | ntraceurs_zone |                 |
    95 !  | phase  | nphas  | Phases                     list + number         |                    | [g][l][s], 1:3 |
     95!  | phase  | nphas  | Phases                     list + number         |                    |[g][l][s][b] 1:4 |
    9696!  | iqIsoPha        | Index in "qx"           = f(name(1:ntiso)),phas) | iqiso              | 1:nqtot         |
    9797!  | itZonIso        | Index in "trac(1:ntiso)"= f(zone, name(1:niso))  | index_trac         | 1:ntiso         |
  • LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90

    r3974 r4523  
    167167  SUBROUTINE ocean_forced_ice( &
    168168       itime, dtime, jour, knon, knindex, &
    169        tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
     169       tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air,spechum, &
    170170       AcoefH, AcoefQ, BcoefH, BcoefQ, &
    171171       AcoefU, AcoefV, BcoefU, BcoefV, &
  • LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90

    r4478 r4523  
    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
     
    184185       rlon,      rlat,      rugoro,   rmu0,          &
    185186       lwdown_m,  cldt,          &
    186        rain_f,    snow_f,    solsw_m,  solswfdiff_m, sollw_m,       &
     187       rain_f,    snow_f,    bs_f, solsw_m,  solswfdiff_m, sollw_m,       &
    187188       gustiness,                                     &
    188        t,         q,        u,        v,             &
     189       t,         q,        qbs, u,        v,             &
    189190!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    190191!!       t_x,       q_x,       t_w,      q_w,           &
     
    198199       beta, &
    199200!>jyg
    200        alb_dir_m,    alb_dif_m,  zxsens,   zxevap,    &
     201       alb_dir_m,    alb_dif_m,  zxsens,   zxevap,  zxsnowerosion,  &
    201202       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
    202203       zxtsol,    zxfluxlat, zt2m,     qsat2m, zn2mout, &
    203        d_t,       d_q,       d_u,      d_v, d_t_diss, &
     204       d_t,       d_q,    d_qbs,    d_u,      d_v, d_t_diss, &
    204205!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
    205206       d_t_w,     d_q_w,                              &
     
    224225       rh2m,      zxfluxu,  zxfluxv,               &
    225226       z0m, z0h,   agesno,  sollw,    solsw,         &
    226        d_ts,      evap,    fluxlat,  t2m,           &
     227       d_ts,      evap,    fluxlat,   t2m,           &
    227228       wfbils,    wfbilo, wfevap, wfrain, wfsnow,   &
    228229       flux_t,   flux_u, flux_v,                    &
     
    230231!jyg<
    231232!!       zxfluxt,   zxfluxq,   q2m,      flux_q, tke,   &
    232        zxfluxt,   zxfluxq,   q2m,      flux_q, tke_x,  &
     233       zxfluxt,   zxfluxq, zxfluxqbs,   q2m, flux_q, flux_qbs, tke_x,  &
    233234!>jyg
    234235!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    317318         dser, dt_ds, zsig, zmea
    318319    use phys_output_var_mod, only: tkt, tks, taur, sss
     320    use blowing_snow_ini_mod, only : zeta_bs
    319321#ifdef CPP_XIOS
    320322    USE wxios, ONLY: missing_val
     
    351353    REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f  ! rain fall
    352354    REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
     355    REAL, DIMENSION(klon),        INTENT(IN)        :: bs_f  ! blowing snow fall
    353356    REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
    354357    REAL, DIMENSION(klon),        INTENT(IN)        :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface
     
    356359    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
    357360    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
     361    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: qbs       ! blowing snow specific content (kg/kg)
    358362    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
    359363    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
     
    420424                                                                  ! (=> positive sign upwards)
    421425    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
     426    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsnowerosion     ! blowing snow flux at surface
    422427    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
    423428!!! jyg le ???
     
    436441    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
    437442    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
     443    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_qbs        ! change in blowing snow specific content
     444
    438445
    439446    REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1)
     
    495502    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
    496503    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
    497     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap     ! evaporation at surface
     504    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: evap       ! evaporation at surface
    498505    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
    499506    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
     
    517524    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
    518525    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
     526    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxqbs    ! blowing snow flux, mean for each grid point
    519527    REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
    520528    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
     529    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs   ! blowind snow vertical flux (kg/m**2
     530
    521531
    522532! Martin
     
    563573    REAL, DIMENSION(klon)              :: yalb,yalb_vis
    564574!albedo SB <<<
    565     REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1
     575    REAL, DIMENSION(klon)              :: yt1, yq1, yu1, yv1, yqbs1
    566576    REAL, DIMENSION(klon)              :: yqa
    567577    REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    568     REAL, DIMENSION(klon)              :: yrain_f, ysnow_f
     578    REAL, DIMENSION(klon)              :: yrain_f, ysnow_f, ybs_f
    569579    REAL, DIMENSION(klon)              :: ysolsw, ysollw
    570580    REAL, DIMENSION(klon)              :: yfder
    571581    REAL, DIMENSION(klon)              :: yrugoro
    572582    REAL, DIMENSION(klon)              :: yfluxlat
     583    REAL, DIMENSION(klon)              :: yfluxbs
    573584    REAL, DIMENSION(klon)              :: y_d_ts
    574585    REAL, DIMENSION(klon)              :: y_flux_t1, y_flux_q1
    575586    REAL, DIMENSION(klon)              :: y_dflux_t, y_dflux_q
    576587    REAL, DIMENSION(klon)              :: y_flux_u1, y_flux_v1
     588    REAL, DIMENSION(klon)              :: y_flux_bs, y_flux0
    577589    REAL, DIMENSION(klon)              :: yt2m, yq2m, yu10m
    578590    INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w
     
    601613    REAL, DIMENSION(klon)              :: AcoefH, AcoefQ, BcoefH, BcoefQ
    602614    REAL, DIMENSION(klon)              :: AcoefU, AcoefV, BcoefU, BcoefV
     615    REAL, DIMENSION(klon)              :: AcoefQBS, BcoefQBS
    603616    REAL, DIMENSION(klon)              :: ypsref
    604617    REAL, DIMENSION(klon)              :: yevap, yevap_pot, ytsurf_new, yalb3_new
     
    609622    REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    610623    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    611     REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss
     624    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs
    612625    REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
    613     REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q
     626    REAL, DIMENSION(klon,klev)         :: y_flux_t, y_flux_q, y_flux_qbs
    614627    REAL, DIMENSION(klon,klev)         :: y_flux_u, y_flux_v
    615     REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq
     628    REAL, DIMENSION(klon,klev)         :: ycoefh, ycoefm,ycoefq, ycoefqbs
    616629    REAL, DIMENSION(klon)              :: ycdragh, ycdragq, ycdragm
    617630    REAL, DIMENSION(klon,klev)         :: yu, yv
    618     REAL, DIMENSION(klon,klev)         :: yt, yq
     631    REAL, DIMENSION(klon,klev)         :: yt, yq, yqbs
    619632    REAL, DIMENSION(klon,klev)         :: ypplay, ydelp
    620633    REAL, DIMENSION(klon,klev)         :: delp
     
    678691    REAL, DIMENSION(klon,klev)         :: CcoefH, CcoefQ, DcoefH, DcoefQ
    679692    REAL, DIMENSION(klon,klev)         :: CcoefU, CcoefV, DcoefU, DcoefV
     693    REAL, DIMENSION(klon,klev)         :: CcoefQBS, DcoefQBS
    680694    REAL, DIMENSION(klon,klev)         :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x
    681695    REAL, DIMENSION(klon,klev)         :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w
     
    683697    REAL, DIMENSION(klon,klev)         :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w
    684698    REAL, DIMENSION(klon,klev)         :: Kcoef_hq, Kcoef_m, gama_h, gama_q
     699    REAL, DIMENSION(klon,klev)         :: gama_qbs, Kcoef_qbs
    685700    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x
    686701    REAL, DIMENSION(klon,klev)         :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w
     
    862877    REAL, DIMENSION(klon,nbsrf)        :: zx_t1
    863878    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     879    REAL, DIMENSION(klon,nbsrf)        :: snowerosion   
    864880    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    865881    REAL, DIMENSION(klon)              :: ygustiness      ! jg : temporary (ysollwdown)
     
    980996  alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0.
    981997!albedo SB <<<
    982  zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0.
     998 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0.
    983999 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0.
    9841000 zxfluxlat(:)=0.
    9851001 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0.
    9861002 zn2mout(:,:)=0 ;
    987  d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
     1003 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0.
    9881004 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0.
    9891005 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0.
     
    10051021 d_ts(:,:)=0.
    10061022 evap(:,:)=0.
     1023 snowerosion(:,:)=0.
    10071024 fluxlat(:,:)=0.
    10081025 wfbils(:,:)=0. ; wfbilo(:,:)=0.
    10091026 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0.
    10101027 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0.
     1028 flux_qbs(:,:,:)=0.
    10111029 dflux_t(:)=0. ; dflux_q(:)=0.
    10121030 zxsnow(:)=0.
    1013  zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.
     1031 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0.
    10141032 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0.
    10151033 runoff(:)=0.
     
    10481066    yqsurf = 0.0  ; yalb = 0.0 ; yalb_vis = 0.0
    10491067!albedo SB <<<
    1050     yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0
     1068    yrain_f = 0.0 ; ysnow_f = 0.0  ; ybs_f=0.0  ; yfder = 0.0     ; ysolsw = 0.0
    10511069    ysollw = 0.0  ; yz0m = 0.0 ; yz0h = 0.0    ; yu1 = 0.0   
    1052     yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
     1070    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0     ; yqbs1 = 0.0
    10531071    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    10541072    yq = 0.0      ; y_dflux_t = 0.0  ; y_dflux_q = 0.0
     1073    yqbs(:,:)=0.0 
    10551074    yrugoro = 0.0 ; ywindsp = 0.0   
    10561075!!    d_ts = 0.0    ; yfluxlat=0.0     ; flux_t = 0.0    ; flux_q = 0.0     
    1057     yfluxlat=0.0
     1076    yfluxlat=0.0 ; y_flux0(:)=0.0
    10581077!!    flux_u = 0.0  ; flux_v = 0.0     ; d_t = 0.0       ; d_q = 0.0     
    10591078!!    d_t_diss= 0.0 ;d_u = 0.0     ; d_v = 0.0
     
    10701089    ycldt = 0.0      ; yrmu0 = 0.0
    10711090    ! Martin
     1091    y_d_qbs(:,:)=0.0
    10721092
    10731093!!! nrlmd+jyg le 02/05/2011 et le 20/02/2012
     
    13951415          yrain_f(j) = rain_f(i)
    13961416          ysnow_f(j) = snow_f(i)
     1417          ybs_f(j)   = bs_f(i)
    13971418          yagesno(j) = agesno(i,nsrf)
    13981419          yfder(j)   = fder(i)
     
    14061427          yu1(j)     = u(i,1)
    14071428          yv1(j)     = v(i,1)
     1429          yqbs1(j)   = qbs(i,1)
    14081430          ypaprs(j,klev+1) = paprs(i,klev+1)
    14091431!jyg<
     
    14191441!!! nrlmd le 13/06/2011
    14201442          y_delta_tsurf(j)=delta_tsurf(i,nsrf)
    1421 !!!
     1443          yfluxbs(j)=0.0
     1444          y_flux_bs(j) = 0.0
    14221445       ENDDO
    14231446! >> PC
     
    14581481             yt(j,k) = t(i,k)
    14591482             yq(j,k) = q(i,k)
     1483             yqbs(j,k)=qbs(i,k)
    14601484          ENDDO
    14611485        ENDDO
     
    18801904       ENDIF  ! (iflag_split .eq.0)
    18811905!!!
     1906
     1907 ! For blowing snow:
     1908    IF (ok_bs) THEN
     1909     ! following Bintanja et al 2000, part II
     1910     ! we assume that the eddy diffuvisity coefficient for
     1911     ! suspended particles is larger than Km by a factor zeta_bs
     1912     ! which is equal to 3 by default
     1913     ycoefqbs=ycoefm*zeta_bs
     1914     CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, &
     1915     ydelp, yt, yqbs, dtime, &
     1916     CcoefQBS, DcoefQBS, &
     1917     Kcoef_qbs, gama_qbs, &
     1918     AcoefQBS, BcoefQBS)
     1919    ENDIF
    18821920
    18831921!****************************************************************************************
     
    20572095               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    20582096!!jyg               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2059                yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2097               yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    20602098               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    20612099               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    20632101               ylwdown, yq2m, yt2m, &
    20642102               ysnow, yqsol, yagesno, ytsoil, &
    2065                yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&
     2103               yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,&
    20662104               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, &
    20672105               y_flux_u1, y_flux_v1, &
     
    21062144                  yrmu0, ylwdown, yalb, zgeo1, &
    21072145                  ysolsw, ysollw, yts, ypplay(:,1), &
    2108                   !!jyg               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2109                   ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,&
     2146                  ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,&
    21102147                  AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21112148                  AcoefU, AcoefV, BcoefU, BcoefV, &
    21122149                  ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, &
    2113                   ysnow, yqsurf, yqsol, yagesno, &
     2150                  ysnow, yqsurf, yqsol,yqbs1, yagesno, &
    21142151                  ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, &
    2115                   ytsurf_new, y_dflux_t, y_dflux_q, &
     2152                  yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, &
    21162153                  yzmea, yzsig, ycldt, &
    21172154                  ysnowhgt, yqsnow, ytoice, ysissnow, &
     
    21472184               itap, dtime, jour, knon, ni, &
    21482185!!jyg               ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    2149                ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&    ! ym missing init
     2186               ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),&    ! ym missing init
    21502187               AcoefH, AcoefQ, BcoefH, BcoefQ, &
    21512188               AcoefU, AcoefV, BcoefU, BcoefV, &
     
    22772314          ENDDO
    22782315        ENDIF ! (ok_flux_surf)
     2316
     2317        ! flux of blowing snow at the first level
     2318        IF (ok_bs) THEN
     2319        DO j=1,knon
     2320        y_flux_bs(j)=yfluxbs(j)
     2321        ENDDO
     2322        ENDIF
    22792323!
    22802324! ------------------------------------------------------------------------------
     
    25832627!
    25842628       ENDIF  ! (iflag_split .eq.0)
     2629
     2630       IF (ok_bs) THEN
     2631            CALL climb_qbs_up(knon, dtime, yqbs, &
     2632            y_flux_bs, ypaprs, ypplay, &
     2633            AcoefQBS, BcoefQBS, &
     2634            CcoefQBS, DcoefQBS, &
     2635            Kcoef_qbs, gama_qbs, &
     2636            y_flux_qbs(:,:), y_d_qbs(:,:))
     2637       ENDIF
     2638
    25852639!!!
    25862640!!
     
    26962750!!!
    26972751
    2698 !      print*,'Dans pbl OK1'
    2699 
    2700 !jyg<
    2701 !!       evap(:,nsrf) = - flux_q(:,1,nsrf)
    2702 !>jyg
     2752       ! tendencies of blowing snow
     2753       IF (ok_bs) THEN
     2754           DO k = 1, klev   
     2755            DO j = 1, knon
     2756                i = ni(j)
     2757                y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j)
     2758                flux_qbs(i,k,nsrf) = y_flux_qbs(j,k)
     2759            ENDDO
     2760          ENDDO
     2761       ENDIF
     2762
     2763
    27032764       DO j = 1, knon
    27042765          i = ni(j)
    27052766          evap(i,nsrf) = - flux_q(i,1,nsrf)                  !jyg
     2767          if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif
    27062768          beta(i,nsrf) = ybeta(j)                             !jyg
    27072769          d_ts(i,nsrf) = y_d_ts(j)
     
    28732935          ENDDO
    28742936       ENDDO
     2937
     2938
     2939       IF (ok_bs) THEN
     2940         DO k = 1, klev
     2941         DO j = 1, knon
     2942         i = ni(j)
     2943         d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k)
     2944         ENDDO
     2945         ENDDO
     2946        ENDIF
    28752947
    28762948!      print*,'Dans pbl OK4'
     
    33273399       fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i)
    33283400    ENDDO
     3401
     3402    ! if blowing snow
     3403    if (ok_bs) then 
     3404       DO nsrf = 1, nbsrf
     3405       DO k = 1, klev
     3406       DO i = 1, klon
     3407         zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf)
     3408       ENDDO
     3409       ENDDO
     3410       ENDDO
     3411
     3412       DO i = 1, klon
     3413        zxsnowerosion(i)     = zxfluxqbs(i,1) ! blowings snow flux at the surface
     3414       END DO
     3415    endif
     3416
    33293417!!!
    33303418
  • LMDZ6/trunk/libf/phylmd/phyaqua_mod.F90

    r4463 r4523  
    360360    ql_ancien   = 0.
    361361    qs_ancien   = 0.
     362    qbs_ancien  = 0.
    362363    u_ancien    = 0.
    363364    v_ancien    = 0.
     
    365366    prlw_ancien = 0.
    366367    prsw_ancien = 0. 
     368    prbsw_ancien= 0.
    367369
    368370    ale_wake    = 0.
  • LMDZ6/trunk/libf/phylmd/phyredem.F90

    r4389 r4523  
    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, rneb_ancien, u_ancien, &
     20                                prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien,      &
     21                                ql_ancien, qs_ancien, qbs_ancien, rneb_ancien, u_ancien, &
    2222                                v_ancien, clwcon, rnebcon, ratqs, pbl_tke,   &
    2323                                wake_delta_pbl_tke, zmax0, f0, sig1, w01,    &
     
    243243
    244244    CALL put_field(pass,"QSANCIEN", "QSANCIEN", qs_ancien)
     245
     246    IF (ok_bs) THEN
     247       CALL put_field(pass,"bs_f", "precipitation neige soufflee", bs_fall)
     248       CALL put_field(pass,"QBSANCIEN", "QBSANCIEN", qbs_ancien)
     249       CALL put_field(pass,"PRBSWANCIEN", "PRBSWANCIEN", prbsw_ancien)
     250    ENDIF
    245251
    246252    CALL put_field(pass,"RNEBANCIEN", "RNEBANCIEN", rneb_ancien)
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r4489 r4523  
    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)
     
    2830      REAL, SAVE, ALLOCATABLE :: d_t_dyn(:,:), d_q_dyn(:,:)
    2931      !$OMP THREADPRIVATE(d_t_dyn, d_q_dyn)
    30       REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:)
    31       !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn)
    32       REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:)
    33       !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d)
     32      REAL, SAVE, ALLOCATABLE :: d_ql_dyn(:,:), d_qs_dyn(:,:), d_qbs_dyn(:,:)
     33      !$OMP THREADPRIVATE(d_ql_dyn, d_qs_dyn, d_qbs_dyn)
     34      REAL, SAVE, ALLOCATABLE :: d_q_dyn2d(:), d_ql_dyn2d(:), d_qs_dyn2d(:), d_qbs_dyn2d(:)
     35      !$OMP THREADPRIVATE(d_q_dyn2d, d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d)
    3436      REAL, SAVE, ALLOCATABLE :: d_u_dyn(:,:), d_v_dyn(:,:)
    3537      !$OMP THREADPRIVATE(d_u_dyn, d_v_dyn)
     
    7173      REAL, SAVE, ALLOCATABLE :: d_u_oli(:,:), d_v_oli(:,:)
    7274      !$OMP THREADPRIVATE(d_u_oli, d_v_oli)
    73       REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_t_diss(:,:)
    74       !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf,d_t_diss)
     75      REAL, SAVE, ALLOCATABLE :: d_t_vdf(:,:), d_q_vdf(:,:), d_qbs_vdf(:,:), d_t_diss(:,:)
     76      !$OMP THREADPRIVATE( d_t_vdf, d_q_vdf, d_qbs_vdf, d_t_diss)
    7577      REAL, SAVE, ALLOCATABLE :: d_u_vdf(:,:), d_v_vdf(:,:)
    7678      !$OMP THREADPRIVATE(d_u_vdf, d_v_vdf)
     
    8082      REAL, SAVE, ALLOCATABLE :: d_t_vdf_x(:,:), d_q_vdf_x(:,:)
    8183      !$OMP THREADPRIVATE( d_t_vdf_x, d_q_vdf_x)
     84      REAL, SAVE, ALLOCATABLE :: d_t_bs(:,:), d_q_bs(:,:), d_qbs_bs(:,:)
     85      !$OMP THREADPRIVATE( d_t_bs,d_q_bs, d_qbs_bs)
    8286!>nrlmd+jyg
    8387      REAL, SAVE, ALLOCATABLE :: d_t_oro(:,:)
     
    312316      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: JrNt
    313317!$OMP THREADPRIVATE(JrNt)
    314       REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, fder, plcl, plfc, prw, prlw, prsw
    315 !$OMP THREADPRIVATE(dthmin, evap, fder, plcl, plfc, prw, prlw, prsw)
     318      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw
     319!$OMP THREADPRIVATE(dthmin, evap, snowerosion, fder, plcl, plfc, prw, prlw, prsw, prbsw)
    316320      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zustar, zu10m, zv10m, rh2m
    317321!$OMP THREADPRIVATE(zustar, zu10m, zv10m, rh2m)
     
    330334      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte
    331335!$OMP THREADPRIVATE(tpot, tpote, ue, uq, uwat, ve, vq, vwat, zxffonte)
     336      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxustartlic, zxrhoslic
     337!$OMP THREADPRIVATE(zxustartlic, zxrhoslic)
    332338      REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving
    333339!$OMP THREADPRIVATE(zxfqcalving)
     
    451457      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: zx_rh, zx_rhl, zx_rhi
    452458!$OMP THREADPRIVATE(zx_rh, zx_rhl, zx_rhi)
    453       REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca
    454 !$OMP THREADPRIVATE(prfl, psfl, fraca)
     459      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: prfl, psfl, fraca, bsfl
     460!$OMP THREADPRIVATE(prfl, psfl, fraca, bsfl)
    455461      REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: Vprecip, zw2
    456462!$OMP THREADPRIVATE(Vprecip, zw2)
     
    608614
    609615IMPLICIT NONE
    610       ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev))
     616      ALLOCATE(t_seri(klon,klev),q_seri(klon,klev),ql_seri(klon,klev),qs_seri(klon,klev), qbs_seri(klon,klev))
    611617      ALLOCATE(u_seri(klon,klev),v_seri(klon,klev))
    612618      ALLOCATE(l_mixmin(klon,klev+1,nbsrf),l_mix(klon,klev+1,nbsrf),tke_dissip(klon,klev+1,nbsrf),wprime(klon,klev+1,nbsrf))
     
    616622      ALLOCATE(tr_seri(klon,klev,nbtr))
    617623      ALLOCATE(d_t_dyn(klon,klev),d_q_dyn(klon,klev))
    618       ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev))
    619       ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon))
     624      ALLOCATE(d_ql_dyn(klon,klev),d_qs_dyn(klon,klev), d_qbs_dyn(klon,klev))
     625      ALLOCATE(d_q_dyn2d(klon),d_ql_dyn2d(klon),d_qs_dyn2d(klon), d_qbs_dyn2d(klon))
    620626      ALLOCATE(d_u_dyn(klon,klev),d_v_dyn(klon,klev))
    621627      ALLOCATE(d_tr_dyn(klon,klev,nbtr))                   !RomP
     
    640646      ALLOCATE(plul_st(klon),plul_th(klon))
    641647      ALLOCATE(d_t_vdf(klon,klev),d_q_vdf(klon,klev),d_t_diss(klon,klev))
    642 
     648      ALLOCATE (d_qbs_vdf(klon,klev))
     649      ALLOCATE(d_t_bs(klon,klev),d_q_bs(klon,klev),d_qbs_bs(klon,klev))
    643650      ALLOCATE(d_t_vdf_w(klon,klev),d_q_vdf_w(klon,klev))
    644651      ALLOCATE(d_t_vdf_x(klon,klev),d_q_vdf_x(klon,klev))
     
    769776      ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon))
    770777      ALLOCATE(JrNt(klon))
    771       ALLOCATE(dthmin(klon), evap(klon), fder(klon), plcl(klon), plfc(klon))
    772       ALLOCATE(prw(klon), prlw(klon), prsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
     778      ALLOCATE(dthmin(klon), evap(klon), snowerosion(klon), fder(klon), plcl(klon), plfc(klon))
     779      ALLOCATE(prw(klon), prlw(klon), prsw(klon), prbsw(klon), zustar(klon), zu10m(klon), zv10m(klon), rh2m(klon))
    773780      ALLOCATE(s_lcl(klon))
    774781      ALLOCATE(s_pblh(klon), s_pblt(klon), s_therm(klon))
     
    785792      ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon))
    786793      ALLOCATE(zxrunofflic(klon))
     794      ALLOCATE(zxustartlic(klon), zxrhoslic(klon))
     795      zxustartlic(:)=0. ; zxrhoslic(:)=0.
    787796      ALLOCATE(rain_lsc(klon))
    788797      ALLOCATE(rain_num(klon))
     
    861870      ALLOCATE(prfl(klon, klev+1))
    862871      ALLOCATE(psfl(klon, klev+1), fraca(klon, klev+1), Vprecip(klon, klev+1))
     872      ALLOCATE(bsfl(klon,klev+1))
    863873      ALLOCATE(zw2(klon, klev+1))
    864874
     
    942952USE indice_sol_mod
    943953IMPLICIT NONE
    944       DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri)
     954      DEALLOCATE(t_seri,q_seri,ql_seri,qs_seri, qbs_seri)
    945955      DEALLOCATE(u_seri,v_seri)
    946956      DEALLOCATE(l_mixmin,l_mix, tke_dissip,wprime)
     
    949959      DEALLOCATE(tr_seri)
    950960      DEALLOCATE(d_t_dyn,d_q_dyn)
    951       DEALLOCATE(d_ql_dyn,d_qs_dyn)
    952       DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d)
     961      DEALLOCATE(d_ql_dyn,d_qs_dyn, d_qbs_dyn)
     962      DEALLOCATE(d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, d_qbs_dyn2d)
    953963      DEALLOCATE(d_u_dyn,d_v_dyn)
    954964      DEALLOCATE(d_tr_dyn)                      !RomP
     
    973983      DEALLOCATE(plul_st,plul_th)
    974984      DEALLOCATE(d_t_vdf,d_q_vdf,d_t_diss)
     985      DEALLOCATE(d_qbs_vdf)
     986      DEALLOCATE(d_t_bs,d_q_bs,d_qbs_bs)
    975987      DEALLOCATE(d_u_vdf,d_v_vdf)
    976988      DEALLOCATE(d_t_oli,d_t_oro)
     
    10831095      DEALLOCATE(cldm, cldq, cldt, qsat2m)
    10841096      DEALLOCATE(JrNt)
    1085       DEALLOCATE(dthmin, evap, fder, plcl, plfc)
    1086       DEALLOCATE(prw, prlw, prsw, zustar, zu10m, zv10m, rh2m, s_lcl)
     1097      DEALLOCATE(dthmin, evap, snowerosion, fder, plcl, plfc)
     1098      DEALLOCATE(prw, prlw, prsw, prbsw, zustar, zu10m, zv10m, rh2m, s_lcl)
    10871099      DEALLOCATE(s_pblh, s_pblt, s_therm)
    10881100!
     
    10971109      DEALLOCATE(zxfqcalving, zxfluxlat)
    10981110      DEALLOCATE(zxrunofflic)
     1111      DEALLOCATE(zxustartlic, zxrhoslic)
    10991112      DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf)
    11001113      DEALLOCATE(rain_lsc)
     
    11651178
    11661179
    1167       DEALLOCATE(prfl, psfl, fraca, Vprecip)
     1180      DEALLOCATE(prfl, psfl, bsfl, fraca, Vprecip)
    11681181      DEALLOCATE(zw2)
    11691182
  • LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r4412 r4523  
    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) /))
     
    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) /))
     
    14941505  TYPE(ctrl_out), SAVE :: o_dqsphy2d = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14951506    'dqsphy2d', 'Physics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1507  TYPE(ctrl_out), SAVE :: o_dqbsphy = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1508    'dqbsphy', 'Physics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1509  TYPE(ctrl_out), SAVE :: o_dqbsphy2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1510    'dqbsphy2d', 'Physics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    14961511  TYPE(ctrl_out), SAVE :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14971512    'pr_con_l', 'Convective precipitation lic', ' ', (/ ('', i=1, 10) /))
     
    15021517  TYPE(ctrl_out), SAVE :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15031518    'pr_lsc_i', 'Large scale precipitation ice', ' ', (/ ('', i=1, 10) /))
     1519  TYPE(ctrl_out), SAVE :: o_pr_bs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1520    'pr_bs', 'profile of blowing snow flux', ' ', (/ ('', i=1, 10) /))
    15041521  TYPE(ctrl_out), SAVE :: o_re = ctrl_out((/ 5, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15051522    're', 'Cloud droplet effective radius', 'um', (/ ('', i=1, 10) /))
     
    15991616  TYPE(ctrl_out), SAVE :: o_dqsdyn2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16001617    'dqsdyn2d', 'Dynamics dQS', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1618  TYPE(ctrl_out), SAVE :: o_dqbsdyn = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1619    'dqbsdyn', 'Dynamics dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1620  TYPE(ctrl_out), SAVE :: o_dqbsdyn2d = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1621    'dqbsdyn2d', 'Dynamics dQBS', '(kg/m2)/s', (/ ('', i=1, 10) /))
    16011622  TYPE(ctrl_out), SAVE :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16021623    'dudyn', 'Dynamics dU', 'm/s2', (/ ('', i=1, 10) /))
     
    16731694  TYPE(ctrl_out), SAVE :: o_dqeva2d = ctrl_out((/ 4, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    16741695    'dqeva2d', 'Reevaporation dQ', '(kg/m2)/s', (/ ('', i=1, 10) /))
     1696  TYPE(ctrl_out), SAVE :: o_dqbsvdf = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1697    'dqbsvdf', 'Boundary-layer dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1698  TYPE(ctrl_out), SAVE :: o_dqbsbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1699    'dqbsbs', 'Blowing snow dQBS', '(kg/kg)/s', (/ ('', i=1, 10) /))
     1700  TYPE(ctrl_out), SAVE :: o_dtbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1701    'dtbs', 'Blowing snow dT', '(K)/s', (/ ('', i=1, 10) /))
     1702  TYPE(ctrl_out), SAVE :: o_dqbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     1703    'dqbs', 'Blowing snow dQ', '(kg/kg)/s', (/ ('', i=1, 10) /))
    16751704
    16761705!!!!!!!!!!!!!!!! Specifique thermiques
  • LMDZ6/trunk/libf/phylmd/phys_output_var_mod.F90

    r4370 r4523  
    3030  REAL, SAVE, ALLOCATABLE :: d_qw_col(:)      ! watter vapour mass budget for each column (kg/m2/s)
    3131  REAL, SAVE, ALLOCATABLE :: d_ql_col(:)      ! liquid watter mass budget for each column (kg/m2/s)
    32   REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! solid watter mass budget for each column (kg/m2/s)
     32  REAL, SAVE, ALLOCATABLE :: d_qs_col(:)      ! cloud ice mass budget for each column (kg/m2/s)
     33  REAL, SAVE, ALLOCATABLE :: d_qbs_col(:)     ! blowing snow mass budget for each column (kg/m2/s)
    3334  REAL, SAVE, ALLOCATABLE :: d_qt_col(:)      ! total watter mass budget for each column (kg/m2/s)
    3435  REAL, SAVE, ALLOCATABLE :: d_ek_col(:)      ! kinetic energy budget for each column (W/m2)
     
    3637  REAL, SAVE, ALLOCATABLE :: d_h_qw_col(:)    ! enthalpy budget of watter vapour for each column (W/m2)
    3738  REAL, SAVE, ALLOCATABLE :: d_h_ql_col(:)    ! enthalpy budget of liquid watter for each column (W/m2)
    38   REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of solid watter  for each column (W/m2)
     39  REAL, SAVE, ALLOCATABLE :: d_h_qs_col(:)    ! enthalpy budget of cloud ice  for each column (W/m2)
     40  REAL, SAVE, ALLOCATABLE :: d_h_qbs_col(:)    ! enthalpy budget of blowing snow for each column (W/m2)
    3941  REAL, SAVE, ALLOCATABLE :: d_h_col(:)       ! total enthalpy budget for each column (W/m2)
    40   !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qt_col, d_ek_col, d_h_dair_col)
    41   !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_col)
     42  !$OMP THREADPRIVATE(d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col)
     43  !$OMP THREADPRIVATE(d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col)
    4244
    4345  ! 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/trunk/libf/phylmd/phys_output_write_mod.F90

    r4489 r4523  
    1717  SUBROUTINE phys_output_write(itap, pdtphys, paprs, pphis, &
    1818       pplay, lmax_th, aerosol_couple,         &
    19        ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync, &
     19       ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs, ok_sync, &
    2020       ptconv, read_climoz, clevSTD, ptconvth, &
    2121       d_u, d_t, qx, d_qx, zmasse, flag_aerosol, flag_aerosol_strat, ok_cdnc)
     
    4747         o_psol, o_mass, o_qsurf, o_qsol, &
    4848         o_precip, o_rain_fall, o_rain_con, o_ndayrain, o_plul, o_pluc, o_plun, &
    49          o_snow, o_msnow, o_fsnow, o_evap, o_ep,o_epmax_diag, & ! epmax_cape
     49         o_snow, o_msnow, o_fsnow, o_evap, o_snowerosion, o_ustart_lic, o_rhosnow_lic, o_bsfall, &
     50         o_ep,o_epmax_diag, & ! epmax_cape
    5051         o_tops, o_tops0, o_topl, o_topl0, &
    5152         o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, o_fdiffSWdnSFC, &
     
    8182         o_Mipsh, o_Ma, &
    8283         o_dnwd, o_dnwd0, o_ftime_deepcv, o_ftime_con, o_mc, &
    83          o_prw, o_prlw, o_prsw, o_s_pblh, o_s_pblt, o_s_lcl, &
     84         o_prw, o_prlw, o_prsw, o_prbsw, o_s_pblh, o_s_pblt, o_s_lcl, &
    8485         o_s_therm, o_uSTDlevs, o_vSTDlevs, &
    8586         o_wSTDlevs, o_zSTDlevs, o_qSTDlevs, &
     
    106107         o_weakinv, o_dthmin, o_cldtau, &
    107108         o_cldemi, o_pr_con_l, o_pr_con_i, &
    108          o_pr_lsc_l, o_pr_lsc_i, o_re, o_fl, &
     109         o_pr_lsc_l, o_pr_lsc_i, o_pr_bs, o_re, o_fl, &
    109110         o_rh2m, &
    110111         o_qsat2m, o_tpot, o_tpote, o_SWnetOR, &
     
    134135         o_cldicemxrat, o_cldwatmxrat, o_reffclwtop, o_ec550aer, &
    135136         o_lwcon, o_iwcon, o_temp, o_theta, &
    136          o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop, &
     137         o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop,o_qbs, &
    137138         o_vitu, o_vitv, o_vitw, o_pres, o_paprs, &
    138139         o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, &
    139140         o_rnebls, o_rneblsvol, o_rhum, o_rhl, o_rhi, o_ozone, o_ozone_light, &
    140141         o_duphy, o_dtphy, o_dqphy, o_dqphy2d, o_dqlphy, o_dqlphy2d, &
    141          o_dqsphy, o_dqsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, &
     142         o_dqsphy, o_dqsphy2d, o_dqbsphy, o_dqbsphy2d, o_albe_srf, o_z0m_srf, o_z0h_srf, &
    142143         o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, o_tke_dissip, &
    143144         o_tke_max, o_kz, o_kz_max, o_clwcon, &
    144145         o_dtdyn, o_dqdyn, o_dqdyn2d, o_dqldyn, o_dqldyn2d, &
    145          o_dqsdyn, o_dqsdyn2d, o_dudyn, o_dvdyn, &
     146         o_dqsdyn, o_dqsdyn2d, o_dqbsdyn, o_dqbsdyn2d, o_dudyn, o_dvdyn, &
    146147         o_dtcon, o_tntc, o_ducon, o_dvcon, &
    147148         o_dqcon, o_dqcon2d, o_tnhusc, o_tnhusc, o_dtlsc, &
     
    151152         o_ptconvth, o_lmaxth, o_dtvdf, &
    152153         o_dtdis, o_dqvdf, o_dqvdf2d, o_dteva, o_dqeva, o_dqeva2d, &
     154         o_dqbsvdf, o_dtbs, o_dqbs, o_dqbsbs, &
    153155         o_ptconv, o_ratqs, o_dtthe, &
    154156         o_duthe, o_dvthe, o_ftime_th, &
     
    241243    USE phys_state_var_mod, ONLY: heat_volc, cool_volc !NL
    242244
    243     USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, &
     245    USE phys_state_var_mod, ONLY: pctsrf, rain_fall, snow_fall, bs_fall,&
    244246         qsol, z0m, z0h, fevap, agesno, &
    245247         nday_rain, rain_con, snow_con, &
     
    275277    USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, &
    276278         zn2mout, t2m_min_mon, t2m_max_mon, evap, &
     279         snowerosion, zxustartlic, zxrhoslic, &
    277280         l_mixmin,l_mix, tke_dissip, &
    278281         zu10m, zv10m, zq2m, zustar, zxqsurf, &
     
    288291         uwat, vwat, &
    289292         rneb_seri, d_rneb_dyn, &
    290          plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw, &
     293         plcl, plfc, wbeff, convoccur, upwd, dnwd, dnwd0, prw, prlw, prsw,prbsw, &
    291294         s_pblh, s_pblt, s_lcl, s_therm, uwriteSTD, &
    292295         vwriteSTD, wwriteSTD, phiwriteSTD, qwriteSTD, &
     
    308311         alp_bl_stat, alp_bl_fluct_tke, slab_wfbils, &
    309312         weak_inversion, dthmin, cldtau, cldemi, &
    310          pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, &
     313         pmflxr, pmflxs, prfl, psfl,bsfl, re, fl, rh2m, &
    311314         qsat2m, tpote, tpot, d_ts, od443aer, od550aer, dryod550aer, &
    312315         od865aer, abs550aer, od550lt1aer, sconcso4, sconcno3, &
     
    324327         icc3dcon, icc3dstra, zfice, reffclwtop, &
    325328         ec550aer, flwc, fiwc, t_seri, theta, q_seri, &
    326          ql_seri, qs_seri, tr_seri, &
     329         ql_seri, qs_seri, qbs_seri, tr_seri, qbs_seri,&
    327330         zphi, u_seri, v_seri, omega, cldfra, &
    328331         rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, d_t_dyn,  &
    329          d_q_dyn,  d_ql_dyn, d_qs_dyn, &
    330          d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, &
     332         d_q_dyn,  d_ql_dyn, d_qs_dyn, d_qbs_dyn,  &
     333         d_q_dyn2d,  d_ql_dyn2d, d_qs_dyn2d, d_qbs_dyn2d, &
    331334         d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, &
    332335         d_u_ajs, d_v_ajs, &
     
    336339         d_t_lscst, d_q_lscth, d_q_lscst, plul_th, &
    337340         plul_st, d_t_vdf, d_t_diss, d_q_vdf, d_q_eva, &
     341         d_t_bs, d_q_bs, d_qbs_bs, d_qbs_vdf, &
    338342         zw2, fraca, zmax_th, d_q_ajsb, d_t_ec, d_u_vdf, &
    339343         d_v_vdf, d_u_oro, d_v_oro, d_t_oro, d_u_lif, &
     
    431435
    432436    ! Input
    433     INTEGER :: itap, ivap, iliq, isol, read_climoz
     437    INTEGER :: itap, ivap, iliq, isol, ibs, read_climoz
    434438    INTEGER, DIMENSION(klon) :: lmax_th
    435439    LOGICAL :: aerosol_couple, ok_sync
     
    887891
    888892       IF (vars_defined) THEN
    889           DO i = 1, klon
     893          IF (ok_bs) THEN
     894             DO i = 1, klon
     895             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i) + bs_fall(i)
     896             ENDDO
     897          ELSE
     898             DO i = 1, klon
    890899             zx_tmp_fi2d(i) = rain_fall(i) + snow_fall(i)
    891           ENDDO
     900             ENDDO
     901          ENDIF
    892902       ENDIF
    893903
     
    919929       CALL histwrite_phy(o_fsnow, zfra_o)
    920930       CALL histwrite_phy(o_evap, evap)
     931
     932       IF (ok_bs) THEN
     933           CALL histwrite_phy(o_bsfall, bs_fall)     
     934           CALL histwrite_phy(o_snowerosion, snowerosion)
     935           CALL histwrite_phy(o_ustart_lic, zxustartlic)
     936           CALL histwrite_phy(o_rhosnow_lic, zxrhoslic)
     937       ENDIF
    921938
    922939       IF (vars_defined) THEN
     
    11051122       ENDIF
    11061123       CALL histwrite_phy(o_tauy, zx_tmp_fi2d)
    1107 
    1108        ! Etienne: test sorties pour compil sur JZ
    1109 !       IF (landice_opt .GE. 1) THEN
    1110 !          CALL histwrite_phy(o_snowsrf, snow_o)
    1111 !          CALL histwrite_phy(o_qsnow, qsnow)
    1112 !          CALL histwrite_phy(o_snowhgt,snowhgt)
    1113 !          CALL histwrite_phy(o_toice,to_ice)
    1114 !          CALL histwrite_phy(o_sissnow,sissnow)
    1115 !          CALL histwrite_phy(o_runoff,runoff)
    1116 !          CALL histwrite_phy(o_albslw3,albsol3_lic)
    1117 !       ENDIF
    11181124
    11191125       DO nsrf = 1, nbsrf
     
    12811287       CALL histwrite_phy(o_prlw, prlw)
    12821288       CALL histwrite_phy(o_prsw, prsw)
     1289       IF (ok_bs) THEN
     1290       CALL histwrite_phy(o_prbsw, prbsw)
     1291       ENDIF
    12831292       CALL histwrite_phy(o_s_pblh, s_pblh)
    12841293       CALL histwrite_phy(o_s_pblt, s_pblt)
     
    15261535       CALL histwrite_phy(o_re, re)
    15271536       CALL histwrite_phy(o_fl, fl)
     1537
     1538       IF (ok_bs) THEN
     1539         CALL histwrite_phy(o_pr_bs, bsfl(:,1:klev))
     1540       ENDIF
     1541
    15281542       IF (vars_defined) THEN
    15291543          DO i=1, klon
     
    17971811       CALL histwrite_phy(o_zfull,zx_tmp_fi3d)
    17981812
     1813       IF (ok_bs) THEN
     1814          CALL histwrite_phy(o_qbs, qbs_seri)
     1815       ENDIF
     1816
    17991817#ifdef CPP_XIOS
    18001818!solbnd begin
     
    19081926       zx_tmp_fi2d=0.0
    19091927       CALL histwrite_phy(o_dqsphy2d,  zx_tmp_fi2d)
     1928       ENDIF
     1929
     1930
     1931       IF (ok_bs) THEN
     1932       CALL histwrite_phy(o_dqbsphy,  d_qx(:,:,ibs))
     1933       IF (vars_defined) CALL water_int(klon,klev,d_qx(:,:,ibs),zmasse,zx_tmp_fi2d)
     1934       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
     1935       ELSE
     1936       zx_tmp_fi3d=0.0
     1937       CALL histwrite_phy(o_dqbsphy,  zx_tmp_fi3d)
     1938       zx_tmp_fi2d=0.0
     1939       CALL histwrite_phy(o_dqbsphy2d,  zx_tmp_fi2d)
    19101940       ENDIF
    19111941
     
    19581988
    19591989       CALL histwrite_phy(o_dqsdyn2d, d_qs_dyn2d)
     1990
     1991       IF (ok_bs) THEN
     1992       CALL histwrite_phy(o_dqbsdyn, d_qbs_dyn)
     1993       CALL histwrite_phy(o_dqbsdyn2d, d_qbs_dyn2d)
     1994       ENDIF
    19601995
    19611996       CALL histwrite_phy(o_dudyn, d_u_dyn)
     
    21012136       ENDIF
    21022137       CALL histwrite_phy(o_dvthe, zx_tmp_fi3d)
     2138
     2139       IF (ok_bs) THEN
     2140          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_vdf(1:klon,1:klev)/pdtphys
     2141          CALL histwrite_phy(o_dqbsvdf, zx_tmp_fi3d)
     2142          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_qbs_bs(1:klon,1:klev)/pdtphys
     2143          CALL histwrite_phy(o_dqbsbs, zx_tmp_fi3d)
     2144          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_q_bs(1:klon,1:klev)/pdtphys
     2145          CALL histwrite_phy(o_dqbs, zx_tmp_fi3d)
     2146          IF (vars_defined) zx_tmp_fi3d(1:klon,1:klev)=d_t_bs(1:klon,1:klev)/pdtphys
     2147          CALL histwrite_phy(o_dtbs, zx_tmp_fi3d)
     2148       ENDIF
    21032149
    21042150       IF (iflag_thermals>=1) THEN
  • LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90

    r4370 r4523  
    5454
    5555
    56       REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:)
    57 !$OMP THREADPRIVATE( rain_fall, snow_fall)
     56      REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:), bs_fall(:)
     57!$OMP THREADPRIVATE( rain_fall, snow_fall, bs_fall)
    5858      REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:)
    5959!$OMP THREADPRIVATE(solsw, solswfdiff, sollw)
     
    8282      REAL, ALLOCATABLE, SAVE :: t_ancien(:,:), q_ancien(:,:)
    8383!$OMP THREADPRIVATE(t_ancien, q_ancien)
    84       REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:)
    85 !$OMP THREADPRIVATE(ql_ancien, qs_ancien)
    86       REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:)
    87 !$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien)
     84      REAL, ALLOCATABLE, SAVE :: ql_ancien(:,:), qs_ancien(:,:), qbs_ancien(:,:)
     85!$OMP THREADPRIVATE(ql_ancien, qs_ancien, qbs_ancien)
     86      REAL, ALLOCATABLE, SAVE :: prw_ancien(:), prlw_ancien(:), prsw_ancien(:), prbsw_ancien(:)
     87!$OMP THREADPRIVATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
    8888#ifdef ISO
    8989      REAL, ALLOCATABLE, SAVE :: xt_ancien(:,:,:),xtl_ancien(:,:,:),xts_ancien(:,:,:)
     
    547547      ALLOCATE(rain_fall(klon))
    548548      ALLOCATE(snow_fall(klon))
     549      ALLOCATE(bs_fall(klon))
    549550      ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon))
    550551      sollw=0.0
     
    556557      ALLOCATE(rugoro(klon))
    557558      ALLOCATE(t_ancien(klon,klev), q_ancien(klon,klev))
    558       ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev))
    559       ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon))
     559      ALLOCATE(ql_ancien(klon,klev), qs_ancien(klon,klev), qbs_ancien(klon,klev))
     560      ALLOCATE(prw_ancien(klon), prlw_ancien(klon), prsw_ancien(klon), prbsw_ancien(klon))
    560561      ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev))
    561562!!! Rom P >>>
     
    763764!FC
    764765      DEALLOCATE(treedrg)
    765       DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr)
     766      DEALLOCATE(rain_fall, snow_fall, bs_fall,solsw, solswfdiff, sollw, radsol, swradcorr)
    766767      DEALLOCATE(zmea, zstd, zsig, zgam)
    767768      DEALLOCATE(zthe, zpic, zval)
    768769      DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon)
    769       DEALLOCATE(qs_ancien, ql_ancien, rneb_ancien)
    770       DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien)
     770      DEALLOCATE(qs_ancien, ql_ancien, qbs_ancien, rneb_ancien)
     771      DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien)
    771772      DEALLOCATE(qtc_cv,sigt_cv)
    772773      DEALLOCATE(u_ancien, v_ancien)
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4519 r4523  
    8484    USE atke_turbulence_ini_mod, ONLY : atke_ini
    8585    USE thermcell_ini_mod, ONLY : thermcell_ini
     86    USE blowing_snow_ini_mod, ONLY : blowing_snow_ini , qbst_bs
    8687    USE lscp_ini_mod, ONLY : lscp_ini
    8788
     
    144145       ! [Variables internes non sauvegardees de la physique]
    145146       ! Variables locales pour effectuer les appels en serie
    146        t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
     147       t_seri,q_seri,ql_seri,qs_seri,qbs_seri,u_seri,v_seri,tr_seri,rneb_seri, &
    147148       rhcl, &       
    148149       ! Dynamic tendencies (diagnostics)
    149        d_t_dyn,d_q_dyn,d_ql_dyn,d_qs_dyn,d_u_dyn,d_v_dyn,d_tr_dyn,d_rneb_dyn, &
    150        d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d, &
     150       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, &
     151       d_q_dyn2d,d_ql_dyn2d,d_qs_dyn2d,d_qbs_dyn2d, &
    151152       ! Physic tendencies
    152153       d_t_con,d_q_con,d_u_con,d_v_con, &
     
    165166       plul_st,plul_th, &
    166167       !
    167        d_t_vdf,d_q_vdf,d_u_vdf,d_v_vdf,d_t_diss, &
     168       d_t_vdf,d_q_vdf, d_qbs_vdf, d_u_vdf,d_v_vdf,d_t_diss, &
    168169       d_t_vdf_x, d_t_vdf_w, &
    169170       d_q_vdf_x, d_q_vdf_w, &
    170171       d_ts, &
     172       !
     173       d_t_bs,d_q_bs,d_qbs_bs, &
    171174       !
    172175!       d_t_oli,d_u_oli,d_v_oli, &
     
    216219       cldh, cldl,cldm, cldq, cldt,      &
    217220       JrNt,                             &
    218        dthmin, evap, fder, plcl, plfc,   &
    219        prw, prlw, prsw,                  &
     221       dthmin, evap, snowerosion,fder, plcl, plfc,   &
     222       prw, prlw, prsw, prbsw,                  &
    220223       s_lcl, s_pblh, s_pblt, s_therm,   &
    221224       cdragm, cdragh,                   &
     
    305308       fsolsw, wfbils, wfbilo,  &
    306309       wfevap, wfrain, wfsnow,  & 
    307        prfl, psfl, fraca, Vprecip,  &
     310       prfl, psfl,bsfl, fraca, Vprecip,  &
    308311       zw2,  &
    309312       !
     
    461464    !======================================================================
    462465    !
    463     ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional)
    464     INTEGER,SAVE :: ivap, iliq, isol, irneb
    465 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb)
     466    ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional), blowing snow (optional)
     467    INTEGER,SAVE :: ivap, iliq, isol, irneb, ibs
     468!$OMP THREADPRIVATE(ivap, iliq, isol, irneb, ibs)
    466469    !
    467470    !
     
    834837    !XXX PB
    835838    REAL fluxq(klon,klev, nbsrf)   ! flux turbulent d'humidite
     839    REAL fluxqbs(klon,klev, nbsrf)   ! flux turbulent de neige soufflee
    836840    !
    837841    REAL zxfluxt(klon, klev)
    838842    REAL zxfluxq(klon, klev)
     843    REAL zxfluxqbs(klon,klev)
    839844    REAL zxfluxu(klon, klev)
    840845    REAL zxfluxv(klon, klev)
     
    920925    !
    921926    ! tendance nulles
    922     REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0
     927    REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0, dqbs0
    923928    REAL, dimension(klon)     :: dsig0, ddens0
    924929    INTEGER, dimension(klon)  :: wkoccur1
     
    10661071    REAL ztsol(klon)
    10671072    REAL q2m(klon,nbsrf)  ! humidite a 2m
    1068 
     1073    REAL fsnowerosion(klon,nbsrf) ! blowing snow flux at surface
     1074    REAL qbsfra  ! blowing snow fraction
    10691075    !IM: t2m, q2m, ustar, u10m, v10m et t2mincels, t2maxcels
    10701076    CHARACTER*40 t2mincels, t2maxcels       !t2m min., t2m max
     
    12761282       isol = strIdx(tracers(:)%name, addPhase('H2O', 's'))
    12771283       irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r'))
     1284       ibs  = strIdx(tracers(:)%name, addPhase('H2O', 'b'))
    12781285       CALL init_etat0_limit_unstruct
    12791286       IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed)
     
    13251332       ENDIF
    13261333
    1327        IF (ok_ice_sursat.AND.(nqo.NE.4)) THEN
     1334       IF (ok_ice_sursat.AND.(nqo.LT.4)) THEN
    13281335          WRITE (lunout, *) ' ok_ice_sursat=y requires 4 H2O tracers ', &
    13291336               '(H2O_g, H2O_l, H2O_s, H2O_r) but nqo=', nqo, '. Might as well stop here.'
     
    13431350          CALL abort_physic(modname,abort_message,1)
    13441351       ENDIF
     1352
     1353        IF (ok_bs) THEN
     1354         IF ((ok_ice_sursat.AND.nqo .LT.5).OR.(.NOT.ok_ice_sursat.AND.nqo.LT.4)) THEN
     1355             WRITE (lunout, *) 'activation of blowing snow needs a specific H2O tracer', &
     1356                               'but nqo=', nqo
     1357             abort_message='see above'
     1358             CALL abort_physic(modname,abort_message, 1)
     1359         ENDIF
     1360        ENDIF
    13451361
    13461362       Ncvpaseq1 = 0
     
    17611777           CALL lscp_ini(pdtphys,ok_ice_sursat)
    17621778       endif
     1779       CALL blowing_snow_ini(prt_level,lunout, &
     1780                             RCPD, RLSTT, RLVTT, RLMLT, &
     1781                             RVTMP2, RTT,RD,RG)
     1782
    17631783!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17641784
     
    17861806       CALL phys_output_write(itap, pdtphys, paprs, pphis,                    &
    17871807                              pplay, lmax_th, aerosol_couple,                 &
    1788                               ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ok_sync,&
     1808                              ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,  ok_sync,&
    17891809                              ptconv, read_climoz, clevSTD,                   &
    17901810                              ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
     
    22572277    dql0(:,:)=0.
    22582278    dqi0(:,:)=0.
     2279    dqbs0(:,:)=0.
    22592280    dsig0(:) = 0.
    22602281    ddens0(:) = 0.
     
    23092330          q_seri(i,k)  = qx(i,k,ivap)
    23102331          ql_seri(i,k) = qx(i,k,iliq)
     2332          qbs_seri(i,k) = 0.
    23112333          !CR: ATTENTION, on rajoute la variable glace
    23122334          IF (nqo.EQ.2) THEN             !--vapour and liquid only
     
    23162338             qs_seri(i,k) = qx(i,k,isol)
    23172339             rneb_seri(i,k) = 0.
    2318           ELSE IF (nqo.EQ.4) THEN        !--vapour, liquid, ice and rneb
     2340          ELSE IF (nqo.GE.4) THEN        !--vapour, liquid, ice and rneb and blowing snow
    23192341             qs_seri(i,k) = qx(i,k,isol)
     2342             IF (ok_ice_sursat) THEN
    23202343             rneb_seri(i,k) = qx(i,k,irneb)
     2344             ENDIF
     2345             IF (ok_bs) THEN
     2346             qbs_seri(i,k)= qx(i,k,ibs)
     2347             ENDIF
     2348
    23212349          ENDIF
     2350
     2351
    23222352       ENDDO
    23232353    ENDDO
     
    23282358    qql1(:)=0.0
    23292359    DO k = 1, klev
    2330       qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k))*zmasse(:,k)
     2360      qql1(:)=qql1(:)+(q_seri(:,k)+ql_seri(:,k)+qs_seri(:,k)+qbs_seri(:,k))*zmasse(:,k)
    23312361    ENDDO
    23322362    ENDIF
     
    23842414       d_ql_dyn(:,:) = (ql_seri(:,:)-ql_ancien(:,:))/phys_tstep
    23852415       d_qs_dyn(:,:) = (qs_seri(:,:)-qs_ancien(:,:))/phys_tstep
     2416       d_qbs_dyn(:,:) = (qbs_seri(:,:)-qbs_ancien(:,:))/phys_tstep
    23862417       CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d)
    23872418       d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep
     
    23902421       CALL water_int(klon,klev,qs_seri,zmasse,zx_tmp_fi2d)
    23912422       d_qs_dyn2d(:)=(zx_tmp_fi2d(:)-prsw_ancien(:))/phys_tstep
     2423       CALL water_int(klon,klev,qbs_seri,zmasse,zx_tmp_fi2d)
     2424       d_qbs_dyn2d(:)=(zx_tmp_fi2d(:)-prbsw_ancien(:))/phys_tstep
    23922425       ! !! RomP >>>   td dyn traceur
    23932426       IF (nqtot > nqo) d_tr_dyn(:,:,:)=(tr_seri(:,:,:)-tr_ancien(:,:,:))/phys_tstep
     
    24052438       d_ql_dyn2d(:) = 0.0
    24062439       d_qs_dyn2d(:) = 0.0
     2440       d_qbs_dyn2d(:)= 0.0
    24072441       ! !! RomP >>>   td dyn traceur
    24082442       IF (nqtot > nqo) d_tr_dyn(:,:,:)= 0.0
    24092443       ! !! RomP <<<
    24102444       d_rneb_dyn(:,:)=0.0
     2445       d_qbs_dyn(:,:)=0.0
    24112446       ancien_ok = .TRUE.
    24122447    ENDIF
     
    25242559
    25252560     CALL add_phys_tend &
    2526             (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,paprs,&
     2561            (du0,dv0,d_t_eva,d_q_eva,d_ql_eva,d_qi_eva,dqbs0,paprs,&
    25272562               'eva',abortphy,flag_inhib_tend,itap,0)
    25282563    CALL prt_enerbil('eva',itap)
     
    26892724            longitude_deg, latitude_deg, rugoro,  zrmu0,      &
    26902725            sollwdown,    cldt,      &
    2691             rain_fall, snow_fall, solsw,   solswfdiff, sollw,     &
     2726            rain_fall, snow_fall, bs_fall, solsw,   solswfdiff, sollw,     &
    26922727            gustiness,                                &
    2693             t_seri,    q_seri,    u_seri,  v_seri,    &
     2728            t_seri,    q_seri,   qbs_seri, u_seri,  v_seri,    &
    26942729                                !nrlmd+jyg<
    26952730            wake_deltat, wake_deltaq, wake_cstar, wake_s, &
     
    27022737                                !albedo SB >>>
    27032738                                ! albsol1,   albsol2,   sens,    evap,      &
    2704             albsol_dir,   albsol_dif,   sens,    evap,  
     2739            albsol_dir,   albsol_dif,   sens,    evap, snowerosion,
    27052740                                !albedo SB <<<
    27062741            albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    27072742            zxtsol,    zxfluxlat, zt2m,    qsat2m,  zn2mout, &
    2708             d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf, d_t_diss, &
     2743            d_t_vdf,   d_q_vdf, d_qbs_vdf,  d_u_vdf, d_v_vdf, d_t_diss, &
    27092744                                !nrlmd<
    27102745                                !jyg<
     
    27322767            fluxt,   fluxu,  fluxv, &
    27332768            dsens,     devap,     zxsnow, &
    2734             zxfluxt,   zxfluxq,   q2m,     fluxq, pbl_tke, &
     2769            zxfluxt,   zxfluxq,  zxfluxqbs,  q2m, fluxq, fluxqbs, pbl_tke, &
    27352770                                !nrlmd+jyg<
    27362771            wake_delta_pbl_TKE, &
     
    27572792       IF (klon_glo==1) THEN
    27582793          CALL add_pbl_tend &
    2759                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2794               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27602795               'vdf',abortphy,flag_inhib_tend,itap)
    27612796       ELSE
    27622797          CALL add_phys_tend &
    2763                (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,&
     2798               (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,d_qbs_vdf,paprs,&
    27642799               'vdf',abortphy,flag_inhib_tend,itap,0)
    27652800       ENDIF
    27662801       CALL prt_enerbil('vdf',itap)
     2802
    27672803       !--------------------------------------------------------------------
    27682804
     
    28152851
    28162852    ENDIF
     2853
     2854    ! ==================================================================
     2855    ! Blowing snow sublimation and sedimentation
     2856
     2857    d_t_bs(:,:)=0.
     2858    d_q_bs(:,:)=0.
     2859    d_qbs_bs(:,:)=0.
     2860    bsfl(:,:)=0.
     2861    bs_fall(:)=0.
     2862    IF (ok_bs) THEN
     2863
     2864     CALL call_blowing_snow_sublim_sedim(klon,klev,phys_tstep,t_seri,q_seri,qbs_seri,pplay,paprs, &
     2865                                        d_t_bs,d_q_bs,d_qbs_bs,bsfl,bs_fall)
     2866
     2867     CALL add_phys_tend &
     2868               (du0,dv0,d_t_bs,d_q_bs,dql0,dqi0,d_qbs_bs,paprs,&
     2869               'bs',abortphy,flag_inhib_tend,itap,0)
     2870
     2871    ENDIF
     2872
    28172873    ! =================================================================== c
    28182874    !   Calcul de Qsat
     
    32393295!!
    32403296!!
    3241     CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, paprs, &
     3297    CALL add_phys_tend(d_u_con, d_v_con, d_t_con, d_q_con, dql0, dqi0, dqbs0, paprs, &
    32423298         'convection',abortphy,flag_inhib_tend,itap,0)
    32433299    CALL prt_enerbil('convection',itap)
     
    33703426       !-----------------------------------------------------------------------
    33713427       ! ajout des tendances des poches froides
    3372        CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake', &
     3428       CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,dqbs0,paprs,'wake', &
    33733429            abortphy,flag_inhib_tend,itap,0)
    33743430       CALL prt_enerbil('wake',itap)
     
    35283584          !
    35293585          CALL add_phys_tend(d_u_ajs,d_v_ajs,d_t_ajs,d_q_ajs,  &
    3530                              dql0,dqi0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
     3586                             dql0,dqi0,dqbs0,paprs,'thermals', abortphy,flag_inhib_tend,itap,0)
    35313587          CALL prt_enerbil('thermals',itap)
    35323588          !
     
    35903646          !--------------------------------------------------------------------
    35913647          ! ajout des tendances de l'ajustement sec ou des thermiques
    3592           CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs, &
     3648          CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,dqbs0,paprs, &
    35933649               'ajsb',abortphy,flag_inhib_tend,itap,0)
    35943650          CALL prt_enerbil('ajsb',itap)
     
    36793735!    write(*,9000) "rcpv","rcw",rcpv,rcw,rcs,t_seri(1,1)
    36803736!-JLD
    3681     CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs, &
     3737    CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,dqbs0,paprs, &
    36823738         'lsc',abortphy,flag_inhib_tend,itap,0)
    36833739    CALL prt_enerbil('lsc',itap)
     
    37023758    ENDIF
    37033759
    3704     !---------------------------------------------------------------------------
     3760
     3761!---------------------------------------------------------------------------
    37053762    DO k = 1, klev
    37063763       DO i = 1, klon
    37073764          cldfra(i,k) = rneb(i,k)
    37083765          !CR: a quoi ca sert? Faut-il ajouter qs_seri?
     3766          !EV: en effet etrange, j'ajouterais aussi qs_seri
     3767          !    plus largement, je nettoierais (enleverrais) ces lignes
    37093768          IF (.NOT.new_oliq) radocond(i,k) = ql_seri(i,k)
    37103769       ENDDO
    37113770    ENDDO
     3771
     3772
     3773    ! Option to activate the radiative effect of blowing snow (ok_rad_bs)
     3774    ! makes sense only if the new large scale condensation scheme is active
     3775    ! with the ok_icefra_lscp flag active as well
     3776
     3777    IF (ok_bs .AND. ok_rad_bs) THEN
     3778       IF (ok_new_lscp .AND. ok_icefra_lscp) THEN
     3779           DO k=1,klev
     3780             DO i=1,klon
     3781                radocond(i,k)=radocond(i,k)+qbs_seri(i,k)
     3782                picefra(i,k)=(radocond(i,k)*picefra(i,k)+qbs_seri(i,k))/(radocond(i,k))
     3783                qbsfra=min(qbs_seri(i,k)/qbst_bs,1.0)
     3784                cldfra(i,k)=max(cldfra(i,k),qbsfra)
     3785             ENDDO
     3786           ENDDO
     3787       ELSE
     3788          WRITE(lunout,*)"PAY ATTENTION, you try to activate the radiative effect of blowing snow"
     3789          WRITE(lunout,*)"with ok_new_lscp=false and/or ok_icefra_lscp=false"
     3790          abort_message='inconsistency in cloud phase for blowing snow'
     3791          CALL abort_physic(modname,abort_message,1)
     3792       ENDIF
     3793
     3794    ENDIF
     3795
    37123796    IF (check) THEN
    37133797       za = qcheck(klon,klev,paprs,q_seri,ql_seri,cell_area)
     
    45104594    ENDDO
    45114595
    4512     CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
     4596    CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,dqbs0,paprs,'SW',abortphy,flag_inhib_tend,itap,0)
    45134597    CALL prt_enerbil('SW',itap)
    4514     CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
     4598    CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,dqbs0,paprs,'LW',abortphy,flag_inhib_tend,itap,0)
    45154599    CALL prt_enerbil('LW',itap)
    45164600
     
    45874671       !-----------------------------------------------------------------------
    45884672       ! ajout des tendances de la trainee de l'orographie
    4589        CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro', &
     4673       CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,dqbs0,paprs,'oro', &
    45904674            abortphy,flag_inhib_tend,itap,0)
    45914675       CALL prt_enerbil('oro',itap)
     
    46384722
    46394723       ! ajout des tendances de la portance de l'orographie
    4640        CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, paprs, &
     4724       CALL add_phys_tend(d_u_lif, d_v_lif, d_t_lif, dq0, dql0, dqi0, dqbs0,paprs, &
    46414725            'lif', abortphy,flag_inhib_tend,itap,0)
    46424726       CALL prt_enerbil('lif',itap)
     
    46634747       d_t_hin(:, :)=0.
    46644748       CALL add_phys_tend(du_gwd_hines, dv_gwd_hines, d_t_hin, dq0, dql0, &
    4665             dqi0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
     4749            dqi0, dqbs0, paprs, 'hin', abortphy,flag_inhib_tend,itap,0)
    46664750       CALL prt_enerbil('hin',itap)
    46674751    ENDIF
     
    46814765       ENDDO
    46824766
    4683        CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, &
     4767       CALL add_phys_tend(du_gwd_front, dv_gwd_front, dt0, dq0, dql0, dqi0, dqbs0, &
    46844768            paprs, 'front_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46854769       CALL prt_enerbil('front_gwd_rando',itap)
     
    46904774            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
    46914775            du_gwd_rando, dv_gwd_rando, east_gwstress, west_gwstress)
    4692        CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, &
     4776       CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, dqi0, dqbs0, &
    46934777            paprs, 'flott_gwd_rando', abortphy,flag_inhib_tend,itap,0)
    46944778       CALL prt_enerbil('flott_gwd_rando',itap)
     
    47424826       ! ajout de la tendance d'humidite due au methane
    47434827       d_q_ch4_dtime(:,:) = d_q_ch4(:,:)*phys_tstep
    4744        CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, paprs, &
     4828       CALL add_phys_tend(du0, dv0, dt0, d_q_ch4_dtime, dql0, dqi0, dqbs0, paprs, &
    47454829            'q_ch4', abortphy,flag_inhib_tend,itap,0)
    47464830       d_q_ch4(:,:) = d_q_ch4_dtime(:,:)/phys_tstep
     
    50475131
    50485132     CALL add_phys_tend &
    5049             (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,paprs,&
     5133            (du0,dv0,dt0,d_q_rep,d_ql_rep,d_qi_rep,dqbs0,paprs,&
    50505134             'rep',abortphy,flag_inhib_tend,itap,0)
    50515135        IF (abortphy==1) Print*,'ERROR ABORT REP'
     
    51245208    !   prlw = colonne eau liquide
    51255209    !   prlw = colonne eau solide
     5210    !   prbsw = colonne neige soufflee
    51265211    prw(:) = 0.
    51275212    prlw(:) = 0.
    51285213    prsw(:) = 0.
     5214    prbsw(:) = 0.
    51295215    DO k = 1, klev
    51305216       prw(:)  = prw(:)  + q_seri(:,k)*zmasse(:,k)
    51315217       prlw(:) = prlw(:) + ql_seri(:,k)*zmasse(:,k)
    51325218       prsw(:) = prsw(:) + qs_seri(:,k)*zmasse(:,k)
     5219       prbsw(:)= prbsw(:) + qbs_seri(:,k)*zmasse(:,k)
    51335220    ENDDO
    51345221    !
     
    51895276          ENDIF
    51905277          !--ice_sursat: nqo=4, on ajoute rneb
    5191           IF (nqo == 4) THEN
     5278          IF (nqo.ge.4 .and. ok_ice_sursat) THEN
    51925279             d_qx(i,k,irneb) = ( rneb_seri(i,k) - qx(i,k,irneb) ) / phys_tstep
    51935280          ENDIF
     5281
     5282           IF (nqo.ge.4 .and. ok_bs) THEN
     5283             d_qx(i,k,ibs) = ( qbs_seri(i,k) - qx(i,k,ibs) ) / phys_tstep
     5284          ENDIF
     5285
    51945286       ENDDO
    51955287    ENDDO
     
    52385330    ql_ancien(:,:) = ql_seri(:,:)
    52395331    qs_ancien(:,:) = qs_seri(:,:)
     5332    qbs_ancien(:,:) = qbs_seri(:,:)
    52405333    rneb_ancien(:,:) = rneb_seri(:,:)
    52415334    CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien)
    52425335    CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
    52435336    CALL water_int(klon,klev,qs_ancien,zmasse,prsw_ancien)
     5337    CALL water_int(klon,klev,qbs_ancien,zmasse,prbsw_ancien)
    52445338    ! !! RomP >>>
    52455339    IF (nqtot > nqo) tr_ancien(:,:,:) = tr_seri(:,:,:)
     
    53665460    CALL phys_output_write(itap, pdtphys, paprs, pphis,  &
    53675461         pplay, lmax_th, aerosol_couple,                 &
    5368          ok_ade, ok_aie, ok_volcan, ivap, iliq, isol,    &
     5462         ok_ade, ok_aie, ok_volcan, ivap, iliq, isol, ibs,   &
    53695463         ok_sync, ptconv, read_climoz, clevSTD,          &
    53705464         ptconvth, d_u, d_t, qx, d_qx, zmasse,           &
  • LMDZ6/trunk/libf/phylmd/surf_land_mod.F90

    r4283 r4523  
    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 , &
     
    8181    REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
    8282    REAL, DIMENSION(klon), INTENT(IN)       :: cdragh, cdragm
    83     REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow
     83    REAL, DIMENSION(klon), INTENT(IN)       :: precip_rain, precip_snow, precip_bs
    8484    REAL, DIMENSION(klon), INTENT(IN)       :: temp_air, spechum
    8585    REAL, DIMENSION(klon), INTENT(IN)       :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    109109!albedo SB <<<
    110110    REAL, DIMENSION(klon), INTENT(OUT)       :: evap
    111     REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat
     111    REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat, fluxbs
    112112    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    113113    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
     
    125125    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    126126    REAL, DIMENSION(klon) :: u0, v0     ! surface speed
     127    REAL, DIMENSION(klon) :: precip_totsnow     ! total solid precip
    127128    INTEGER               :: i
    128129
     
    130131    REAL, DIMENSION(klon)      :: alb1_new,alb2_new
    131132!albedo SB <<<
     133
     134
     135!****************************************************************************************
     136!Total solid precip
     137
     138IF (ok_bs) THEN
     139precip_totsnow=precip_snow+precip_bs
     140ELSE
     141precip_totsnow=precip_snow
     142ENDIF
     143!****************************************************************************************
     144
    132145
    133146!****************************************************************************************
     
    165178            zlev,  u1, v1, gustiness, temp_air, spechum, epot_air, ccanopy, &
    166179            cdragh, AcoefH, AcoefQ, BcoefH, BcoefQ, &
    167             precip_rain, precip_snow, lwdown_m, swnet, swdown, &
     180            precip_rain, precip_totsnow, lwdown_m, swnet, swdown, &
    168181            pref_tmp, q2m, t2m, &
    169             evap, fluxsens, fluxlat, &             
     182            evap, fluxsens, fluxlat,fluxbs, &             
    170183            tsol_rad, tsurf_new, alb1_new, alb2_new, &
    171184            emis_new, z0m, z0h, qsurf, &
     
    184197!****************************************************************************************
    185198       CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    186             tsurf, p1lay, cdragh, precip_rain, precip_snow, temp_air, &
     199            tsurf, p1lay, cdragh, precip_rain, precip_totsnow, temp_air, &
    187200            spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, pref, &
    188201            u1, v1, gustiness, rugoro, swnet, lwnet, &
     
    192205        z0h(1:knon)=z0m(1:knon) ! En attendant mieux
    193206
     207
    194208    ENDIF ! ok_veget
     209
     210        ! blowing snow not treated yet over land
     211        fluxbs(:)=0.
     212
    195213
    196214!****************************************************************************************
  • LMDZ6/trunk/libf/phylmd/surf_land_orchidee_mod.F90

    r4283 r4523  
    4747       precip_rain, precip_snow, lwdown, swnet, swdown, &
    4848       ps, q2m, t2m, &
    49        evap, fluxsens, fluxlat, &             
     49       evap, fluxsens, fluxlat, fluxbs, &             
    5050       tsol_rad, tsurf_new, alb1_new, alb2_new, &
    5151       emis_new, z0m_new, z0h_new, qsurf, &
     
    140140! Parametres de sortie
    141141!****************************************************************************************
    142     REAL, DIMENSION(klon), INTENT(OUT)        :: evap, fluxsens, fluxlat, qsurf
     142    REAL, DIMENSION(klon), INTENT(OUT)        :: evap, fluxsens, fluxlat, fluxbs, qsurf
    143143    REAL, DIMENSION(klon), INTENT(OUT)        :: tsol_rad, tsurf_new
    144144    REAL, DIMENSION(klon), INTENT(OUT)        :: alb1_new, alb2_new
     
    632632    fluxsens(1:knon) = -1. * fluxsens(1:knon)
    633633    fluxlat(1:knon)  = -1. * fluxlat(1:knon)
    634    
     634   
     635! temporary until blowing snow flux is calculated in orchidee
     636    fluxbs(:)=0.
     637
    635638!  evap     = -1. * evap
    636639
  • LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90

    r4414 r4523  
    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, &
    1717       ps, u1, v1, gustiness, rugoro, pctsrf, &
    18        snow, qsurf, qsol, agesno, &
    19        tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &
     18       snow, qsurf, qsol, qbs1, agesno, &
     19       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
    2020       tsurf_new, dflux_s, dflux_l, &
    2121       alt, slope, cloudf, &
     
    3030    USE cpl_mod,          ONLY : cpl_send_landice_fields
    3131    USE calcul_fluxs_mod
     32    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
    3233    USE phys_output_var_mod, ONLY : snow_o,zfra_o
    3334!FC
    3435    USE ioipsl_getin_p_mod, ONLY : getin_p
    35 
     36    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
    3637
    3738#ifdef CPP_INLANDSIS
     
    5657    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
    5758    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
    58     REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow
     59    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
    5960    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
    6061    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
     
    6263    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
    6364    REAL, DIMENSION(klon), INTENT(IN)             :: ps
    64     REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness
     65    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
    6566    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
    6667    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
     
    9495!albedo SB <<<
    9596    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
     97    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
    9698    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    9799    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
     
    134136
    135137    REAL,DIMENSION(klon) :: alb1,alb2
     138    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
    136139    REAL, DIMENSION (klon,6) :: alb6
     140    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
     141    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
     142    REAL, DIMENSION(klon)  :: ws1, rhos, ustart
    137143! End definition
    138144!****************************************************************************************
     
    165171    alb2(:) = 999999.
    166172    alb1(:) = 999999.
    167    
     173    fluxbs(:)=0. 
    168174    runoff(:) = 0.
    169175!****************************************************************************************
     
    173179    radsol(:) = 0.0
    174180    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     181
     182!****************************************************************************************
    175183
    176184!****************************************************************************************
     
    264272
    265273
    266 
    267274    ELSE
    268275
     
    314321         flux_u1, flux_v1)
    315322
    316 !****************************************************************************************
    317 ! Calculate snow height, age, run-off,..
    318 !   
    319 !****************************************************************************************
    320     CALL fonte_neige(knon, is_lic, knindex, dtime, &
    321          tsurf, precip_rain, precip_snow, &
    322          snow, qsol, tsurf_new, evap)
    323 
    324323
    325324!****************************************************************************************
     
    327326!
    328327!****************************************************************************************
     328 
    329329    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
    330330
    331     WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    332     zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    333     alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    334          0.6 * (1.0-zfra(1:knon))
     331
     332! EV: following lines are obsolete since we set alb1 and alb2 to constant values
     333! I therefore comment them
     334!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     335!         0.6 * (1.0-zfra(1:knon))
    335336!
    336337!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
     
    354355    !z0m = SQRT(z0m**2+rugoro**2)
    355356
     357
     358
     359  ! Simple blowing snow param
     360  if (ok_bs) then
     361       ustart0 = 0.211
     362       rhoice = 920.0
     363       rho0 = 200.0
     364       rhomax=450.0
     365       rhohard=400.0
     366       tau_dens0=86400.0*10.  ! 10 days by default, in s
     367       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
     368       do i = 1, knon
     369           ! estimation of snow density
     370           ! snow density increases with snow age and
     371           ! increases even faster in case of sedimentation of blowing snow
     372           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
     373           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
     374           ! blowing snow flux formula used in MAR
     375           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
     376           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
     377           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
     378           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
     379           ! rhohard<450)
     380           esalt=1./(3.25*max(ustar(i),0.001))
     381           hsalt=0.08436*ustar(i)**1.27
     382           qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
     383           !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
     384           fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
     385       enddo
     386
     387       ! for outputs
     388       do j = 1, knon
     389          i = knindex(j)
     390          zxustartlic(i) = ustart(j)
     391          zxrhoslic(i) = rhos(j)
     392       enddo
     393
     394  endif
     395
     396
     397
     398!****************************************************************************************
     399! Calculate surface snow amount
     400!   
     401!****************************************************************************************
     402    IF (ok_bs) THEN
     403      precip_totsnow=precip_snow+precip_bs
     404      evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion)
     405    ELSE
     406      precip_totsnow=precip_snow
     407      evap_totsnow=evap
     408    ENDIF
     409
     410    CALL fonte_neige(knon, is_lic, knindex, dtime, &
     411         tsurf, precip_rain, precip_totsnow,  &
     412         snow, qsol, tsurf_new, evap_totsnow)
     413
     414    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
     415    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
    356416
    357417
     
    378438    runoff(1:knon)=run_off_lic(1:knon)/dtime
    379439
    380  
    381 !****************************************************************************************
    382440       snow_o=0.
    383441       zfra_o = 0.
     
    420478!albedo SB <<<
    421479
    422  
    423  
    424480
    425481  END SUBROUTINE surf_landice
  • LMDZ6/trunk/libf/phylmd/surf_ocean_mod.F90

    r4370 r4523  
    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, &
     
    6060    REAL, DIMENSION(klon), INTENT(IN)        :: cdragh
    6161    REAL, DIMENSION(klon), INTENT(IN)        :: cdragm
    62     REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow
     62    REAL, DIMENSION(klon), INTENT(IN)        :: precip_rain, precip_snow, precip_bs
    6363    REAL, DIMENSION(klon), INTENT(IN)        :: temp_air, spechum
    6464    REAL, DIMENSION(klon), INTENT(IN)        :: AcoefH, AcoefQ, BcoefH, BcoefQ
     
    144144    REAL, DIMENSION(klon) :: radsol
    145145    REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation
     146    REAL, DIMENSION(klon) :: precip_totsnow
    146147    CHARACTER(len=20),PARAMETER :: modname="surf_ocean"
    147148    real rhoa(knon) ! density of moist air  (kg / m3)
     
    160161    radsol(1:klon) = 0.0 ! initialisation a priori inutile
    161162    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     163
     164
     165    !****************************************************************************************
     166    !Total solid precip
     167
     168    IF (ok_bs) THEN
     169       precip_totsnow=precip_snow+precip_bs
     170    ELSE
     171       precip_totsnow=precip_snow
     172    ENDIF
     173
    162174
    163175    !******************************************************************************
     
    188200            windsp, fder, &
    189201            itime, dtime, knon, knindex, &
    190             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow,temp_air,spechum,&
     202            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow,temp_air,spechum,&
    191203            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    192204            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    200212       CALL ocean_slab_noice( &
    201213            itime, dtime, jour, knon, knindex, &
    202             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum,&
     214            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, temp_air, spechum,&
    203215            AcoefH, AcoefQ, BcoefH, BcoefQ, &
    204216            AcoefU, AcoefV, BcoefU, BcoefV, &
     
    211223       CALL ocean_forced_noice( &
    212224            itime, dtime, jour, knon, knindex, &
    213             p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, &
     225            p1lay, cdragh, cdragq, cdragm, precip_rain, precip_totsnow, &
    214226            temp_air, spechum, &
    215227            AcoefH, AcoefQ, BcoefH, BcoefQ, &
     
    326338       call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, &
    327339            u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), &
    328             rain = precip_rain(:knon) + precip_snow(:knon), &
     340            rain = precip_rain(:knon) + precip_totsnow(:knon), &
    329341            hf = - fluxsens(:knon), hlb = - fluxlat(:knon), &
    330342            rnl = - lwnet(:knon), &
Note: See TracChangeset for help on using the changeset viewer.