Ignore:
Timestamp:
Apr 18, 2024, 6:16:25 PM (4 weeks ago)
Author:
evignon
Message:

debut du chantier de refonte de cloudth_mpc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp.F90

    r4879 r4910  
    1212     radocond, radicefrac, rain, snow,                  &
    1313     frac_impa, frac_nucl, beta,                        &
    14      prfl, psfl, rhcl, zqta, fraca,                     &
    15      ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
     14     prfl, psfl, rhcl, qta, fraca,                     &
     15     tv, pspsk, tla, thl, iflag_cld_th,             &
    1616     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
    1717     distcltop,temp_cltop,                              &
     
    104104USE lmdz_lscp_ini, ONLY : prt_level, lunout
    105105USE lmdz_lscp_ini, ONLY : seuil_neb, niter_lscp, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min
    106 USE lmdz_lscp_ini, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc
     106USE lmdz_lscp_ini, ONLY : ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc
    107107USE lmdz_lscp_ini, ONLY : iflag_cloudth_vert, iflag_rain_incloud_vol, iflag_t_glace, t_glace_min
    108108USE lmdz_lscp_ini, ONLY : coef_eva, coef_sub,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
    109109USE lmdz_lscp_ini, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo
    110 USE lmdz_lscp_ini, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc
     110USE lmdz_lscp_ini, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc, min_frac_th_cld
    111111USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG
    112112USE lmdz_lscp_ini, ONLY : ok_poprecip, ok_bug_fonte_lscp
     
    138138  !Inputs associated with thermal plumes
    139139
    140   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: ztv             ! virtual potential temperature [K]
    141   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: zqta            ! specific humidity within thermals [kg/kg]
    142   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: fraca           ! fraction of thermals within the mesh [-]
    143   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: zpspsk          ! exner potential (p/100000)**(R/cp)
    144   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: ztla            ! liquid temperature within thermals [K]
     140  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: tv             ! virtual potential temperature [K]
     141  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qta            ! specific humidity within thermals [kg/kg]
     142  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: fraca          ! fraction of thermals within the mesh [-]
     143  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: pspsk          ! exner potential (p/100000)**(R/cp)
     144  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: tla            ! liquid temperature within thermals [K]
    145145
    146146  ! INPUT/OUTPUT variables
    147147  !------------------------
    148148 
    149   REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: zthl         ! liquid potential temperature [K]
     149  REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: thl          ! liquid potential temperature [K]
    150150  REAL, DIMENSION(klon,klev),      INTENT(INOUT)   :: ratqs        ! function of pressure that sets the large-scale
    151151
     
    236236  REAL, DIMENSION(klon) :: Zpdf_a,zpdf_b,zpdf_e1,zpdf_e2
    237237  REAL :: erf
    238   REAL, DIMENSION(klon,klev) :: icefrac_mpc
     238  REAL, DIMENSION(klon) :: zfice_th
    239239  REAL, DIMENSION(klon) :: qcloud, qincloud_mpc
    240240  REAL, DIMENSION(klon) :: zrfl, zrfln
     
    713713
    714714        IF (iflag_cld_th.GE.5) THEN
    715 
    716              IF (iflag_mpc_bl .LT. 1) THEN
    717 
    718                 IF (iflag_cloudth_vert.LE.2) THEN
    719 
    720                     CALL cloudth(klon,klev,k,ztv,                  &
    721                          zq,zqta,fraca,                            &
    722                          qcloud,ctot,zpspsk,paprs,pplay,ztla,zthl, &
     715               ! Cloud cover and content in meshes affected by shallow convection,
     716               ! are retrieved from a bi-gaussian distribution of the saturation deficit
     717               ! following Jam et al. 2013
     718
     719               IF (iflag_cloudth_vert.LE.2) THEN
     720                  ! Old version of Arnaud Jam
     721
     722                    CALL cloudth(klon,klev,k,tv,                  &
     723                         zq,qta,fraca,                            &
     724                         qcloud,ctot,pspsk,paprs,pplay,tla,thl, &
    723725                         ratqs,zqs,temp,                              &
    724726                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
     
    726728
    727729                ELSEIF (iflag_cloudth_vert.GE.3 .AND. iflag_cloudth_vert.LE.5) THEN
    728 
    729                     CALL cloudth_v3(klon,klev,k,ztv,                        &
    730                          zq,zqta,fraca,                                     &
    731                          qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
     730                   ! Default version of Arnaud Jam
     731                       
     732                    CALL cloudth_v3(klon,klev,k,tv,                        &
     733                         zq,qta,fraca,                                     &
     734                         qcloud,ctot,ctot_vol,pspsk,paprs,pplay,tla,thl, &
    732735                         ratqs,zqs,temp, &
    733736                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    734737
    735                 !Jean Jouhaud's version, Decembre 2018
    736                 !-------------------------------------
    737738
    738739                ELSEIF (iflag_cloudth_vert.EQ.6) THEN
    739 
    740                     CALL cloudth_v6(klon,klev,k,ztv,                        &
    741                          zq,zqta,fraca,                                     &
    742                          qcloud,ctot,ctot_vol,zpspsk,paprs,pplay,ztla,zthl, &
     740                   ! Jean Jouhaud's version, with specific separation between surface and volume
     741                   ! cloud fraction Decembre 2018
     742
     743                    CALL cloudth_v6(klon,klev,k,tv,                        &
     744                         zq,qta,fraca,                                     &
     745                         qcloud,ctot,ctot_vol,pspsk,paprs,pplay,tla,thl, &
    743746                         ratqs,zqs,temp, &
    744747                         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    745748
    746                 ENDIF
    747 
    748          ELSE
    749                 ! cloudth_v3 + cold microphysical considerations
    750                 ! + stationary mixed-phase cloud model
    751 
    752                     CALL cloudth_mpc(klon,klev,k,iflag_mpc_bl,mpc_bl_points, &
    753                          temp,ztv,zq,zqta,fraca, zpspsk,                      &
    754                          paprs,pplay,ztla,zthl,ratqs,zqs,psfl,             &
    755                          qcloud,qincloud_mpc,icefrac_mpc,ctot,ctot_vol,    &
    756                          cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv)
    757 
    758          ENDIF ! iflag_mpc_bl
     749                ELSEIF (iflag_cloudth_vert .EQ. 7) THEN
     750                   ! Updated version of Arnaud Jam (correction by E. Vignon) + adapted treatment
     751                   ! for boundary-layer mixed phase clouds following Vignon et al. 
     752                    CALL cloudth_mpc(klon,klev,k,mpc_bl_points,zt,zq,qta(:,k),fraca(:,k), &
     753                                     pspsk(:,k),paprs(:,k+1),paprs(:,k),pplay(:,k), tla(:,k), &
     754                                     ratqs(:,k),qcloud,qincloud_mpc,zfice_th,ctot(:,k),ctot_vol(:,k), &
     755                                     cloudth_sth(:,k),cloudth_senv(:,k),cloudth_sigmath(:,k),cloudth_sigmaenv(:,k))
     756
     757                ENDIF
     758
    759759
    760760                DO i=1,klon
     
    774774           
    775775                ! lognormal distribution when no thermals
    776             lognormale = fraca(:,k) < 1e-10
     776            lognormale = fraca(:,k) < min_frac_th_cld
    777777
    778778        ELSE
     
    934934            temp_cltop(:,k)=temp_cltop1D(:)
    935935        ENDIF   
    936 
    937936        ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs)
    938         CALL icefrac_lscp(klon,zt,iflag_ice_thermo,distcltop1D,temp_cltop1D,zfice, dzfice)
     937        CALL icefrac_lscp(klon,zt,iflag_ice_thermo,distcltop1D,temp_cltop1D,zfice,dzfice)
    939938
    940939
     
    943942
    944943            IF (mpc_bl_points(i,k) .GT. 0) THEN
     944               
    945945                zcond(i) = MAX(0.0,qincloud_mpc(i))*rneb(i,k)
    946946                ! following line is very strange and probably wrong
     
    948948                ! water vapor update and partition function if thermals
    949949                zq(i) = zq(i) - zcond(i)       
    950                 zfice(i)=icefrac_mpc(i,k)
     950                zfice(i)=zfice_th(i)
    951951
    952952            ELSE
     
    13141314    ENDIF
    13151315
     1316
    13161317    ENDIF ! ok_poprecip
    13171318
Note: See TracChangeset for help on using the changeset viewer.