Ignore:
Timestamp:
Aug 4, 2025, 3:03:07 PM (24 hours ago)
Author:
aborella
Message:

Additional diags for contrails + simplified coupling between deep conv and cirrus clouds + small modifsin RRTM for RF of contrails alone

File:
1 edited

Legend:

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

    r5794 r5796  
    124124USE lmdz_lscp_ini, ONLY : ok_radocond_snow, a_tr_sca
    125125USE lmdz_lscp_ini, ONLY : iflag_cloudth_vert, iflag_t_glace, iflag_fisrtilp_qsat
    126 USE lmdz_lscp_ini, ONLY : min_frac_th_cld, temp_nowater
    127 USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RVTMP2, RTT, RD, RG
     126USE lmdz_lscp_ini, ONLY : min_frac_th_cld, temp_nowater, rho_ice
     127USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RVTMP2, RTT, RD, RG, RPI
    128128USE lmdz_lscp_ini, ONLY : ok_poprecip, ok_bug_phase_lscp
    129129USE lmdz_lscp_ini, ONLY : ok_ice_supersat, ok_unadjusted_clouds, iflag_icefrac
    130130USE lmdz_lscp_ini, ONLY : ok_weibull_warm_clouds, ok_no_issr_strato, ok_ice_sedim
    131131USE lmdz_lscp_ini, ONLY : ok_plane_contrail
    132 USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_nodeep_lscp_rad, ok_higher_cirrus_cover
     132USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_higher_cirrus_cover
    133133USE lmdz_lscp_ini, ONLY : ok_lscp_mergecond, gamma_mixth
     134USE lmdz_lscp_ini, ONLY : eff2vol_radius_contrails
    134135
    135136! Temporary call for Lamquin et al (2012) diagnostics
     
    144145USE phys_local_var_mod, ONLY : dcfc_auto, dqic_auto, dqtc_auto, dnic_auto
    145146USE phys_local_var_mod, ONLY : dcf_auto, dqi_auto, dqvc_auto
    146 USE geometry_mod, ONLY: longitude_deg, latitude_deg
     147USE phys_local_var_mod, ONLY : nice_ygcont, iwc_ygcont, rvol_ygcont, tau_ygcont
     148USE phys_local_var_mod, ONLY : nice_cont, iwc_cont, rvol_cont, tau_cont
    147149
    148150IMPLICIT NONE
     
    362364  ! for condensation and ice supersaturation
    363365  REAL, DIMENSION(klon) :: qvc, qvcl, shear
     366  REAL, DIMENSION(klon) :: zrneb_deep, zcond_deep
    364367  REAL :: delta_z, deepconv_coef
    365368  ! for contrails
     
    369372  REAL, DIMENSION(klon) :: dzsed_cont, flsed_cont, Nflsed_cont, cfsed_cont
    370373  REAL, DIMENSION(klon) :: dzsed_cont_abv, flsed_cont_abv, Nflsed_cont_abv, cfsed_cont_abv
     374  REAL :: rho, rhodz, iwp_cont, rei_cont
    371375  !--for Lamquin et al 2012 diagnostics
    372376  REAL, DIMENSION(klon) :: issrfra100to150UP, issrfra150to200UP, issrfra200to250UP
     
    805809
    806810          DO i = 1, klon
    807             pt_pron_clds(i) = ( cfcon(i,k) .LT. ( 1. - eps ) )
     811            pt_pron_clds(i) = .TRUE.
    808812          ENDDO
    809813          IF ( .NOT. ok_weibull_warm_clouds ) THEN
     
    982986                        dcfc_sed(:,k), dqic_sed(:,k), dqtc_sed(:,k), dnic_sed(:,k), &
    983987                        dcfc_auto(:,k), dqic_auto(:,k), dqtc_auto(:,k), dnic_auto(:,k))
    984 
    985                     IF ( ok_nodeep_lscp ) THEN
    986                       DO i = 1, klon
    987                         !--If prognostic clouds are activated, deep convection vapor is
    988                         !--re-added to the total water vapor
    989                         IF ( keepgoing(i) .AND. ptconv(i,k) .AND. pt_pron_clds(i) ) THEN
    990                           IF ( ( rneb(i,k) + cfcon(i,k) ) .GT. eps ) THEN
    991                             zqn(i) = ( zqn(i) * rneb(i,k) &
    992                                 + ( qccon(i,k) + qvcon(i,k) ) * cfcon(i,k) ) &
    993                                 / ( rneb(i,k) + cfcon(i,k) )
    994                           ELSE
    995                             zqn(i) = 0.
    996                           ENDIF
    997                           rneb(i,k) = rneb(i,k) + cfcon(i,k)
    998                           qvc(i) = qvc(i) + qvcon(i,k) * cfcon(i,k)
    999                         ENDIF
    1000                       ENDDO
    1001                     ENDIF
    1002988
    1003989                  ELSE
     
    12531239    ENDDO
    12541240
    1255     IF (ok_plane_contrail) THEN
    1256 
    1257       !--Ice water content of contrails
    1258       qice_cont(:,k) = qcont(:) - zqs(:) * contfra(:)
    1259 
    1260       !--If contrails do not precipitate
    1261       DO i = 1, klon
    1262         rneb(i,k) = rneb(i,k) - contfra(i)
    1263         zoliq(i) = zoliq(i) - qice_cont(i,k)
    1264         zoliqi(i) = zoliqi(i) - qice_cont(i,k)
    1265       ENDDO
    1266     ENDIF
    1267 
    12681241    !================================================================
    12691242    ! Flag for the new and more microphysical treatment of precipitation from Atelier Nuage (R)
     
    13021275      zifl(:) = zifl(:) + flauto(:)
    13031276      ziflcld(:) = ziflcld(:) + flauto(:)
    1304     ENDIF
    1305 
    1306     IF ( ok_plane_contrail ) THEN
    1307       !--Contrails do not precipitate
    1308       DO i = 1, klon
    1309         rneb(i,k) = rneb(i,k) + contfra(i)
    1310         zoliq(i) = zoliq(i) + qice_cont(i,k)
    1311         zoliqi(i) = zoliqi(i) + qice_cont(i,k)
    1312         zradocond(i) = zradocond(i) + qice_cont(i,k)
    1313         zradoice(i) = zradoice(i) + qice_cont(i,k)
    1314         qradice_cont(i,k) = qice_cont(i,k)
    1315       ENDDO
    13161277    ENDIF
    13171278
     
    14201381      qtc_seri(:,k) = qcont(:)
    14211382      nic_seri(:,k) = Ncont(:)
     1383      !--Ice water content of contrails
     1384      qice_cont(:,k) = qcont(:) - zqs(:) * contfra(:)
     1385      !--Radiative properties
    14221386      contfrarad(:,k) = contfra(:)
     1387      qradice_cont(:,k) = qice_cont(:,k)
    14231388    ENDIF
    14241389
     
    14331398        !--the sink of condensed water from precipitation
    14341399        IF ( ptconv(i,k) ) THEN
    1435           IF ( zcond(i) .GT. 0. ) THEN
    1436             qvcon_old(i,k) = qvcon(i,k)
    1437             qccon_old(i,k) = qccon(i,k) * zoliq(i) / zcond(i)
    1438           ELSE
    1439             qvcon_old(i,k) = 0.
    1440             qccon_old(i,k) = 0.
    1441           ENDIF
     1400          qvcon_old(i,k) = qvcon(i,k)
     1401          qccon_old(i,k) = qccon(i,k)
    14421402        ELSE
    14431403          qvcon_old(i,k) = 0.
    14441404          qccon_old(i,k) = 0.
    1445         ENDIF
    1446 
    1447         !--Deep convection clouds properties are not advected
    1448         IF ( ptconv(i,k) .AND. pt_pron_clds(i) .AND. ok_nodeep_lscp ) THEN
    1449           cf_seri(i,k) = MAX(0., cf_seri(i,k) - cfcon(i,k))
    1450           qvc_seri(i,k) = MAX(0., qvc_seri(i,k) - qvcon_old(i,k) * cfcon(i,k))
    1451           zoliq(i) = MAX(0., zoliq(i) - qccon_old(i,k) * cfcon(i,k))
    1452           zoliqi(i) = MAX(0., zoliqi(i) - qccon_old(i,k) * cfcon(i,k))
    1453         ENDIF
    1454         !--Deep convection clouds properties are removed from radiative properties
    1455         !--outputed from lscp (NB. rneb and radocond are only used for the radiative
    1456         !--properties and are NOT prognostics)
    1457         !--We must have iflag_coupl == 5 for this coupling to work
    1458         IF ( ptconv(i,k) .AND. pt_pron_clds(i) .AND. ok_nodeep_lscp_rad ) THEN
    1459           rneb(i,k) = MAX(0., rneb(i,k) - cfcon(i,k))
    1460           radocond(i,k) = MAX(0., radocond(i,k) - qccon_old(i,k) * cfcon(i,k))
    14611405        ENDIF
    14621406
     
    14671411          cf_seri(i,k) = 0.
    14681412          qvc_seri(i,k) = 0.
    1469           qvc(i) = 0.
    14701413        ENDIF
    14711414
    14721415        !--Diagnostics
    14731416        gamma_cond(i,k) = gammasat(i)
    1474         subfra(i,k) = 1. - cf_seri(i,k) - issrfra(i,k)
    1475         qsub(i,k) = zq(i) - qvc(i) - qissr(i,k)
    1476         qcld(i,k) = qvc(i) + zoliq(i)
     1417        subfra(i,k) = totfra_in(i) - cf_seri(i,k) - issrfra(i,k)
     1418        qsub(i,k) = qtot_in(i) - qvc_seri(i,k) - qissr(i,k)
     1419        qcld(i,k) = qvc_seri(i,k) + zoliq(i)
    14771420
    14781421        IF ( ok_higher_cirrus_cover .AND. pt_pron_clds(i) .AND. .NOT. ptconv(i,k) ) THEN
     
    15531496    ENDIF
    15541497
     1498    IF ( ok_plane_contrail ) THEN
     1499      !--Other useful diagnostics
     1500      DO i = 1, klon
     1501        !--Very young countrails
     1502        IF ( dcfc_ini(i,k) .GT. eps ) THEN
     1503          rho = pplay(i,k) / zt(i) / RD
     1504          nice_ygcont(i,k) = dnic_ini(i,k) / dcfc_ini(i,k) / 1e6 * rho
     1505          iwc_ygcont(i,k) = dqic_ini(i,k) / dcfc_ini(i,k) * 1e3 * rho
     1506          rvol_ygcont(i,k) = (dqic_ini(i,k) / MAX(eps, dnic_ini(i,k)) / rho_ice * 3. / 4. / RPI)**(1./3.) * 1e6
     1507
     1508          rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG
     1509          iwp_cont = 1e3 * dqic_ini(i,k) / dcfc_ini(i,k) * rhodz
     1510          rei_cont = MIN(100., MAX(10., rvol_ygcont(i,k) / eff2vol_radius_contrails))
     1511          tau_ygcont(i,k) = iwp_cont*(3.448e-3+2.431/rei_cont)
     1512        ELSE
     1513          nice_ygcont(i,k) = missing_val
     1514          iwc_ygcont(i,k) = missing_val
     1515          rvol_ygcont(i,k) = missing_val
     1516          tau_ygcont(i,k) = missing_val
     1517        ENDIF
     1518        !--All contrails
     1519        IF ( cfc_seri(i,k) .GT. 1e-3 ) THEN
     1520          rho = pplay(i,k) / zt(i) / RD
     1521          nice_cont(i,k) = nic_seri(i,k) / cfc_seri(i,k) / 1e6 * rho
     1522          iwc_cont(i,k) = qice_cont(i,k) / cfc_seri(i,k) * 1e3 * rho
     1523          rvol_cont(i,k) = (qice_cont(i,k) / MAX(eps, nic_seri(i,k)) / rho_ice * 3. / 4. / RPI)**(1./3.) * 1e6
     1524
     1525          rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG
     1526          iwp_cont = 1e3 * qice_cont(i,k) / contfrarad(i,k) * rhodz
     1527          rei_cont = MIN(100., MAX(10., rvol_cont(i,k) / eff2vol_radius_contrails))
     1528          tau_cont(i,k) = iwp_cont*(3.448e-3+2.431/rei_cont)
     1529        ELSE
     1530          nice_cont(i,k) = missing_val
     1531          iwc_cont(i,k) = missing_val
     1532          rvol_cont(i,k) = missing_val
     1533          tau_cont(i,k) = missing_val
     1534        ENDIF
     1535      ENDDO
     1536    ENDIF
     1537
    15551538    ! Outputs:
    15561539    !-------------------------------
Note: See TracChangeset for help on using the changeset viewer.