Changeset 5602


Ignore:
Timestamp:
Apr 3, 2025, 4:53:58 PM (2 months ago)
Author:
aborella
Message:

Removed deep convection clouds from prognostic cloud properties

Location:
LMDZ6/branches/contrails/libf/phylmd
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_aviation.f90

    r5601 r5602  
    7373SUBROUTINE contrails_formation( &
    7474      klon, dtime, pplay, temp, qsat, qsatl, gamma_cond, flight_dist, &
    75       cldfra, pdf_loc, pdf_scale, pdf_alpha, keepgoing, &
     75      clrfra, pdf_loc, pdf_scale, pdf_alpha, keepgoing, &
    7676      Tcritcont, qcritcont, potcontfraP, potcontfraNP, &
    7777      dcfa_ini, dqia_ini, dqta_ini)
     
    9696REAL,     INTENT(IN) , DIMENSION(klon) :: gamma_cond   ! condensation threshold w.r.t. qsat [-]
    9797REAL,     INTENT(IN) , DIMENSION(klon) :: flight_dist  ! aviation distance flown concentration [m/s/m3]
    98 REAL,     INTENT(IN) , DIMENSION(klon) :: cldfra       ! cloud fraction [-]
     98REAL,     INTENT(IN) , DIMENSION(klon) :: clrfra       ! clear sky fraction [-]
    9999REAL,     INTENT(IN) , DIMENSION(klon) :: pdf_loc      ! location parameter of the clear sky PDF [%]
    100100REAL,     INTENT(IN) , DIMENSION(klon) :: pdf_scale    ! scale parameter of the clear sky PDF [%]
     
    166166
    167167
    168     IF ( ( ( 1. - cldfra(i) ) .GT. eps ) .AND. ( temp(i) .LT. Tcritcont(i) ) ) THEN
     168    IF ( ( clrfra(i) .GT. eps ) .AND. ( temp(i) .LT. Tcritcont(i) ) ) THEN
    169169   
    170170      pdf_x = qcritcont(i) / qsatl(i) * 100.
     
    173173      pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    174174      pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    175       pdf_fra_above_qcritcont = EXP( - pdf_y ) * ( 1. - cldfra(i) )
    176       pdf_q_above_qcritcont = ( pdf_e3 * ( 1. - cldfra(i) ) &
     175      pdf_fra_above_qcritcont = EXP( - pdf_y ) * clrfra(i)
     176      pdf_q_above_qcritcont = ( pdf_e3 * clrfra(i) &
    177177          + pdf_loc(i) * pdf_fra_above_qcritcont ) * qsatl(i) / 100.
    178178   
     
    182182      pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    183183      pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    184       pdf_fra_above_qnuc = EXP( - pdf_y ) * ( 1. - cldfra(i) )
    185       pdf_q_above_qnuc = ( pdf_e3 * ( 1. - cldfra(i) ) &
     184      pdf_fra_above_qnuc = EXP( - pdf_y ) * clrfra(i)
     185      pdf_q_above_qnuc = ( pdf_e3 * clrfra(i) &
    186186          + pdf_loc(i) * pdf_fra_above_qnuc ) * qsatl(i) / 100.
    187187   
     
    191191      pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    192192      pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    193       pdf_fra_above_qsat = EXP( - pdf_y ) * ( 1. - cldfra(i) )
    194       pdf_q_above_qsat = ( pdf_e3 * ( 1. - cldfra(i) ) &
     193      pdf_fra_above_qsat = EXP( - pdf_y ) * clrfra(i)
     194      pdf_q_above_qsat = ( pdf_e3 * clrfra(i) &
    195195          + pdf_loc(i) * pdf_fra_above_qsat ) * qsatl(i) / 100.
    196196   
     
    330330  qvapincld_depsub_contrails = qsat + ( qvapincld - qsat ) &
    331331                * EXP( - dtime * qiceincld / kappa / rm_ice**2 )
     332  IF ( qvapincld_depsub_contrails .GE. ( qvapincld + qiceincld ) ) &
     333                qvapincld_depsub_contrails = 0.
    332334ENDIF ! qvapincld .GT. qsat
    333335
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90

    r5601 r5602  
    88SUBROUTINE lscp(klon,klev,dtime,missing_val,            &
    99     paprs, pplay, omega, temp, qt, ql_seri, qi_seri,   &
    10      ptconv, ratqs, sigma_qtherm,                       &
     10     ptconv, cldfracv, qcondcv, ratqs, sigma_qtherm,    &
    1111     d_t, d_q, d_ql, d_qi, rneb, rneblsvol,             &
    1212     pfraclr, pfracld,                                  &
     
    153153                                                                   ! CR: if iflag_ice_thermo=2, only convection is active
    154154  LOGICAL, DIMENSION(klon,klev),   INTENT(IN)   :: ptconv          ! grid points where deep convection scheme is active
     155  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: cldfracv        ! cloud fraction from deep convection [-]
     156  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qcondcv         ! in-cloud condensed specific humidity from deep convection [kg/kg]
    155157
    156158  !Inputs associated with thermal plumes
     
    741743
    742744                    CALL condensation_ice_supersat( &
    743                         klon, dtime, missing_val, &
    744                         pplay(:,k), paprs(:,k), paprs(:,k+1), &
     745                        klon, dtime, pplay(:,k), paprs(:,k), paprs(:,k+1), &
     746                        cldfracv(:,k), qcondcv(:,k), &
    745747                        cf_seri(:,k), qvc_seri(:,k), qliq_in, qice_in, &
    746748                        shear, tke_dissip(:,k), cell_area, stratomask(:,k), &
     
    949951
    950952    IF (ok_plane_contrail) THEN
    951       !--Contrails do not precipitate. We remove then from the variables temporarily
     953      !!--Contrails do not precipitate. We remove then from the variables temporarily
     954      !DO i = 1, klon
     955      !  rneb(i,k) = rneb(i,k) - contfra(i)
     956      !  zoliqi(i) = zoliqi(i) - ( qcont(i) - zqs(i) * contfra(i) )
     957      !ENDDO
     958      !--Contrails precipitate as natural clouds. We save the partition of ice
     959      !--between natural clouds and contrails
     960      !--NB. we use qcont as a temporary variable to save this partition
    952961      DO i = 1, klon
    953         rneb(i,k) = rneb(i,k) - contfra(i)
    954         zoliqi(i) = zoliqi(i) - ( qcont(i) - zqs(i) * contfra(i) )
     962        IF ( zoliqi(i) .GT. 0. ) THEN
     963          qcont(i) = ( qcont(i) - zqs(i) * contfra(i) ) / zoliqi(i)
     964        ELSE
     965          qcont(i) = 0.
     966        ENDIF
    955967      ENDDO
    956968    ENDIF
     
    9901002   
    9911003    IF (ok_plane_contrail) THEN
    992       !--Contrails are reintroduced in the variables
     1004      !!--Contrails are reintroduced in the variables
     1005      !DO i = 1, klon
     1006      !  rneb(i,k) = rneb(i,k) + contfra(i)
     1007      !  zoliqi(i) = zoliqi(i) + ( qcont(i) - zqs(i) * contfra(i) )
     1008      !ENDDO
     1009      !--Contrails fraction is left unchanged, but contrails water has changed
    9931010      DO i = 1, klon
    994         rneb(i,k) = rneb(i,k) + contfra(i)
    995         zoliqi(i) = zoliqi(i) + ( qcont(i) - zqs(i) * contfra(i) )
     1011        IF ( zoliqi(i) .LE. 0. ) THEN
     1012          contfra(i) = 0.
     1013          qcont(i) = 0.
     1014        ELSE
     1015          qcont(i) = zqs(i) * contfra(i) + zoliqi(i) * qcont(i)
     1016        ENDIF
    9961017      ENDDO
    9971018    ENDIF
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90

    r5601 r5602  
    9494!**********************************************************************************
    9595SUBROUTINE condensation_ice_supersat( &
    96       klon, dtime, missing_val, pplay, paprsdn, paprsup, &
     96      klon, dtime, pplay, paprsdn, paprsup, cldfracv, qcondcv, &
    9797      cldfra_in, qvc_in, qliq_in, qice_in, shear, pbl_eps, cell_area, stratomask, &
    98       temp, qtot, qsat, gamma_cond, ratqs, keepgoing, &
     98      temp, qtot_in, qsat, gamma_cond, ratqs, keepgoing, &
    9999      cldfra, qincld, qvc, issrfra, qissr, dcf_sub, dcf_con, dcf_mix, &
    100100      dqi_adj, dqi_sub, dqi_con, dqi_mix, dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, &
     
    125125USE lmdz_lscp_ini,   ONLY: beta_pdf_lscp, temp_thresh_pdf_lscp
    126126USE lmdz_lscp_ini,   ONLY: std100_pdf_lscp, k0_pdf_lscp, kappa_pdf_lscp
    127 USE lmdz_lscp_ini,   ONLY: coef_mixing_lscp, coef_shear_lscp, chi_mixing_lscp
     127USE lmdz_lscp_ini,   ONLY: coef_mixing_lscp, coef_shear_lscp
    128128
    129129USE lmdz_lscp_ini,   ONLY: ok_plane_contrail, aspect_ratio_contrails
    130130USE lmdz_lscp_ini,   ONLY: coef_mixing_contrails, coef_shear_contrails
    131 USE lmdz_lscp_ini,   ONLY: linear_contrails_lifetime
     131USE lmdz_lscp_ini,   ONLY: chi_mixing_contrails, linear_contrails_lifetime
    132132USE lmdz_aviation,   ONLY: contrails_formation
    133133
     
    139139INTEGER,  INTENT(IN)                     :: klon          ! number of horizontal grid points
    140140REAL,     INTENT(IN)                     :: dtime         ! time step [s]
    141 REAL,     INTENT(IN)                     :: missing_val   ! missing value for output
    142141!
    143142REAL,     INTENT(IN)   , DIMENSION(klon) :: pplay         ! layer pressure [Pa]
    144143REAL,     INTENT(IN)   , DIMENSION(klon) :: paprsdn       ! pressure at the lower interface [Pa]
    145144REAL,     INTENT(IN)   , DIMENSION(klon) :: paprsup       ! pressure at the upper interface [Pa]
     145REAL,     INTENT(IN)   , DIMENSION(klon) :: cldfracv      ! cloud fraction from deep convection [-]
     146REAL,     INTENT(IN)   , DIMENSION(klon) :: qcondcv       ! in-cloud condensed specific humidity from deep convection [kg/kg]
    146147REAL,     INTENT(IN)   , DIMENSION(klon) :: cldfra_in     ! cloud fraction [-]
    147148REAL,     INTENT(IN)   , DIMENSION(klon) :: qvc_in        ! gridbox-mean water vapor in cloud [kg/kg]
     
    153154REAL,     INTENT(IN)   , DIMENSION(klon) :: stratomask    ! fraction of stratosphere in the mesh (1 or 0)
    154155REAL,     INTENT(IN)   , DIMENSION(klon) :: temp          ! temperature [K]
    155 REAL,     INTENT(IN)   , DIMENSION(klon) :: qtot          ! total specific humidity (without precip) [kg/kg]
     156REAL,     INTENT(IN)   , DIMENSION(klon) :: qtot_in       ! total specific humidity (without precip) [kg/kg]
    156157REAL,     INTENT(IN)   , DIMENSION(klon) :: qsat          ! saturation specific humidity [kg/kg]
    157158REAL,     INTENT(IN)   , DIMENSION(klon) :: gamma_cond    ! condensation threshold w.r.t. qsat [-]
     
    219220INTEGER :: i
    220221LOGICAL :: ok_warm_cloud
    221 REAL, DIMENSION(klon) :: qcld, qzero
     222REAL, DIMENSION(klon) :: qtot, qcld, qzero
    222223REAL, DIMENSION(klon) :: clrfra, qclr
    223 REAL, DIMENSION(klon) :: clrfra_pdf, qclr_pdf
    224224!
    225225! for lognormal
     
    247247REAL :: L_shear, shear_fra
    248248REAL :: qvapinclr_lim
     249REAL :: pdf_fra_above_nuc, pdf_q_above_nuc
    249250REAL :: pdf_fra_above_lim, pdf_q_above_lim
    250 REAL :: pdf_fra_below_lim, pdf_q_below_lim
     251REAL :: pdf_fra_below_lim
    251252!
    252253! for cell properties
     
    254255
    255256qzero(:) = 0.
     257qtot = qtot_in
    256258
    257259!--Calculation of qsat w.r.t. liquid
     
    317319      ok_warm_cloud = ( temp(i) .GT. temp_nowater )
    318320
     321      !--We remove the convection water from the total available water
     322      qtot(i) = qtot(i) - ( qcondcv(i) + qsat(i) ) * cldfracv(i)
     323
    319324      !--The following barriers ensure that the traced cloud properties
    320325      !--are consistent. In some rare cases, i.e. the cloud water vapor
    321326      !--can be greater than the total water in the gridbox
    322       cldfra(i) = MAX(0., MIN(1., cldfra_in(i)))
     327      cldfra(i) = MAX(0., MIN(1. - cldfracv(i), cldfra_in(i)))
    323328      qcld(i)   = MAX(0., MIN(qtot(i), qliq_in(i) + qice_in(i) + qvc_in(i)))
    324329      qvc(i)    = MAX(0., MIN(qcld(i), qvc_in(i)))
    325330
    326       !--We init clear fraction properties
    327       clrfra(i) = 1. - cldfra(i)
     331      !--Initialise clear fraction properties
     332      clrfra(i) = ( 1. - cldfracv(i) ) - cldfra(i)
    328333      qclr(i) = qtot(i) - qcld(i)
    329334
     
    384389          contfra(i) = 0.
    385390          qcont(i) = 0.
     391          clrfra(i) = clrfra(i) + dcfa_sub(i)
     392          qclr(i) = qclr(i) + dqta_sub(i)
    386393        ELSE
    387394          !--We remove contrails from the main class
     
    414421          qcld(i) = 0.
    415422          qvc(i) = 0.
     423          clrfra(i) = clrfra(i) - dcf_sub(i)
     424          qclr(i) = qclr(i) - dqvc_sub(i) - dqi_sub(i)
    416425
    417426          !--If all the ice has been sublimated, we sublimate
     
    443452              qcld(i) = 0.
    444453              qvc(i) = 0.
     454              clrfra(i) = clrfra(i) - dcf_sub(i)
     455              qclr(i) = qclr(i) - dqvc_sub(i) - dqi_sub(i)
    445456            ENDIF
    446457          ELSE
     
    482493
    483494            !--Add tendencies
    484             cldfra(i) = MAX(0., cldfra(i) + dcf_sub(i))
    485             qcld(i)   = MAX(0., qcld(i) + dqt_sub)
    486             qvc(i)    = MAX(0., qvc(i) + dqvc_sub(i))
    487 
     495            cldfra(i) = cldfra(i) + dcf_sub(i)
     496            qcld(i)   = qcld(i) + dqt_sub
     497            qvc(i)    = qvc(i) + dqvc_sub(i)
     498            clrfra(i) = clrfra(i) - dcf_sub(i)
     499            qclr(i)   = qclr(i) - dqt_sub
    488500          ENDIF ! qvapincld_new .GT. 0.
    489501
     
    497509      !--This section relies on a distribution of water in the clear-sky region of
    498510      !--the mesh.
    499       clrfra_pdf(i) = 1. - cldfra(i) - contfra(i)
    500       qclr_pdf(i) = qtot(i) - qcld(i) - qcont(i)
    501511
    502512      !--If there is a clear-sky region
    503       IF ( clrfra_pdf(i) .GT. eps ) THEN
     513      IF ( clrfra(i) .GT. eps ) THEN
    504514
    505515        !--New PDF
    506         rhl_clr = qclr_pdf(i) / clrfra_pdf(i) / qsatl(i) * 100.
     516        rhl_clr = qclr(i) / clrfra(i) / qsatl(i) * 100.
     517        rhl_clr = MAX(0., MIN(1000., rhl_clr))
    507518
    508519        !--Calculation of the properties of the PDF
     
    516527        !       * MAX( temp(i) - temp_thresh_pdf_lscp, 0. )
    517528        !--  tuning coef * (cell area**0.25) * (function of temperature)
    518         pdf_e1 = beta_pdf_lscp * ( clrfra_pdf(i) * cell_area(i) )**0.25 &
     529        pdf_e1 = beta_pdf_lscp * ( clrfra(i) * cell_area(i) )**0.25 &
    519530                * MAX( temp(i) - temp_thresh_pdf_lscp, 0. )
    520531        IF ( rhl_clr .GT. 50. ) THEN
     
    524535        ENDIF
    525536        pdf_e3 = k0_pdf_lscp + kappa_pdf_lscp * MAX( temp_nowater - temp(i), 0. )
    526         pdf_alpha(i) = EXP( MIN(1000., rhl_clr) / 100. ) * pdf_e3
     537        pdf_alpha(i) = EXP( rhl_clr / 100. ) * pdf_e3
    527538       
    528539        IF ( ok_warm_cloud ) THEN
     
    550561        IF ( cf_cond .GT. eps ) THEN
    551562
    552           dcf_con(i) = clrfra_pdf(i) * cf_cond
    553           dqt_con = clrfra_pdf(i) * qt_cond
     563          dcf_con(i) = clrfra(i) * cf_cond
     564          dqt_con = clrfra(i) * qt_cond
     565
     566          !--Barriers (should be useless
     567          dcf_con(i) = MIN(dcf_con(i), clrfra(i))
     568          dqt_con = MIN(dqt_con, qclr(i))
    554569
    555570          IF ( ok_unadjusted_clouds .AND. .NOT. ok_warm_cloud ) THEN
     
    573588
    574589          !--Add tendencies
    575           cldfra(i) = MIN(1., cldfra(i) + dcf_con(i))
    576           qcld(i)   = MIN(qtot(i), qcld(i) + dqt_con)
    577           qvc(i)    = MIN(qcld(i), qvc(i) + dqvc_con(i))
    578           clrfra(i) = MAX(0., clrfra(i) - dcf_con(i))
    579           qclr(i)   = MAX(0., qclr(i) - dqt_con)
     590          cldfra(i)  = cldfra(i) + dcf_con(i)
     591          qcld(i)    = qcld(i) + dqt_con
     592          qvc(i)     = qvc(i) + dqvc_con(i)
     593          clrfra(i)  = clrfra(i) - dcf_con(i)
     594          qclr(i)    = qclr(i) - dqt_con
    580595
    581596        ENDIF ! ok_warm_cloud, cf_cond .GT. eps
    582        
    583         !--We then calculate the part that is greater than qsat
    584         !--and lower than gamma_cond * qsat, which is the ice supersaturated region
    585         pdf_x = qsat(i) / qsatl(i) * 100.
    586         pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
    587         pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    588         pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    589         issrfra(i) = EXP( - pdf_y ) * clrfra_pdf(i)
    590         qissr(i) = ( pdf_e3 * clrfra_pdf(i) + pdf_loc(i) * issrfra(i) ) * qsatl(i) / 100.
    591 
    592         issrfra(i) = issrfra(i) - dcf_con(i)
    593         qissr(i) = qissr(i) - dqvc_con(i) - dqi_con(i)
    594 
    595597      ENDIF ! ( 1. - cldfra(i) ) .GT. eps
    596598
     
    702704          !--because the clear sky fraction can only be reduced by condensation.
    703705          !--Thus the `pdf_xxx` variables are well defined.
     706          pdf_x = gamma_cond(i) * qsat(i) / qsatl(i) * 100.
     707          pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
     708          pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
     709          pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
     710          pdf_fra_above_nuc = EXP( - pdf_y ) * clrfra(i)
     711          pdf_q_above_nuc = ( pdf_e3 * clrfra(i) &
     712                          + pdf_loc(i) * pdf_fra_above_nuc ) * qsatl(i) / 100.
     713
    704714          pdf_x = qvapinclr_lim / qsatl(i) * 100.
    705715          pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
    706716          pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    707717          pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    708           pdf_fra_above_lim = EXP( - pdf_y ) * clrfra_pdf(i)
    709           pdf_q_above_lim = ( pdf_e3 * clrfra_pdf(i) &
     718          pdf_fra_above_lim = EXP( - pdf_y ) * clrfra(i)
     719          pdf_q_above_lim = ( pdf_e3 * clrfra(i) &
    710720                          + pdf_loc(i) * pdf_fra_above_lim ) * qsatl(i) / 100.
    711721
    712           pdf_fra_below_lim = clrfra_pdf(i) - pdf_fra_above_lim
    713           pdf_q_below_lim = qclr_pdf(i) - pdf_q_above_lim
    714           !--We remove the already condensated part (it is well defined)
    715           pdf_fra_above_lim = pdf_fra_above_lim - dcf_con(i)
    716           pdf_q_above_lim = pdf_q_above_lim - dqvc_con(i) - dqi_con(i)
    717 
    718           !--sigma_mix quantifies
     722          pdf_fra_below_lim = clrfra(i) - pdf_fra_above_lim
     723          pdf_fra_above_lim = pdf_fra_above_lim - pdf_fra_above_nuc
     724          pdf_q_above_lim = pdf_q_above_lim - pdf_q_above_nuc
     725
     726          !--sigma_mix is the ratio of the surroundings of the clouds where mixing
     727          !--increases the size of the cloud, to the total surroundings of the clouds.
     728          !--This implies that ( 1. - sigma_mix ) quantifies the ratio where mixing
     729          !--decreases the size of the clouds
    719730          sigma_mix = pdf_fra_above_lim / ( pdf_fra_below_lim + pdf_fra_above_lim )
    720731
     
    735746
    736747        !--Add tendencies
    737         cldfra(i)  = MAX(0., MIN(1., cldfra(i) + dcf_mix(i)))
    738         qcld(i)    = MAX(0., MIN(qtot(i), qcld(i) + dqvc_mix(i) + dqi_mix(i)))
    739         qvc(i)     = MAX(0., MIN(qcld(i), qvc(i) + dqvc_mix(i)))
    740         clrfra(i)  = MAX(0., MIN(1., clrfra(i) - dcf_mix(i)))
    741         qclr(i)    = MAX(0., MIN(qtot(i), qclr(i) - dqvc_mix(i) - dqi_mix(i)))
     748        cldfra(i)  = cldfra(i) + dcf_mix(i)
     749        qcld(i)    = qcld(i) + dqvc_mix(i) + dqi_mix(i)
     750        qvc(i)     = qvc(i) + dqvc_mix(i)
     751        clrfra(i)  = clrfra(i) - dcf_mix(i)
     752        qclr(i)    = qclr(i) - dqvc_mix(i) - dqi_mix(i)
    742753     
    743754      ENDIF ! ( cldfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps )
     
    850861          !--because the clear sky fraction can only be reduced by condensation.
    851862          !--Thus the `pdf_xxx` variables are well defined.
     863          pdf_x = gamma_cond(i) * qsat(i) / qsatl(i) * 100.
     864          pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
     865          pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
     866          pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
     867          pdf_fra_above_nuc = EXP( - pdf_y ) * clrfra(i)
     868          pdf_q_above_nuc = ( pdf_e3 * clrfra(i) &
     869                          + pdf_loc(i) * pdf_fra_above_nuc ) * qsatl(i) / 100.
     870
    852871          pdf_x = qvapinclr_lim / qsatl(i) * 100.
    853872          pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
    854873          pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
    855874          pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
    856           pdf_fra_above_lim = EXP( - pdf_y ) * clrfra_pdf(i)
    857           pdf_q_above_lim = ( pdf_e3 * clrfra_pdf(i) &
     875          pdf_fra_above_lim = EXP( - pdf_y ) * clrfra(i)
     876          pdf_q_above_lim = ( pdf_e3 * clrfra(i) &
    858877                          + pdf_loc(i) * pdf_fra_above_lim ) * qsatl(i) / 100.
    859878
    860           pdf_fra_below_lim = clrfra_pdf(i) - pdf_fra_above_lim
    861           pdf_q_below_lim = qclr_pdf(i) - pdf_q_above_lim
    862           !--We remove the already condensated part (it is well defined)
    863           pdf_fra_above_lim = pdf_fra_above_lim - dcf_con(i)
    864           pdf_q_above_lim = pdf_q_above_lim - dqvc_con(i) - dqi_con(i)
    865 
    866           !--sigma_mix quantifies
    867           sigma_mix = pdf_fra_above_lim / ( pdf_fra_below_lim + pdf_fra_above_lim )
     879          pdf_fra_below_lim = clrfra(i) - pdf_fra_above_lim
     880          pdf_fra_above_lim = pdf_fra_above_lim - pdf_fra_above_nuc
     881          pdf_q_above_lim = pdf_q_above_lim - pdf_q_above_nuc
     882
     883          !--sigma_mix is the ratio of the surroundings of the clouds where mixing
     884          !--increases the size of the cloud, to the total surroundings of the clouds.
     885          !--This implies that ( 1. - sigma_mix ) quantifies the ratio where mixing
     886          !--decreases the size of the clouds
     887          !--For aviation, we increase the chance that the air surrounding contrails
     888          !--is moist. This is quantified with chi_mixing_contrails
     889          sigma_mix = chi_mixing_contrails * pdf_fra_above_lim &
     890                    / ( pdf_fra_below_lim + chi_mixing_contrails * pdf_fra_above_lim )
    868891
    869892          IF ( pdf_fra_above_lim .GT. eps ) THEN
     
    883906
    884907        !--Add tendencies
    885         contfra(i) = MAX(0., MIN(1., contfra(i) + dcfa_mix(i)))
    886         qcont(i)   = MAX(0., MIN(qtot(i), qcont(i) + dqta_mix(i)))
    887         clrfra(i)  = MAX(0., MIN(1., clrfra(i) - dcfa_mix(i)))
    888         qclr(i)    = MAX(0., MIN(qtot(i), qclr(i) - dqta_mix(i)))
     908        contfra(i) = contfra(i) + dcfa_mix(i)
     909        qcont(i)   = qcont(i) + dqta_mix(i)
     910        clrfra(i)  = clrfra(i) - dcfa_mix(i)
     911        qclr(i)    = qclr(i) - dqta_mix(i)
    889912
    890913      ENDIF ! ( contfra(i) .GT. eps ) .AND. ( clrfra(i) .GT.  eps )
     
    908931      dqvc_con(i) = dqvc_con(i) / dtime
    909932      dqvc_mix(i) = dqvc_mix(i) / dtime
     933       
     934      !--Diagnose ISSRs
     935      IF ( clrfra(i) .GT. eps ) THEN
     936        !--We then calculate the part that is greater than qsat
     937        !--and lower than gamma_cond * qsat, which is the ice supersaturated region
     938        pdf_x = gamma_cond(i) * qsat(i) / qsatl(i) * 100.
     939        pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
     940        pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
     941        pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
     942        pdf_fra_above_nuc = EXP( - pdf_y ) * clrfra(i)
     943        pdf_q_above_nuc = ( pdf_e3 * clrfra(i) &
     944                        + pdf_loc(i) * pdf_fra_above_nuc ) * qsatl(i) / 100.
     945
     946        pdf_x = qsat(i) / qsatl(i) * 100.
     947        pdf_y = ( MAX( pdf_x - pdf_loc(i), 0. ) / pdf_scale(i) ) ** pdf_alpha(i)
     948        pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y )
     949        pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_e2
     950        issrfra(i) = EXP( - pdf_y ) * clrfra(i)
     951        qissr(i) = ( pdf_e3 * clrfra(i) + pdf_loc(i) * issrfra(i) ) * qsatl(i) / 100.
     952
     953        issrfra(i) = issrfra(i) - pdf_fra_above_nuc
     954        qissr(i) = qissr(i) - pdf_q_above_nuc
     955      ENDIF
    910956
    911957      !-------------------------------------------
     
    937983  CALL contrails_formation( &
    938984      klon, dtime, pplay, temp, qsat, qsatl, gamma_cond, &
    939       flight_dist, cldfra, pdf_loc, pdf_scale, pdf_alpha, keepgoing, &
     985      flight_dist, clrfra, pdf_loc, pdf_scale, pdf_alpha, keepgoing, &
    940986      Tcritcont, qcritcont, potcontfraP, potcontfraNP, &
    941987      dcfa_ini, dqia_ini, dqta_ini)
     
    951997      issrfra(i) = MAX(0., issrfra(i) - dcfa_ini(i))
    952998      qissr(i)   = MAX(0., qissr(i) - dqta_ini(i))
    953       cldfra(i)  = MAX(0., MIN(1., cldfra(i) + dcfa_ini(i)))
     999      cldfra(i)  = MAX(0., MIN(1. - cldfracv(i), cldfra(i) + dcfa_ini(i)))
    9541000      qcld(i)    = MAX(0., MIN(qtot(i), qcld(i) + dqta_ini(i)))
    9551001      qvc(i)     = MAX(0., MIN(qcld(i), qvc(i) + dcfa_ini(i) * qsat(i)))
     
    11351181  qvapincld_depsub = qsat + ( qvapincld - qsat ) &
    11361182                   * EXP( - dtime * qiceincld / kappa / rm_ice**2 )
     1183  IF ( qvapincld_depsub .GE. ( qvapincld + qiceincld ) ) &
     1184                   qvapincld_depsub = 0.
    11371185ENDIF ! qvapincld .GT. qsat
    11381186
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_ini.f90

    r5589 r5602  
    200200  REAL, SAVE, PROTECTED :: coef_shear_lscp=0.72              ! [-] additional coefficient for the shearing process (subprocess of the mixing process)
    201201  !$OMP THREADPRIVATE(coef_shear_lscp)
    202  
    203   REAL, SAVE, PROTECTED :: chi_mixing_lscp=1.                ! [-] factor for the macro distribution of ISSRs wrt clouds in a gridbox
    204   !$OMP THREADPRIVATE(chi_mixing_lscp)
    205202  !--End of the parameters for condensation and ice supersaturation
    206203
     
    219216  !$OMP THREADPRIVATE(coef_shear_contrails)
    220217 
    221   REAL, SAVE, PROTECTED :: chi_mixing_contrails              ! [-] factor for the macro distribution of ISSRs wrt clouds in a gridbox
     218  REAL, SAVE, PROTECTED :: chi_mixing_contrails=1.           ! [-] factor for increasing the chance that moist air is surrounding contrails
    222219  !$OMP THREADPRIVATE(chi_mixing_contrails)
    223220
     
    486483    CALL getin_p('coef_mixing_lscp',coef_mixing_lscp)
    487484    CALL getin_p('coef_shear_lscp',coef_shear_lscp)
    488     CALL getin_p('chi_mixing_lscp',chi_mixing_lscp)
    489485    ! for aviation
    490486    CALL getin_p('aspect_ratio_contrails',aspect_ratio_contrails)
     
    493489    coef_shear_contrails=coef_shear_lscp
    494490    CALL getin_p('coef_shear_contrails',coef_shear_contrails)
    495     chi_mixing_contrails=chi_mixing_lscp
    496491    CALL getin_p('chi_mixing_contrails',chi_mixing_contrails)
    497492    CALL getin_p('rm_ice_crystals_contrails',rm_ice_crystals_contrails)
     
    585580    WRITE(lunout,*) 'lscp_ini, coef_mixing_lscp:', coef_mixing_lscp
    586581    WRITE(lunout,*) 'lscp_ini, coef_shear_lscp:', coef_shear_lscp
    587     WRITE(lunout,*) 'lscp_ini, chi_mixing_lscp:', chi_mixing_lscp
    588582    ! for aviation
    589583    WRITE(lunout,*) 'lscp_ini, aspect_ratio_contrails:', aspect_ratio_contrails
  • LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90

    r5601 r5602  
    39453945
    39463946    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, &
    3947          t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, ptconv, ratqs, sigma_qtherm, &
     3947         t_seri, q_seri, ql_seri_lscp, qi_seri_lscp, &
     3948         ptconv, rnebcon0, clwcon0, ratqs, sigma_qtherm, &
    39483949         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    39493950         pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb,  &
Note: See TracChangeset for help on using the changeset viewer.