Changeset 5641
- Timestamp:
- May 1, 2025, 6:00:03 PM (5 weeks ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/DefLists/field_def_lmdz.xml
r5618 r5641 912 912 <field id="qsati" long_name="Saturation with respect to ice" unit="kg/kg" /> 913 913 914 <field id="cf aseri" long_name="Linear contrail fraction" unit="-" />915 <field id="dcf adyn" long_name="Dynamics linear contrail fraction tendency" unit="s-1" />916 <field id=" pcfseri" long_name="Contrail induced cirrus fraction" unit="-" />917 <field id="d pcfdyn" long_name="Dynamics contrail induced cirrus fraction tendency" unit="s-1" />918 <field id="q vaseri" long_name="Linear contrail vaporspecific humidity" unit="kg/kg" />919 <field id="dq vadyn" long_name="Dynamics linear contrail vaporspecific humidity tendency" unit="kg/kg/s" />920 <field id="q iaseri" long_name="Linear contrail icespecific humidity" unit="kg/kg" />921 <field id="dq iadyn" long_name="Dynamics linear contrail icespecific humidity tendency" unit="kg/kg/s" />914 <field id="cflseri" long_name="Linear contrail fraction" unit="-" /> 915 <field id="dcfldyn" long_name="Dynamics linear contrail fraction tendency" unit="s-1" /> 916 <field id="cfcseri" long_name="Contrail induced cirrus fraction" unit="-" /> 917 <field id="dcfcdyn" long_name="Dynamics contrail induced cirrus fraction tendency" unit="s-1" /> 918 <field id="qtlseri" long_name="Linear contrail total specific humidity" unit="kg/kg" /> 919 <field id="dqtldyn" long_name="Dynamics linear contrail total specific humidity tendency" unit="kg/kg/s" /> 920 <field id="qtcseri" long_name="Contrail cirrus total specific humidity" unit="kg/kg" /> 921 <field id="dqtcdyn" long_name="Dynamics contrail cirrus total specific humidity tendency" unit="kg/kg/s" /> 922 922 <field id="Tcritcont" long_name="Temperature threshold for contrail formation" unit="K" /> 923 923 <field id="qcritcont" long_name="Specific humidity threshold for contrail formation" unit="kg/kg" /> 924 924 <field id="potcontfraP" long_name="Fraction with pontential persistent contrail" unit="-" /> 925 925 <field id="potcontfraNP" long_name="Fraction with potential non-persistent contrail" unit="-" /> 926 <field id="qice_perscont" long_name="Contrail induced cirrus ice specific humidity" unit="kg/kg" /> 927 <field id="dcfaini" long_name="Initial formation linear contrail fraction tendency" unit="s-1" /> 928 <field id="dqiaini" long_name="Initial formation linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 929 <field id="dqtaini" long_name="Initial formation linear contrail total specific humidity tendency" unit="kg/kg/s" /> 930 <field id="dcfacir" long_name="Conversion to cirrus linear contrail fraction tendency" unit="s-1" /> 931 <field id="dqtacir" long_name="Conversion to cirrus linear contrail total specific humidity tendency" unit="kg/kg/s" /> 932 <field id="dcfasub" long_name="Sublimation linear contrail fraction tendency" unit="s-1" /> 933 <field id="dqiasub" long_name="Sublimation linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 934 <field id="dqtasub" long_name="Sublimation linear contrail total specific humidity tendency" unit="kg/kg/s" /> 935 <field id="dcfamix" long_name="Mixing linear contrail fraction tendency" unit="s-1" /> 936 <field id="dqiamix" long_name="Mixing linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 937 <field id="dqtamix" long_name="Mixing linear contrail total specific humidity tendency" unit="kg/kg/s" /> 926 <field id="qice_lincont" long_name="Linear contrails ice specific humidity" unit="kg/kg" /> 927 <field id="qice_circont" long_name="Contrail induced cirrus ice specific humidity" unit="kg/kg" /> 928 <field id="dcflini" long_name="Initial formation linear contrail fraction tendency" unit="s-1" /> 929 <field id="dqilini" long_name="Initial formation linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 930 <field id="dqtlini" long_name="Initial formation linear contrail total specific humidity tendency" unit="kg/kg/s" /> 931 <field id="dcflcir" long_name="Conversion to cirrus linear contrail fraction tendency" unit="s-1" /> 932 <field id="dqtlcir" long_name="Conversion to cirrus linear contrail total specific humidity tendency" unit="kg/kg/s" /> 933 <field id="dcflsub" long_name="Sublimation linear contrail fraction tendency" unit="s-1" /> 934 <field id="dqilsub" long_name="Sublimation linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 935 <field id="dqtlsub" long_name="Sublimation linear contrail total specific humidity tendency" unit="kg/kg/s" /> 936 <field id="dcflmix" long_name="Mixing linear contrail fraction tendency" unit="s-1" /> 937 <field id="dqilmix" long_name="Mixing linear contrail ice specific humidity tendency" unit="kg/kg/s" /> 938 <field id="dqtlmix" long_name="Mixing linear contrail total specific humidity tendency" unit="kg/kg/s" /> 939 <field id="dcfcsub" long_name="Sublimation contrail cirrus fraction tendency" unit="s-1" /> 940 <field id="dqicsub" long_name="Sublimation contrail cirrus ice specific humidity tendency" unit="kg/kg/s" /> 941 <field id="dqtcsub" long_name="Sublimation contrail cirrus total specific humidity tendency" unit="kg/kg/s" /> 942 <field id="dcfcmix" long_name="Mixing contrail cirrus fraction tendency" unit="s-1" /> 943 <field id="dqicmix" long_name="Mixing contrail cirrus ice specific humidity tendency" unit="kg/kg/s" /> 944 <field id="dqtcmix" long_name="Mixing contrail cirrus total specific humidity tendency" unit="kg/kg/s" /> 938 945 <field id="flightdist" long_name="Aviation flown distance concentration" unit="m/s/m3" /> 939 946 <field id="flighth2o" long_name="Aviation emitted H2O concentration" unit="kg H2O/s/m3" /> -
LMDZ6/branches/contrails/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.f90
r5626 r5641 50 50 ale_bl, ale_bl_trig, alp_bl, & 51 51 ale_wake, ale_bl_stat, AWAKE_S, & 52 cf_ancien, qvc_ancien, qvcon, qccon, cf a_ancien, pcf_ancien, qva_ancien, qia_ancien52 cf_ancien, qvc_ancien, qvcon, qccon, cfl_ancien, cfc_ancien, qtl_ancien, qtc_ancien 53 53 54 54 USE comconst_mod, ONLY: pi, dtvr … … 245 245 qvcon = 0. 246 246 qccon = 0. 247 cf a_ancien = 0.248 pcf_ancien = 0.249 q va_ancien = 0.250 q ia_ancien = 0.247 cfl_ancien = 0. 248 cfc_ancien = 0. 249 qtl_ancien = 0. 250 qtc_ancien = 0. 251 251 252 252 z0m(:,:)=0 ! ym missing 5th subsurface initialization -
LMDZ6/branches/contrails/libf/misc/readTracFiles_mod.f90
r5623 r5641 121 121 !--- SOME PARAMETERS THAT ARE NOT LIKELY TO CHANGE OFTEN 122 122 CHARACTER(LEN=maxlen), SAVE :: tran0 = 'air' !--- Default transporting fluid 123 CHARACTER(LEN=maxlen), PARAMETER :: old_phases = 'vlibfc apqt' !--- Old phases for water (no separator)124 CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsbfc apqt' !--- Known phases initials123 CHARACTER(LEN=maxlen), PARAMETER :: old_phases = 'vlibfczyxw' !--- Old phases for water (no separator) 124 CHARACTER(LEN=maxlen), PARAMETER :: known_phases = 'glsbfczyxw' !--- Known phases initials 125 125 INTEGER, PARAMETER :: nphases = LEN_TRIM(known_phases) !--- Number of phases 126 126 CHARACTER(LEN=maxlen), SAVE :: phases_names(nphases) & !--- Known phases names 127 = ['gaseous ', 'liquid ', 'solid ','blownSnow', 'fraccld ', 'cldvap ', ' avifrac ', 'pavifra ', 'qvapavi ', 'ticeavi']127 = ['gaseous ', 'liquid ', 'solid ','blownSnow', 'fraccld ', 'cldvap ', 'zlincont ', 'ycircont ', 'xlincontw', 'wcircontw'] 128 128 CHARACTER(LEN=1), SAVE :: phases_sep = '_' !--- Phase separator 129 129 CHARACTER(LEN=maxlen), SAVE :: isoFile = 'isotopes_params.def'!--- Name of the isotopes parameters file -
LMDZ6/branches/contrails/libf/phylmd/infotrac_phy.F90
r5623 r5641 27 27 !=== FOR ISOTOPES: Specific to water 28 28 PUBLIC :: iH2O !--- Value of "ixIso" for "H2O" isotopes class 29 PUBLIC :: ivap, iliq, isol, ibs, icf, iqvc, icf a, ipcf, iqia, iqva29 PUBLIC :: ivap, iliq, isol, ibs, icf, iqvc, icfl, icfc, iqtl, iqtc 30 30 !=== FOR ISOTOPES: Depending on the selected isotopes family 31 31 PUBLIC :: isotope !--- Selected isotopes database (argument of getKey) … … 103 103 104 104 !=== INDICES FOR WATER 105 INTEGER, SAVE :: ivap, iliq, isol, ibs, icf, iqvc, icf a, ipcf, iqia, iqva106 !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, iqvc, icf a, ipcf, iqia, iqva)105 INTEGER, SAVE :: ivap, iliq, isol, ibs, icf, iqvc, icfl, icfc, iqtl, iqtc 106 !$OMP THREADPRIVATE(ivap, iliq, isol, ibs, icf, iqvc, icfl, icfc, iqtl, iqtc) 107 107 108 108 !=== DIMENSIONS OF THE TRACERS TABLES AND OTHER SCALAR VARIABLES … … 364 364 ibs = strIdx(tracers(:)%name, addPhase('H2O', 'b')) 365 365 icf = strIdx(tracers(:)%name, 'CLDFRA') 366 iqvc = strIdx(tracers(:)%name, 'CLDVAP _g')367 icf a = strIdx(tracers(:)%name, 'CONTFRA')368 i pcf = strIdx(tracers(:)%name, 'PERSCONTFRA')369 iq va = strIdx(tracers(:)%name, 'CONTWATER_g')370 iq ia = strIdx(tracers(:)%name, 'CONTWATER_s')366 iqvc = strIdx(tracers(:)%name, 'CLDVAP') 367 icfl = strIdx(tracers(:)%name, 'LINCONTFRA') 368 icfc = strIdx(tracers(:)%name, 'CIRCONTFRA') 369 iqtl = strIdx(tracers(:)%name, 'LINCONTWATER') 370 iqtc = strIdx(tracers(:)%name, 'CIRCONTWATER') 371 371 !--Two ways of declaring tracers - the way below should be deleted in the future 372 372 IF (icf.EQ.0) icf = strIdx(tracers(:)%name, addPhase('H2O', 'f')) 373 373 IF (iqvc.EQ.0) iqvc = strIdx(tracers(:)%name, addPhase('H2O', 'c')) 374 IF (icf a.EQ.0) icfa = strIdx(tracers(:)%name, addPhase('H2O', 'a'))375 IF (i pcf.EQ.0) ipcf = strIdx(tracers(:)%name, addPhase('H2O', 'p'))376 IF (iq va.EQ.0) iqva = strIdx(tracers(:)%name, addPhase('H2O', 'q'))377 IF (iq ia.EQ.0) iqia = strIdx(tracers(:)%name, addPhase('H2O', 't'))374 IF (icfl.EQ.0) icfl = strIdx(tracers(:)%name, addPhase('H2O', 'z')) 375 IF (icfc.EQ.0) icfc = strIdx(tracers(:)%name, addPhase('H2O', 'y')) 376 IF (iqtl.EQ.0) iqtl = strIdx(tracers(:)%name, addPhase('H2O', 'x')) 377 IF (iqtc.EQ.0) iqtc = strIdx(tracers(:)%name, addPhase('H2O', 'w')) 378 378 379 379 IF(CPPKEY_STRATAER .AND. type_trac == 'coag') THEN -
LMDZ6/branches/contrails/libf/phylmd/lmdz_aviation.f90
r5637 r5641 75 75 clrfra, qclr, pdf_scale, pdf_alpha, pdf_gamma, keepgoing, pt_pron_clds, & 76 76 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 77 dcf a_ini, dqia_ini, dqta_ini)77 dcfl_ini, dqil_ini, dqtl_ini) 78 78 79 79 USE lmdz_lscp_ini, ONLY: RPI, RCPD, EPS_W, RTT … … 110 110 REAL, INTENT(INOUT), DIMENSION(klon) :: potcontfraP ! potential persistent contrail fraction [-] 111 111 REAL, INTENT(INOUT), DIMENSION(klon) :: potcontfraNP ! potential non-persistent contrail fraction [-] 112 REAL, INTENT(INOUT), DIMENSION(klon) :: dcf a_ini !contrails cloud fraction tendency bec ause of initial formation [s-1]113 REAL, INTENT(INOUT), DIMENSION(klon) :: dqi a_ini !contrails ice specific humidity tende ncy because of initial formation [kg/kg/s]114 REAL, INTENT(INOUT), DIMENSION(klon) :: dqt a_ini !contrails total specific humidity ten dency because of initial formation [kg/kg/s]112 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfl_ini ! linear contrails cloud fraction tendency bec ause of initial formation [s-1] 113 REAL, INTENT(INOUT), DIMENSION(klon) :: dqil_ini ! linear contrails ice specific humidity tende ncy because of initial formation [kg/kg/s] 114 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtl_ini ! linear contrails total specific humidity ten dency because of initial formation [kg/kg/s] 115 115 ! 116 116 ! Local … … 217 217 contrail_cross_section = CONTRAIL_CROSS_SECTION_ONERA() 218 218 contfra_new = MIN(1., flight_dist(i) * dtime * contrail_cross_section) 219 dcf a_ini(i) = potcontfraP(i) * contfra_new220 dqt a_ini(i) = qpotcontP * contfra_new221 dqi a_ini(i) = dqta_ini(i) - qsat(i) * dcfa_ini(i)219 dcfl_ini(i) = potcontfraP(i) * contfra_new 220 dqtl_ini(i) = qpotcontP * contfra_new 221 dqil_ini(i) = dqtl_ini(i) - qsat(i) * dcfl_ini(i) 222 222 ENDIF 223 223 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_call_cloud_optics_prop.f90
r5609 r5641 12 12 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, & 13 13 !--AB contrails 14 contfra, perscontfra, qice_cont, qice_perscont, pclc_nocont, &14 lincontfra, circontfra, qice_lincont, qice_circont, pclc_nocont, & 15 15 pcltau_nocont, pclemi_nocont, pcltau_cont, pclemi_cont, pch_nocont, pct_cont, & 16 16 xfiwp_nocont, xfiwc_nocont, reice_nocont) … … 95 95 96 96 !--AB for contrails. All these are used / outputed only if ok_plane_contrail=y 97 REAL, INTENT(IN) :: contfra(klon, klev)! linear contrails fraction [-]98 REAL, INTENT(IN) :: perscontfra(klon, klev)! contrail induced cirrus fraction [-]99 REAL, INTENT(IN) :: qice_ cont(klon, klev)! linear contrails condensed water [kg/kg]100 REAL, INTENT(IN) :: qice_ perscont(klon, klev)! contrail induced cirrus condensed water [kg/kg]97 REAL, INTENT(IN) :: lincontfra(klon, klev) ! linear contrails fraction [-] 98 REAL, INTENT(IN) :: circontfra(klon, klev) ! contrail induced cirrus fraction [-] 99 REAL, INTENT(IN) :: qice_lincont(klon, klev) ! linear contrails condensed water [kg/kg] 100 REAL, INTENT(IN) :: qice_circont(klon, klev) ! contrail induced cirrus condensed water [kg/kg] 101 101 REAL, INTENT(OUT) :: pch_nocont(klon) ! 2D high cloud cover without contrails[-] 102 102 REAL, INTENT(OUT) :: pct_cont(klon) ! 2D total contrails cover[-] … … 139 139 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon, & 140 140 !--AB for contrails 141 contfra, perscontfra, qice_cont, qice_perscont, pclc_nocont, pcltau_nocont, &141 lincontfra, circontfra, qice_lincont, qice_circont, pclc_nocont, pcltau_nocont, & 142 142 pclemi_nocont, pcltau_cont, pclemi_cont, pch_nocont, pct_cont, & 143 143 xfiwp_nocont, xfiwc_nocont, reice_nocont) -
LMDZ6/branches/contrails/libf/phylmd/lmdz_cloud_optics_prop.f90
r5639 r5641 11 11 icefrac_optics, dNovrN, ptconv, rnebcon, ccwcon, & 12 12 !--AB contrails 13 contfra, perscontfra, qice_cont, qice_perscont, pclc_nocont, pcltau_nocont, &13 lincontfra, circontfra, qice_lincont, qice_circont, pclc_nocont, pcltau_nocont, & 14 14 pclemi_nocont, pcltau_cont, pclemi_cont, pch_nocont, pct_cont, & 15 15 xfiwp_nocont, xfiwc_nocont, reice_nocont) … … 119 119 120 120 !--AB for contrails. All these are used / outputed only if ok_plane_contrail=y 121 REAL, INTENT(IN) :: contfra(klon, klev)! linear contrails fraction [-]122 REAL, INTENT(IN) :: perscontfra(klon, klev)! contrail induced cirrus fraction [-]123 REAL, INTENT(IN) :: qice_ cont(klon, klev)! linear contrails condensed water [kg/kg]124 REAL, INTENT(IN) :: qice_ perscont(klon, klev)! contrail induced cirrus condensed water [kg/kg]121 REAL, INTENT(IN) :: lincontfra(klon, klev) ! linear contrails fraction [-] 122 REAL, INTENT(IN) :: circontfra(klon, klev) ! contrail induced cirrus fraction [-] 123 REAL, INTENT(IN) :: qice_lincont(klon, klev) ! linear contrails condensed water [kg/kg] 124 REAL, INTENT(IN) :: qice_circont(klon, klev) ! contrail induced cirrus condensed water [kg/kg] 125 125 REAL, INTENT(OUT) :: pch_nocont(klon) ! 2D high cloud cover without contrails[-] 126 126 REAL, INTENT(OUT) :: pct_cont(klon) ! 2D total contrails cover[-] … … 173 173 REAL zflwp_var, zfiwp_var 174 174 REAL d_rei_dt 175 REAL pclc_ cont(klon,klev), pclc_perscont(klon,klev)176 REAL rei_ cont, rei_perscont175 REAL pclc_lincont(klon,klev), pclc_circont(klon,klev) 176 REAL rei_lincont, rei_circont 177 177 178 178 … … 255 255 DO k = 1, klev 256 256 DO i = 1, klon 257 pclc_nocont(i,k) = pclc(i, k) - contfra(i, k) - perscontfra(i, k)258 xfiwc_nocont(i, k) = xfiwc(i, k) - qice_ cont(i, k) - qice_perscont(i, k)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) 259 259 ENDDO 260 260 ENDDO … … 574 574 reice_nocont(i,k) = 0. 575 575 pclc_nocont(i,k) = 0. 576 pclc_ cont(i,k) = 0.577 pclc_ perscont(i,k) = 0.576 pclc_lincont(i,k) = 0. 577 pclc_circont(i,k) = 0. 578 578 pcltau_cont(i,k) = 0. 579 579 pclemi_cont(i,k) = 0. … … 583 583 ELSE 584 584 585 IF ( pclc_nocont(i,k) .GT. 0.01 * seuil_neb) THEN585 IF ( pclc_nocont(i,k) .GT. zepsec ) THEN 586 586 ! -- liquid/ice cloud water paths: 587 587 … … 682 682 reice_nocont(i,k) = 1. 683 683 pclc_nocont(i,k) = 0. 684 pclc(i,k) = contfra(i,k) + perscontfra(i,k)684 pclc(i,k) = lincontfra(i,k) + circontfra(i,k) 685 685 pcltau_nocont(i, k) = 0. 686 686 pclemi_nocont(i, k) = 0. … … 689 689 690 690 691 IF ( contfra(i,k) .GT. 0.01 * seuil_neb) THEN692 pclc_ cont(i,k) =contfra(i,k)693 rei_ cont = re_ice_crystals_contrails * 1.E6691 IF ( lincontfra(i,k) .GT. zepsec ) THEN 692 pclc_lincont(i,k) = lincontfra(i,k) 693 rei_lincont = re_ice_crystals_contrails * 1.E6 694 694 ELSE 695 pclc_ cont(i,k) = 0.696 rei_ cont = 1.697 ENDIF 698 699 700 IF ( perscontfra(i,k) .GT. 0.01 * seuil_neb) THEN695 pclc_lincont(i,k) = 0. 696 rei_lincont = 1. 697 ENDIF 698 699 700 IF ( circontfra(i,k) .GT. zepsec ) THEN 701 701 !--Everything is the same but with contrails 702 pclc_ perscont(i,k) = perscontfra(i,k)702 pclc_circont(i,k) = circontfra(i,k) 703 703 704 704 tc = temp(i, k) - 273.15 705 rei_ perscont = d_rei_dt*tc + rei_max706 IF (tc<=-81.4) rei_ perscont = rei_min705 rei_circont = d_rei_dt*tc + rei_max 706 IF (tc<=-81.4) rei_circont = rei_min 707 707 708 708 ELSE 709 pclc_ perscont(i,k) = 0.710 rei_ perscont = 1.711 ENDIF 712 713 IF ( MAX( contfra(i,k), perscontfra(i,k)) .GT. 0.01 * seuil_neb) THEN714 715 rei = ( rei_ cont * pclc_cont(i,k) + rei_perscont * pclc_perscont(i,k) ) &716 / ( pclc_ cont(i,k) + pclc_perscont(i,k) )709 pclc_circont(i,k) = 0. 710 rei_circont = 1. 711 ENDIF 712 713 IF ( MAX(lincontfra(i,k), circontfra(i,k)) .GT. zepsec ) THEN 714 715 rei = ( rei_lincont * pclc_lincont(i,k) + rei_circont * pclc_circont(i,k) ) & 716 / ( pclc_lincont(i,k) + pclc_circont(i,k) ) 717 717 zfiwp_var = 1000.*(xfiwc(i, k)-xfiwc_nocont(i, k))& 718 718 / (pclc(i, k)-pclc_nocont(i, k))*rhodz(i, k) … … 732 732 733 733 734 rei = ( rei_ cont * pclc_cont(i,k) + rei_perscont * pclc_perscont(i,k) &734 rei = ( rei_lincont * pclc_lincont(i,k) + rei_circont * pclc_circont(i,k) & 735 735 + reice_nocont(i, k) * pclc_nocont(i, k) ) & 736 / ( pclc_ cont(i,k) + pclc_perscont(i,k) + pclc_nocont(i,k) )736 / ( pclc_lincont(i,k) + pclc_circont(i,k) + pclc_nocont(i,k) ) 737 737 738 738 zflwp_var = 1000.*xflwc(i, k)/pclc(i, k)*rhodz(i, k) … … 881 881 DO k = klev, 1, -1 882 882 DO i = 1, klon 883 zclear(i) = zclear(i)*(1.-max(pclc_ cont(i,k)+pclc_perscont(i,k),zcloud(i)))/&883 zclear(i) = zclear(i)*(1.-max(pclc_lincont(i,k)+pclc_circont(i,k),zcloud(i)))/& 884 884 (1.-min(real(zcloud(i),kind=8),1.-zepsec)) 885 885 pct_cont(i) = 1. - zclear(i) 886 zcloud(i) = pclc_ cont(i,k) + pclc_perscont(i,k)886 zcloud(i) = pclc_lincont(i,k) + pclc_circont(i,k) 887 887 IF (paprs(i,k)<prmhc) THEN 888 888 pch_nocont(i) = pch_nocont(i)*(1.-max(pclc_nocont(i,k),zcloudh(i)))/(1.-min(real( & -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
r5631 r5641 25 25 dqi_adj, dqi_sub, dqi_con, dqi_mix, dqvc_adj, & 26 26 dqvc_sub, dqvc_con, dqvc_mix, qsatl, qsati, & 27 cf a_seri, pcf_seri, qva_seri, qia_seri,flight_dist,&28 flight_h2o, qice_ perscont, Tcritcont,&27 cfl_seri, cfc_seri, qtl_seri, qtc_seri,flight_dist,& 28 flight_h2o, qice_lincont, qice_circont, Tcritcont, & 29 29 qcritcont, potcontfraP, potcontfraNP, & 30 30 cloudth_sth, & … … 128 128 USE phys_local_var_mod, ONLY : issrfra100to150, issrfra150to200, issrfra200to250 129 129 USE phys_local_var_mod, ONLY : issrfra250to300, issrfra300to400, issrfra400to500 130 USE phys_local_var_mod, ONLY : dcfa_ini, dqia_ini, dqta_ini, dcfa_sub, dqia_sub, dqta_sub 131 USE phys_local_var_mod, ONLY : dcfa_cir, dqta_cir, dcfa_mix, dqia_mix, dqta_mix 130 USE phys_local_var_mod, ONLY : dcfl_ini, dqil_ini, dqtl_ini, dcfl_sub, dqil_sub, dqtl_sub 131 USE phys_local_var_mod, ONLY : dcfl_cir, dqtl_cir, dcfl_mix, dqil_mix, dqtl_mix 132 USE phys_local_var_mod, ONLY : dcfc_sub, dqic_sub, dqtc_sub, dcfc_mix, dqic_mix, dqtc_mix 132 133 133 134 IMPLICIT NONE … … 190 191 ! INPUT/OUTPUT aviation 191 192 !-------------------------------------------------- 192 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cf a_seri ! linear contrails fraction [-]193 REAL, DIMENSION(klon,klev), INTENT(INOUT):: pcf_seri ! contrails inducedcirrus fraction [-]194 REAL, DIMENSION(klon,klev), INTENT(INOUT):: q va_seri ! linear contrails total specific humidity [kg/kg]195 REAL, DIMENSION(klon,klev), INTENT(INOUT):: q ia_seri ! linear contrails total specific humidity [kg/kg]193 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cfl_seri ! linear contrails fraction [-] 194 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cfc_seri ! contrail cirrus fraction [-] 195 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qtl_seri ! linear contrails total specific humidity [kg/kg] 196 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qtc_seri ! contrail cirrus total specific humidity [kg/kg] 196 197 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_dist ! aviation distance flown within the mesh [m/s/mesh] 197 198 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation H2O emitted within the mesh [kgH2O/s/mesh] … … 251 252 ! for contrails and aviation 252 253 253 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_perscont !--condensed water in contrail induced cirrus used in the radiation scheme [kg/kg] 254 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_lincont !--condensed water in linear contrails used in the radiation scheme [kg/kg] 255 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_circont !--condensed water in contrail cirrus used in the radiation scheme [kg/kg] 254 256 REAL, DIMENSION(klon,klev), INTENT(OUT) :: Tcritcont !--critical temperature for contrail formation [K] 255 257 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qcritcont !--critical specific humidity for contrail formation [kg/kg] … … 332 334 REAL :: delta_z 333 335 ! for contrails 334 REAL, DIMENSION(klon) :: contfra, perscontfra, qcont336 REAL, DIMENSION(klon) :: lincontfra, circontfra, qlincont, qcircont 335 337 REAL, DIMENSION(klon) :: zq_nodeep 336 338 LOGICAL, DIMENSION(klon) :: pt_pron_clds … … 662 664 !--Initialisation 663 665 IF ( ok_plane_contrail ) THEN 664 contfra(:) = 0. 665 qcont(:) = 0. 666 perscontfra(:) = 0. 666 lincontfra(:) = 0. 667 circontfra(:) = 0. 668 qlincont(:) = 0. 669 qcircont(:) = 0. 667 670 ENDIF 668 671 … … 816 819 dqi_adj(:,k), dqi_sub(:,k), dqi_con(:,k), dqi_mix(:,k), dqised(:,k), & 817 820 dqvc_adj(:,k), dqvc_sub(:,k), dqvc_con(:,k), dqvc_mix(:,k), dqvcsed(:,k), & 818 cfa_seri(:,k), pcf_seri(:,k), qva_seri(:,k), qia_seri(:,k), & 819 flight_dist(:,k), flight_h2o(:,k), contfra, perscontfra, qcont, & 821 cfl_seri(:,k), cfc_seri(:,k), qtl_seri(:,k), qtc_seri(:,k), & 822 flight_dist(:,k), flight_h2o(:,k), & 823 lincontfra, circontfra, qlincont, qcircont, & 820 824 Tcritcont(:,k), qcritcont(:,k), potcontfraP(:,k), potcontfraNP(:,k), & 821 dcfa_ini(:,k), dqia_ini(:,k), dqta_ini(:,k), & 822 dcfa_sub(:,k), dqia_sub(:,k), dqta_sub(:,k), & 823 dcfa_cir(:,k), dqta_cir(:,k), & 824 dcfa_mix(:,k), dqia_mix(:,k), dqta_mix(:,k)) 825 dcfl_ini(:,k), dqil_ini(:,k), dqtl_ini(:,k), & 826 dcfl_sub(:,k), dqil_sub(:,k), dqtl_sub(:,k), & 827 dcfl_cir(:,k), dqtl_cir(:,k), & 828 dcfl_mix(:,k), dqil_mix(:,k), dqtl_mix(:,k), & 829 dcfc_sub(:,k), dqic_sub(:,k), dqtc_sub(:,k), & 830 dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k)) 825 831 826 832 DO i = 1, klon … … 1049 1055 !--Contrails precipitate as natural clouds. We save the partition of ice 1050 1056 !--between natural clouds and contrails 1051 !--NB. we use q cont as a temporary variable to save this partition1057 !--NB. we use qlincont / qcircont as a temporary variable to save this partition 1052 1058 DO i = 1, klon 1059 dcf_sub(i,k) = lincontfra(i) 1060 dqi_sub(i,k) = qlincont(i) 1053 1061 IF ( zoliqi(i) .GT. 0. ) THEN 1054 qcont(i) = ( qcont(i) - zqs(i) * contfra(i) ) / zoliqi(i) 1062 qlincont(i) = ( qlincont(i) - zqs(i) * lincontfra(i) ) / zoliqi(i) 1063 qcircont(i) = ( qcircont(i) - zqs(i) * circontfra(i) ) / zoliqi(i) 1055 1064 ELSE 1056 qcont(i) = 0. 1065 qlincont(i) = 0. 1066 qcircont(i) = 0. 1057 1067 ENDIF 1058 1068 ENDDO … … 1095 1105 !--Contrails fraction is left unchanged, but contrails water has changed 1096 1106 DO i = 1, klon 1097 IF ( zoliqi(i) . LE. 0. ) THEN1098 contfra(i) = 0.1099 qc ont(i) = 0.1107 IF ( zoliqi(i) .GT. 0. ) THEN 1108 qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i) 1109 qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i) 1100 1110 ELSE 1101 qcont(i) = zqs(i) * contfra(i) + zoliqi(i) * qcont(i) 1111 lincontfra(i) = 0. 1112 circontfra(i) = 0. 1113 qlincont(i) = 0. 1114 qcircont(i) = 0. 1102 1115 ENDIF 1103 1116 ENDDO … … 1198 1211 !--AB Write diagnostics and tracers for ice supersaturation 1199 1212 IF ( ok_plane_contrail ) THEN 1200 cfa_seri(:,k) = contfra(:) 1201 pcf_seri(:,k) = perscontfra(:) 1202 qva_seri(:,k) = zqs(:) * contfra(:) 1213 cfl_seri(:,k) = lincontfra(:) 1214 cfc_seri(:,k) = circontfra(:) 1215 qtl_seri(:,k) = qlincont(:) 1216 qtc_seri(:,k) = qcircont(:) 1203 1217 DO i = 1, klon 1204 1218 IF ( zoliqi(i) .GT. 0. ) THEN 1205 !--The quantity of ice in linear contrails has been reduced by precipitation 1206 !--with the same factor as the rest of the clouds 1207 qia_seri(i,k) = ( qcont(i) - zqs(i) * contfra(i) ) / zoliqi(i) * radocond(i,k) 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) 1208 1225 ELSE 1209 qia_seri(i,k) = 0. 1210 ENDIF 1211 IF ( ( rneb(i,k) - cfa_seri(i,k) ) .GT. eps ) THEN 1212 !--The in-cloud quantity of ice in persistent contrail cirrus is the same as 1213 !--the one from all natural cirrus clouds 1214 qice_perscont(i,k) = ( radocond(i,k) - qia_seri(i,k) ) & 1215 * perscontfra(i) / ( rneb(i,k) - cfa_seri(i,k) ) 1216 ELSE 1217 qice_perscont(i,k) = 0. 1226 qice_lincont(i,k) = 0. 1227 qice_circont(i,k) = 0. 1218 1228 ENDIF 1219 1229 ENDDO -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90
r5639 r5641 101 101 dqi_adj, dqi_sub, dqi_con, dqi_mix, dqi_sed, & 102 102 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, dqvc_sed, & 103 contfra_in, perscontfra_in, qva_in, qia_in, flight_dist, flight_h2o, & 104 contfra, perscontfra, qcont, Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 105 dcfa_ini, dqia_ini, dqta_ini, dcfa_sub, dqia_sub, dqta_sub, & 106 dcfa_cir, dqta_cir, dcfa_mix, dqia_mix, dqta_mix) 103 lincontfra_in, circontfra_in, qtl_in, qtc_in, flight_dist, flight_h2o, & 104 lincontfra, circontfra, qlincont, qcircont, & 105 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 106 dcfl_ini, dqil_ini, dqtl_ini, dcfl_sub, dqil_sub, dqtl_sub, & 107 dcfl_cir, dqtl_cir, dcfl_mix, dqil_mix, dqtl_mix, & 108 dcfc_sub, dqic_sub, dqtc_sub, dcfc_mix, dqic_mix, dqtc_mix) 107 109 108 110 !---------------------------------------------------------------------- … … 127 129 USE lmdz_lscp_ini, ONLY: beta_pdf_lscp, temp_thresh_pdf_lscp 128 130 USE lmdz_lscp_ini, ONLY: std100_pdf_lscp, k0_pdf_lscp, kappa_pdf_lscp 129 USE lmdz_lscp_ini, ONLY: coef_mixing_lscp, coef_shear_lscp, cooling_rate_ice_thresh 130 131 USE lmdz_lscp_ini, ONLY: ok_plane_contrail, aspect_ratio_contrails 132 USE lmdz_lscp_ini, ONLY: coef_mixing_contrails, coef_shear_contrails 133 USE lmdz_lscp_ini, ONLY: chi_mixing_contrails, linear_contrails_lifetime 131 USE lmdz_lscp_ini, ONLY: coef_mixing_lscp, coef_shear_lscp 132 USE lmdz_lscp_ini, ONLY: aspect_ratio_cirrus, cooling_rate_ice_thresh 133 134 USE lmdz_lscp_ini, ONLY: ok_plane_contrail, aspect_ratio_lincontrails 135 USE lmdz_lscp_ini, ONLY: coef_mixing_lincontrails, coef_shear_lincontrails 136 USE lmdz_lscp_ini, ONLY: chi_mixing_lincontrails, linear_contrails_lifetime 134 137 USE lmdz_aviation, ONLY: contrails_formation 135 138 … … 165 168 ! Input for aviation 166 169 ! 167 REAL, INTENT(IN) , DIMENSION(klon) :: contfra_in! input linear contrails fraction [-]168 REAL, INTENT(IN) , DIMENSION(klon) :: perscontfra_in! input contrail inducedcirrus fraction [-]169 REAL, INTENT(IN) , DIMENSION(klon) :: q va_in ! input linear contrails total specific humidity [kg/kg]170 REAL, INTENT(IN) , DIMENSION(klon) :: q ia_in ! input linear contrails total specific humidity [kg/kg]170 REAL, INTENT(IN) , DIMENSION(klon) :: lincontfra_in ! input linear contrails fraction [-] 171 REAL, INTENT(IN) , DIMENSION(klon) :: circontfra_in ! input contrail cirrus fraction [-] 172 REAL, INTENT(IN) , DIMENSION(klon) :: qtl_in ! input linear contrails total specific humidity [kg/kg] 173 REAL, INTENT(IN) , DIMENSION(klon) :: qtc_in ! input contrail cirrus total specific humidity [kg/kg] 171 174 REAL, INTENT(IN) , DIMENSION(klon) :: flight_dist ! aviation distance flown concentration [m/s/m3] 172 175 REAL, INTENT(IN) , DIMENSION(klon) :: flight_h2o ! aviation emitted H2O concentration [kgH2O/s/m3] … … 206 209 ! NB. idem for the INOUT 207 210 ! 208 REAL, INTENT(INOUT), DIMENSION(klon) :: contfra ! linear contrail fraction [-] 209 REAL, INTENT(INOUT), DIMENSION(klon) :: perscontfra ! linear contrail induced cirrus fraction [-] 210 REAL, INTENT(INOUT), DIMENSION(klon) :: qcont ! linear contrail specific humidity [kg/kg] 211 REAL, INTENT(INOUT), DIMENSION(klon) :: lincontfra ! linear contrail fraction [-] 212 REAL, INTENT(INOUT), DIMENSION(klon) :: circontfra ! contrail cirrus fraction [-] 213 REAL, INTENT(INOUT), DIMENSION(klon) :: qlincont ! linear contrail specific humidity [kg/kg] 214 REAL, INTENT(INOUT), DIMENSION(klon) :: qcircont ! contrail cirrus specific humidity [kg/kg] 211 215 REAL, INTENT(INOUT), DIMENSION(klon) :: Tcritcont ! critical temperature for contrail formation [K] 212 216 REAL, INTENT(INOUT), DIMENSION(klon) :: qcritcont ! critical specific humidity for contrail formation [kg/kg] 213 217 REAL, INTENT(INOUT), DIMENSION(klon) :: potcontfraP ! potential persistent contrail fraction [-] 214 218 REAL, INTENT(INOUT), DIMENSION(klon) :: potcontfraNP ! potential non-persistent contrail fraction [-] 215 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfa_ini ! contrails cloud fraction tendency because of initial formation [s-1] 216 REAL, INTENT(INOUT), DIMENSION(klon) :: dqia_ini ! contrails ice specific humidity tendency because of initial formation [kg/kg/s] 217 REAL, INTENT(INOUT), DIMENSION(klon) :: dqta_ini ! contrails total specific humidity tendency because of initial formation [kg/kg/s] 218 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfa_sub ! contrails cloud fraction tendency because of sublimation [s-1] 219 REAL, INTENT(INOUT), DIMENSION(klon) :: dqia_sub ! contrails ice specific humidity tendency because of sublimation [kg/kg/s] 220 REAL, INTENT(INOUT), DIMENSION(klon) :: dqta_sub ! contrails total specific humidity tendency because of sublimation [kg/kg/s] 221 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfa_cir ! contrails cloud fraction tendency because of conversion in cirrus [s-1] 222 REAL, INTENT(INOUT), DIMENSION(klon) :: dqta_cir ! contrails total specific humidity tendency because of conversion in cirrus [kg/kg/s] 223 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfa_mix ! contrails cloud fraction tendency because of mixing [s-1] 224 REAL, INTENT(INOUT), DIMENSION(klon) :: dqia_mix ! contrails ice specific humidity tendency because of mixing [kg/kg/s] 225 REAL, INTENT(INOUT), DIMENSION(klon) :: dqta_mix ! contrails total specific humidity tendency because of mixing [kg/kg/s] 219 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfl_ini ! linear contrails cloud fraction tendency because of initial formation [s-1] 220 REAL, INTENT(INOUT), DIMENSION(klon) :: dqil_ini ! linear contrails ice specific humidity tendency because of initial formation [kg/kg/s] 221 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtl_ini ! linear contrails total specific humidity tendency because of initial formation [kg/kg/s] 222 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfl_sub ! linear contrails cloud fraction tendency because of sublimation [s-1] 223 REAL, INTENT(INOUT), DIMENSION(klon) :: dqil_sub ! linear contrails ice specific humidity tendency because of sublimation [kg/kg/s] 224 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtl_sub ! linear contrails total specific humidity tendency because of sublimation [kg/kg/s] 225 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfl_cir ! linear contrails cloud fraction tendency because of conversion in cirrus [s-1] 226 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtl_cir ! linear contrails total specific humidity tendency because of conversion in cirrus [kg/kg/s] 227 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfl_mix ! linear contrails cloud fraction tendency because of mixing [s-1] 228 REAL, INTENT(INOUT), DIMENSION(klon) :: dqil_mix ! linear contrails ice specific humidity tendency because of mixing [kg/kg/s] 229 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtl_mix ! linear contrails total specific humidity tendency because of mixing [kg/kg/s] 230 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfc_sub ! contrail cirrus cloud fraction tendency because of sublimation [s-1] 231 REAL, INTENT(INOUT), DIMENSION(klon) :: dqic_sub ! contrail cirrus ice specific humidity tendency because of sublimation [kg/kg/s] 232 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtc_sub ! contrail cirrus total specific humidity tendency because of sublimation [kg/kg/s] 233 REAL, INTENT(INOUT), DIMENSION(klon) :: dcfc_mix ! contrail cirrus cloud fraction tendency because of mixing [s-1] 234 REAL, INTENT(INOUT), DIMENSION(klon) :: dqic_mix ! contrail cirrus ice specific humidity tendency because of mixing [kg/kg/s] 235 REAL, INTENT(INOUT), DIMENSION(klon) :: dqtc_mix ! contrail cirrus total specific humidity tendency because of mixing [kg/kg/s] 226 236 ! 227 237 ! Local … … 273 283 ! 274 284 ! for contrails 275 REAL :: perscontfra_ratio276 285 REAL :: contrails_conversion_factor 277 286 … … 455 464 !--If contrails are activated 456 465 IF ( ok_plane_contrail ) THEN 457 contfra(i) = MAX(0., MIN(cldfra(i), contfra_in(i))) 458 perscontfra(i) = MAX(0., MIN(cldfra(i) - contfra(i), perscontfra_in(i))) 459 qcont(i) = MAX(0., MIN(qcld(i), qva_in(i) + qia_in(i))) 460 461 dcfa_ini(i) = 0. 462 dqia_ini(i) = 0. 463 dqta_ini(i) = 0. 464 dcfa_sub(i) = 0. 465 dqia_sub(i) = 0. 466 dqta_sub(i) = 0. 467 dcfa_cir(i) = 0. 468 dqta_cir(i) = 0. 469 dcfa_mix(i) = 0. 470 dqia_mix(i) = 0. 471 dqta_mix(i) = 0. 466 lincontfra(i) = MAX(0., lincontfra_in(i)) 467 circontfra(i) = MAX(0., circontfra_in(i)) 468 qlincont(i) = MAX(0., qtl_in(i)) 469 qcircont(i) = MAX(0., qtc_in(i)) 470 !--The following barriers are needed since the advection scheme does not 471 !--conserve order relations 472 mixed_fraction = lincontfra(i) + circontfra(i) 473 IF ( mixed_fraction .GT. cldfra(i) ) THEN 474 mixed_fraction = cldfra(i) / mixed_fraction 475 lincontfra(i) = lincontfra(i) * mixed_fraction 476 circontfra(i) = circontfra(i) * mixed_fraction 477 qlincont(i) = qlincont(i) * mixed_fraction 478 qcircont(i) = qcircont(i) * mixed_fraction 479 ENDIF 480 mixed_fraction = qlincont(i) + qcircont(i) 481 IF ( mixed_fraction .GT. qcld(i) ) THEN 482 mixed_fraction = qcld(i) / mixed_fraction 483 lincontfra(i) = lincontfra(i) * mixed_fraction 484 circontfra(i) = circontfra(i) * mixed_fraction 485 qlincont(i) = qlincont(i) * mixed_fraction 486 qcircont(i) = qcircont(i) * mixed_fraction 487 ENDIF 488 489 490 dcfl_ini(i) = 0. 491 dqil_ini(i) = 0. 492 dqtl_ini(i) = 0. 493 dcfl_sub(i) = 0. 494 dqil_sub(i) = 0. 495 dqtl_sub(i) = 0. 496 dcfl_cir(i) = 0. 497 dqtl_cir(i) = 0. 498 dcfl_mix(i) = 0. 499 dqil_mix(i) = 0. 500 dqtl_mix(i) = 0. 501 dcfc_sub(i) = 0. 502 dqic_sub(i) = 0. 503 dqtc_sub(i) = 0. 504 dcfc_mix(i) = 0. 505 dqic_mix(i) = 0. 506 dqtc_mix(i) = 0. 472 507 ELSE 473 contfra(i) = 0. 474 perscontfra(i) = 0. 475 qcont(i) = 0. 508 lincontfra(i) = 0. 509 circontfra(i) = 0. 510 qlincont(i) = 0. 511 qcircont(i) = 0. 476 512 ENDIF 477 513 … … 481 517 !---------------------------------------------------------------------- 482 518 483 !--If there is a contrail484 IF ( contfra(i) .GT. eps ) THEN519 !--If there is a linear contrail 520 IF ( lincontfra(i) .GT. eps ) THEN 485 521 !--We remove contrails from the main class 486 cldfra(i) = cldfra(i) - contfra(i)487 qcld(i) = qcld(i) - q cont(i)488 qvc(i) = qvc(i) - qsat(i) * contfra(i)522 cldfra(i) = cldfra(i) - lincontfra(i) 523 qcld(i) = qcld(i) - qlincont(i) 524 qvc(i) = qvc(i) - qsat(i) * lincontfra(i) 489 525 490 526 !--The contrail is always adjusted to saturation 491 qiceincld = ( q cont(i) /contfra(i) - qsat(i) )527 qiceincld = ( qlincont(i) / lincontfra(i) - qsat(i) ) 492 528 493 529 !--If the ice water content is too low, the cloud is purely sublimated 494 530 IF ( qiceincld .LT. eps ) THEN 495 dcf a_sub(i) = -contfra(i)496 dqi a_sub(i) = - qiceincld *contfra(i)497 dqt a_sub(i) = - qcont(i)498 contfra(i) = 0.499 q cont(i) = 0.500 clrfra(i) = MIN(1., clrfra(i) - dcf a_sub(i))501 qclr(i) = qclr(i) - dqt a_sub(i)531 dcfl_sub(i) = - lincontfra(i) 532 dqil_sub(i) = - qiceincld * lincontfra(i) 533 dqtl_sub(i) = - qlincont(i) 534 lincontfra(i) = 0. 535 qlincont(i) = 0. 536 clrfra(i) = MIN(1., clrfra(i) - dcfl_sub(i)) 537 qclr(i) = qclr(i) - dqtl_sub(i) 502 538 ENDIF ! qiceincld .LT. eps 503 ENDIF ! contfra(i) .GT. eps 504 505 !--If there is a contrail induced cirrus, we save the ratio 506 perscontfra_ratio = perscontfra(i) / MAX(eps, cldfra(i)) 539 ENDIF ! lincontfra(i) .GT. eps 540 541 !--If there is a contrail cirrus 542 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) 547 548 !--The contrail is always adjusted to saturation 549 qiceincld = ( qcircont(i) / circontfra(i) - qsat(i) ) 550 551 !--If the ice water content is too low, the cloud is purely sublimated 552 IF ( qiceincld .LT. eps ) THEN 553 dcfc_sub(i) = - circontfra(i) 554 dqic_sub(i) = - qiceincld * circontfra(i) 555 dqtc_sub(i) = - qcircont(i) 556 circontfra(i) = 0. 557 qcircont(i) = 0. 558 clrfra(i) = MIN(1., clrfra(i) - dcfc_sub(i)) 559 qclr(i) = qclr(i) - dqtc_sub(i) 560 ENDIF ! qiceincld .LT. eps 561 ENDIF ! circontfra(i) .GT. eps 507 562 508 563 … … 640 695 ENDIF ! cldfra(i) .GT. eps 641 696 642 !--If there is a contrail induced cirrus, we restore it643 perscontfra(i) = perscontfra_ratio * cldfra(i)644 645 697 646 698 !-------------------------------------------------------------------------- … … 750 802 ENDIF ! clrfra(i) .GT. eps 751 803 752 753 !--If there is a contrail induced cirrus, we save the ratio754 perscontfra_ratio = perscontfra(i) / MAX(eps, cldfra(i))755 804 756 805 !-------------------------------------- … … 787 836 !-- b / a = bovera = MAX(0.1, cldfra) 788 837 !bovera = MAX(0.1, cldfra(i)) 789 bovera = 0.111111111838 bovera = aspect_ratio_cirrus 790 839 !--P / a is a function of b / a only, that we can calculate 791 840 !-- P / a = RPI * ( 3. * ( 1. + b / a ) - SQRT( (3. + b / a) * (1. + 3. * b / a) ) ) … … 925 974 !-------------------------------------- 926 975 927 IF ( ( contfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN976 IF ( ( lincontfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 928 977 929 978 !-- PART 1 - TURBULENT DIFFUSION … … 950 999 !--are spherical. 951 1000 !-- b / a = bovera = MAX(0.1, cldfra) 952 bovera = aspect_ratio_ contrails1001 bovera = aspect_ratio_lincontrails 953 1002 !--P / a is a function of b / a only, that we can calculate 954 1003 !-- P / a = RPI * ( 3. * ( 1. + b / a ) - SQRT( (3. + b / a) * (1. + 3. * b / a) ) ) … … 961 1010 !-- cldfra = a * b / a * RPI / (P / a) * coef_mix_lscp * cldfra * ( 1. - cldfra ) 962 1011 !-- a = (P / a) / ( coef_mix_lscp * RPI * ( 1. - cldfra ) * (b / a) ) 963 a_mix = Povera / coef_mixing_ contrails / RPI / ( 1. -contfra(i) ) / bovera1012 a_mix = Povera / coef_mixing_lincontrails / RPI / ( 1. - lincontfra(i) ) / bovera 964 1013 !--and finally, 965 1014 !-- N_cld_mix = coef_mix_lscp * cldfra * ( 1. - cldfra ) * cell_area / ( P / a * a ) 966 N_cld_mix = coef_mixing_ contrails * contfra(i) * ( 1. - contfra(i) ) * cell_area(i) &967 / Povera / a_mix1015 N_cld_mix = coef_mixing_lincontrails * lincontfra(i) * ( 1. - lincontfra(i) ) & 1016 * cell_area(i) / Povera / a_mix 968 1017 969 1018 !--The time required for turbulent diffusion to homogenize a region of size … … 994 1043 !--With this, the clouds increase in size along b only, by a factor 995 1044 !--L_shear * SQRT(2.) / 2. (to account for the 45 degrees orientation of the wind) 996 L_shear = coef_shear_ contrails * shear(i) * dz * dtime1045 L_shear = coef_shear_lincontrails * shear(i) * dz * dtime 997 1046 !--therefore, the fraction of clear sky mixed is 998 1047 !-- N_cld_mix * ( a * (b + L_shear * SQRT(2.) / 2.) - a * b ) * RPI / 2. / cell_area … … 1021 1070 !--cloud's vapor without condensing or sublimating ice crystals 1022 1071 qvapinclr_lim = qsat(i) * ( 1. + cldfra_mix / clrfra_mix ) & 1023 - q cont(i) /contfra(i) * cldfra_mix / clrfra_mix1072 - qlincont(i) / lincontfra(i) * cldfra_mix / clrfra_mix 1024 1073 1025 1074 IF ( qvapinclr_lim .LT. 0. ) THEN 1026 1075 !--Whatever we do, the cloud will increase in size 1027 dcf a_mix(i) = clrfra_mix1028 dqt a_mix(i) = clrfra_mix * qclr(i) / clrfra(i)1076 dcfl_mix(i) = clrfra_mix 1077 dqtl_mix(i) = clrfra_mix * qclr(i) / clrfra(i) 1029 1078 ELSE 1030 1079 !--We then calculate the clear sky part where the humidity is lower than … … 1062 1111 !--decreases the size of the clouds 1063 1112 !--For aviation, we increase the chance that the air surrounding contrails 1064 !--is moist. This is quantified with chi_mixing_ contrails1065 sigma_mix = chi_mixing_ contrails * pdf_fra_above_lim &1066 / ( pdf_fra_below_lim + chi_mixing_ contrails * pdf_fra_above_lim )1113 !--is moist. This is quantified with chi_mixing_lincontrails 1114 sigma_mix = chi_mixing_lincontrails * pdf_fra_above_lim & 1115 / ( pdf_fra_below_lim + chi_mixing_lincontrails * pdf_fra_above_lim ) 1067 1116 1068 1117 IF ( pdf_fra_above_lim .GT. eps ) THEN 1069 dcf a_mix(i) = clrfra_mix * sigma_mix1070 dqt a_mix(i) = clrfra_mix * sigma_mix * pdf_q_above_lim / pdf_fra_above_lim1118 dcfl_mix(i) = clrfra_mix * sigma_mix 1119 dqtl_mix(i) = clrfra_mix * sigma_mix * pdf_q_above_lim / pdf_fra_above_lim 1071 1120 ENDIF 1072 1121 1073 1122 IF ( pdf_fra_below_lim .GT. eps ) THEN 1074 qvapincld = q cont(i) /contfra(i)1123 qvapincld = qlincont(i) / lincontfra(i) 1075 1124 qiceincld = qvapincld - qsat(i) 1076 dcf a_mix(i) = dcfa_mix(i) - cldfra_mix * ( 1. - sigma_mix )1077 dqt a_mix(i) = dqta_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qvapincld1078 dqi a_mix(i) = dqia_mix(i) - cldfra_mix * ( 1. - sigma_mix ) * qiceincld1125 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 1079 1128 ENDIF 1080 1129 1081 1130 ENDIF 1082 ENDIF ! ( contfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) 1083 1084 IF ( contfra(i) .GT. eps ) THEN 1085 !--We balance the mixing tendencies between the different cloud classes 1086 mixed_fraction = dcf_mix(i) + dcfa_mix(i) 1087 IF ( mixed_fraction .GT. clrfra(i) ) THEN 1088 mixed_fraction = clrfra(i) / mixed_fraction 1089 dcf_mix(i) = dcf_mix(i) * mixed_fraction 1090 dqvc_mix(i) = dqvc_mix(i) * mixed_fraction 1091 dqi_mix(i) = dqi_mix(i) * mixed_fraction 1092 dcfa_mix(i) = dcfa_mix(i) * mixed_fraction 1093 dqta_mix(i) = dqta_mix(i) * mixed_fraction 1094 ENDIF 1095 1096 !--Add tendencies 1097 contfra(i) = contfra(i) + dcfa_mix(i) 1098 qcont(i) = qcont(i) + dqta_mix(i) 1099 clrfra(i) = clrfra(i) - dcfa_mix(i) 1100 qclr(i) = qclr(i) - dqta_mix(i) 1101 ENDIF 1102 1103 !--Add tendencies 1104 cldfra(i) = cldfra(i) + dcf_mix(i) 1105 qcld(i) = qcld(i) + dqvc_mix(i) + dqi_mix(i) 1106 qvc(i) = qvc(i) + dqvc_mix(i) 1107 clrfra(i) = clrfra(i) - dcf_mix(i) 1108 qclr(i) = qclr(i) - dqvc_mix(i) - dqi_mix(i) 1109 1110 !--If there is a contrail induced cirrus, we restore it 1111 perscontfra(i) = perscontfra_ratio * cldfra(i) 1112 1113 1114 !--------------------------------------- 1115 !-- ICE SEDIMENTATION -- 1116 !--------------------------------------- 1117 ! 1118 !--If ice supersaturation is activated, the cloud properties are prognostic. 1119 !--The falling ice is then partly considered a new cloud in the gridbox. 1120 !--BEWARE with this parameterisation, we can create a new cloud with a much 1121 !--different ice water content and water vapor content than the existing cloud 1122 !--(if it exists). This implies than unphysical fluxes of ice and vapor 1123 !--occur between the existing cloud and the newly formed cloud (from sedimentation). 1124 !--Note also that currently, the precipitation scheme assume a maximum 1125 !--random overlap, meaning that the new formed clouds will not be affected 1126 !--by vertical wind shear. 1127 ! 1128 IF ( icesed_flux(i) .GT. 0. ) THEN 1129 1130 clrfra_sed = MIN(clrfra(i), cldfra_above(i) - cldfra(i)) 1131 1132 IF ( ( clrfra_sed .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 1133 1134 qiceincld = qice_sedim(i) / cldfra_above(i) 1135 IF ( ok_unadjusted_clouds .AND. .NOT. ok_warm_cloud ) THEN 1136 tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 1137 qvapinclr_lim = qsat(i) - qiceincld / ( 1. - EXP( - dtime * tauinv_depsub ) ) 1138 ELSE 1139 qvapinclr_lim = qsat(i) - qiceincld 1140 ENDIF 1131 ENDIF ! ( lincontfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) 1132 1133 IF ( ( circontfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 1134 1135 !-- PART 1 - TURBULENT DIFFUSION 1136 1137 !--Clouds within the mesh are assumed to be ellipses. The length of the 1138 !--semi-major axis is a and the length of the semi-minor axis is b. 1139 !--N_cld_mix is the number of clouds in contact with clear sky, and can be non-integer. 1140 !--In particular, it is 0 if cldfra = 1. 1141 !--clouds_perim is the total perimeter of the clouds within the mesh, 1142 !--not considering interfaces with other meshes (only the interfaces with clear 1143 !--sky are taken into account). 1144 !-- 1145 !--The area of each cloud is A = a * b * RPI, 1146 !--and the perimeter of each cloud is 1147 !-- P ~= RPI * ( 3 * (a + b) - SQRT( (3 * a + b) * (a + 3 * b) ) ) 1148 !-- 1149 !--With cell_area the area of the cell, we have: 1150 !-- cldfra = A * N_cld_mix / cell_area 1151 !-- clouds_perim = P * N_cld_mix 1152 !-- 1153 !--We assume that the ratio between b and a is a function of 1154 !--cldfra such that it is 1 for cldfra = 1 and it is low for little cldfra, because 1155 !--if cldfra is low the clouds are linear, and if cldfra is high, the clouds 1156 !--are spherical. 1157 !-- b / a = bovera = MAX(0.1, cldfra) 1158 bovera = aspect_ratio_cirrus 1159 !--P / a is a function of b / a only, that we can calculate 1160 !-- P / a = RPI * ( 3. * ( 1. + b / a ) - SQRT( (3. + b / a) * (1. + 3. * b / a) ) ) 1161 Povera = RPI * ( 3. * (1. + bovera) - SQRT( (3. + bovera) * (1. + 3. * bovera) ) ) 1162 1163 !--The clouds perimeter is imposed using the formula from Morcrette 2012, 1164 !--based on observations. 1165 !-- clouds_perim / cell_area = N_cld_mix * ( P / a * a ) / cell_area = coef_mix_lscp * cldfra * ( 1. - cldfra ) 1166 !--With cldfra = a * ( b / a * a ) * RPI * N_cld_mix / cell_area, we have: 1167 !-- cldfra = a * b / a * RPI / (P / a) * coef_mix_lscp * cldfra * ( 1. - cldfra ) 1168 !-- a = (P / a) / ( coef_mix_lscp * RPI * ( 1. - cldfra ) * (b / a) ) 1169 a_mix = Povera / coef_mixing_lscp / RPI / ( 1. - circontfra(i) ) / bovera 1170 !--and finally, 1171 !-- N_cld_mix = coef_mix_lscp * cldfra * ( 1. - cldfra ) * cell_area / ( P / a * a ) 1172 N_cld_mix = coef_mixing_lscp * circontfra(i) * ( 1. - circontfra(i) ) & 1173 * cell_area(i) / Povera / a_mix 1174 1175 !--The time required for turbulent diffusion to homogenize a region of size 1176 !--L_mix is defined as (L_mix**2/tke_dissip)**(1./3.) (Pope, 2000; Field et al., 2014) 1177 !--We compute L_mix and assume that the cloud is mixed over this length 1178 L_mix = SQRT( dtime**3 * pbl_eps(i) ) 1179 !--The mixing length cannot be greater than the semi-minor axis. In this case, 1180 !--the entire cloud is mixed. 1181 L_mix = MIN(L_mix, a_mix * bovera) 1182 1183 !--The fraction of clear sky mixed is 1184 !-- N_cld_mix * ( (a + L_mix) * (b + L_mix) - a * b ) * RPI / cell_area 1185 clrfra_mix = N_cld_mix * RPI / cell_area(i) & 1186 * ( a_mix * ( 1. + bovera ) * L_mix + L_mix**2 ) 1187 !--The fraction of clear sky mixed is 1188 !-- N_cld_mix * ( a * b - (a - L_mix) * (b - L_mix) ) * RPI / cell_area 1189 cldfra_mix = N_cld_mix * RPI / cell_area(i) & 1190 * ( a_mix * ( 1. + bovera ) * L_mix - L_mix**2 ) 1191 1192 1193 !-- PART 2 - SHEARING 1194 1195 !--The clouds are then sheared. We keep the shape and number 1196 !--assumptions from before. The clouds are sheared along their 1197 !--semi-major axis (a_mix), on the entire cell heigh dz. 1198 !--The increase in size is 1199 L_shear = coef_shear_lscp * shear(i) * dz * dtime 1200 !--therefore, the fraction of clear sky mixed is 1201 !-- N_cld_mix * ( (a + L_shear) * b - a * b ) * RPI / 2. / cell_area 1202 !--and the fraction of cloud mixed is 1203 !-- N_cld_mix * ( (a * b) - (a - L_shear) * b ) * RPI / 2. / cell_area 1204 !--(note that they are equal) 1205 shear_fra = RPI * L_shear * a_mix * bovera / 2. * N_cld_mix / cell_area(i) 1206 !--and the environment and cloud mixed fractions are the same, 1207 !--which we add to the previous calculated mixed fractions. 1208 !--We therefore assume that the sheared clouds and the turbulent 1209 !--mixed clouds are different. 1210 clrfra_mix = clrfra_mix + shear_fra 1211 cldfra_mix = cldfra_mix + shear_fra 1212 1213 1214 !-- PART 3 - CALCULATION OF THE MIXING PROPERTIES 1215 1216 clrfra_mix = MAX(eps, MIN(clrfra(i), clrfra_mix)) 1217 cldfra_mix = MAX(eps, MIN(cldfra(i), cldfra_mix)) 1218 1219 !--We compute the limit vapor in clear sky where the mixed cloud could not 1220 !--survive if all the ice crystals were sublimated. Note that here we assume, 1221 !--for growth or reduction of the cloud, that the mixed cloud is adjusted 1222 !--to saturation, ie the vapor in the mixed cloud is qsat. This is only a 1223 !--diagnostic, and if the cloud size is increased, we add the new vapor to the 1224 !--cloud's vapor without condensing or sublimating ice crystals 1225 qvapinclr_lim = qsat(i) * ( 1. + cldfra_mix / clrfra_mix ) & 1226 - qcircont(i) / circontfra(i) * cldfra_mix / clrfra_mix 1227 1228 IF ( qvapinclr_lim .LT. 0. ) THEN 1229 !--Whatever we do, the cloud will increase in size 1230 dcfl_mix(i) = clrfra_mix 1231 dqtl_mix(i) = clrfra_mix * qclr(i) / clrfra(i) 1232 ELSE 1233 !--We then calculate the clear sky part where the humidity is lower than 1234 !--qvapinclr_lim, and the part where it is higher than qvapinclr_lim 1235 !--This is the clear-sky PDF calculated in the condensation section. Note 1236 !--that if we are here, we necessarily went through the condensation part 1237 !--because the clear sky fraction can only be reduced by condensation. 1238 !--Thus the `pdf_xxx` variables are well defined. 1141 1239 1142 1240 rhl_clr = qclr(i) / clrfra(i) / qsatl(i) * 100. … … 1160 1258 ENDIF 1161 1259 1260 pdf_fra_below_lim = clrfra(i) - pdf_fra_above_lim 1261 1262 !--sigma_mix is the ratio of the surroundings of the clouds where mixing 1263 !--increases the size of the cloud, to the total surroundings of the clouds. 1264 !--This implies that ( 1. - sigma_mix ) quantifies the ratio where mixing 1265 !--decreases the size of the clouds 1266 sigma_mix = pdf_fra_above_lim / ( pdf_fra_below_lim + pdf_fra_above_lim ) 1267 1268 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 1271 ENDIF 1272 1273 IF ( pdf_fra_below_lim .GT. eps ) THEN 1274 qvapincld = qcircont(i) / circontfra(i) 1275 qiceincld = qvapincld - qsat(i) 1276 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 1279 ENDIF 1280 1281 ENDIF 1282 ENDIF ! ( circontfra(i) .GT. eps ) .AND. ( clrfra(i) .GT. eps ) 1283 1284 !--We balance the mixing tendencies between the different cloud classes 1285 mixed_fraction = dcf_mix(i) + dcfl_mix(i) + dcfc_mix(i) 1286 IF ( mixed_fraction .GT. clrfra(i) ) THEN 1287 mixed_fraction = clrfra(i) / mixed_fraction 1288 dcf_mix(i) = dcf_mix(i) * mixed_fraction 1289 dqvc_mix(i) = dqvc_mix(i) * mixed_fraction 1290 dqi_mix(i) = dqi_mix(i) * mixed_fraction 1291 dcfl_mix(i) = dcfl_mix(i) * mixed_fraction 1292 dqtl_mix(i) = dqtl_mix(i) * mixed_fraction 1293 dqil_mix(i) = dqil_mix(i) * mixed_fraction 1294 dcfc_mix(i) = dcfc_mix(i) * mixed_fraction 1295 dqtc_mix(i) = dqtc_mix(i) * mixed_fraction 1296 dqic_mix(i) = dqic_mix(i) * mixed_fraction 1297 ENDIF 1298 1299 IF ( lincontfra(i) .GT. eps ) THEN 1300 !--Add tendencies 1301 lincontfra(i) = lincontfra(i) + dcfl_mix(i) 1302 qlincont(i) = qlincont(i) + dqtl_mix(i) 1303 clrfra(i) = clrfra(i) - dcfl_mix(i) 1304 qclr(i) = qclr(i) - dqtl_mix(i) 1305 ENDIF 1306 1307 IF ( circontfra(i) .GT. eps ) THEN 1308 !--Add tendencies 1309 circontfra(i) = circontfra(i) + dcfc_mix(i) 1310 qcircont(i) = qcircont(i) + dqtc_mix(i) 1311 clrfra(i) = clrfra(i) - dcfc_mix(i) 1312 qclr(i) = qclr(i) - dqtc_mix(i) 1313 ENDIF 1314 1315 !--Add tendencies 1316 cldfra(i) = cldfra(i) + dcf_mix(i) 1317 qcld(i) = qcld(i) + dqvc_mix(i) + dqi_mix(i) 1318 qvc(i) = qvc(i) + dqvc_mix(i) 1319 clrfra(i) = clrfra(i) - dcf_mix(i) 1320 qclr(i) = qclr(i) - dqvc_mix(i) - dqi_mix(i) 1321 1322 1323 !--------------------------------------- 1324 !-- ICE SEDIMENTATION -- 1325 !--------------------------------------- 1326 ! 1327 !--If ice supersaturation is activated, the cloud properties are prognostic. 1328 !--The falling ice is then partly considered a new cloud in the gridbox. 1329 !--BEWARE with this parameterisation, we can create a new cloud with a much 1330 !--different ice water content and water vapor content than the existing cloud 1331 !--(if it exists). This implies than unphysical fluxes of ice and vapor 1332 !--occur between the existing cloud and the newly formed cloud (from sedimentation). 1333 !--Note also that currently, the precipitation scheme assume a maximum 1334 !--random overlap, meaning that the new formed clouds will not be affected 1335 !--by vertical wind shear. 1336 ! 1337 IF ( icesed_flux(i) .GT. 0. ) THEN 1338 1339 clrfra_sed = MIN(clrfra(i), cldfra_above(i) - cldfra(i)) 1340 1341 IF ( ( clrfra_sed .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 1342 1343 qiceincld = qice_sedim(i) / cldfra_above(i) 1344 IF ( ok_unadjusted_clouds .AND. .NOT. ok_warm_cloud ) THEN 1345 tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 1346 qvapinclr_lim = qsat(i) - qiceincld / ( 1. - EXP( - dtime * tauinv_depsub ) ) 1347 ELSE 1348 qvapinclr_lim = qsat(i) - qiceincld 1349 ENDIF 1350 1351 rhl_clr = qclr(i) / clrfra(i) / qsatl(i) * 100. 1352 pdf_x = qvapinclr_lim / qsatl(i) * 100. 1353 pdf_loc = rhl_clr - pdf_scale(i) * pdf_gamma(i) 1354 pdf_x = qsat(i) / qsatl(i) * 100. 1355 pdf_y = LOG( MAX( ( pdf_x - pdf_loc ) / pdf_scale(i), eps) ) * pdf_alpha(i) 1356 IF ( pdf_y .GT. 10. ) THEN !--Avoid overflows 1357 pdf_fra_above_lim = 0. 1358 pdf_q_above_lim = 0. 1359 ELSEIF ( pdf_y .LT. -10. ) THEN 1360 pdf_fra_above_lim = clrfra(i) 1361 pdf_q_above_lim = qclr(i) 1362 ELSE 1363 pdf_y = EXP( pdf_y ) 1364 pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y ) 1365 pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_gamma(i) 1366 pdf_fra_above_lim = EXP( - pdf_y ) * clrfra(i) 1367 pdf_q_above_lim = ( pdf_e3 * clrfra(i) & 1368 + pdf_loc * pdf_fra_above_lim ) * qsatl(i) / 100. 1369 ENDIF 1370 1162 1371 IF ( pdf_fra_above_lim .GT. eps ) THEN 1163 1372 dcf_sed(i) = clrfra_sed * pdf_fra_above_lim / clrfra(i) … … 1186 1395 1187 1396 1188 !--We put back contrails in the clouds class 1189 cldfra(i) = cldfra(i) + contfra(i) 1190 qcld(i) = qcld(i) + qcont(i) 1191 qvc(i) = qvc(i) + qsat(i) * contfra(i) 1397 IF ( ( lincontfra(i) + circontfra(i) ) .GT. 0. ) THEN 1398 !--We put back contrails in the clouds class 1399 cldfra(i) = cldfra(i) + lincontfra(i) + circontfra(i) 1400 qcld(i) = qcld(i) + qlincont(i) + qcircont(i) 1401 qvc(i) = qvc(i) + qsat(i) * ( lincontfra(i) + circontfra(i) ) 1402 ENDIF 1192 1403 1193 1404 … … 1267 1478 keepgoing, pt_pron_clds, & 1268 1479 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 1269 dcf a_ini, dqia_ini, dqta_ini)1480 dcfl_ini, dqil_ini, dqtl_ini) 1270 1481 1271 1482 DO i = 1, klon … … 1275 1486 IF ( cldfra(i) .GE. ( 1. - cfcon(i) - eps ) ) THEN 1276 1487 contrails_conversion_factor = 1. 1277 ELSEIF ( contfra(i) .LT. 1.e-6 ) THEN1488 ELSEIF ( lincontfra(i) .LT. 1.e-6 ) THEN 1278 1489 contrails_conversion_factor = 1. 1279 1490 ELSE … … 1286 1497 * ( 1. - cldfra(i) / ( 1. - cfcon(i) ) )**0.1 ) 1287 1498 ENDIF 1288 dcfa_cir(i) = - contrails_conversion_factor * contfra(i) 1289 dqta_cir(i) = - contrails_conversion_factor * qcont(i) 1499 dcfl_cir(i) = - contrails_conversion_factor * lincontfra(i) 1500 dqtl_cir(i) = - contrails_conversion_factor * qlincont(i) 1501 1502 dcfl_ini(i) = MIN(MIN(dcfl_ini(i), issrfra(i)), 1. - cfcon(i) - cldfra(i)) 1503 dqtl_ini(i) = MIN(MIN(dqtl_ini(i), qissr(i)), qtot_in(i) - qcld(i)) 1290 1504 1291 1505 !--Add tendencies 1292 issrfra(i) = MAX(0., issrfra(i) - dcfa_ini(i)) 1293 qissr(i) = MAX(0., qissr(i) - dqta_ini(i)) 1294 clrfra(i) = MAX(0., clrfra(i) - dcfa_ini(i)) 1295 qclr(i) = MAX(0., qclr(i) - dqta_ini(i)) 1296 1297 cldfra(i) = MAX(0., MIN(1. - cfcon(i), cldfra(i) + dcfa_ini(i))) 1298 qcld(i) = MAX(0., MIN(qtot_in(i), qcld(i) + dqta_ini(i))) 1299 qvc(i) = MAX(0., MIN(qcld(i), qvc(i) + dcfa_ini(i) * qsat(i))) 1300 contfra(i) = MAX(0., MIN(cldfra(i), contfra(i) + dcfa_cir(i) + dcfa_ini(i))) 1301 qcont(i) = MAX(0., MIN(qcld(i), qcont(i) + dqta_cir(i) + dqta_ini(i))) 1302 perscontfra(i) = perscontfra(i) - dcfa_cir(i) 1506 issrfra(i) = issrfra(i) - dcfl_ini(i) 1507 qissr(i) = qissr(i) - dqtl_ini(i) 1508 clrfra(i) = clrfra(i) - dcfl_ini(i) 1509 qclr(i) = qclr(i) - dqtl_ini(i) 1510 1511 cldfra(i) = cldfra(i) + dcfl_ini(i) 1512 qcld(i) = qcld(i) + dqtl_ini(i) 1513 qvc(i) = MIN(qcld(i), qvc(i) + dcfl_ini(i) * qsat(i)) 1514 lincontfra(i) = lincontfra(i) + dcfl_cir(i) + dcfl_ini(i) 1515 qlincont(i) = qlincont(i) + dqtl_cir(i) + dqtl_ini(i) 1516 circontfra(i) = circontfra(i) - dcfl_cir(i) 1517 qcircont(i) = qcircont(i) - dqtl_cir(i) 1303 1518 1304 1519 !--Diagnostics 1305 dcfa_ini(i) = dcfa_ini(i) / dtime 1306 dqia_ini(i) = dqia_ini(i) / dtime 1307 dqta_ini(i) = dqta_ini(i) / dtime 1308 dcfa_sub(i) = dcfa_sub(i) / dtime 1309 dqia_sub(i) = dqta_sub(i) / dtime 1310 dqta_sub(i) = dqta_sub(i) / dtime 1311 dcfa_cir(i) = dcfa_cir(i) / dtime 1312 dqta_cir(i) = dqta_cir(i) / dtime 1313 dcfa_mix(i) = dcfa_mix(i) / dtime 1314 dqia_mix(i) = dqia_mix(i) / dtime 1315 dqta_mix(i) = dqta_mix(i) / dtime 1520 dcfl_ini(i) = dcfl_ini(i) / dtime 1521 dqil_ini(i) = dqil_ini(i) / dtime 1522 dqtl_ini(i) = dqtl_ini(i) / dtime 1523 dcfl_sub(i) = dcfl_sub(i) / dtime 1524 dqil_sub(i) = dqil_sub(i) / dtime 1525 dqtl_sub(i) = dqtl_sub(i) / dtime 1526 dcfl_cir(i) = dcfl_cir(i) / dtime 1527 dqtl_cir(i) = dqtl_cir(i) / dtime 1528 dcfl_mix(i) = dcfl_mix(i) / dtime 1529 dqil_mix(i) = dqil_mix(i) / dtime 1530 dqtl_mix(i) = dqtl_mix(i) / dtime 1531 dcfc_sub(i) = dcfc_sub(i) / dtime 1532 dqic_sub(i) = dqic_sub(i) / dtime 1533 dqtc_sub(i) = dqtc_sub(i) / dtime 1534 dcfc_mix(i) = dcfc_mix(i) / dtime 1535 dqic_mix(i) = dqic_mix(i) / dtime 1536 dqtc_mix(i) = dqtc_mix(i) / dtime 1316 1537 1317 1538 !------------------------------------------- … … 1322 1543 !--If the cloud is too small, it is sublimated. 1323 1544 cldfra(i) = 0. 1324 contfra(i)= 0.1325 perscontfra(i) = 0.1326 1545 qcld(i) = 0. 1327 1546 qvc(i) = 0. 1328 qcont(i) = 0. 1547 lincontfra(i) = 0. 1548 qlincont(i) = 0. 1549 circontfra(i) = 0. 1550 qcircont(i) = 0. 1329 1551 qincld(i) = qsat(i) 1330 1552 ELSE … … 1332 1554 ENDIF ! cldfra .LT. eps 1333 1555 1334 IF ( contfra(i) .LT. eps ) THEN1335 contfra(i) = 0.1336 q cont(i) = 0.1556 IF ( lincontfra(i) .LT. eps ) THEN 1557 lincontfra(i) = 0. 1558 qlincont(i) = 0. 1337 1559 ENDIF 1338 1560 1339 IF ( perscontfra(i) .LT. eps ) perscontfra(i) = 0. 1561 IF ( circontfra(i) .LT. eps ) THEN 1562 circontfra(i) = 0. 1563 qcircont(i) = 0. 1564 ENDIF 1340 1565 1341 1566 ENDIF ! keepgoing -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_ini.f90
r5631 r5641 206 206 REAL, SAVE, PROTECTED :: delta_hetfreez=0.85 ! [-] value between 0 and 1 to simulate for heterogeneous freezing. 207 207 !$OMP THREADPRIVATE(delta_hetfreez) 208 209 REAL, SAVE, PROTECTED :: aspect_ratio_cirrus=1./9. ! [-] aspect ratio of natural cirrus clouds 210 !$OMP THREADPRIVATE(aspect_ratio_cirrus) 208 211 209 212 REAL, SAVE, PROTECTED :: coef_mixing_lscp=1.E-3 ! [-] tuning coefficient for the mixing process … … 219 222 !$OMP THREADPRIVATE(ok_plane_contrail) 220 223 221 REAL, SAVE, PROTECTED :: aspect_ratio_contrails=.1 ! [-] aspect ratio of the contrails clouds 222 !$OMP THREADPRIVATE(aspect_ratio_contrails) 223 224 REAL, SAVE, PROTECTED :: coef_mixing_contrails ! [-] tuning coefficient for the contrails mixing process 225 !$OMP THREADPRIVATE(coef_mixing_contrails) 226 227 REAL, SAVE, PROTECTED :: coef_shear_contrails ! [-] additional coefficient for the contrails shearing process (subprocess of the contrails mixing process) 228 !$OMP THREADPRIVATE(coef_shear_contrails) 229 230 REAL, SAVE, PROTECTED :: chi_mixing_contrails=1. ! [-] factor for increasing the chance that moist air is surrounding contrails 231 !$OMP THREADPRIVATE(chi_mixing_contrails) 232 233 REAL, SAVE, PROTECTED :: rm_ice_crystals_contrails=7.5E-6 ! [m] geometric radius of ice crystals in contrails 234 !$OMP THREADPRIVATE(rm_ice_crystals_contrails) 224 REAL, SAVE, PROTECTED :: aspect_ratio_lincontrails=.1 ! [-] aspect ratio of linear contrails 225 !$OMP THREADPRIVATE(aspect_ratio_lincontrails) 226 227 REAL, SAVE, PROTECTED :: coef_mixing_lincontrails ! [-] tuning coefficient for the linear contrails mixing process 228 !$OMP THREADPRIVATE(coef_mixing_lincontrails) 229 230 REAL, SAVE, PROTECTED :: coef_shear_lincontrails ! [-] additional coefficient for the linear contrails shearing process (subprocess of the contrails mixing process) 231 !$OMP THREADPRIVATE(coef_shear_lincontrails) 232 233 REAL, SAVE, PROTECTED :: chi_mixing_lincontrails=3. ! [-] factor for increasing the chance that moist air is surrounding linear contrails 234 !$OMP THREADPRIVATE(chi_mixing_lincontrails) 235 235 236 236 REAL, SAVE, PROTECTED :: EI_H2O_aviation=1.25 ! [kgH2O/kg] emission index of water vapor for a given fuel type … … 497 497 CALL getin_p('b_homofreez',b_homofreez) 498 498 CALL getin_p('delta_hetfreez',delta_hetfreez) 499 CALL getin_p('aspect_ratio_cirrus',aspect_ratio_cirrus) 499 500 CALL getin_p('coef_mixing_lscp',coef_mixing_lscp) 500 501 CALL getin_p('coef_shear_lscp',coef_shear_lscp) 501 502 ! for aviation 502 CALL getin_p('aspect_ratio_contrails',aspect_ratio_contrails) 503 coef_mixing_contrails=coef_mixing_lscp 504 CALL getin_p('coef_mixing_contrails',coef_mixing_contrails) 505 coef_shear_contrails=coef_shear_lscp 506 CALL getin_p('coef_shear_contrails',coef_shear_contrails) 507 CALL getin_p('chi_mixing_contrails',chi_mixing_contrails) 508 CALL getin_p('rm_ice_crystals_contrails',rm_ice_crystals_contrails) 503 CALL getin_p('aspect_ratio_lincontrails',aspect_ratio_lincontrails) 504 coef_mixing_lincontrails=coef_mixing_lscp 505 CALL getin_p('coef_mixing_lincontrails',coef_mixing_lincontrails) 506 coef_shear_lincontrails=coef_shear_lscp 507 CALL getin_p('coef_shear_lincontrails',coef_shear_lincontrails) 508 CALL getin_p('chi_mixing_lincontrails',chi_mixing_lincontrails) 509 509 CALL getin_p('EI_H2O_aviation',EI_H2O_aviation) 510 510 CALL getin_p('qheat_fuel_aviation',qheat_fuel_aviation) … … 597 597 WRITE(lunout,*) 'lscp_ini, b_homofreez:', b_homofreez 598 598 WRITE(lunout,*) 'lscp_ini, delta_hetfreez', delta_hetfreez 599 WRITE(lunout,*) 'lscp_ini, aspect_ratio_cirrus:', aspect_ratio_cirrus 599 600 WRITE(lunout,*) 'lscp_ini, coef_mixing_lscp:', coef_mixing_lscp 600 601 WRITE(lunout,*) 'lscp_ini, coef_shear_lscp:', coef_shear_lscp 601 602 ! for aviation 602 WRITE(lunout,*) 'lscp_ini, aspect_ratio_contrails:', aspect_ratio_contrails 603 WRITE(lunout,*) 'lscp_ini, coef_mixing_contrails:', coef_mixing_contrails 604 WRITE(lunout,*) 'lscp_ini, coef_shear_contrails:', coef_shear_contrails 605 WRITE(lunout,*) 'lscp_ini, chi_mixing_contrails:', chi_mixing_contrails 606 WRITE(lunout,*) 'lscp_ini, rm_ice_crystals_contrails:', rm_ice_crystals_contrails 603 WRITE(lunout,*) 'lscp_ini, aspect_ratio_lincontrails:', aspect_ratio_lincontrails 604 WRITE(lunout,*) 'lscp_ini, coef_mixing_lincontrails:', coef_mixing_lincontrails 605 WRITE(lunout,*) 'lscp_ini, coef_shear_lincontrails:', coef_shear_lincontrails 606 WRITE(lunout,*) 'lscp_ini, chi_mixing_lincontrails:', chi_mixing_lincontrails 607 607 WRITE(lunout,*) 'lscp_ini, EI_H2O_aviation:', EI_H2O_aviation 608 608 WRITE(lunout,*) 'lscp_ini, qheat_fuel_aviation:', qheat_fuel_aviation -
LMDZ6/branches/contrails/libf/phylmd/phyetat0_mod.f90
r5626 r5641 23 23 falb_dir, falb_dif, prw_ancien, prlw_ancien, prsw_ancien, prbsw_ancien, & 24 24 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, qbs_ancien, & 25 cf_ancien, qvc_ancien, qvcon, qccon, cf a_ancien, pcf_ancien, qva_ancien, qia_ancien, &25 cf_ancien, qvc_ancien, qvcon, qccon, cfl_ancien, cfc_ancien, qtl_ancien, qtc_ancien, & 26 26 radpas, radsol, rain_fall, & 27 27 ratqs, rnebcon, rugoro, sig1, snow_fall, bs_fall, solaire_etat0, sollw, sollwdown, & … … 425 425 ! cas specifique des variables de l'aviation 426 426 IF ( ok_plane_contrail ) THEN 427 ancien_ok=ancien_ok.AND.phyetat0_get(cf a_ancien,"CFAANCIEN","CFAANCIEN",0.)428 ancien_ok=ancien_ok.AND.phyetat0_get( pcf_ancien,"PCFANCIEN","PCFANCIEN",0.)429 ancien_ok=ancien_ok.AND.phyetat0_get(q va_ancien,"QVAANCIEN","QVAANCIEN",0.)430 ancien_ok=ancien_ok.AND.phyetat0_get(q ia_ancien,"QIAANCIEN","QIAANCIEN",0.)431 ELSE 432 cf a_ancien(:,:)=0.433 pcf_ancien(:,:)=0.434 q va_ancien(:,:)=0.435 q ia_ancien(:,:)=0.427 ancien_ok=ancien_ok.AND.phyetat0_get(cfl_ancien,"CFLANCIEN","CFLANCIEN",0.) 428 ancien_ok=ancien_ok.AND.phyetat0_get(cfc_ancien,"CFCANCIEN","CFCANCIEN",0.) 429 ancien_ok=ancien_ok.AND.phyetat0_get(qtl_ancien,"QTLANCIEN","QTLANCIEN",0.) 430 ancien_ok=ancien_ok.AND.phyetat0_get(qtc_ancien,"QTCANCIEN","QTCANCIEN",0.) 431 ELSE 432 cfl_ancien(:,:)=0. 433 cfc_ancien(:,:)=0. 434 qtl_ancien(:,:)=0. 435 qtc_ancien(:,:)=0. 436 436 ENDIF 437 437 … … 464 464 465 465 IF ( ok_plane_contrail ) THEN 466 IF ( ( maxval(cf a_ancien).EQ.minval(cfa_ancien) ) .OR. &467 ( maxval( pcf_ancien).EQ.minval(pcf_ancien) ) .OR. &468 ( maxval(q va_ancien).EQ.minval(qva_ancien) ) .OR. &469 ( maxval(q ia_ancien).EQ.minval(qia_ancien) ) ) THEN466 IF ( ( maxval(cfl_ancien).EQ.minval(cfl_ancien) ) .OR. & 467 ( maxval(cfc_ancien).EQ.minval(cfc_ancien) ) .OR. & 468 ( maxval(qtl_ancien).EQ.minval(qtl_ancien) ) .OR. & 469 ( maxval(qtc_ancien).EQ.minval(qtc_ancien) ) ) THEN 470 470 ancien_ok=.false. 471 471 ENDIF -
LMDZ6/branches/contrails/libf/phylmd/phyredem.f90
r5626 r5641 24 24 ql_ancien, qs_ancien, qbs_ancien, cf_ancien, & 25 25 qvcon, qccon, & 26 qvc_ancien, cf a_ancien, pcf_ancien, &27 q va_ancien, qia_ancien, u_ancien, v_ancien, &26 qvc_ancien, cfl_ancien, cfc_ancien, & 27 qtl_ancien, qtc_ancien, u_ancien, v_ancien, & 28 28 clwcon, rnebcon, ratqs, pbl_tke, & 29 29 wake_delta_pbl_tke, zmax0, f0, sig1, w01, & … … 261 261 262 262 IF ( ok_plane_contrail ) THEN 263 CALL put_field(pass,"CF AANCIEN", "CFAANCIEN", cfa_ancien)264 CALL put_field(pass," PCFANCIEN", "PCFANCIEN", pcf_ancien)265 CALL put_field(pass,"Q VAANCIEN", "QVAANCIEN", qva_ancien)266 CALL put_field(pass,"Q IAANCIEN", "QIAANCIEN", qia_ancien)263 CALL put_field(pass,"CFLANCIEN", "CFLANCIEN", cfl_ancien) 264 CALL put_field(pass,"CFCANCIEN", "CFCANCIEN", cfc_ancien) 265 CALL put_field(pass,"QTLANCIEN", "QTLANCIEN", qtl_ancien) 266 CALL put_field(pass,"QTCANCIEN", "QTCANCIEN", qtc_ancien) 267 267 ENDIF 268 268 -
LMDZ6/branches/contrails/libf/phylmd/phys_local_var_mod.F90
r5618 r5641 671 671 REAL, SAVE, ALLOCATABLE :: d_q_avi(:,:) 672 672 !$OMP THREADPRIVATE(d_q_avi) 673 REAL, SAVE, ALLOCATABLE :: cf a_seri(:,:), d_cfa_dyn(:,:)674 !$OMP THREADPRIVATE(cf a_seri, d_cfa_dyn)675 REAL, SAVE, ALLOCATABLE :: pcf_seri(:,:), d_pcf_dyn(:,:)676 !$OMP THREADPRIVATE( pcf_seri, d_pcf_dyn)677 REAL, SAVE, ALLOCATABLE :: q va_seri(:,:), d_qva_dyn(:,:)678 !$OMP THREADPRIVATE(q va_seri, d_qva_dyn)679 REAL, SAVE, ALLOCATABLE :: q ia_seri(:,:), d_qia_dyn(:,:)680 !$OMP THREADPRIVATE(q ia_seri, d_qia_dyn)673 REAL, SAVE, ALLOCATABLE :: cfl_seri(:,:), d_cfl_dyn(:,:) 674 !$OMP THREADPRIVATE(cfl_seri, d_cfl_dyn) 675 REAL, SAVE, ALLOCATABLE :: cfc_seri(:,:), d_cfc_dyn(:,:) 676 !$OMP THREADPRIVATE(cfc_seri, d_cfc_dyn) 677 REAL, SAVE, ALLOCATABLE :: qtl_seri(:,:), d_qtl_dyn(:,:) 678 !$OMP THREADPRIVATE(qtl_seri, d_qtl_dyn) 679 REAL, SAVE, ALLOCATABLE :: qtc_seri(:,:), d_qtc_dyn(:,:) 680 !$OMP THREADPRIVATE(qtc_seri, d_qtc_dyn) 681 681 REAL, SAVE, ALLOCATABLE :: flight_dist(:,:), flight_h2o(:,:) 682 682 !$OMP THREADPRIVATE(flight_dist, flight_h2o) … … 685 685 REAL, SAVE, ALLOCATABLE :: potcontfraP(:,:), potcontfraNP(:,:) 686 686 !$OMP THREADPRIVATE(potcontfraP, potcontfraNP) 687 REAL, SAVE, ALLOCATABLE :: qice_perscont(:,:) 688 !$OMP THREADPRIVATE(qice_perscont) 689 REAL, SAVE, ALLOCATABLE :: dcfa_cir(:,:), dqta_cir(:,:) 690 !$OMP THREADPRIVATE(dcfa_cir, dqta_cir) 691 REAL, SAVE, ALLOCATABLE :: dcfa_ini(:,:), dqia_ini(:,:), dqta_ini(:,:) 692 !$OMP THREADPRIVATE(dcfa_ini, dqia_ini, dqta_ini) 693 REAL, SAVE, ALLOCATABLE :: dcfa_sub(:,:), dqia_sub(:,:), dqta_sub(:,:) 694 !$OMP THREADPRIVATE(dcfa_sub, dqia_sub, dqta_sub) 695 REAL, SAVE, ALLOCATABLE :: dcfa_mix(:,:), dqia_mix(:,:), dqta_mix(:,:) 696 !$OMP THREADPRIVATE(dcfa_mix, dqia_mix, dqta_mix) 687 REAL, SAVE, ALLOCATABLE :: qice_lincont(:,:), qice_circont(:,:) 688 !$OMP THREADPRIVATE(qice_lincont, qice_circont) 689 REAL, SAVE, ALLOCATABLE :: dcfl_cir(:,:), dqtl_cir(:,:) 690 !$OMP THREADPRIVATE(dcfl_cir, dqtl_cir) 691 REAL, SAVE, ALLOCATABLE :: dcfl_ini(:,:), dqil_ini(:,:), dqtl_ini(:,:) 692 !$OMP THREADPRIVATE(dcfl_ini, dqil_ini, dqtl_ini) 693 REAL, SAVE, ALLOCATABLE :: dcfl_sub(:,:), dqil_sub(:,:), dqtl_sub(:,:) 694 !$OMP THREADPRIVATE(dcfl_sub, dqil_sub, dqtl_sub) 695 REAL, SAVE, ALLOCATABLE :: dcfl_mix(:,:), dqil_mix(:,:), dqtl_mix(:,:) 696 !$OMP THREADPRIVATE(dcfl_mix, dqil_mix, dqtl_mix) 697 REAL, SAVE, ALLOCATABLE :: dcfc_sub(:,:), dqic_sub(:,:), dqtc_sub(:,:) 698 !$OMP THREADPRIVATE(dcfc_sub, dqic_sub, dqtc_sub) 699 REAL, SAVE, ALLOCATABLE :: dcfc_mix(:,:), dqic_mix(:,:), dqtc_mix(:,:) 700 !$OMP THREADPRIVATE(dcfc_mix, dqic_mix, dqtc_mix) 697 701 REAL, SAVE, ALLOCATABLE :: cldfra_nocont(:,:), cldtau_nocont(:,:), cldemi_nocont(:,:) 698 702 !$OMP THREADPRIVATE(cldfra_nocont, cldtau_nocont, cldemi_nocont) … … 1256 1260 !-- LSCP - aviation and contrails variables 1257 1261 ALLOCATE(d_q_avi(klon,klev)) 1258 ALLOCATE(cf a_seri(klon,klev), d_cfa_dyn(klon,klev))1259 ALLOCATE( pcf_seri(klon,klev), d_pcf_dyn(klon,klev))1260 ALLOCATE(q va_seri(klon,klev), d_qva_dyn(klon,klev))1261 ALLOCATE(q ia_seri(klon,klev), d_qia_dyn(klon,klev))1262 ALLOCATE(cfl_seri(klon,klev), d_cfl_dyn(klon,klev)) 1263 ALLOCATE(cfc_seri(klon,klev), d_cfc_dyn(klon,klev)) 1264 ALLOCATE(qtl_seri(klon,klev), d_qtl_dyn(klon,klev)) 1265 ALLOCATE(qtc_seri(klon,klev), d_qtc_dyn(klon,klev)) 1262 1266 ALLOCATE(flight_dist(klon,klev), flight_h2o(klon,klev)) 1263 1267 ALLOCATE(Tcritcont(klon,klev), qcritcont(klon,klev)) 1264 1268 ALLOCATE(potcontfraP(klon,klev), potcontfraNP(klon,klev)) 1265 ALLOCATE(qice_perscont(klon,klev)) 1266 ALLOCATE(dcfa_cir(klon,klev), dqta_cir(klon,klev)) 1267 ALLOCATE(dcfa_ini(klon,klev), dqia_ini(klon,klev), dqta_ini(klon,klev)) 1268 ALLOCATE(dcfa_sub(klon,klev), dqia_sub(klon,klev), dqta_sub(klon,klev)) 1269 ALLOCATE(dcfa_mix(klon,klev), dqia_mix(klon,klev), dqta_mix(klon,klev)) 1269 ALLOCATE(qice_lincont(klon,klev), qice_circont(klon,klev)) 1270 ALLOCATE(dcfl_cir(klon,klev), dqtl_cir(klon,klev)) 1271 ALLOCATE(dcfl_ini(klon,klev), dqil_ini(klon,klev), dqtl_ini(klon,klev)) 1272 ALLOCATE(dcfl_sub(klon,klev), dqil_sub(klon,klev), dqtl_sub(klon,klev)) 1273 ALLOCATE(dcfl_mix(klon,klev), dqil_mix(klon,klev), dqtl_mix(klon,klev)) 1274 ALLOCATE(dcfc_sub(klon,klev), dqic_sub(klon,klev), dqtc_sub(klon,klev)) 1275 ALLOCATE(dcfc_mix(klon,klev), dqic_mix(klon,klev), dqtc_mix(klon,klev)) 1270 1276 ALLOCATE(cldfra_nocont(klon,klev), cldtau_nocont(klon,klev), cldemi_nocont(klon,klev)) 1271 1277 ALLOCATE(cldh_nocont(klon), contcov(klon), conttau(klon,klev), contemi(klon,klev)) … … 1678 1684 1679 1685 !-- LSCP - aviation and contrails variables 1680 DEALLOCATE(cf a_seri, d_cfa_dyn, pcf_seri, d_pcf_dyn)1681 DEALLOCATE(q va_seri, d_qva_dyn, qia_seri, d_qia_dyn)1686 DEALLOCATE(cfl_seri, d_cfl_dyn, cfc_seri, d_cfc_dyn) 1687 DEALLOCATE(qtl_seri, d_qtl_dyn, qtc_seri, d_qtc_dyn) 1682 1688 DEALLOCATE(d_q_avi, flight_dist, flight_h2o) 1683 1689 DEALLOCATE(Tcritcont, qcritcont, potcontfraP, potcontfraNP) 1684 DEALLOCATE(qice_perscont, dcfa_cir, dqta_cir, dcfa_ini, dqia_ini, dqta_ini) 1685 DEALLOCATE(dcfa_sub, dqia_sub, dqta_sub, dcfa_mix, dqia_mix, dqta_mix) 1690 DEALLOCATE(qice_lincont, qice_circont, dcfl_cir, dqtl_cir, dcfl_ini, dqil_ini) 1691 DEALLOCATE(dqtl_ini, dcfl_sub, dqil_sub, dqtl_sub, dcfl_mix, dqil_mix, dqtl_mix) 1692 DEALLOCATE(dcfc_sub, dqic_sub, dqtc_sub, dcfc_mix, dqic_mix, dqtc_mix) 1686 1693 DEALLOCATE(cldfra_nocont, cldtau_nocont, cldemi_nocont, conttau, contemi) 1687 1694 DEALLOCATE(cldh_nocont, contcov, fiwp_nocont, fiwc_nocont, ref_ice_nocont) -
LMDZ6/branches/contrails/libf/phylmd/phys_output_ctrlout_mod.F90
r5618 r5641 2197 2197 TYPE(ctrl_out), SAVE :: o_dqavi = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2198 2198 'dqavi', 'Water vapor emissions from aviation tendency', 'kg/kg/s', (/ ('',i=1,10) /)) 2199 TYPE(ctrl_out), SAVE :: o_cf aseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2200 'cf aseri', 'Linear contrail fraction', '-', (/ ('',i=1,10) /))2201 TYPE(ctrl_out), SAVE :: o_dcf adyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2202 'dcf adyn', 'Dynamics linear contrail fraction tendency', 's-1', (/ ('',i=1,10) /))2203 TYPE(ctrl_out), SAVE :: o_ pcfseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2204 ' pcfseri', 'Contrail inducedcirrus fraction', '-', (/ ('',i=1,10) /))2205 TYPE(ctrl_out), SAVE :: o_d pcfdyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2206 'd pcfdyn', 'Dynamics contrail inducedcirrus fraction tendency', 's-1', (/ ('',i=1,10) /))2207 TYPE(ctrl_out), SAVE :: o_q vaseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2208 'q vaseri', 'Linear contrail total specific humidity', 'kg/kg', (/ ('',i=1,10) /))2209 TYPE(ctrl_out), SAVE :: o_dq vadyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2210 'dq vadyn', 'Dynamics linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('',i=1,10) /))2211 TYPE(ctrl_out), SAVE :: o_q iaseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2212 'q iaseri', 'Linear contrailtotal specific humidity', 'kg/kg', (/ ('',i=1,10) /))2213 TYPE(ctrl_out), SAVE :: o_dq iadyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),&2214 'dq iadyn', 'Dynamics linear contrailtotal specific humidity tendency', 'kg/kg/s', (/ ('',i=1,10) /))2199 TYPE(ctrl_out), SAVE :: o_cflseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2200 'cflseri', 'Linear contrail fraction', '-', (/ ('',i=1,10) /)) 2201 TYPE(ctrl_out), SAVE :: o_dcfldyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2202 'dcfldyn', 'Dynamics linear contrail fraction tendency', 's-1', (/ ('',i=1,10) /)) 2203 TYPE(ctrl_out), SAVE :: o_cfcseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2204 'cfcseri', 'Contrail cirrus fraction', '-', (/ ('',i=1,10) /)) 2205 TYPE(ctrl_out), SAVE :: o_dcfcdyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2206 'dcfcdyn', 'Dynamics contrail cirrus fraction tendency', 's-1', (/ ('',i=1,10) /)) 2207 TYPE(ctrl_out), SAVE :: o_qtlseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2208 'qtlseri', 'Linear contrail total specific humidity', 'kg/kg', (/ ('',i=1,10) /)) 2209 TYPE(ctrl_out), SAVE :: o_dqtldyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2210 'dqtldyn', 'Dynamics linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('',i=1,10) /)) 2211 TYPE(ctrl_out), SAVE :: o_qtcseri = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2212 'qtcseri', 'Contrail cirrus total specific humidity', 'kg/kg', (/ ('',i=1,10) /)) 2213 TYPE(ctrl_out), SAVE :: o_dqtcdyn = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2214 'dqtcdyn', 'Dynamics contrail cirrus total specific humidity tendency', 'kg/kg/s', (/ ('',i=1,10) /)) 2215 2215 TYPE(ctrl_out), SAVE :: o_Tcritcont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2216 2216 'Tcritcont', 'Temperature threshold for contrail formation', 'K', (/ ('',i=1,10) /)) … … 2221 2221 TYPE(ctrl_out), SAVE :: o_potcontfraNP = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/),& 2222 2222 'potcontfraNP', 'Potential non-persistent contrail fraction', '-', (/ ('', i=1,10)/)) 2223 TYPE(ctrl_out), SAVE :: o_qice_perscont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2224 'qice_perscont', 'Contrail induced cirrus ice specific humidity', 'kg/kg', (/ ('', i=1, 10) /)) 2225 TYPE(ctrl_out), SAVE :: o_dcfaini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2226 'dcfaini', 'Initial formation linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2227 TYPE(ctrl_out), SAVE :: o_dqiaini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2228 'dqiaini', 'Initial formation linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2229 TYPE(ctrl_out), SAVE :: o_dqtaini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2230 'dqtaini', 'Initial formation linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2231 TYPE(ctrl_out), SAVE :: o_dcfacir = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2232 'dcfacir', 'Conversion to cirrus linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2233 TYPE(ctrl_out), SAVE :: o_dqtacir = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2234 'dqtacir', 'Conversion to cirrus linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2235 TYPE(ctrl_out), SAVE :: o_dcfasub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2236 'dcfasub', 'Sublimation linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2237 TYPE(ctrl_out), SAVE :: o_dqiasub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2238 'dqiasub', 'Sublimation linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2239 TYPE(ctrl_out), SAVE :: o_dqtasub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2240 'dqtasub', 'Sublimation linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2241 TYPE(ctrl_out), SAVE :: o_dcfamix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2242 'dcfamix', 'Mixing linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2243 TYPE(ctrl_out), SAVE :: o_dqiamix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2244 'dqiamix', 'Mixing linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2245 TYPE(ctrl_out), SAVE :: o_dqtamix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2246 'dqtamix', 'Mixing linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2223 TYPE(ctrl_out), SAVE :: o_qice_lincont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2224 'qice_lincont', 'Linear contrails ice specific humidity', 'kg/kg', (/ ('', i=1, 10) /)) 2225 TYPE(ctrl_out), SAVE :: o_qice_circont = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2226 'qice_circont', 'Contrail cirrus ice specific humidity', 'kg/kg', (/ ('', i=1, 10) /)) 2227 TYPE(ctrl_out), SAVE :: o_dcflini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2228 'dcflini', 'Initial formation linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2229 TYPE(ctrl_out), SAVE :: o_dqilini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2230 'dqilini', 'Initial formation linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2231 TYPE(ctrl_out), SAVE :: o_dqtlini = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2232 'dqtlini', 'Initial formation linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2233 TYPE(ctrl_out), SAVE :: o_dcflcir = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2234 'dcflcir', 'Conversion to cirrus linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2235 TYPE(ctrl_out), SAVE :: o_dqtlcir = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2236 'dqtlcir', 'Conversion to cirrus linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2237 TYPE(ctrl_out), SAVE :: o_dcflsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2238 'dcflsub', 'Sublimation linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2239 TYPE(ctrl_out), SAVE :: o_dqilsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2240 'dqilsub', 'Sublimation linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2241 TYPE(ctrl_out), SAVE :: o_dqtlsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2242 'dqtlsub', 'Sublimation linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2243 TYPE(ctrl_out), SAVE :: o_dcflmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2244 'dcflmix', 'Mixing linear contrail fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2245 TYPE(ctrl_out), SAVE :: o_dqilmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2246 'dqilmix', 'Mixing linear contrail ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2247 TYPE(ctrl_out), SAVE :: o_dqtlmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2248 'dqtlmix', 'Mixing linear contrail total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2249 TYPE(ctrl_out), SAVE :: o_dcfcsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2250 'dcfcsub', 'Sublimation contrail cirrus fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2251 TYPE(ctrl_out), SAVE :: o_dqicsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2252 'dqicsub', 'Sublimation contrail cirrus ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2253 TYPE(ctrl_out), SAVE :: o_dqtcsub = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2254 'dqtcsub', 'Sublimation contrail cirrus total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2255 TYPE(ctrl_out), SAVE :: o_dcfcmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2256 'dcfcmix', 'Mixing contrail cirrus fraction tendency', 's-1', (/ ('', i=1, 10) /)) 2257 TYPE(ctrl_out), SAVE :: o_dqicmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2258 'dqicmix', 'Mixing contrail cirrus ice specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2259 TYPE(ctrl_out), SAVE :: o_dqtcmix = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2260 'dqtcmix', 'Mixing contrail cirrus total specific humidity tendency', 'kg/kg/s', (/ ('', i=1, 10) /)) 2247 2261 TYPE(ctrl_out), SAVE :: o_flight_dist = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 2248 2262 'flightdist', 'Aviation flown distance', 'm/s/m^3', (/ ('', i=1, 10) /)) -
LMDZ6/branches/contrails/libf/phylmd/phys_output_write_mod.F90
r5639 r5641 232 232 o_issrfra250to300, o_issrfra300to400, o_issrfra400to500, & 233 233 !-- LSCP - aviation variables 234 o_cf aseri, o_dcfadyn, o_pcfseri, o_dpcfdyn, &235 o_q vaseri, o_dqvadyn, o_qiaseri, o_dqiadyn, o_dqavi, &234 o_cflseri, o_dcfldyn, o_cfcseri, o_dcfcdyn, & 235 o_qtlseri, o_dqtldyn, o_qtcseri, o_dqtcdyn, o_dqavi, & 236 236 o_Tcritcont, o_qcritcont, o_potcontfraP, o_potcontfraNP, & 237 o_flight_dist, o_flight_h2o, o_qice_perscont, o_dcfacir, o_dqtacir, & 238 o_dcfaini, o_dqiaini, o_dqtaini, o_dcfasub, o_dqiasub, o_dqtasub, & 239 o_dcfamix, o_dqiamix, o_dqtamix, & 237 o_flight_dist, o_flight_h2o, o_qice_lincont, o_qice_circont, o_dcflcir, o_dqtlcir, & 238 o_dcflini, o_dqilini, o_dqtlini, o_dcflsub, o_dqilsub, o_dqtlsub, & 239 o_dcflmix, o_dqilmix, o_dqtlmix, & 240 o_dcfcsub, o_dqicsub, o_dqtcsub, o_dcfcmix, o_dqicmix, o_dqtcmix, & 240 241 o_cldfra_nocont, o_cldtau_nocont, o_cldemi_nocont, o_cldh_nocont, & 241 242 o_contcov, o_conttau, o_contemi, o_iwp_nocont, o_iwc_nocont, o_ref_ice_nocont, & … … 365 366 issrfra100to150, issrfra150to200, issrfra200to250, & 366 367 issrfra250to300, issrfra300to400, issrfra400to500, & 367 cf a_seri, d_cfa_dyn, pcf_seri, d_pcf_dyn, &368 q va_seri, d_qva_dyn, qia_seri, d_qia_dyn, d_q_avi, &368 cfl_seri, d_cfl_dyn, cfc_seri, d_cfc_dyn, & 369 qtl_seri, d_qtl_dyn, qtc_seri, d_qtc_dyn, d_q_avi, & 369 370 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 370 flight_dist, flight_h2o, qice_perscont, dcfa_cir, dqta_cir, & 371 dcfa_ini, dqia_ini, dqta_ini, dcfa_sub, dqia_sub, dqta_sub, & 372 dcfa_mix, dqia_mix, dqta_mix, & 371 flight_dist, flight_h2o, qice_lincont, qice_circont, dcfl_cir, dqtl_cir, & 372 dcfl_ini, dqil_ini, dqtl_ini, dcfl_sub, dqil_sub, dqtl_sub, & 373 dcfl_mix, dqil_mix, dqtl_mix, & 374 dcfc_sub, dqic_sub, dqtc_sub, dcfc_mix, dqic_mix, dqtc_mix, & 373 375 cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & 374 376 contcov, conttau, contemi, fiwp_nocont, fiwc_nocont, ref_ice_nocont, & … … 2161 2163 !-- LSCP - aviation variables 2162 2164 IF (ok_plane_contrail) THEN 2163 CALL histwrite_phy(o_cf aseri, cfa_seri)2164 CALL histwrite_phy(o_dcf adyn, d_cfa_dyn)2165 CALL histwrite_phy(o_ pcfseri, pcf_seri)2166 CALL histwrite_phy(o_d pcfdyn, d_pcf_dyn)2167 CALL histwrite_phy(o_q vaseri, qva_seri)2168 CALL histwrite_phy(o_dq vadyn, d_qva_dyn)2169 CALL histwrite_phy(o_q iaseri, qia_seri)2170 CALL histwrite_phy(o_dq iadyn, d_qia_dyn)2165 CALL histwrite_phy(o_cflseri, cfl_seri) 2166 CALL histwrite_phy(o_dcfldyn, d_cfl_dyn) 2167 CALL histwrite_phy(o_cfcseri, cfc_seri) 2168 CALL histwrite_phy(o_dcfcdyn, d_cfc_dyn) 2169 CALL histwrite_phy(o_qtlseri, qtl_seri) 2170 CALL histwrite_phy(o_dqtldyn, d_qtl_dyn) 2171 CALL histwrite_phy(o_qtcseri, qtc_seri) 2172 CALL histwrite_phy(o_dqtcdyn, d_qtc_dyn) 2171 2173 CALL histwrite_phy(o_flight_dist, flight_dist) 2172 2174 CALL histwrite_phy(o_Tcritcont, Tcritcont) … … 2174 2176 CALL histwrite_phy(o_potcontfraP, potcontfraP) 2175 2177 CALL histwrite_phy(o_potcontfraNP, potcontfraNP) 2176 CALL histwrite_phy(o_qice_perscont, qice_perscont) 2177 CALL histwrite_phy(o_dcfacir, dcfa_cir) 2178 CALL histwrite_phy(o_dqtacir, dqta_cir) 2179 CALL histwrite_phy(o_dcfaini, dcfa_ini) 2180 CALL histwrite_phy(o_dqiaini, dqia_ini) 2181 CALL histwrite_phy(o_dqtaini, dqta_ini) 2182 CALL histwrite_phy(o_dcfasub, dcfa_sub) 2183 CALL histwrite_phy(o_dqiasub, dqia_sub) 2184 CALL histwrite_phy(o_dqtasub, dqta_sub) 2185 CALL histwrite_phy(o_dcfamix, dcfa_mix) 2186 CALL histwrite_phy(o_dqiamix, dqia_mix) 2187 CALL histwrite_phy(o_dqtamix, dqta_mix) 2178 CALL histwrite_phy(o_qice_lincont, qice_lincont) 2179 CALL histwrite_phy(o_qice_circont, qice_circont) 2180 CALL histwrite_phy(o_dcflcir, dcfl_cir) 2181 CALL histwrite_phy(o_dqtlcir, dqtl_cir) 2182 CALL histwrite_phy(o_dcflini, dcfl_ini) 2183 CALL histwrite_phy(o_dqilini, dqil_ini) 2184 CALL histwrite_phy(o_dqtlini, dqtl_ini) 2185 CALL histwrite_phy(o_dcflsub, dcfl_sub) 2186 CALL histwrite_phy(o_dqilsub, dqil_sub) 2187 CALL histwrite_phy(o_dqtlsub, dqtl_sub) 2188 CALL histwrite_phy(o_dcflmix, dcfl_mix) 2189 CALL histwrite_phy(o_dqilmix, dqil_mix) 2190 CALL histwrite_phy(o_dqtlmix, dqtl_mix) 2191 CALL histwrite_phy(o_dcfcsub, dcfc_sub) 2192 CALL histwrite_phy(o_dqicsub, dqic_sub) 2193 CALL histwrite_phy(o_dqtcsub, dqtc_sub) 2194 CALL histwrite_phy(o_dcfcmix, dcfc_mix) 2195 CALL histwrite_phy(o_dqicmix, dqic_mix) 2196 CALL histwrite_phy(o_dqtcmix, dqtc_mix) 2188 2197 CALL histwrite_phy(o_cldfra_nocont, cldfra_nocont) 2189 2198 CALL histwrite_phy(o_cldtau_nocont, cldtau_nocont) -
LMDZ6/branches/contrails/libf/phylmd/phys_state_var_mod.F90
r5626 r5641 96 96 REAL, ALLOCATABLE, SAVE :: qvcon(:,:), qccon(:,:) 97 97 !$OMP THREADPRIVATE(qvcon, qccon) 98 REAL, ALLOCATABLE, SAVE :: cf a_ancien(:,:), pcf_ancien(:,:)99 !$OMP THREADPRIVATE(cf a_ancien, pcf_ancien)100 REAL, ALLOCATABLE, SAVE :: q va_ancien(:,:), qia_ancien(:,:)101 !$OMP THREADPRIVATE(q va_ancien, qia_ancien)98 REAL, ALLOCATABLE, SAVE :: cfl_ancien(:,:), cfc_ancien(:,:) 99 !$OMP THREADPRIVATE(cfl_ancien, cfc_ancien) 100 REAL, ALLOCATABLE, SAVE :: qtl_ancien(:,:), qtc_ancien(:,:) 101 !$OMP THREADPRIVATE(qtl_ancien, qtc_ancien) 102 102 !!! RomP >>> 103 103 REAL, ALLOCATABLE, SAVE :: tr_ancien(:,:,:) … … 594 594 ALLOCATE(u_ancien(klon,klev), v_ancien(klon,klev)) 595 595 ALLOCATE(cf_ancien(klon,klev), qvc_ancien(klon,klev)) 596 ALLOCATE(cf a_ancien(klon,klev), pcf_ancien(klon,klev))597 ALLOCATE(q va_ancien(klon,klev), qia_ancien(klon,klev))596 ALLOCATE(cfl_ancien(klon,klev), cfc_ancien(klon,klev)) 597 ALLOCATE(qtl_ancien(klon,klev), qtc_ancien(klon,klev)) 598 598 ALLOCATE(qvcon(klon,klev), qccon(klon,klev)) 599 599 !!! Rom P >>> … … 824 824 DEALLOCATE(qtc_cv,sigt_cv,detrain_cv,fm_cv) 825 825 DEALLOCATE(u_ancien, v_ancien) 826 DEALLOCATE(cf_ancien, qvc_ancien , cfa_ancien, pcf_ancien)827 DEALLOCATE( qva_ancien, qia_ancien)826 DEALLOCATE(cf_ancien, qvc_ancien) 827 DEALLOCATE(cfl_ancien, cfc_ancien, qtl_ancien, qtc_ancien) 828 828 DEALLOCATE(qvcon, qccon) 829 829 DEALLOCATE(tr_ancien) !RomP -
LMDZ6/branches/contrails/libf/phylmd/physiq_mod.F90
r5637 r5641 39 39 USE ioipsl_getin_p_mod, ONLY : getin_p 40 40 USE indice_sol_mod 41 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, type_trac, addPhase, ivap, iliq, isol, ibs, icf, iqvc, icf a, ipcf, iqva, iqia41 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, type_trac, addPhase, ivap, iliq, isol, ibs, icf, iqvc, icfl, icfc, iqtl, iqtc 42 42 USE strings_mod, ONLY: strIdx 43 43 USE iophy … … 333 333 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 334 334 !-- LSCP - aviation and contrails variables 335 cf a_seri, pcf_seri, qva_seri, qia_seri, d_cfa_dyn, d_pcf_dyn, d_qva_dyn, d_qia_dyn, &336 d_q_avi, flight_dist, flight_h2o, qice_ perscont, &335 cfl_seri, cfc_seri, qtl_seri, qtc_seri, d_cfl_dyn, d_cfc_dyn, d_qtl_dyn, d_qtc_dyn, & 336 d_q_avi, flight_dist, flight_h2o, qice_lincont, qice_circont, & 337 337 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 338 338 cldfra_nocont, cldtau_nocont, cldemi_nocont, cldh_nocont, & … … 1432 1432 ENDIF 1433 1433 1434 IF (ok_plane_contrail.AND.((icfa.EQ.0).OR.(iqva.EQ.0).OR.(iqia.EQ.0).OR.(ipcf.EQ.0))) THEN 1435 WRITE (lunout, *) ' ok_plane_contrail=y requires 8 tracers ', & 1436 '(H2O_g, H2O_l, H2O_s, CLDFRA, CLDVAP_g, CONTFRA, PERSCONTFRA, CONTWATER_s) ', & 1434 IF (ok_plane_contrail.AND.((icfl.EQ.0).OR.(icfc.EQ.0).OR.(iqtl.EQ.0).OR.(iqtc.EQ.0))) THEN 1435 WRITE (lunout, *) ' ok_plane_contrail=y requires 9 tracers ', & 1436 '(H2O_g, H2O_l, H2O_s, CLDFRA, CLDVAP, LINCONTFRA, ', & 1437 'CIRCONTFRA, LINCONTWATER, CIRCONTWATER) ', & 1437 1438 'but not all are provided. Might as well stop here.' 1438 1439 abort_message='see above' … … 2461 2462 cf_seri(i,k) = 0. 2462 2463 qvc_seri(i,k)= 0. 2463 cf a_seri(i,k)= 0.2464 pcf_seri(i,k)= 0.2465 q va_seri(i,k)= 0.2466 q ia_seri(i,k)= 0.2464 cfl_seri(i,k)= 0. 2465 cfc_seri(i,k)= 0. 2466 qtl_seri(i,k)= 0. 2467 qtc_seri(i,k)= 0. 2467 2468 !CR: ATTENTION, on rajoute la variable glace 2468 2469 IF (nqo .GE. 3) THEN !--vapour, liquid and ice … … 2479 2480 ENDIF 2480 2481 IF (ok_plane_contrail) THEN 2481 cf a_seri(i,k) = qx(i,k,icfa)2482 pcf_seri(i,k) = qx(i,k,ipcf)2483 q va_seri(i,k) = qx(i,k,iqva)2484 q ia_seri(i,k) = qx(i,k,iqia)2482 cfl_seri(i,k) = qx(i,k,icfl) 2483 cfc_seri(i,k) = qx(i,k,icfc) 2484 qtl_seri(i,k) = qx(i,k,iqtl) 2485 qtc_seri(i,k) = qx(i,k,iqtc) 2485 2486 !--DYNAMICO can return NaNs for children tracers 2486 IF (ISNAN(cf a_seri(i,k))) cfa_seri(i,k) = 0.2487 IF (ISNAN( pcf_seri(i,k))) pcf_seri(i,k) = 0.2488 IF (ISNAN(q va_seri(i,k))) qva_seri(i,k) = 0.2489 IF (ISNAN(q ia_seri(i,k))) qia_seri(i,k) = 0.2487 IF (ISNAN(cfl_seri(i,k))) cfl_seri(i,k) = 0. 2488 IF (ISNAN(cfc_seri(i,k))) cfc_seri(i,k) = 0. 2489 IF (ISNAN(qtl_seri(i,k))) qtl_seri(i,k) = 0. 2490 IF (ISNAN(qtc_seri(i,k))) qtc_seri(i,k) = 0. 2490 2491 ENDIF 2491 2492 ENDDO … … 2562 2563 d_cf_dyn(:,:) = (cf_seri(:,:)-cf_ancien(:,:))/phys_tstep 2563 2564 d_qvc_dyn(:,:)= (qvc_seri(:,:)-qvc_ancien(:,:))/phys_tstep 2564 d_cf a_dyn(:,:)= (cfa_seri(:,:)-cfa_ancien(:,:))/phys_tstep2565 d_ pcf_dyn(:,:)= (pcf_seri(:,:)-pcf_ancien(:,:))/phys_tstep2566 d_q va_dyn(:,:)= (qva_seri(:,:)-qva_ancien(:,:))/phys_tstep2567 d_q ia_dyn(:,:)= (qia_seri(:,:)-qia_ancien(:,:))/phys_tstep2565 d_cfl_dyn(:,:)= (cfl_seri(:,:)-cfl_ancien(:,:))/phys_tstep 2566 d_cfc_dyn(:,:)= (cfc_seri(:,:)-cfc_ancien(:,:))/phys_tstep 2567 d_qtl_dyn(:,:)= (qtl_seri(:,:)-qtl_ancien(:,:))/phys_tstep 2568 d_qtc_dyn(:,:)= (qtc_seri(:,:)-qtc_ancien(:,:))/phys_tstep 2568 2569 CALL water_int(klon,klev,q_seri,zmasse,zx_tmp_fi2d) 2569 2570 d_q_dyn2d(:)=(zx_tmp_fi2d(:)-prw_ancien(:))/phys_tstep … … 2587 2588 d_cf_dyn(:,:) = 0.0 2588 2589 d_qvc_dyn(:,:)= 0.0 2589 d_cf a_dyn(:,:)= 0.02590 d_ pcf_dyn(:,:)= 0.02591 d_q va_dyn(:,:)= 0.02592 d_q ia_dyn(:,:)= 0.02590 d_cfl_dyn(:,:)= 0.0 2591 d_cfc_dyn(:,:)= 0.0 2592 d_qtl_dyn(:,:)= 0.0 2593 d_qtc_dyn(:,:)= 0.0 2593 2594 d_q_dyn2d(:) = 0.0 2594 2595 d_ql_dyn2d(:) = 0.0 … … 2715 2716 qi_seri_lscp(i,k) = qs_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2716 2717 qvc_seri(i,k) = qvc_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2717 q va_seri(i,k) = qva_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) )2718 q ia_seri(i,k) = qia_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) )2718 qtl_seri(i,k) = qtl_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2719 qtc_seri(i,k) = qtc_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) 2719 2720 ELSE 2720 2721 ql_seri_lscp(i,k) = 0. 2721 2722 qi_seri_lscp(i,k) = 0. 2722 2723 qvc_seri(i,k) = 0. 2723 q va_seri(i,k) = 0.2724 q ia_seri(i,k) = 0.2724 qtl_seri(i,k) = 0. 2725 qtc_seri(i,k) = 0. 2725 2726 ENDIF 2726 2727 ENDDO … … 3958 3959 DO k = 1, klev 3959 3960 DO i = 1, klon 3960 q va_seri(i,k) = qva_seri(i,k) * q_seri(i,k)3961 q ia_seri(i,k) = qia_seri(i,k) * q_seri(i,k)3961 qtl_seri(i,k) = qtl_seri(i,k) * q_seri(i,k) 3962 qtc_seri(i,k) = qtc_seri(i,k) * q_seri(i,k) 3962 3963 ENDDO 3963 3964 ENDDO … … 3986 3987 dcf_sub, dcf_con, dcf_mix, dqi_adj, dqi_sub, dqi_con, dqi_mix, & 3987 3988 dqvc_adj, dqvc_sub, dqvc_con, dqvc_mix, qsatliq, qsatice, & 3988 cf a_seri, pcf_seri, qva_seri, qia_seri, flight_dist, flight_h2o, &3989 qice_ perscont, Tcritcont, qcritcont, potcontfraP, potcontfraNP, &3989 cfl_seri, cfc_seri, qtl_seri, qtc_seri, flight_dist, flight_h2o, & 3990 qice_lincont, qice_circont, Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 3990 3991 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, & 3991 3992 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, & … … 4539 4540 zfice, dNovrN, ptconv, rnebcon, clwcon, & 4540 4541 !--AB contrails 4541 cf a_seri, pcf_seri, qia_seri, qice_perscont, cldfra_nocont, &4542 cfl_seri, cfc_seri, qice_lincont, qice_circont, cldfra_nocont, & 4542 4543 cldtau_nocont, cldemi_nocont, conttau, contemi, cldh_nocont, contcov, & 4543 4544 fiwp_nocont, fiwc_nocont, ref_ice_nocont) … … 5746 5747 ENDIF 5747 5748 IF (ok_plane_contrail) THEN 5748 d_qx(i,k,icf a) = ( cfa_seri(i,k) - qx(i,k,icfa) ) / phys_tstep5749 d_qx(i,k,i pcf) = ( pcf_seri(i,k) - qx(i,k,ipcf) ) / phys_tstep5750 d_qx(i,k,iq va) = ( qva_seri(i,k) - qx(i,k,iqva) ) / phys_tstep5751 d_qx(i,k,iq ia) = ( qia_seri(i,k) - qx(i,k,iqia) ) / phys_tstep5749 d_qx(i,k,icfl) = ( cfl_seri(i,k) - qx(i,k,icfl) ) / phys_tstep 5750 d_qx(i,k,icfc) = ( cfc_seri(i,k) - qx(i,k,icfc) ) / phys_tstep 5751 d_qx(i,k,iqtl) = ( qtl_seri(i,k) - qx(i,k,iqtl) ) / phys_tstep 5752 d_qx(i,k,iqtc) = ( qtc_seri(i,k) - qx(i,k,iqtc) ) / phys_tstep 5752 5753 ENDIF 5753 5754 ENDDO … … 5781 5782 cf_ancien(:,:) = cf_seri(:,:) 5782 5783 qvc_ancien(:,:)= qvc_seri(:,:) 5783 cf a_ancien(:,:)= cfa_seri(:,:)5784 pcf_ancien(:,:)= pcf_seri(:,:)5785 q va_ancien(:,:)= qva_seri(:,:)5786 q ia_ancien(:,:)= qia_seri(:,:)5784 cfl_ancien(:,:)= cfl_seri(:,:) 5785 cfc_ancien(:,:)= cfc_seri(:,:) 5786 qtl_ancien(:,:)= qtl_seri(:,:) 5787 qtc_ancien(:,:)= qtc_seri(:,:) 5787 5788 CALL water_int(klon,klev,q_ancien,zmasse,prw_ancien) 5788 5789 CALL water_int(klon,klev,ql_ancien,zmasse,prlw_ancien)
Note: See TracChangeset
for help on using the changeset viewer.