Changeset 5643 for LMDZ6


Ignore:
Timestamp:
May 5, 2025, 3:02:32 PM (5 weeks ago)
Author:
aborella
Message:

Various minor corrections to ISSR and contrails param

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

Legend:

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

    r5641 r5643  
    255255      DO k = 1, klev
    256256        DO i = 1, klon
    257           pclc_nocont(i,k) = pclc(i, k) - lincontfra(i, k) - circontfra(i, k)
    258           xfiwc_nocont(i, k) = xfiwc(i, k) - qice_lincont(i, k) - qice_circont(i, k)
     257          pclc_nocont(i,k) = MAX(0., pclc(i, k) - lincontfra(i, k) - circontfra(i, k))
     258          xfiwc_nocont(i, k) = MAX(0., xfiwc(i, k) - qice_lincont(i, k) - qice_circont(i, k))
    259259        ENDDO
    260260      ENDDO
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90

    r5641 r5643  
    123123USE lmdz_lscp_ini, ONLY : ok_ice_supersat, ok_unadjusted_clouds, iflag_icefrac
    124124USE lmdz_lscp_ini, ONLY : ok_weibull_warm_clouds, ok_no_issr_strato
    125 USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_ice_sedim
     125USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_precip_lincontrails, ok_ice_sedim
     126USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_nodeep_lscp_rad
    126127
    127128! Temporary call for Lamquin et al (2012) diagnostics
     
    335336  ! for contrails
    336337  REAL, DIMENSION(klon) :: lincontfra, circontfra, qlincont, qcircont
    337   REAL, DIMENSION(klon) :: zq_nodeep
     338  REAL, DIMENSION(klon) :: totfra_in, qtot_in
    338339  LOGICAL, DIMENSION(klon) :: pt_pron_clds
     340  REAL :: qice_cont
    339341  !--for Lamquin et al 2012 diagnostics
    340342  REAL, DIMENSION(klon) :: issrfra100to150UP, issrfra150to200UP, issrfra200to250UP
     
    670672          ENDIF
    671673
    672           zq_nodeep(:) = zq(:)
    673 
    674674          DO i = 1, klon
    675 
    676675            pt_pron_clds(i) = ( ( ( ( zt(i) .LE. temp_nowater ) .OR. ok_weibull_warm_clouds ) &
    677676                .AND. ( .NOT. ok_no_issr_strato .OR. ( stratomask(i,k) .EQ. 0. ) ) ) &
    678677                .AND. ( cfcon(i,k) .LT. ( 1. - eps ) ) )
    679 
    680             IF ( pt_pron_clds(i) ) THEN
    681 
     678          ENDDO
     679
     680          totfra_in(:) = 1.
     681          qtot_in(:) = zq(:)
     682
     683          IF ( ok_nodeep_lscp ) THEN
     684            DO i = 1, klon
    682685              !--If deep convection is activated, the condensation scheme activates
    683686              !--only in the environment. NB. the clear sky fraction will the be
    684687              !--maximised by 1. - cfcon(i,k)
    685               IF ( ptconv(i,k) ) &
    686                   zq_nodeep(i) = zq(i) - ( qvcon(i,k) + qccon(i,k) ) * cfcon(i,k)
    687 
     688              IF ( pt_pron_clds(i) .AND. ptconv(i,k) ) THEN
     689                totfra_in(i) = 1. - cfcon(i,k)
     690                qtot_in(i) = zq(i) - ( qvcon(i,k) + qccon(i,k) ) * cfcon(i,k)
     691              ENDIF
     692            ENDDO
     693          ENDIF
     694
     695          DO i = 1, klon
     696            IF ( pt_pron_clds(i) ) THEN
    688697              IF ( cfcon(i,k) .LT. cfcon_old(i,k) ) THEN
    689698                !--If deep convection is weakening, we add the clouds that are not anymore
     
    704713
    705714              !--Barriers
    706               cldfra_in(i) = MAX(0., MIN(1. - cfcon(i,k), cldfra_in(i)))
    707               qvc_in(i)    = MAX(0., MIN(zq_nodeep(i), qvc_in(i)))
    708               qice_in(i)   = MAX(0., MIN(zq_nodeep(i) - qvc_in(i), qice_in(i)))
     715              cldfra_in(i) = MAX(0., MIN(totfra_in(i), cldfra_in(i)))
     716              qvc_in(i)    = MAX(0., MIN(qtot_in(i), qvc_in(i)))
     717              qice_in(i)   = MAX(0., MIN(qtot_in(i) - qvc_in(i), qice_in(i)))
    709718
    710719              !--Calculate the shear value (input for condensation and ice supersat)
     
    811820                    CALL condensation_ice_supersat( &
    812821                        klon, dtime, pplay(:,k), paprs(:,k), paprs(:,k+1), &
    813                         cfcon(:,k), cldfra_in, qvc_in, qliq_in, qice_in, &
    814                         shear, tke_dissip(:,k), cell_area, Tbef, zq_nodeep, zqs, &
     822                        totfra_in, cldfra_in, qvc_in, qliq_in, qice_in, &
     823                        shear, tke_dissip(:,k), cell_area, Tbef, qtot_in, zqs, &
    815824                        gammasat, ratqs(:,k), keepgoing, pt_pron_clds, &
    816825                        cldfra_above, icesed_flux,&
     
    830839                        dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k))
    831840
    832                     DO i = 1, klon
    833                       !--If prognostic clouds are activated, deep convection vapor is
    834                       !--re-added to the total water vapor
    835                       IF ( keepgoing(i) .AND. ptconv(i,k) .AND. pt_pron_clds(i) ) THEN
    836                         IF ( ( rneb(i,k) + cfcon(i,k) ) .GT. eps ) THEN
    837                           zqn(i) = ( zqn(i) * rneb(i,k) + qccon(i,k) * cfcon(i,k) ) &
    838                               / ( rneb(i,k) + cfcon(i,k) )
    839                         ELSE
    840                           zqn(i) = 0.
     841                    IF ( ok_nodeep_lscp ) THEN
     842                      DO i = 1, klon
     843                        !--If prognostic clouds are activated, deep convection vapor is
     844                        !--re-added to the total water vapor
     845                        IF ( keepgoing(i) .AND. ptconv(i,k) .AND. pt_pron_clds(i) ) THEN
     846                          IF ( ( rneb(i,k) + cfcon(i,k) ) .GT. eps ) THEN
     847                            zqn(i) = ( zqn(i) * rneb(i,k) &
     848                                + ( qccon(i,k) + qvcon(i,k) ) * cfcon(i,k) ) &
     849                                / ( rneb(i,k) + cfcon(i,k) )
     850                          ELSE
     851                            zqn(i) = 0.
     852                          ENDIF
     853                          rneb(i,k) = rneb(i,k) + cfcon(i,k)
     854                          qvc(i) = qvc(i) + qvcon(i,k) * cfcon(i,k)
    841855                        ENDIF
    842                         rneb(i,k) = rneb(i,k) + cfcon(i,k)
    843                         qvc(i) = qvc(i) + qvcon(i,k) * cfcon(i,k)
    844                       ENDIF
    845                     ENDDO
     856                      ENDDO
     857                    ENDIF
    846858
    847859                  ELSE
     
    952964        !------------------------------------------------------------------------
    953965        DO i=1, klon
     966
    954967            ! Overwrite phase partitioning in boundary layer mixed phase clouds when the
    955968            ! iflag_cloudth_vert=7 and specific param is activated
     
    10561069      !--between natural clouds and contrails
    10571070      !--NB. we use qlincont / qcircont as a temporary variable to save this partition
     1071      IF ( ok_precip_lincontrails ) THEN
     1072        DO i = 1, klon
     1073          IF ( zoliqi(i) .GT. 0. ) THEN
     1074            qlincont(i) = ( qlincont(i) - zqs(i) * lincontfra(i) ) / zoliqi(i)
     1075          ELSE
     1076            qlincont(i) = 0.
     1077          ENDIF
     1078        ENDDO
     1079      ELSE
     1080        !--If linear contrails do not precipitate, they are removed temporarily from
     1081        !--the cloud variables
     1082        DO i = 1, klon
     1083          qice_cont = qlincont(i) - zqs(i) * lincontfra(i)
     1084          rneb(i,k) = rneb(i,k) - lincontfra(i)
     1085          zoliq(i) = zoliq(i) - qice_cont
     1086          zoliqi(i) = zoliqi(i) - qice_cont
     1087        ENDDO
     1088      ENDIF
     1089
    10581090      DO i = 1, klon
    1059         dcf_sub(i,k) = lincontfra(i)
    1060         dqi_sub(i,k) = qlincont(i)
    10611091        IF ( zoliqi(i) .GT. 0. ) THEN
    1062           qlincont(i) = ( qlincont(i) - zqs(i) * lincontfra(i) ) / zoliqi(i)
    10631092          qcircont(i) = ( qcircont(i) - zqs(i) * circontfra(i) ) / zoliqi(i)
    10641093        ELSE
    1065           qlincont(i) = 0.
    10661094          qcircont(i) = 0.
    10671095        ENDIF
     
    11021130    ENDIF ! ok_poprecip
    11031131   
    1104     IF (ok_plane_contrail) THEN
     1132    IF ( ok_plane_contrail ) THEN
    11051133      !--Contrails fraction is left unchanged, but contrails water has changed
     1134      !--We alse compute the ice content that will be seen by radiation (qice_lincont/circont)
     1135      IF ( ok_precip_lincontrails ) THEN
     1136        DO i = 1, klon
     1137          IF ( zoliqi(i) .GT. 0. ) THEN
     1138            qice_lincont(i,k) = zradocond(i) * qlincont(i)
     1139            qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i)
     1140          ELSE
     1141            qice_lincont(i,k) = 0.
     1142            lincontfra(i) = 0.
     1143            qlincont(i) = 0.
     1144          ENDIF
     1145        ENDDO
     1146      ELSE
     1147        !--If linear contrails do not precipitate, they are put back into
     1148        !--the cloud variables
     1149        DO i = 1, klon
     1150          qice_cont = qlincont(i) - zqs(i) * lincontfra(i)
     1151          rneb(i,k) = rneb(i,k) + lincontfra(i)
     1152          zoliq(i) = zoliq(i) + qice_cont
     1153          zoliqi(i) = zoliqi(i) + qice_cont
     1154          zradocond(i) = zradocond(i) + qice_cont
     1155          zradoice(i) = zradoice(i) + qice_cont
     1156          qice_lincont(i,k) = qice_cont
     1157        ENDDO
     1158      ENDIF
     1159
    11061160      DO i = 1, klon
    11071161        IF ( zoliqi(i) .GT. 0. ) THEN
    1108           qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i)
     1162          qice_circont(i,k) = zradocond(i) * qcircont(i)
    11091163          qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i)
    11101164        ELSE
    1111           lincontfra(i) = 0.
     1165          qice_circont(i,k) = 0.
    11121166          circontfra(i) = 0.
    1113           qlincont(i) = 0.
    11141167          qcircont(i) = 0.
    11151168        ENDIF
     
    12151268      qtl_seri(:,k) = qlincont(:)
    12161269      qtc_seri(:,k) = qcircont(:)
    1217       DO i = 1, klon
    1218         IF ( zoliqi(i) .GT. 0. ) THEN
    1219           !--The ice water content seen by radiation is higher than the actual ice
    1220           !--water content. We take into account this difference
    1221           qice_lincont(i,k) = ( qlincont(i) - zqs(i) * lincontfra(i) ) &
    1222               / zoliqi(i) * radocond(i,k)
    1223           qice_circont(i,k) = ( qcircont(i) - zqs(i) * circontfra(i) ) &
    1224               / zoliqi(i) * radocond(i,k)
    1225         ELSE
    1226           qice_lincont(i,k) = 0.
    1227           qice_circont(i,k) = 0.
    1228         ENDIF
    1229       ENDDO
    12301270    ENDIF
    12311271
     
    12431283          IF ( zoliq(i) .GT. 0. ) THEN
    12441284            qvcon_old(i,k) = qvcon(i,k)
    1245             qccon_old(i,k) = qccon(i,k) * zcond(i) / zoliq(i)
     1285            qccon_old(i,k) = qccon(i,k) * zoliq(i) / zcond(i)
    12461286          ELSE
    12471287            qvcon_old(i,k) = 0.
     
    12571297        !--properties and are NOT prognostics)
    12581298        !--We must have iflag_coupl == 5 for this coupling to work
    1259         IF ( ptconv(i,k) .AND. pt_pron_clds(i) ) THEN
     1299        IF ( ptconv(i,k) .AND. pt_pron_clds(i) .AND. ok_nodeep_lscp_rad ) THEN
    12601300          rneb(i,k) = rneb(i,k) - cfcon(i,k)
    12611301          radocond(i,k) = radocond(i,k) - qccon_old(i,k) * cfcon(i,k)
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90

    r5642 r5643  
    9494!**********************************************************************************
    9595SUBROUTINE condensation_ice_supersat( &
    96       klon, dtime, pplay, paprsdn, paprsup, cfcon, &
     96      klon, dtime, pplay, paprsdn, paprsup, totfra_in, &
    9797      cldfra_in, qvc_in, qliq_in, qice_in, shear, pbl_eps, cell_area, &
    9898      temp, qtot_in, qsat, gamma_cond, ratqs, keepgoing, pt_pron_clds, &
     
    148148REAL,     INTENT(IN)   , DIMENSION(klon) :: paprsdn       ! pressure at the lower interface [Pa]
    149149REAL,     INTENT(IN)   , DIMENSION(klon) :: paprsup       ! pressure at the upper interface [Pa]
    150 REAL,     INTENT(IN)   , DIMENSION(klon) :: cfcon         ! cloud fraction from deep convection [-]
     150REAL,     INTENT(IN)   , DIMENSION(klon) :: totfra_in     ! total available fraction for stratiform clouds [-]
    151151REAL,     INTENT(IN)   , DIMENSION(klon) :: cldfra_in     ! cloud fraction [-]
    152152REAL,     INTENT(IN)   , DIMENSION(klon) :: qvc_in        ! gridbox-mean water vapor in cloud [kg/kg]
     
    273273REAL :: cldfra_mix, clrfra_mix, sigma_mix
    274274REAL :: L_shear, shear_fra
    275 REAL :: qiceinmix, qvapinmix_lim, qvapinclr_lim
     275REAL :: qvapinmix, qiceinmix, qvapinmix_lim, qvapinclr_lim
    276276REAL :: pdf_fra_above_nuc, pdf_q_above_nuc
    277277REAL :: pdf_fra_above_lim, pdf_q_above_lim
     
    348348      !--are consistent. In some rare cases, i.e. the cloud water vapor
    349349      !--can be greater than the total water in the gridbox
    350       cldfra(i) = MAX(0., MIN(1. - cfcon(i), cldfra_in(i)))
     350      cldfra(i) = MAX(0., MIN(totfra_in(i), cldfra_in(i)))
    351351      qcld(i)   = MAX(0., MIN(qtot_in(i), qliq_in(i) + qice_in(i) + qvc_in(i)))
    352352      qvc(i)    = MAX(0., MIN(qcld(i), qvc_in(i)))
    353353
    354354      !--Initialise clear fraction properties
    355       clrfra(i) = MAX(0., MIN(1., ( 1. - cfcon(i) ) - cldfra(i)))
     355      clrfra(i) = totfra_in(i) - cldfra(i)
    356356      qclr(i) = qtot_in(i) - qcld(i)
    357357
     
    519519      !--If there is a linear contrail
    520520      IF ( lincontfra(i) .GT. eps ) THEN
    521         !--We remove contrails from the main class
    522         cldfra(i) = cldfra(i) - lincontfra(i)
    523         qcld(i) = qcld(i) - qlincont(i)
    524         qvc(i) = qvc(i) - qsat(i) * lincontfra(i)
    525521
    526522        !--The contrail is always adjusted to saturation
    527523        qiceincld = ( qlincont(i) / lincontfra(i) - qsat(i) )
    528        
    529524        !--If the ice water content is too low, the cloud is purely sublimated
    530         IF ( qiceincld .LT. eps ) THEN
     525        IF ( qiceincld .LT. qiceincld_min ) THEN
    531526          dcfl_sub(i) = - lincontfra(i)
    532527          dqil_sub(i) = - qiceincld * lincontfra(i)
     
    534529          lincontfra(i) = 0.
    535530          qlincont(i) = 0.
    536           clrfra(i) = MIN(1., clrfra(i) - dcfl_sub(i))
     531          clrfra(i) = MIN(totfra_in(i), clrfra(i) - dcfl_sub(i))
    537532          qclr(i) = qclr(i) - dqtl_sub(i)
    538533        ENDIF   ! qiceincld .LT. eps
     534
     535        !--We remove contrails from the main class
     536        cldfra(i) = MAX(0., cldfra(i) - lincontfra(i))
     537        qcld(i) = MAX(0., qcld(i) - qlincont(i))
     538        qvc(i) = MAX(0., qvc(i) - qsat(i) * lincontfra(i))
    539539      ENDIF ! lincontfra(i) .GT. eps
    540540
    541541      !--If there is a contrail cirrus
    542542      IF ( circontfra(i) .GT. eps ) THEN
    543         !--We remove contrails from the main class
    544         cldfra(i) = cldfra(i) - circontfra(i)
    545         qcld(i) = qcld(i) - qcircont(i)
    546         qvc(i) = qvc(i) - qsat(i) * circontfra(i)
    547543
    548544        !--The contrail is always adjusted to saturation
    549545        qiceincld = ( qcircont(i) / circontfra(i) - qsat(i) )
    550        
    551546        !--If the ice water content is too low, the cloud is purely sublimated
    552         IF ( qiceincld .LT. eps ) THEN
     547        IF ( qiceincld .LT. qiceincld_min ) THEN
    553548          dcfc_sub(i) = - circontfra(i)
    554549          dqic_sub(i) = - qiceincld * circontfra(i)
     
    556551          circontfra(i) = 0.
    557552          qcircont(i) = 0.
    558           clrfra(i) = MIN(1., clrfra(i) - dcfc_sub(i))
     553          clrfra(i) = MIN(totfra_in(i), clrfra(i) - dcfc_sub(i))
    559554          qclr(i) = qclr(i) - dqtc_sub(i)
    560555        ENDIF   ! qiceincld .LT. eps
     556
     557        !--We remove contrails from the main class
     558        cldfra(i) = MAX(0., cldfra(i) - circontfra(i))
     559        qcld(i) = MAX(0., qcld(i) - qcircont(i))
     560        qvc(i) = MAX(0., qvc(i) - qsat(i) * circontfra(i))
    561561      ENDIF ! circontfra(i) .GT. eps
    562562
     
    587587          qcld(i) = 0.
    588588          qvc(i) = 0.
    589           clrfra(i) = MIN(1., clrfra(i) - dcf_sub(i))
     589          clrfra(i) = MIN(totfra_in(i), clrfra(i) - dcf_sub(i))
    590590          qclr(i) = qclr(i) - dqvc_sub(i) - dqi_sub(i)
    591591
     
    656656            qcld(i)   = qcld(i) + dqvc_sub(i) + dqi_sub(i)
    657657            qvc(i)    = qvc(i) + dqvc_sub(i)
    658             clrfra(i) = MIN(1., clrfra(i) - dcf_sub(i))
     658            clrfra(i) = MIN(totfra_in(i), clrfra(i) - dcf_sub(i))
    659659            qclr(i)   = qclr(i) - dqvc_sub(i) - dqi_sub(i)
    660660          ELSEIF ( qvapincld_new .EQ. 0. ) THEN
     
    671671            qcld(i) = 0.
    672672            qvc(i) = 0.
    673             clrfra(i) = MIN(1., clrfra(i) - dcf_sub(i))
     673            clrfra(i) = MIN(totfra_in(i), clrfra(i) - dcf_sub(i))
    674674            qclr(i) = qclr(i) - dqvc_sub(i) - dqi_sub(i)
    675675          ENDIF ! qvapincld_new .GT. qvapincld
     
    788788
    789789          !--Add tendencies
    790           cldfra(i)  = MIN(1., cldfra(i) + dcf_con(i))
     790          cldfra(i)  = cldfra(i) + dcf_con(i)
    791791          qcld(i)    = qcld(i) + dqt_con
    792792          qvc(i)     = qvc(i) + dqvc_con(i)
    793           clrfra(i)  = MAX(0., clrfra(i) - dcf_con(i))
     793          clrfra(i)  = clrfra(i) - dcf_con(i)
    794794          qclr(i)    = qclr(i) - dqt_con
    795795
     
    892892        !-- PART 3 - CALCULATION OF THE MIXING PROPERTIES
    893893
    894         clrfra_mix = MAX(eps, MIN(clrfra(i), clrfra_mix))
    895         cldfra_mix = MAX(eps, MIN(cldfra(i), cldfra_mix))
     894        clrfra_mix = MIN(clrfra(i), clrfra_mix)
     895        cldfra_mix = MIN(cldfra(i), cldfra_mix)
    896896
    897897        !--We compute the limit vapor in clear sky where the mixed cloud could not
     
    10601060        !-- PART 3 - CALCULATION OF THE MIXING PROPERTIES
    10611061       
    1062         clrfra_mix = MAX(eps, MIN(clrfra(i), clrfra_mix))
    1063         cldfra_mix = MAX(eps, MIN(cldfra(i), cldfra_mix))
     1062        clrfra_mix = MIN(clrfra(i), clrfra_mix)
     1063        cldfra_mix = MIN(lincontfra(i), cldfra_mix)
    10641064       
    10651065        !--We compute the limit vapor in clear sky where the mixed cloud could not
     
    10741074        IF ( qvapinclr_lim .LT. 0. ) THEN
    10751075          !--Whatever we do, the cloud will increase in size
    1076           dcfl_mix(i) = clrfra_mix
    1077           dqtl_mix(i) = clrfra_mix * qclr(i) / clrfra(i)
     1076          !--If the linear contrail increases in size, the increment is considered
     1077          !--to be a contrail cirrus
     1078          dcfc_mix(i) = dcfc_mix(i) + clrfra_mix
     1079          dqtc_mix(i) = dqtc_mix(i) + clrfra_mix * qclr(i) / clrfra(i)
     1080          dqic_mix(i) = dqic_mix(i) + clrfra_mix * sigma_mix &
     1081                      * ( qclr(i) / clrfra(i) - qsat(i) )
    10781082        ELSE
    10791083          !--We then calculate the clear sky part where the humidity is lower than
     
    11161120
    11171121          IF ( pdf_fra_above_lim .GT. eps ) THEN
    1118             dcfl_mix(i) = clrfra_mix * sigma_mix
    1119             dqtl_mix(i) = clrfra_mix * sigma_mix * pdf_q_above_lim / pdf_fra_above_lim
     1122            !--If the linear contrail increases in size, the increment is considered
     1123            !--to be a contrail cirrus
     1124            qvapinmix = ( pdf_q_above_lim / pdf_fra_above_lim * clrfra_mix &
     1125                      + qlincont(i) / lincontfra(i) * cldfra_mix ) &
     1126                      / ( clrfra_mix + cldfra_mix )
     1127            qiceinmix = ( qlincont(i) / lincontfra(i) - qsat(i) ) * cldfra_mix &
     1128                      / ( clrfra_mix + cldfra_mix )
     1129            dcfc_mix(i) = dcfc_mix(i) + clrfra_mix * sigma_mix
     1130            dqtc_mix(i) = dqtc_mix(i) + clrfra_mix * sigma_mix * qvapinmix
     1131            dqtl_mix(i) = dqtl_mix(i) - cldfra_mix * sigma_mix &
     1132                        * ( qlincont(i) / lincontfra(i) - qvapinmix )
     1133            dqic_mix(i) = dqic_mix(i) + clrfra_mix * sigma_mix * qiceinmix
     1134            dqil_mix(i) = dqil_mix(i) - cldfra_mix * sigma_mix &
     1135                        * ( qlincont(i) / lincontfra(i) - qsat(i) - qiceinmix )
    11201136          ENDIF
    11211137
    11221138          IF ( pdf_fra_below_lim .GT. eps ) THEN
    1123             qvapincld = qlincont(i) / lincontfra(i)
    1124             qiceincld = qvapincld - qsat(i)
    11251139            dcfl_mix(i) = dcfl_mix(i) - cldfra_mix * ( 1. - sigma_mix )
    1126             dqtl_mix(i) = dqtl_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qvapincld
    1127             dqil_mix(i) = dqil_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qiceincld
     1140            dqtl_mix(i) = dqtl_mix(i) - cldfra_mix * ( 1. - sigma_mix ) &
     1141                        * qlincont(i) / lincontfra(i)
     1142            dqil_mix(i) = dqil_mix(i) - cldfra_mix * ( 1. - sigma_mix ) &
     1143                        * ( qlincont(i) / lincontfra(i) - qsat(i) )
    11281144          ENDIF
    11291145
     
    12141230        !-- PART 3 - CALCULATION OF THE MIXING PROPERTIES
    12151231       
    1216         clrfra_mix = MAX(eps, MIN(clrfra(i), clrfra_mix))
    1217         cldfra_mix = MAX(eps, MIN(cldfra(i), cldfra_mix))
     1232        clrfra_mix = MIN(clrfra(i), clrfra_mix)
     1233        cldfra_mix = MIN(circontfra(i), cldfra_mix)
    12181234       
    12191235        !--We compute the limit vapor in clear sky where the mixed cloud could not
     
    12281244        IF ( qvapinclr_lim .LT. 0. ) THEN
    12291245          !--Whatever we do, the cloud will increase in size
    1230           dcfc_mix(i) = clrfra_mix
    1231           dqtc_mix(i) = clrfra_mix * qclr(i) / clrfra(i)
     1246          dcfc_mix(i) = dcfc_mix(i) + clrfra_mix
     1247          dqtc_mix(i) = dqtc_mix(i) + clrfra_mix * qclr(i) / clrfra(i)
     1248          dqic_mix(i) = dqic_mix(i) + clrfra_mix * sigma_mix &
     1249                      * ( qclr(i) / clrfra(i) - qsat(i) )
    12321250        ELSE
    12331251          !--We then calculate the clear sky part where the humidity is lower than
     
    12671285
    12681286          IF ( pdf_fra_above_lim .GT. eps ) THEN
    1269             dcfc_mix(i) = clrfra_mix * sigma_mix
    1270             dqtc_mix(i) = clrfra_mix * sigma_mix * pdf_q_above_lim / pdf_fra_above_lim
     1287            dcfc_mix(i) = dcfc_mix(i) + clrfra_mix * sigma_mix
     1288            dqtc_mix(i) = dqtc_mix(i) + clrfra_mix * sigma_mix &
     1289                        * pdf_q_above_lim / pdf_fra_above_lim
     1290            dqic_mix(i) = dqic_mix(i) + clrfra_mix * sigma_mix &
     1291                        * ( pdf_q_above_lim / pdf_fra_above_lim - qsat(i) )
    12711292          ENDIF
    12721293
    12731294          IF ( pdf_fra_below_lim .GT. eps ) THEN
    1274             qvapincld = qcircont(i) / circontfra(i)
    1275             qiceincld = qvapincld - qsat(i)
    12761295            dcfc_mix(i) = dcfc_mix(i) - cldfra_mix * ( 1. - sigma_mix )
    1277             dqtc_mix(i) = dqtc_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qvapincld
    1278             dqic_mix(i) = dqic_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qiceincld
     1296            dqtc_mix(i) = dqtc_mix(i) - cldfra_mix * ( 1. - sigma_mix ) &
     1297                        * qcircont(i) / circontfra(i)
     1298            dqic_mix(i) = dqic_mix(i) - cldfra_mix * ( 1. - sigma_mix ) &
     1299                        * ( qcircont(i) / circontfra(i) - qsat(i) )
    12791300          ENDIF
    12801301
     
    13851406
    13861407        !--Add tendencies
    1387         cldfra(i)  = MIN(1., cldfra(i) + dcf_sed(i))
     1408        cldfra(i)  = MIN(totfra_in(i), cldfra(i) + dcf_sed(i))
    13881409        qcld(i)    = qcld(i) + dqvc_sed(i) + dqi_sed(i)
    13891410        qvc(i)     = qvc(i) + dqvc_sed(i)
     
    13951416
    13961417
     1418      !--We put back contrails in the clouds class
    13971419      IF ( ( lincontfra(i) + circontfra(i) ) .GT. 0. ) THEN
    1398         !--We put back contrails in the clouds class
    13991420        cldfra(i) = cldfra(i) + lincontfra(i) + circontfra(i)
    14001421        qcld(i) = qcld(i) + qlincont(i) + qcircont(i)
     
    14351456      !-------------------------------------------
    14361457
     1458      cldfra(i) = MIN(cldfra(i), totfra_in(i))
     1459      qcld(i) = MIN(qcld(i), qtot_in(i))
     1460      qvc(i) = MIN(qvc(i), qcld(i))
     1461
    14371462      IF ( cldfra(i) .LT. eps ) THEN
    14381463        !--If the cloud is too small, it is sublimated.
     
    14841509
    14851510      !--Convert existing contrail fraction into "natural" cirrus cloud fraction
    1486       IF ( cldfra(i) .GE. ( 1. - cfcon(i) - eps ) ) THEN
    1487         contrails_conversion_factor = 1.
    1488       ELSEIF ( lincontfra(i) .LT. 1.e-6 ) THEN
     1511      IF ( ( cldfra(i) .GE. ( totfra_in(i) - eps ) ) .OR. ( lincontfra(i) .LE. eps ) ) THEN
    14891512        contrails_conversion_factor = 1.
    14901513      ELSE
     
    14951518            !--cannot exist. The exponent is set so that this only happens for
    14961519            !--very cloudy gridboxes
    1497             * ( 1. - cldfra(i) / ( 1. - cfcon(i) ) )**0.1 )
     1520            * ( 1. - cldfra(i) / totfra_in(i) )**0.1 )
    14981521      ENDIF
    14991522      dcfl_cir(i) = - contrails_conversion_factor * lincontfra(i)
    15001523      dqtl_cir(i) = - contrails_conversion_factor * qlincont(i)
    15011524
    1502       dcfl_ini(i) = MIN(MIN(dcfl_ini(i), issrfra(i)), 1. - cfcon(i) - cldfra(i))
     1525      dcfl_ini(i) = MIN(MIN(dcfl_ini(i), issrfra(i)), totfra_in(i) - cldfra(i))
    15031526      dqtl_ini(i) = MIN(MIN(dqtl_ini(i), qissr(i)), qtot_in(i) - qcld(i))
    15041527
     
    15111534      cldfra(i)  = cldfra(i) + dcfl_ini(i)
    15121535      qcld(i)    = qcld(i) + dqtl_ini(i)
    1513       qvc(i)     = MIN(qcld(i), qvc(i) + dcfl_ini(i) * qsat(i))
     1536      qvc(i)     = qvc(i) + dcfl_ini(i) * qsat(i)
    15141537      lincontfra(i) = lincontfra(i) + dcfl_cir(i) + dcfl_ini(i)
    15151538      qlincont(i)   = qlincont(i) + dqtl_cir(i) + dqtl_ini(i)
     
    15401563      !-------------------------------------------
    15411564
     1565      cldfra(i) = MIN(cldfra(i), totfra_in(i))
     1566      qcld(i) = MIN(qcld(i), qtot_in(i))
     1567      qvc(i) = MIN(qvc(i), qcld(i))
     1568
    15421569      IF ( cldfra(i) .LT. eps ) THEN
    15431570        !--If the cloud is too small, it is sublimated.
     
    15541581      ENDIF ! cldfra .LT. eps
    15551582
    1556       IF ( lincontfra(i) .LT. eps ) THEN
     1583      IF ( (lincontfra(i) .LT. eps) .OR. (qlincont(i) .LT. (qsat(i) * lincontfra(i))) ) THEN
    15571584        lincontfra(i) = 0.
    15581585        qlincont(i) = 0.
    15591586      ENDIF
    15601587
    1561       IF ( circontfra(i) .LT. eps ) THEN
     1588      IF ( (circontfra(i) .LT. eps) .OR. (qcircont(i) .LT. (qsat(i) * circontfra(i))) ) THEN
    15621589        circontfra(i) = 0.
    15631590        qcircont(i) = 0.
  • LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_ini.f90

    r5641 r5643  
    162162  !$OMP THREADPRIVATE(ok_weibull_warm_clouds)
    163163
     164  LOGICAL, SAVE, PROTECTED :: ok_nodeep_lscp=.FALSE.         ! if True, the deep convection clouds are removed from the lscp calculations
     165  !$OMP THREADPRIVATE(ok_nodeep_lscp)
     166
     167  LOGICAL, SAVE, PROTECTED :: ok_nodeep_lscp_rad=.FALSE.     ! if True, the deep convection clouds are not accounted two times in radiative transfer
     168  !$OMP THREADPRIVATE(ok_nodeep_lscp_rad)
     169
    164170  REAL, SAVE, PROTECTED :: ffallv_issr                       ! tuning coefficient crystal fall velocity, cirrus clouds (with ISSR)
    165171  !$OMP THREADPRIVATE(ffallv_issr)
     
    221227  LOGICAL, SAVE, PROTECTED :: ok_plane_contrail              ! activates the contrails parameterisation
    222228  !$OMP THREADPRIVATE(ok_plane_contrail)
     229
     230  LOGICAL, SAVE, PROTECTED :: ok_precip_lincontrails=.TRUE.  ! if True, linear contrails can precipitate
     231  !$OMP THREADPRIVATE(ok_precip_lincontrails)
    223232
    224233  REAL, SAVE, PROTECTED :: aspect_ratio_lincontrails=.1      ! [-] aspect ratio of linear contrails
     
    482491    CALL getin_p('ok_unadjusted_clouds',ok_unadjusted_clouds)
    483492    CALL getin_p('ok_weibull_warm_clouds',ok_weibull_warm_clouds)
     493    CALL getin_p('ok_nodeep_lscp',ok_nodeep_lscp)
     494    CALL getin_p('ok_nodeep_lscp_rad',ok_nodeep_lscp_rad)
    484495    ffallv_issr=ffallv_lsc
    485496    CALL getin_p('ffallv_issr',ffallv_issr)
     
    501512    CALL getin_p('coef_shear_lscp',coef_shear_lscp)
    502513    ! for aviation
     514    CALL getin_p('ok_precip_lincontrails',ok_precip_lincontrails)
    503515    CALL getin_p('aspect_ratio_lincontrails',aspect_ratio_lincontrails)
    504516    coef_mixing_lincontrails=coef_mixing_lscp
     
    583595    WRITE(lunout,*) 'lscp_ini, ok_unadjusted_clouds:', ok_unadjusted_clouds
    584596    WRITE(lunout,*) 'lscp_ini, ok_weibull_warm_clouds:', ok_weibull_warm_clouds
     597    WRITE(lunout,*) 'lscp_ini, ok_nodeep_lscp:', ok_nodeep_lscp
     598    WRITE(lunout,*) 'lscp_ini, ok_nodeep_lscp_rad:', ok_nodeep_lscp_rad
    585599    WRITE(lunout,*) 'lscp_ini, ffallv_issr', ffallv_issr
    586600    WRITE(lunout,*) 'lscp_ini, cooling_rate_ice_thresh', cooling_rate_ice_thresh
     
    601615    WRITE(lunout,*) 'lscp_ini, coef_shear_lscp:', coef_shear_lscp
    602616    ! for aviation
     617    WRITE(lunout,*) 'lscp_ini, ok_precip_lincontrails:', ok_precip_lincontrails
    603618    WRITE(lunout,*) 'lscp_ini, aspect_ratio_lincontrails:', aspect_ratio_lincontrails
    604619    WRITE(lunout,*) 'lscp_ini, coef_mixing_lincontrails:', coef_mixing_lincontrails
  • LMDZ6/branches/contrails/libf/phylmd/phys_local_var_mod.F90

    r5641 r5643  
    705705      REAL, SAVE, ALLOCATABLE :: fiwp_nocont(:), fiwc_nocont(:,:), ref_ice_nocont(:,:)
    706706      !$OMP THREADPRIVATE(fiwp_nocont, fiwc_nocont, ref_ice_nocont)
    707       REAL, SAVE, ALLOCATABLE :: topsw_nocont(:), solsw_nocont(:)
    708       !$OMP THREADPRIVATE(topsw_nocont, solsw_nocont)
    709       REAL, SAVE, ALLOCATABLE :: toplw_nocont(:), sollw_nocont(:)
    710       !$OMP THREADPRIVATE(toplw_nocont, sollw_nocont)
     707      REAL, SAVE, ALLOCATABLE :: topsw_nocont(:), toplw_nocont(:)
     708      !$OMP THREADPRIVATE(topsw_nocont, toplw_nocont)
     709      REAL, SAVE, ALLOCATABLE :: solsw_nocont(:), sollw_nocont(:)
     710      !$OMP THREADPRIVATE(solsw_nocont, sollw_nocont)
     711      REAL, SAVE, ALLOCATABLE :: topsw_nocontp(:), toplw_nocontp(:)
     712      !$OMP THREADPRIVATE(topsw_nocontp, toplw_nocontp)
     713      REAL, SAVE, ALLOCATABLE :: solsw_nocontp(:), sollw_nocontp(:)
     714      !$OMP THREADPRIVATE(solsw_nocontp, sollw_nocontp)
    711715
    712716!-- LSCP - mixed phase clouds variables
     
    12771281      ALLOCATE(cldh_nocont(klon), contcov(klon), conttau(klon,klev), contemi(klon,klev))
    12781282      ALLOCATE(fiwp_nocont(klon), fiwc_nocont(klon,klev), ref_ice_nocont(klon,klev))
    1279       ALLOCATE(topsw_nocont(klon), solsw_nocont(klon))
    1280       ALLOCATE(toplw_nocont(klon), sollw_nocont(klon))
     1283      ALLOCATE(topsw_nocont(klon), toplw_nocont(klon))
     1284      ALLOCATE(solsw_nocont(klon), sollw_nocont(klon))
     1285      ALLOCATE(topsw_nocontp(klon), toplw_nocontp(klon))
     1286      ALLOCATE(solsw_nocontp(klon), sollw_nocontp(klon))
    12811287
    12821288!-- LSCP - POPRECIP variables
     
    16931699      DEALLOCATE(cldfra_nocont, cldtau_nocont, cldemi_nocont, conttau, contemi)
    16941700      DEALLOCATE(cldh_nocont, contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont)
    1695       DEALLOCATE(topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont)
     1701      DEALLOCATE(topsw_nocont, toplw_nocont)
     1702      DEALLOCATE(solsw_nocont, sollw_nocont)
     1703      DEALLOCATE(topsw_nocontp, toplw_nocontp)
     1704      DEALLOCATE(solsw_nocontp, sollw_nocontp)
    16961705
    16971706!-- LSCP - POPRECIP variables
  • LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90

    r5641 r5643  
    338338       cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, &
    339339       conttau, contemi, contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont, &
    340        topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont, &
     340       topsw_nocont, toplw_nocont, solsw_nocont, sollw_nocont, &
     341       topsw_nocontp, toplw_nocontp, solsw_nocontp, sollw_nocontp, &
    341342       !
    342343       stratomask, &
     
    48304831                     !--AB contrails radiative effects
    48314832                     cldfrarad_nocont, fiwc_nocont, ref_ice_nocont, &
    4832                      topsw_nocont, solsw_nocont, toplw_nocont, sollw_nocont)
     4833                     topsw_nocontp, solsw_nocontp, toplw_nocontp, sollw_nocontp)
    48334834          ENDIF !ok_4xCO2atm
    48344835
Note: See TracChangeset for help on using the changeset viewer.