Ignore:
Timestamp:
Aug 5, 2025, 2:22:14 PM (23 hours ago)
Author:
aborella
Message:

Bugfix for saturation adjustment in cirrus mixing + bugfix for contrails sedimentation + new diagnostics + support for unadjusted contrails

File:
1 edited

Legend:

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

    r5796 r5797  
    3030     dqi_adj, dqi_sub, dqi_con, dqi_mix, dqvc_adj,      &
    3131     dqvc_sub, dqvc_con, dqvc_mix, qsatl, qsati,        &
    32      cfc_seri, qtc_seri, nic_seri,                      &
     32     cfc_seri, qtc_seri, qic_seri, nic_seri,            &
    3333     qice_cont, flight_dist, flight_fuel,               &
    3434     contfrarad, qradice_cont,                          &
     
    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
    131 USE lmdz_lscp_ini, ONLY : ok_plane_contrail
     131USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_unadjusted_contrails
    132132USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_higher_cirrus_cover
    133133USE lmdz_lscp_ini, ONLY : ok_lscp_mergecond, gamma_mixth
     
    141141USE phys_local_var_mod, ONLY : dcfc_ini, dqic_ini, dqtc_ini, dnic_ini
    142142USE phys_local_var_mod, ONLY : dcfc_sub, dqic_sub, dqtc_sub, dnic_sub
    143 USE phys_local_var_mod, ONLY : dcfc_mix, dqic_mix, dqtc_mix, dnic_mix, dnic_agg
     143USE phys_local_var_mod, ONLY : dcfc_mix, dqic_mix, dqtc_mix, dnic_mix
     144USE phys_local_var_mod, ONLY : dnic_agg, dqic_adj, dqtc_adj
    144145USE phys_local_var_mod, ONLY : dcfc_sed, dqic_sed, dqtc_sed, dnic_sed
    145146USE phys_local_var_mod, ONLY : dcfc_auto, dqic_auto, dqtc_auto, dnic_auto
    146147USE phys_local_var_mod, ONLY : dcf_auto, dqi_auto, dqvc_auto
    147148USE phys_local_var_mod, ONLY : nice_ygcont, iwc_ygcont, rvol_ygcont, tau_ygcont
     149USE phys_local_var_mod, ONLY : nice_vscont, iwc_vscont, rvol_vscont, tau_vscont
    148150USE phys_local_var_mod, ONLY : nice_cont, iwc_cont, rvol_cont, tau_cont
    149151
     
    219221  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: cfc_seri         ! contrail fraction [-]
    220222  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: qtc_seri         ! contrail total specific humidity [kg/kg]
     223  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: qic_seri         ! contrail ice specific humidity [kg/kg]
    221224  REAL, DIMENSION(klon,klev),      INTENT(INOUT):: nic_seri         ! contrail ice crystals concentration [#/kg]
    222225  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: flight_dist      ! aviation distance flown concentration [m/s/m3]
     
    367370  REAL :: delta_z, deepconv_coef
    368371  ! for contrails
    369   REAL, DIMENSION(klon) :: contfra, qcont, Ncont
     372  REAL, DIMENSION(klon) :: contfra, qcont, qvcont, Ncont
    370373  REAL, DIMENSION(klon) :: totfra_in, qtot_in
    371374  LOGICAL, DIMENSION(klon) :: pt_pron_clds
     
    489492dqtc_sub(:,:)  = 0.
    490493dnic_sub(:,:)  = 0.
     494dqic_adj(:,:)  = 0.
     495dqtc_adj(:,:)  = 0.
    491496dcfc_mix(:,:)  = 0.
    492497dqic_mix(:,:)  = 0.
     
    787792            contfra(:) = 0.
    788793            qcont(:)   = 0.
     794            qvcont(:)  = 0.
    789795            Ncont(:)   = 0.
    790796            dzsed_cont(:) = 0.
     
    858864                  cfc_seri(i,k) = cfc_seri(i,k) * deepconv_coef
    859865                  qtc_seri(i,k) = qtc_seri(i,k) * deepconv_coef
     866                  qic_seri(i,k) = qic_seri(i,k) * deepconv_coef
    860867                  nic_seri(i,k) = nic_seri(i,k) * deepconv_coef
    861868                ENDIF
     
    973980                        dqvc_adj(:,k), dqvc_sub(:,k), dqvc_con(:,k), dqvc_mix(:,k), &
    974981                        dqvc_sed(:,k), dqvc_auto(:,k), &
    975                         cfc_seri(:,k), qtc_seri(:,k), nic_seri(:,k), &
     982                        cfc_seri(:,k), qtc_seri(:,k), qic_seri(:,k), nic_seri(:,k), &
    976983                        flight_dist(:,k), flight_fuel(:,k), &
    977                         contfra, qcont, Ncont, &
     984                        contfra, qcont, qvcont, Ncont, &
    978985                        Tcritcont(:,k), qcritcont(:,k), potcontfraP(:,k), potcontfraNP(:,k), &
    979986                        AEI_contrails(:,k), AEI_surv_contrails(:,k), &
     
    983990                        dcfc_ini(:,k), dqic_ini(:,k), dqtc_ini(:,k), dnic_ini(:,k), &
    984991                        dcfc_sub(:,k), dqic_sub(:,k), dqtc_sub(:,k), dnic_sub(:,k), &
    985                         dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k), dnic_mix(:,k), dnic_agg(:,k), &
     992                        dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k), dnic_mix(:,k), &
     993                        dnic_agg(:,k), dqic_adj(:,k), dqtc_adj(:,k), &
    986994                        dcfc_sed(:,k), dqic_sed(:,k), dqtc_sed(:,k), dnic_sed(:,k), &
    987995                        dcfc_auto(:,k), dqic_auto(:,k), dqtc_auto(:,k), dnic_auto(:,k))
     
    11131121                        ENDIF
    11141122                       
    1115                         IF ( ok_unadjusted_clouds ) THEN
     1123                        IF ( ok_unadjusted_clouds .OR. ok_unadjusted_contrails ) THEN
    11161124                          !--AB We relax the saturation adjustment assumption
    11171125                          !-- qvc (grid-mean vapor in cloud) is calculated by the condensation scheme
     
    11711179                    zqn(i) = zq(i)
    11721180                    rneb(i,k) = 1.0
    1173                     IF ( ok_unadjusted_clouds ) THEN
     1181                    IF ( ok_unadjusted_clouds .OR. ok_unadjusted_contrails ) THEN
    11741182                      !--AB We relax the saturation adjustment assumption
    11751183                      !-- qvc (grid-mean vapor in cloud) is calculated by the condensation scheme
     
    11801188                    rhcl(i,k)=1.0
    11811189                ELSE
    1182                     IF ( ok_unadjusted_clouds ) THEN
     1190                    IF ( ok_unadjusted_clouds .OR. ok_unadjusted_contrails ) THEN
    11831191                      !--AB We relax the saturation adjustment assumption
    11841192     
     
    13751383          contfra(i) = 0.
    13761384          qcont(i) = 0.
     1385          qvcont(i) = 0.
    13771386          Ncont(i) = 0.
    13781387        ENDIF
    13791388      ENDDO
    13801389      cfc_seri(:,k) = contfra(:)
    1381       qtc_seri(:,k) = qcont(:)
    13821390      nic_seri(:,k) = Ncont(:)
    13831391      !--Ice water content of contrails
    1384       qice_cont(:,k) = qcont(:) - zqs(:) * contfra(:)
     1392      qice_cont(:,k) = qcont(:) - qvcont(:)
     1393      IF ( ok_unadjusted_contrails ) THEN
     1394        qtc_seri(:,k) = qvcont(:)
     1395        qic_seri(:,k) = qice_cont(:,k)
     1396      ELSE
     1397        qtc_seri(:,k) = qcont(:)
     1398      ENDIF
    13851399      !--Radiative properties
    13861400      contfrarad(:,k) = contfra(:)
     
    15081522          rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG
    15091523          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))
     1524          rei_cont = MIN(200., MAX(10., rvol_ygcont(i,k) / eff2vol_radius_contrails))
    15111525          tau_ygcont(i,k) = iwp_cont*(3.448e-3+2.431/rei_cont)
    15121526        ELSE
     
    15171531        ENDIF
    15181532        !--All contrails
    1519         IF ( cfc_seri(i,k) .GT. 1e-3 ) THEN
     1533        IF ( cfc_seri(i,k) .GT. 1e-8 ) THEN
    15201534          rho = pplay(i,k) / zt(i) / RD
    15211535          nice_cont(i,k) = nic_seri(i,k) / cfc_seri(i,k) / 1e6 * rho
     
    15251539          rhodz = ( paprs(i,k) - paprs(i,k+1) ) / RG
    15261540          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))
     1541          rei_cont = MIN(200., MAX(10., rvol_cont(i,k) / eff2vol_radius_contrails))
    15281542          tau_cont(i,k) = iwp_cont*(3.448e-3+2.431/rei_cont)
     1543          IF ( tau_cont(i,k) .GT. 0.05 ) THEN
     1544            nice_vscont(i,k) = nice_cont(i,k)
     1545            iwc_vscont(i,k) = iwc_cont(i,k)
     1546            rvol_vscont(i,k) = rvol_cont(i,k)
     1547            tau_vscont(i,k) = tau_cont(i,k)
     1548          ELSE
     1549            nice_vscont(i,k) = missing_val
     1550            iwc_vscont(i,k) = missing_val
     1551            rvol_vscont(i,k) = missing_val
     1552            tau_vscont(i,k) = missing_val
     1553          ENDIF
    15291554        ELSE
    15301555          nice_cont(i,k) = missing_val
     
    15321557          rvol_cont(i,k) = missing_val
    15331558          tau_cont(i,k) = missing_val
     1559          nice_vscont(i,k) = missing_val
     1560          iwc_vscont(i,k) = missing_val
     1561          rvol_vscont(i,k) = missing_val
     1562          tau_vscont(i,k) = missing_val
    15341563        ENDIF
    15351564      ENDDO
Note: See TracChangeset for help on using the changeset viewer.