Ignore:
Timestamp:
Oct 19, 2023, 4:02:57 PM (8 months ago)
Author:
idelkadi
Message:

Merged trunk changes -r4488:4726 LMDZ_ECRad branch

Location:
LMDZ6/branches/LMDZ_ECRad
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ_ECRad

  • LMDZ6/branches/LMDZ_ECRad/libf/phylmd/add_phys_tend_mod.F90

    r3435 r4727  
    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
Note: See TracChangeset for help on using the changeset viewer.