Ignore:
Timestamp:
Jun 6, 2025, 11:55:21 AM (3 weeks ago)
Author:
aborella
Message:

Adaptations made to contrails radiative transfer and to ice sedimentation, following discussion with Bernd Karcher

File:
1 edited

Legend:

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

    r5684 r5691  
    124124USE lmdz_lscp_ini, ONLY : ok_ice_supersat, ok_unadjusted_clouds, iflag_icefrac
    125125USE lmdz_lscp_ini, ONLY : ok_weibull_warm_clouds, ok_no_issr_strato
    126 USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_precip_lincontrails, ok_ice_sedim
     126USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_precip_contrails, ok_ice_sedim
    127127USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_nodeep_lscp_rad
    128128
     
    322322  REAL, DIMENSION(klon) :: ztupnew
    323323  REAL, DIMENSION(klon) :: zqvapclr, zqupnew ! for poprecip evap / subl
    324   REAL, DIMENSION(klon) :: cldfra_above, icesed_flux ! for sedimentation of ice crystals
    325324  REAL, DIMENSION(klon) :: zrflclr, zrflcld
    326325  REAL, DIMENSION(klon) :: ziflclr, ziflcld
     
    330329  REAL, DIMENSION(klon) :: zdistcltop, ztemp_cltop
    331330  REAL, DIMENSION(klon) :: zqliq, zqice, zqvapcl        ! for icefrac_lscp_turb
     331  ! for ice sedimentation
     332  REAL, DIMENSION(klon) :: dzsed, flsed, cfsed
     333  REAL, DIMENSION(klon) :: dzsed_abv, flsed_abv, cfsed_abv
     334  REAL :: qice_sedim
    332335
    333336  ! for quantity of condensates seen by radiation
     
    342345  REAL, DIMENSION(klon) :: totfra_in, qtot_in
    343346  LOGICAL, DIMENSION(klon) :: pt_pron_clds
     347  REAL, DIMENSION(klon) :: dzsed_lincont, flsed_lincont, cfsed_lincont
     348  REAL, DIMENSION(klon) :: dzsed_circont, flsed_circont, cfsed_circont
     349  REAL, DIMENSION(klon) :: dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv
     350  REAL, DIMENSION(klon) :: dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv
    344351  REAL :: qice_cont
    345352  !--for Lamquin et al 2012 diagnostics
     
    448455qvc(:)          = 0.
    449456shear(:)        = 0.
     457flsed(:)        = 0.
    450458pt_pron_clds(:) = .FALSE.
    451459
     
    480488zqupnew(:)    = 0.
    481489zqvapclr(:)   = 0.
    482 cldfra_above(:)= 0.
    483 icesed_flux(:)= 0.
    484490
    485491
     
    537543      CALL poprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), &
    538544                        zt, ztupnew, zq, zmqc, znebprecipclr, znebprecipcld, &
    539                         zqvapclr, zqupnew, icesed_flux, &
     545                        zqvapclr, zqupnew, flsed, &
    540546                        cldfra_in, qvc_in, qliq_in, qice_in, &
    541547                        zrfl, zrflclr, zrflcld, &
     
    548554
    549555      CALL histprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), &
    550                         zt, ztupnew, zq, zmqc, zneb, znebprecip, znebprecipclr, icesed_flux, &
     556                        zt, ztupnew, zq, zmqc, zneb, znebprecip, znebprecipclr, flsed, &
    551557                        zrfl, zrflclr, zrflcld, &
    552558                        zifl, ziflclr, ziflcld, &
     
    670676          !--Initialisation
    671677          IF ( ok_plane_contrail ) THEN
    672             lincontfra(:) = 0.
    673             circontfra(:) = 0.
    674             qlincont(:)   = 0.
    675             qcircont(:)   = 0.
     678            IF ( iftop ) THEN
     679              dzsed_lincont_abv(:) = 0.
     680              flsed_lincont_abv(:) = 0.
     681              cfsed_lincont_abv(:) = 0.
     682              dzsed_circont_abv(:) = 0.
     683              flsed_circont_abv(:) = 0.
     684              cfsed_circont_abv(:) = 0.
     685            ELSE
     686              dzsed_lincont_abv(:) = dzsed_lincont(:)
     687              flsed_lincont_abv(:) = flsed_lincont(:)
     688              cfsed_lincont_abv(:) = cfsed_lincont(:)
     689              dzsed_circont_abv(:) = dzsed_circont(:)
     690              flsed_circont_abv(:) = flsed_circont(:)
     691              cfsed_circont_abv(:) = cfsed_circont(:)
     692            ENDIF
     693            dzsed_lincont(:) = 0.
     694            flsed_lincont(:) = 0.
     695            cfsed_lincont(:) = 0.
     696            dzsed_circont(:) = 0.
     697            flsed_circont(:) = 0.
     698            cfsed_circont(:) = 0.
     699            lincontfra(:)    = 0.
     700            circontfra(:)    = 0.
     701            qlincont(:)      = 0.
     702            qcircont(:)      = 0.
    676703          ENDIF
     704
     705          IF ( iftop ) THEN
     706            dzsed_abv(:) = 0.
     707            flsed_abv(:) = 0.
     708            cfsed_abv(:) = 0.
     709          ELSE
     710            dzsed_abv(:) = dzsed(:)
     711            flsed_abv(:) = flsed(:)
     712            cfsed_abv(:) = cfsed(:)
     713          ENDIF
     714          dzsed(:) = 0.
     715          flsed(:) = 0.
     716          cfsed(:) = 0.
    677717
    678718          DO i = 1, klon
     
    821861                  IF (ok_ice_supersat) THEN
    822862
    823                     IF ( iftop ) THEN
    824                       cldfra_above(:) = 0.
    825                     ELSE
    826                       cldfra_above(:) = rneb(:,k+1)
    827                     ENDIF
    828 
    829863                    !---------------------------------------------
    830864                    !--   CONDENSATION AND ICE SUPERSATURATION  --
     
    836870                        shear, tke_dissip(:,k), cell_area, Tbef, qtot_in, zqs, &
    837871                        gammasat, ratqs(:,k), keepgoing, pt_pron_clds, &
    838                         cldfra_above, icesed_flux,&
     872                        dzsed_abv, flsed_abv, cfsed_abv, &
     873                        dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv, &
     874                        dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv, &
     875                        dzsed, flsed, cfsed, dzsed_lincont, flsed_lincont, cfsed_lincont, &
     876                        dzsed_circont, flsed_circont, cfsed_circont, &
    839877                        rneb(:,k), zqn, qvc, issrfra(:,k), qissr(:,k), &
    840878                        dcf_sub(:,k), dcf_con(:,k), dcf_mix(:,k), dcfsed(:,k), &
     
    10471085
    10481086            ENDIF
     1087
     1088            ! Remove the ice that was sedimentated. As it is not included in zqn,
     1089            ! we only remove it from the total water
     1090            IF ( ok_ice_sedim ) THEN
     1091              zq(i) = zq(i) - flsed(i) / ( paprs(i,k) - paprs(i,k+1) ) * RG * dtime
     1092            ENDIF
    10491093           
    10501094           
     
    10791123
    10801124    IF (ok_plane_contrail) THEN
     1125
     1126      !--Ice water content of contrails
     1127      qice_lincont(:,k) = qlincont(:) - zqs(:) * lincontfra(:)
     1128      qice_circont(:,k) = qcircont(:) - zqs(:) * circontfra(:)
     1129
    10811130      !--Contrails precipitate as natural clouds. We save the partition of ice
    10821131      !--between natural clouds and contrails
    10831132      !--NB. we use qlincont / qcircont as a temporary variable to save this partition
    1084       IF ( ok_precip_lincontrails ) THEN
     1133      IF ( ok_precip_contrails ) THEN
    10851134        DO i = 1, klon
    10861135          IF ( zoliqi(i) .GT. 0. ) THEN
    1087             qlincont(i) = ( qlincont(i) - zqs(i) * lincontfra(i) ) / zoliqi(i)
     1136            qlincont(i) = qice_lincont(i,k) / zoliqi(i)
     1137            qcircont(i) = qice_circont(i,k) / zoliqi(i)
    10881138          ELSE
    10891139            qlincont(i) = 0.
     1140            qcircont(i) = 0.
    10901141          ENDIF
    10911142        ENDDO
     
    10941145        !--the cloud variables
    10951146        DO i = 1, klon
    1096           qice_cont = qlincont(i) - zqs(i) * lincontfra(i)
    1097           rneb(i,k) = rneb(i,k) - lincontfra(i)
     1147          qice_cont = qice_lincont(i,k) + qice_circont(i,k)
     1148          rneb(i,k) = rneb(i,k) - ( lincontfra(i) + circontfra(i) )
    10981149          zoliq(i) = zoliq(i) - qice_cont
    10991150          zoliqi(i) = zoliqi(i) - qice_cont
    11001151        ENDDO
    11011152      ENDIF
    1102 
    1103       DO i = 1, klon
    1104         IF ( zoliqi(i) .GT. 0. ) THEN
    1105           qcircont(i) = ( qcircont(i) - zqs(i) * circontfra(i) ) / zoliqi(i)
    1106         ELSE
    1107           qcircont(i) = 0.
    1108         ENDIF
    1109       ENDDO
    11101153    ENDIF
    11111154
     
    11171160                            ctot_vol(:,k), ptconv(:,k), &
    11181161                            zt, zq, zoliql, zoliqi, zfice, &
    1119                             rneb(:,k), icesed_flux, znebprecipclr, znebprecipcld, &
     1162                            rneb(:,k), flsed, znebprecipclr, znebprecipcld, &
    11201163                            zrfl, zrflclr, zrflcld, &
    11211164                            zifl, ziflclr, ziflcld, &
     
    11341177      CALL histprecip_postcld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), &
    11351178                            ctot_vol(:,k), ptconv(:,k), pt_pron_clds, zdqsdT_raw, &
    1136                             zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, icesed_flux, &
     1179                            zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, flsed, &
    11371180                            rneb(:,k), znebprecipclr, znebprecipcld, &
    11381181                            zneb, tot_zneb, zrho_up, zvelo_up, &
     
    11451188    IF ( ok_plane_contrail ) THEN
    11461189      !--Contrails fraction is left unchanged, but contrails water has changed
    1147       !--We alse compute the ice content that will be seen by radiation (qradice_lincont/circont)
    1148       IF ( ok_precip_lincontrails ) THEN
     1190      !--We alse compute the ice content that will be seen by radiation
     1191      !--(qradice_lincont/circont)
     1192      IF ( ok_precip_contrails ) THEN
    11491193        DO i = 1, klon
    11501194          IF ( zoliqi(i) .GT. 0. ) THEN
    11511195            qradice_lincont(i,k) = zradocond(i) * qlincont(i)
    11521196            qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i)
     1197            qradice_circont(i,k) = zradocond(i) * qcircont(i)
     1198            qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i)
    11531199          ELSE
    11541200            qradice_lincont(i,k) = 0.
    11551201            lincontfra(i) = 0.
    11561202            qlincont(i) = 0.
     1203            qradice_circont(i,k) = 0.
     1204            circontfra(i) = 0.
     1205            qcircont(i) = 0.
    11571206          ENDIF
    11581207        ENDDO
    11591208      ELSE
    1160         !--If linear contrails do not precipitate, they are put back into
     1209        !--If contrails do not precipitate, they are put back into
    11611210        !--the cloud variables
    11621211        DO i = 1, klon
    1163           qice_cont = qlincont(i) - zqs(i) * lincontfra(i)
    1164           rneb(i,k) = rneb(i,k) + lincontfra(i)
     1212          rneb(i,k) = rneb(i,k) + ( lincontfra(i) + circontfra(i) )
     1213          qice_cont = qice_lincont(i,k) + qice_circont(i,k)
    11651214          zoliq(i) = zoliq(i) + qice_cont
    11661215          zoliqi(i) = zoliqi(i) + qice_cont
    11671216          zradocond(i) = zradocond(i) + qice_cont
    11681217          zradoice(i) = zradoice(i) + qice_cont
    1169           qradice_lincont(i,k) = qice_cont
     1218          qradice_lincont(i,k) = qice_lincont(i,k)
     1219          qradice_circont(i,k) = qice_circont(i,k)
    11701220        ENDDO
    11711221      ENDIF
    1172 
    1173       DO i = 1, klon
    1174         IF ( zoliqi(i) .GT. 0. ) THEN
    1175           qradice_circont(i,k) = zradocond(i) * qcircont(i)
    1176           qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i)
    1177         ELSE
    1178           qradice_circont(i,k) = 0.
    1179           circontfra(i) = 0.
    1180           qcircont(i) = 0.
    1181         ENDIF
    1182       ENDDO
    11831222    ENDIF
    11841223
     
    12891328      qtl_seri(:,k) = qlincont(:)
    12901329      qtc_seri(:,k) = qcircont(:)
    1291       qice_lincont(:,k) = qlincont(:) - zqs(:) * lincontfra(:)
    1292       qice_circont(:,k) = qcircont(:) - zqs(:) * circontfra(:)
    12931330    ENDIF
    12941331
     
    14451482  IF ( ok_ice_sedim ) THEN
    14461483    DO i = 1, klon
    1447       snow(i) = snow(i) + icesed_flux(i)
     1484      snow(i) = snow(i) + flsed(i)
    14481485    ENDDO
    14491486  ENDIF
Note: See TracChangeset for help on using the changeset viewer.