diff --git a/lib/adf_variable_defaults.yaml b/lib/adf_variable_defaults.yaml index ed5be6da0..5346566d9 100644 --- a/lib/adf_variable_defaults.yaml +++ b/lib/adf_variable_defaults.yaml @@ -69,8 +69,9 @@ # Available ADF Default Plot Types #+++++++++++++ default_ptypes: ["Tables","LatLon","LatLon_Vector","Zonal","Meridional", - "NHPolar","SHPolar","TimeSeries","ENSO","GlobalHistogramTS", - "GlobalHistogramClimo","Special"] + "NHPolar","SHPolar","TimeSeries","WACCM", + "ENSO","GlobalHistogramTS", + "GlobalHistogramClimo","Special"] #+++++++++++++ # Constants @@ -153,8 +154,6 @@ AODDUST: scale_factor: 1 add_offset: 0 new_unit: "" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] - pct_diff_colormap: "PuOr_r" AODVIS: category: "Aerosols" @@ -165,8 +164,6 @@ AODVIS: scale_factor: 1 add_offset: 0 new_unit: "" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] - pct_diff_colormap: "PuOr_r" AODVISdn: category: "Aerosols" @@ -180,8 +177,6 @@ AODVISdn: obs_file: "MOD08_M3_192x288_AOD_2001-2020_climo.nc" obs_name: "MODIS" obs_var_name: "AOD_550_Dark_Target_Deep_Blue_Combined_Mean_Mean" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] - pct_diff_colormap: "PuOr_r" BURDENBC: category: "Aerosols" @@ -270,7 +265,6 @@ DMS: category: "Aerosols" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -279,7 +273,6 @@ SO2: category: "Aerosols" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -288,7 +281,6 @@ SOAG: category: "Aerosols" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -304,7 +296,6 @@ BC: label : '$\mu$g/m3' category: "Aerosols" derivable_from: ["bc_a1", "bc_a4"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" POM: @@ -318,7 +309,6 @@ POM: label : '$\mu$g/m3' category: "Aerosols" derivable_from: ["pom_a1", "pom_a4"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SO4: @@ -333,7 +323,6 @@ SO4: category: "Aerosols" derivable_from: ["so4_a1", "so4_a2", "so4_a3"] derivable_from_cam_chem: ["so4_a1", "so4_a2", "so4_a3", "so4_a5"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SOA: @@ -348,7 +337,6 @@ SOA: category: "Aerosols" derivable_from: ["soa_a1", "soa_a2"] derivable_from_cam_chem: ["soa1_a1", "soa2_a1", "soa3_a1", "soa4_a1", "soa5_a1", "soa1_a2", "soa2_a2", "soa3_a2", "soa4_a2", "soa5_a2"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" DUST: @@ -364,7 +352,6 @@ DUST: label : '$\mu$g/m3' category: "Aerosols" derivable_from: ["dst_a1", "dst_a2", "dst_a3"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SeaSalt: @@ -384,7 +371,6 @@ SeaSalt: ticks: [-10,8,6,4,2,0,-2,-4,-6,-8,-10] category: "Aerosols" derivable_from: ["ncl_a1", "ncl_a2", "ncl_a3"] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" bc_a1: @@ -393,7 +379,6 @@ bc_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" bc_a4: category: "Aerosols" @@ -401,7 +386,6 @@ bc_a4: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" dst_a1: category: "Aerosols" @@ -409,7 +393,6 @@ dst_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" dst_a2: category: "Aerosols" @@ -417,7 +400,6 @@ dst_a2: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" dst_a3: category: "Aerosols" @@ -425,7 +407,6 @@ dst_a3: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" ncl_a1: category: "Aerosols" @@ -433,7 +414,6 @@ ncl_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" ncl_a2: category: "Aerosols" @@ -441,7 +421,6 @@ ncl_a2: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" ncl_a3: category: "Aerosols" @@ -449,7 +428,6 @@ ncl_a3: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" num_a1: category: "Aerosols" @@ -457,7 +435,6 @@ num_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" num_a2: category: "Aerosols" @@ -465,7 +442,6 @@ num_a2: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" num_a3: category: "Aerosols" @@ -473,7 +449,6 @@ num_a3: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" num_a4: category: "Aerosols" @@ -481,7 +456,6 @@ num_a4: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" num_a5: category: "Aerosols" @@ -489,7 +463,6 @@ num_a5: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" pom_a1: category: "Aerosols" @@ -497,7 +470,6 @@ pom_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" pom_a4: category: "Aerosols" @@ -505,7 +477,6 @@ pom_a4: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" so4_a1: category: "Aerosols" @@ -513,7 +484,6 @@ so4_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" so4_a2: category: "Aerosols" @@ -521,7 +491,6 @@ so4_a2: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" so4_a3: category: "Aerosols" @@ -529,7 +498,6 @@ so4_a3: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" soa_a1: category: "Aerosols" @@ -537,7 +505,6 @@ soa_a1: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" soa_a2: category: "Aerosols" @@ -545,7 +512,6 @@ soa_a2: diff_colormap: "gist_ncar" scale_factor: 1.0e-9 new_unit: "ug/kg" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SAD_TROP: category: "Aerosols" @@ -553,7 +519,6 @@ SAD_TROP: diff_colormap: "gist_ncar" scale_factor: 1.0 new_unit: "cm2/cm3" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SAD_AERO: category: "Aerosols" @@ -561,7 +526,6 @@ SAD_AERO: diff_colormap: "gist_ncar" scale_factor: 1.0 new_unit: "cm2/cm3" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SAD_SULFC: category: "Aerosols" @@ -569,7 +533,6 @@ SAD_SULFC: diff_colormap: "gist_ncar" scale_factor: 1.0 new_unit: "cm2/cm3" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -652,7 +615,6 @@ CO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -660,7 +622,6 @@ CO01: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -668,7 +629,6 @@ CO02: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -676,7 +636,6 @@ CO03: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -684,7 +643,6 @@ CO04: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -692,7 +650,6 @@ CO05: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -700,7 +657,6 @@ CO06: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -708,7 +664,6 @@ CO07: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -716,7 +671,6 @@ CO08: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -724,7 +678,6 @@ CO09: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -732,7 +685,6 @@ CO10: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -740,7 +692,6 @@ CO11: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -748,7 +699,6 @@ CO12: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -756,7 +706,6 @@ CO13: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -764,7 +713,6 @@ O3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -772,7 +720,6 @@ N2O: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -780,7 +727,6 @@ HNO3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -788,7 +734,6 @@ NO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000000.0 new_unit: "pptv" @@ -796,7 +741,6 @@ NO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000000.0 new_unit: "pptv" @@ -804,7 +748,6 @@ NOX: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000000.0 new_unit: "pptv" @@ -812,7 +755,6 @@ NOY: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000000.0 new_unit: "pptv" @@ -820,7 +762,6 @@ OH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000000.0 new_unit: "pptv" @@ -828,7 +769,6 @@ BIGALK: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -836,7 +776,6 @@ C2H4: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -844,7 +783,6 @@ C2H5O2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -852,7 +790,6 @@ C2H5OH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -860,7 +797,6 @@ C2H5OOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -868,7 +804,6 @@ C2H6: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -876,7 +811,6 @@ C3H6: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -884,7 +818,6 @@ C3H7O2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -892,7 +825,6 @@ C3H7OOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -900,7 +832,6 @@ C3H8: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -908,7 +839,6 @@ CCL4: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -916,7 +846,6 @@ CFC11: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -924,7 +853,6 @@ CFC113: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -932,7 +860,6 @@ CFC114: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -940,7 +867,6 @@ CFC115: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -948,7 +874,6 @@ CFC12: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -956,7 +881,6 @@ CH2O: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -964,7 +888,6 @@ CH3BR: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -972,7 +895,6 @@ CH3CCL3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -980,7 +902,6 @@ CH3CHO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -988,7 +909,6 @@ CH3CL: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -996,7 +916,6 @@ CH3CO3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1004,7 +923,6 @@ CH3COCH3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1012,7 +930,6 @@ CH3COCHO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1020,7 +937,6 @@ CH3COOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1028,7 +944,6 @@ CH3COOOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1036,7 +951,6 @@ CH3O2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1044,7 +958,6 @@ CH3OH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1052,7 +965,6 @@ CH3OOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1060,7 +972,6 @@ CH4: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1068,7 +979,6 @@ CHBR3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1076,7 +986,6 @@ CLO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1084,7 +993,6 @@ CLONO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1092,7 +1000,6 @@ CLOX: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1100,7 +1007,6 @@ CLOY: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1109,7 +1015,6 @@ CO2: #contour_levels_range: [300,450,10.0] colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000.0 new_unit: "ppmv" @@ -1117,7 +1022,6 @@ E90: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1125,7 +1029,6 @@ GLYALD: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1133,7 +1036,6 @@ GLYOXAL: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1141,7 +1043,6 @@ H2402: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1149,7 +1050,6 @@ H2O2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1157,7 +1057,6 @@ H2SO4: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1165,7 +1064,6 @@ HCFC141B: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1173,7 +1071,6 @@ HCFC142B: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1181,7 +1078,6 @@ HCFC22: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1189,7 +1085,6 @@ HCL: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1197,7 +1092,6 @@ HCL_GAS: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1205,7 +1099,6 @@ HNO3_GAS: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1213,7 +1106,6 @@ HO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1221,7 +1113,6 @@ HO2NO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1229,7 +1120,6 @@ HOBR: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1237,7 +1127,6 @@ HYAC: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1245,7 +1134,6 @@ HYDRALD: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1253,7 +1141,6 @@ ISOP: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1261,7 +1148,6 @@ ISOPNO3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1269,7 +1155,6 @@ ISOPO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1277,7 +1162,6 @@ ISOPOOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1285,7 +1169,6 @@ MACR: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1293,7 +1176,6 @@ MACRO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1301,7 +1183,6 @@ MACROOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1309,7 +1190,6 @@ MVK: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1317,7 +1197,6 @@ N2O5: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1325,7 +1204,6 @@ NH3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1333,7 +1211,6 @@ NH4: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1341,7 +1218,6 @@ NO3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1349,7 +1225,6 @@ O3S: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1357,7 +1232,6 @@ OCLO: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1365,7 +1239,6 @@ OCS: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1373,7 +1246,6 @@ ONITR: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1381,7 +1253,6 @@ PAN: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1389,7 +1260,6 @@ POOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1397,7 +1267,6 @@ RO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1405,7 +1274,6 @@ ROOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1413,7 +1281,6 @@ SO3: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1421,7 +1288,6 @@ SOAE: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1429,7 +1295,6 @@ TERP: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1437,7 +1302,6 @@ XO2: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1445,7 +1309,6 @@ XOOH: category: "Composition" colormap: "jet" diff_colormap: "gist_ncar" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 1000000000.0 new_unit: "ppbv" @@ -1460,7 +1323,6 @@ CLDICE: obs_file: "CLDICE_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "CLDICE" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDLIQ: @@ -1468,7 +1330,6 @@ CLDLIQ: obs_file: "CLDLIQ_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "CLDLIQ" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDTOT: @@ -1483,7 +1344,6 @@ CLDTOT: obs_name: "ERAI" obs_var_name: "CLDTOT" category: "Clouds" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDLOW: @@ -1498,7 +1358,6 @@ CLDLOW: obs_name: "ERAI" obs_var_name: "CLDLOW" category: "Clouds" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDHGH: @@ -1513,7 +1372,6 @@ CLDHGH: obs_name: "ERAI" obs_var_name: "CLDHGH" category: "Clouds" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDMED: @@ -1528,7 +1386,6 @@ CLDMED: obs_name: "ERAI" obs_var_name: "CLDMED" category: "Clouds" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLOUD: @@ -1543,7 +1400,6 @@ CLOUD: colorbar: label : "Percent" category: "Clouds" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CONCLD: @@ -1566,7 +1422,6 @@ TGCLDLWP: obs_var_name: "TGCLDLWP" obs_scale_factor: 1000 obs_add_offset: 0 - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TGCLDIWP: @@ -1586,7 +1441,6 @@ TGCLDIWP: obs_var_name: "TGCLDIWP" obs_scale_factor: 1000 obs_add_offset: 0 - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CCN3: @@ -1624,7 +1478,6 @@ PRECC: colorbar: label : "mm/d" category: "Hydrologic cycle" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PRECL: @@ -1639,7 +1492,6 @@ PRECL: colorbar: label : "mm d$^{-1}$" category: "Hydrologic cycle" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PRECSC: @@ -1654,7 +1506,6 @@ PRECSC: colorbar: label : "mm d$^{-1}$" category: "Hydrologic cycle" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PRECSL: @@ -1669,7 +1520,6 @@ PRECSL: colorbar: label : "mm d$^{-1}$" category: "Hydrologic cycle" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PRECT: @@ -1688,7 +1538,6 @@ PRECT: obs_var_name: "PRECT" category: "Hydrologic cycle" derivable_from: ['PRECL','PRECC'] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" QFLX: @@ -1719,7 +1568,6 @@ PSL: obs_file: "PSL_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "PSL" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PS: @@ -1737,7 +1585,6 @@ PS: obs_file: "PS_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "PS" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TREFHT: @@ -1761,7 +1608,6 @@ TS: obs_name: "ERAI" obs_var_name: "TS" category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SST: @@ -1780,17 +1626,14 @@ SST: obs_var_name: "TS" category: "Surface variables" mask: "ocean" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" U10: category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" Surface_Wind_Stress: category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TAUX: @@ -1799,7 +1642,6 @@ TAUX: category: "Surface variables" scale_factor: -1 add_offset: 0 - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TAUY: @@ -1808,22 +1650,18 @@ TAUY: category: "Surface variables" scale_factor: -1 add_offset: 0 - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" ICEFRAC: category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" OCNFRAC: category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" LANDFRAC: category: "Surface variables" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -1842,7 +1680,6 @@ TMQ: obs_name: "ERAI" obs_var_name: "PREH2O" category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" RELHUM: @@ -1860,7 +1697,6 @@ RELHUM: obs_name: "ERAI" obs_var_name: "RELHUM" category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" U: @@ -1880,7 +1716,6 @@ U: vector_pair: "V" vector_name: "Wind" category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" V: @@ -1900,7 +1735,6 @@ V: vector_pair: "U" vector_name: "Wind" category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" Q: @@ -1908,7 +1742,6 @@ Q: obs_file: "Q_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "Q" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" T: @@ -1916,7 +1749,6 @@ T: obs_file: "T_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "T" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" OMEGA: @@ -1924,12 +1756,10 @@ OMEGA: obs_file: "OMEGA_ERA5_monthly_climo_197901-202112.nc" obs_name: "ERA5" obs_var_name: "OMEGA" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" OMEGA500: category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" scale_factor: 864 add_offset: 0 @@ -1938,22 +1768,18 @@ OMEGA500: PINT: category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PMID: category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" Z3: category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" Wind: category: "State" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -1962,12 +1788,10 @@ Wind: QRL: category: "Radiation" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" QRS: category: "Radiation" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -1987,7 +1811,6 @@ RESTOM: label : "W m$^{-2}$" category: "TOA energy flux" derivable_from: ['FLNT','FSNT'] - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SWCF: @@ -2007,7 +1830,6 @@ SWCF: obs_scale_factor: 1 obs_add_offset: 0 category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" LWCF: @@ -2025,7 +1847,6 @@ LWCF: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "toa_cre_lw_mon" category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSUTOA: @@ -2040,7 +1861,6 @@ FSUTOA: colorbar: label : "Wm$^{-2}$" category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSNT: @@ -2058,22 +1878,18 @@ FSNT: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "fsnt" category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSNTC: category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSNTOA: category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLUT: category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLNT: @@ -2091,7 +1907,6 @@ FLNT: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "toa_lw_all_mon" category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLNTC: @@ -2109,7 +1924,6 @@ FLNTC: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "toa_lw_clr_t_mon" category: "TOA energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -2118,12 +1932,10 @@ FLNTC: FSDS: category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSDSC: category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSNS: @@ -2141,7 +1953,6 @@ FSNS: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "sfc_net_sw_all_mon" category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FSNSC: @@ -2159,7 +1970,6 @@ FSNSC: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "sfc_net_sw_clr_t_mon" category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLDS: @@ -2177,22 +1987,18 @@ FLDS: obs_name: "CERES_EBAF_Ed4.1" obs_var_name: "sfc_lw_down_all_mon" category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLNS: category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FLNSC: category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SHFLX: category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" LHFLX: @@ -2210,7 +2016,6 @@ LHFLX: obs_name: "ERAI" obs_var_name: "LHFLX" category: "Sfc energy flux" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #+++++++++++++++++ @@ -2219,107 +2024,86 @@ LHFLX: CLDTOT_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLIMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLWMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" FISCCP1_COSP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" ICE_ICLD_VISTAU: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" IWPMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" LIQ_ICLD_VISTAU: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" LWPMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" MEANCLDALB_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" MEANPTOP_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" MEANTAU_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" MEANTB_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" MEANTBCLR_ISCCP: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" PCTMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" REFFCLIMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" REFFCLWMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" SNOW_ICLD_VISTAU: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TAUTMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TAUWMODIS: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TOT_CLD_VISTAU: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" TOT_ICLD_VISTAU: category: "COSP" - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" CLDTOT_CAL: @@ -2402,96 +2186,167 @@ H2O: colorbar: label: "mol mol$^{-1}$" plot_log_pressure: True - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" OMEGAT: colormap: "PuOr_r" diff_colormap: "coolwarm" plot_log_pressure: True - pct_diff_contour_levels: [-100,-75,-50,-40,-30,-20,-10,-8,-6,-4,-2,0,2,4,6,8,10,20,30,40,50,75,100] pct_diff_colormap: "PuOr_r" #++++++++++++++ # Category: TEM #++++++++++++++ - -uzm: - ylim: [1e3,1] +UZM: + colormap: "RdYlBu_r" + contour_levels_range: [-60,61,8] + diff_colormap: "bwr" + diff_contour_range: [-35,36,5] + ylim: [1e3,1e-1] units: m s-1 - long_name: Zonal-Mean zonal wind + mpl: + colorbar: + #ticks: [-5,-1,-0.2,0.2,1,5] + label : "m/s" + long_name: Zonal mean zonal wind ($\bar{u}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "uzm" -vzm: - ylim: [1e3,1] +VZM: + ylim: [1e3,1e-1] units: m s-1 - long_name: Zonal-Mean meridional wind + long_name: Zonal-Mean meridional wind ($\bar{v}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "vzm" -epfy: - ylim: [1e2,1] - units: m3 s−2 - long_name: northward component of the Eliassen–Palm flux +THZM: + colormap: "Spectral_r" + contour_levels_range: [185,300,6] + diff_colormap: "bwr" + diff_contour_range: [-7,7.1,0.5] + ylim: [1e3,1e-1] + mpl: + colorbar: + label : "K" + long_name: Zonal mean potential temperature ($\bar{\theta}$) + obs_file: "TEM_ERA5.nc" + obs_name: "ERA5" + obs_var_name: "uzm" + +EPFY: + colormap: "RdYlBu_r" + contour_adjust: 1e7 + contour_levels: [-5e7,-4e7,-3e7,-2e7,-1e7,-0.8e7,-0.6e7,-0.4e7,-0.2e7,-0.1e7,0,0.1e7,0.2e7,0.4e7,0.6e7,0.8e7,1e7,2e7,3e7,4e7,5e7] + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-2e7,2.1e7,0.2e7] + ylim: [1e3,1e-1] + mpl: + colorbar: + label : "m3/s2" + long_name: EP Flux - meridional component ($F_{y}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "epfy" -epfz: - ylim: [1e2,1] - units: m3 s−2 - long_name: upward component of the Eliassen–Palm flux +EPFZ: + colormap: "RdYlBu_r" + contour_adjust: 1e6 + contour_levels: [-5e6,-4e6,-3e6,-2e6,-1e6,-0.8e6,-0.6e6,-0.4e6,-0.2e6,-0.1e6,0,0.1e6,0.2e6,0.4e6,0.6e6,0.8e6,1e6,2e6,3e6,4e6,5e6] + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-1e5,1.1e5,0.1e5] + ylim: [1e3,1e-1] + mpl: + colorbar: + label : "m3/s2" + long_name: EP Flux - vertical component ($F_{z}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "epfz" -vtem: - ylim: [1e2,1] - units: m/s - long_name: Transformed Eulerian mean northward wind +VTEM: + colormap: "RdYlBu_r" + contour_levels: [-5,-4,-3,-2,-1,-0.8,-0.6,-0.4,-0.2,-0.1,0,0.1,0.2,0.4,0.6,0.8,1,2,3,4,5] + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-2,2.1,0.2] + ylim: [1e3,1e-1] + mpl: + colorbar: + ticks: [-5,-1,-0.2,0.2,1,5] + label : "m/s" + long_name: TEM meridional wind ($\bar{v}^{*}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "vtem" -wtem: - ylim: [1e2,1] - units: m/s - long_name: Transformed Eulerian mean upward wind +WTEM: + colormap: "RdYlBu_r" + contour_levels: [-2,-1.7,-1.4,-1.1,-0.8,-0.65,-0.5,-0.35,-0.2,-0.1,0,0.1,0.2,0.35,0.5,0.65,0.8,1.1,1.4,1.7,2] + scale_factor: 100 + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-2,2.1,0.2] + ylim: [1e3,1e-1] + mpl: + colorbar: + ticks: [-2,-0.8,-0.2,0.2,0.8,2] + label : "cm/s" + units: cm/s + long_name: TEM vertical wind ($\bar{w}^{*}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "wtem" -psitem: - ylim: [1e2,1] - units: m3 s−2 - long_name: Transformed Eulerian mean mass stream function +PSITEM: + colormap: "RdYlBu_r" + contour_levels: [-3e11,-2e11,-1e11,-0.8e11,-0.6e11,-0.4e11,-0.2e11,-0.1e11,0,0.1e11,0.2e11,0.4e11,0.6e11,0.8e11,1e11,2e11,3e11] + contour_adjust: 1e11 + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-5e9,5.1e9,.5e9] + ylim: [1e3,1e-1] + mpl: + colorbar: + label : "kg/s" + units: kg/s + long_name: TEM mass stream function ($\bar{\chi}^{*}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "psitem" -utendepfd: - ylim: [1e2,1] - units: m3 s−2 - long_name: tendency of eastward wind due to Eliassen-Palm flux divergence +UTENDEPFD: + colormap: "RdYlBu_r" + contour_levels: [-0.3,-0.2,-0.1,-0.08,-0.06,-0.04,-0.02,-0.01,0,0.01,0.02,0.04,0.06,0.08,0.1,0.2,0.3] + non_linear_levels: True + diff_colormap: "bwr" + diff_contour_range: [-0.1,0.11,.01] + ylim: [1e3,1e-1] + mpl: + colorbar: + label : "mm/s2" + long_name: EP flux divergence ($\nabla \cdot F$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "utendepfd" -utendvtem: - ylim: [1e2,1] - units: m3 s−2 - long_name: tendency of eastward wind due to TEM northward wind advection and the coriolis term +UTENDVTEM: + colormap: "RdYlBu_r" + diff_colormap: "bwr" + ylim: [1e3,1e-1] + long_name: EP flux divergence - meridional component ($F_{yy}$) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "utendvtem" -utendwtem: - ylim: [1e2,1] - units: m3 s−2 - long_name: tendency of eastward wind due to TEM upward wind advection +UTENDWTEM: + colormap: "RdYlBu_r" + diff_colormap: "bwr" + ylim: [1e3,1e-1] + long_name: EP flux divergence - vertical component ($F_{zz}) obs_file: "TEM_ERA5.nc" obs_name: "ERA5" obs_var_name: "utendwtem" @@ -2582,8 +2437,8 @@ aod_diags: range_max: 100 range_min: -100 nlevel: 21 - colormap: "PuOr_r" + colormap: "bwr" #----------- -#End of File +#End of File \ No newline at end of file diff --git a/lib/adf_web.py b/lib/adf_web.py index b5d8e77ed..4562bbf1c 100644 --- a/lib/adf_web.py +++ b/lib/adf_web.py @@ -56,7 +56,7 @@ class _WebData: needed by the website generator. """ - def __init__(self, web_data, web_name, case_name, + def __init__(self, web_data, web_name, case_name,ext="Mean", category = None, season = None, non_season = False, @@ -74,6 +74,7 @@ def __init__(self, web_data, web_name, case_name, self.season = season self.non_season = non_season self.plot_type = plot_type + self.ext = ext self.data_frame = data_frame self.html_file = html_file self.asset_path = asset_path @@ -299,7 +300,7 @@ def _write_run_info_to_log(self, config_file, active_env): self.debug_log(log_msg) - def add_website_data(self, web_data, web_name, case_name, + def add_website_data(self, web_data, web_name, case_name,ext="Mean", category = None, season = None, non_season = False, @@ -413,6 +414,7 @@ def add_website_data(self, web_data, web_name, case_name, season = season, non_season = non_season, plot_type = plot_type, + ext = ext, data_frame = data_frame, html_file = html_file, asset_path = asset_path, @@ -659,7 +661,6 @@ def jinja_enumerate(arg): #Initialize Ordered Dictionary for season: mean_html_info[ptype][category][var][season] = web_data.html_file.name - #Initialize Ordered Dictionary for non season kwarg: if ptype not in non_seasons: non_seasons[ptype] = OrderedDict() @@ -733,7 +734,6 @@ def jinja_enumerate(arg): #Check if the mean plot type page exists for this case (or for multi-case): mean_table_file = table_pages_dir / "mean_tables.html" - #Construct mean_table.html mean_table_tmpl = jinenv.get_template('template_mean_tables.html') #Reuse the rend_kwarg_dict @@ -742,7 +742,6 @@ def jinja_enumerate(arg): with open(mean_table_file, 'w', encoding='utf-8') as ofil: ofil.write(mean_table_rndr) #End with - #End if (tables) else: #Plot image @@ -761,20 +760,21 @@ def jinja_enumerate(arg): plot_types = plot_type_html #End if - rend_kwarg_dict = {"title": main_title, - "var_title": web_data.name, - "season_title": web_data.season, - "case_name": web_data.case, - "case_yrs": case_yrs, - "base_name": data_name, - "baseline_yrs": baseline_yrs, - "plottype_title": web_data.plot_type, - "imgs": img_data, - "mydata": mean_html_info[web_data.plot_type], - "plot_types": plot_types, - "seasons": seasons, - "non_seasons": non_seasons[web_data.plot_type]} + rend_kwarg_dict = {"title": main_title, + "var_title": web_data.name, + "ext": web_data.ext, + "season_title": web_data.season, + "case_name": web_data.case, + "case_yrs": case_yrs, + "base_name": data_name, + "baseline_yrs": baseline_yrs, + "plottype_title": web_data.plot_type, + "imgs": img_data, + "mydata": mean_html_info[web_data.plot_type], + "plot_types": plot_types, + "seasons": seasons, + "non_seasons": non_seasons[web_data.plot_type]} tmpl = jinenv.get_template('template.html') #Set template rndr = tmpl.render(rend_kwarg_dict) #The template rendered @@ -831,6 +831,7 @@ def jinja_enumerate(arg): if web_data.case == 'multi-case': plot_types = multi_plot_type_html else: + case1 = web_data.case plot_types = plot_type_html plot_types = plot_type_html #End if diff --git a/lib/plotting_functions.py b/lib/plotting_functions.py index 86911759e..58bad7204 100644 --- a/lib/plotting_functions.py +++ b/lib/plotting_functions.py @@ -37,6 +37,7 @@ import numpy as np import xarray as xr import matplotlib as mpl +import matplotlib.cm as cm import cartopy.crs as ccrs #nice formatting for tick labels from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter @@ -70,7 +71,6 @@ "SON": [9, 10, 11] } - ################# #HELPER FUNCTIONS ################# @@ -829,7 +829,6 @@ def plot_map_and_save(wks, case_nickname, base_nickname, borderpad=0, ) fig.colorbar(img[1], cax=cb_mean_ax, **cp_info['colorbar_opt']) - cb_pct_ax = inset_axes(ax3, width="5%", # width = 5% of parent_bbox width @@ -1451,7 +1450,7 @@ def square_contour_difference(fld1, fld2, **kwargs): else: dnorm = mpl.colors.TwoSlopeNorm(vmin=dmin, vcenter=0, vmax=dmax) cmap = mpl.cm.RdBu_r - + img3 = ax3.contourf(xx, yy, diff.transpose(), cmap=cmap, norm=dnorm) if (coord1 == 'month') and (fld1.shape[0] ==12): ax3.set_xticks(np.arange(1,13)) diff --git a/lib/website_templates/template_mean_diag.html b/lib/website_templates/template_mean_diag.html index 0d4337a30..ac489c294 100644 --- a/lib/website_templates/template_mean_diag.html +++ b/lib/website_templates/template_mean_diag.html @@ -53,7 +53,7 @@

{{ category }}

{% for i,season in enumerate(ptype_seas.keys()) %} {% if i==0 %}
- {{var_name}}
+ {{var_name}}
{% endif %} {% endfor %} @@ -62,7 +62,7 @@

{{ category }}

{% for season in ptype_seas.keys() %} {% if season == list(ptype_seas.keys())[0] %}
- {{var_name}}
+ {{var_name}}
{% endif %} {% endfor %} diff --git a/scripts/averaging/create_TEM_files.py b/scripts/averaging/create_TEM_files.py index 61acf7f85..4cdc0bc2d 100644 --- a/scripts/averaging/create_TEM_files.py +++ b/scripts/averaging/create_TEM_files.py @@ -33,10 +33,10 @@ def create_TEM_files(adf): res = adf.variable_defaults # will be dict of variable-specific plot preferences if "qbo" in adf.plotting_scripts: - var_list = ['uzm','epfy','epfz','vtem','wtem', - 'psitem','utendepfd','utendvtem','utendwtem'] + var_list = ["UZM","THZM","EPFY","EPFZ","VTEM","WTEM", + "PSITEM","UTENDEPFD","UTENDVTEM","UTENDWTEM"] else: - var_list = ['uzm','epfy','epfz','vtem','wtem','psitem','utendepfd'] + var_list = ["UZM","THZM","EPFY","EPFZ","VTEM","WTEM","PSITEM","UTENDEPFD"] tem_locs = [] @@ -62,9 +62,9 @@ def create_TEM_files(adf): #End for #Set default to h4 - hist_nums = adf.get_cam_info("tem_hist_str") + hist_nums = adf.get_cam_info("tem_hist_str")[0] if hist_nums is None: - hist_nums = ["h4"]*len(case_names) + hist_nums = ["h4a"]*len(case_names) #Get test case(s) tem over-write boolean and force to list if not by default overwrite_tem_cases = adf.get_cam_info("overwrite_tem") @@ -154,7 +154,7 @@ def create_TEM_files(adf): #Set default to h4 hist_num = adf.get_baseline_info("tem_hist_str") if hist_num is None: - hist_num = "h4" + hist_num = "h4a" #Extract baseline years (which may be empty strings if using Obs): syear_baseline = adf.climo_yrs["syear_baseline"] @@ -200,8 +200,9 @@ def create_TEM_files(adf): #End if #Check if history files actually exist. If not then kill script: - hist_str = f"*{hist_nums[case_idx]}" - if not list(starting_location.glob(hist_str+'.*.nc')): + + hist_str = f"{hist_nums[case_idx]}" + if not list(starting_location.glob("*"+hist_str+'.*.nc')): emsg = f"No CAM history {hist_str} files found in '{starting_location}'." emsg += " Script is ending here." adf.end_diag_fail(emsg) @@ -237,7 +238,7 @@ def create_TEM_files(adf): #Grab all leading zeros for climo year just in case yr = f"{str(yr).zfill(4)}" - hist_files.append(glob(f"{starting_location}/{hist_str}.{yr}*.nc")) + hist_files.append(glob(f"{starting_location}/*{hist_str}.{yr}*.nc")) #Flatten list of lists to 1d list hist_files = sorted(list(chain.from_iterable(hist_files))) @@ -423,6 +424,9 @@ def calc_tem(ds): vzm.attrs['long_name'] = 'Zonal-Mean meridional wind' vzm.attrs['units'] = 'm/s' + thzm.attrs['long_name'] = 'Zonal-Mean potential temperature' + thzm.attrs['units'] = 'K' + epfy.attrs['long_name'] = 'northward component of E-P flux' epfy.attrs['units'] = 'm3/s2' @@ -455,19 +459,28 @@ def calc_tem(ds): utendvtem.values = np.float32(utendvtem.values) utendwtem.values = np.float32(utendwtem.values) + #Average time dimension over time bounds, if bounds exist: + if 'time_bnds' in ds: + time_bounds_name = 'time_bnds' + elif 'time_bounds' in ds: + time_bounds_name = 'time_bounds' + dstem = xr.Dataset(data_vars=dict(date = ds.date, datesec = ds.datesec, - time_bnds = ds.time_bnds, - uzm = uzm, - vzm = vzm, - epfy = epfy, - epfz = epfz, - vtem = vtem, - wtem = wtem, - psitem = psitem, - utendepfd = utendepfd, - utendvtem = utendvtem, - utendwtem = utendwtem + time_bnds = time_bounds_name, + hybm=ds.hybm, + hyam=ds.hyam, + UZM = uzm, + VZM = vzm, + THZM = thzm, + EPFY = epfy, + EPFZ = epfz, + VTEM = vtem, + WTEM = wtem, + PSITEM = psitem, + UTENDEPFD = utendepfd, + UTENDVTEM = utendvtem, + UTENDWTEM = utendwtem )) return dstem \ No newline at end of file diff --git a/scripts/plotting/global_latlon_vect_map.py b/scripts/plotting/global_latlon_vect_map.py index b0a4e02f2..4adc816f2 100644 --- a/scripts/plotting/global_latlon_vect_map.py +++ b/scripts/plotting/global_latlon_vect_map.py @@ -58,7 +58,12 @@ def global_latlon_vect_map(adfobj): # # Use ADF api to get all necessary information # + #Variable list var_list = adfobj.diag_var_list + #Remove unneccasry vairbale from plotting + if "PMID" in var_list: + var_list.remove("PMID") + model_rgrid_loc = adfobj.get_basic_info("cam_regrid_loc", required=True) #Special ADF variable which contains the output path for diff --git a/scripts/plotting/meridional_mean.py b/scripts/plotting/meridional_mean.py index f4e058098..902671fe9 100644 --- a/scripts/plotting/meridional_mean.py +++ b/scripts/plotting/meridional_mean.py @@ -24,7 +24,12 @@ def meridional_mean(adfobj): #Extract needed quantities from ADF object: #----------------------------------------- + #Variable list var_list = adfobj.diag_var_list + #Remove unneccasry vairbale from plotting + if "PMID" in var_list: + var_list.remove("PMID") + model_rgrid_loc = adfobj.get_basic_info("cam_regrid_loc", required=True) #Special ADF variable which contains the output paths for diff --git a/scripts/plotting/tem.py b/scripts/plotting/tem.py index 30bffa350..12cb914e0 100644 --- a/scripts/plotting/tem.py +++ b/scripts/plotting/tem.py @@ -3,6 +3,11 @@ import numpy as np import xarray as xr import matplotlib.pyplot as plt +import matplotlib as mpl +import metpy.calc.thermo as thermo +from metpy.units import units + +import plotting_functions as pf #Format warning messages: import adf_utils as utils @@ -42,6 +47,15 @@ def tem(adf): res = adf.variable_defaults # will be dict of variable-specific plot preferences + #Check if comparing against observations + if adf.compare_obs: + obs = True + base_name = "Obs" + else: + obs = False + base_name = adf.get_baseline_info("cam_case_name", required=True) + #End if + #Extract test case years syear_cases = adf.climo_yrs["syears"] eyear_cases = adf.climo_yrs["eyears"] @@ -53,7 +67,6 @@ def tem(adf): #Grab all case nickname(s) test_nicknames = adf.case_nicknames["test_nicknames"] base_nickname = adf.case_nicknames["base_nickname"] - case_nicknames = test_nicknames + [base_nickname] #Set plot file type: # -- this should be set in basic_info_dict, but is not required @@ -99,11 +112,13 @@ def tem(adf): #Suggestion from Rolando, if QBO is being produced, add utendvtem and utendwtem? if "qbo" in adf.plotting_scripts: - var_list = ['uzm','epfy','epfz','vtem','wtem', - 'psitem','utendepfd','utendvtem','utendwtem'] - #Otherwise keep it simple + var_list = ["UZM","THZM","EPFY","EPFZ","VTEM","WTEM", + "PSITEM","UTENDEPFD","UTENDVTEM","UTENDWTEM"] else: - var_list = ['uzm','epfy','epfz','vtem','wtem','psitem','utendepfd'] + var_list = ["UZM","THZM","EPFY","EPFZ","VTEM","WTEM","PSITEM","UTENDEPFD"] + + #Baseline TEM location + input_loc_idx = Path(tem_base_loc) #Check if comparing against obs if adf.compare_obs: @@ -112,372 +127,343 @@ def tem(adf): base_file_name = 'Obs.TEMdiag.nc' input_loc_idx = Path(tem_locs[0]) else: - base_name = adf.get_baseline_info("cam_case_name", required=True) - - #If path not specified, skip TEM calculation? - if tem_base_loc is None: - print(f"\t 'cam_tem_loc' not found for '{base_name}' in config file, so no TEM plots will be generated.") - return - else: - obs = False - input_loc_idx = Path(tem_base_loc) - #Set TEM file for baseline - base_file_name = f'{base_name}.TEMdiag_{syear_baseline}-{eyear_baseline}.nc' + #Set TEM file for baseline + base_file_name = f'{base_name}.TEMdiag_{syear_baseline}-{eyear_baseline}.nc' #Set full path for baseline/obs file tem_base = input_loc_idx / base_file_name - - #Check to see if baseline/obs TEM file exists + + #Check to see if baseline/obs TEM file exists if tem_base.is_file(): - ds_base = xr.open_dataset(tem_base) + ds_base = xr.open_dataset(tem_base, decode_times=False) else: print(f"\t'{base_file_name}' does not exist. TEM plots will be skipped.") return - #Setup TEM plots - nrows = len(var_list) - ncols = len(case_nicknames)+1 - fig_width = 20 - - #try and dynamically create size of fig based off number of cases - fig_height = 15+(ncols*nrows) - - #Loop over season dictionary: - for s in seasons: - #Location to save plots - plot_name = plot_location / f"{s}_TEM_Mean.png" - - # Check redo_plot. If set to True: remove old plot, if it already exists: - if (not redo_plot) and plot_name.is_file(): - #Add already-existing plot to website (if enabled): - adf.debug_log(f"'{plot_name}' exists and clobber is false.") - adf.add_website_data(plot_name, "TEM", None, season=s, multi_case=True) - - #Continue to next iteration: - continue - elif (redo_plot) and plot_name.is_file(): - plot_name.unlink() - - fig, axs = plt.subplots(nrows=nrows, ncols=ncols, figsize=(fig_width,fig_height), - facecolor='w', edgecolor='k') + """if 'time_bnds' in ds_base: + t = ds_base['time_bnds'].mean(dim='nbnd') + t.attrs = ds_base['time'].attrs + ds_base = ds_base.assign_coords({'time':t}) + elif 'time_bounds' in ds_base: + t = ds_base['time_bounds'].mean(dim='nbnd') + t.attrs = ds_base['time'].attrs + ds_base = ds_base.assign_coords({'time':t}) + else: + warnings.warn("\t INFO: Timeseries file does not have time bounds info.")""" + ds_base = xr.decode_cf(ds_base) + + input_ts_locs = adf.get_cam_info("cam_ts_loc", required=True) + + #Loop over variables: + for var in var_list: + #Notify user of variable being plotted: + print(f"\t - TEM plots for {var}") #Loop over model cases: for idx,case_name in enumerate(case_names): + tem_loc = tem_case_locs[idx] + #Extract start and end year values: start_year = syear_cases[idx] end_year = eyear_cases[idx] #Open the TEM file - output_loc_idx = tem_locs[idx] + output_loc_idx = Path(tem_loc) case_file_name = f'{case_name}.TEMdiag_{start_year}-{end_year}.nc' - tem = output_loc_idx / case_file_name + tem_case = output_loc_idx / case_file_name #Grab the data for the TEM netCDF files - if tem.is_file(): - ds = xr.open_dataset(tem) + if tem_case.is_file(): + ds = xr.open_dataset(tem_case) else: - print(f"\t'{case_file_name}' does not exist. TEM plots will be skipped.") + print(f"\t'{tem_case}' does not exist. TEM plots will be skipped.") return - - climo_yrs = {"test":[syear_cases[idx], eyear_cases[idx]], - "base":[syear_baseline, eyear_baseline]} - - #Setup and plot the sub-plots - tem_plot(ds, ds_base, case_nicknames, axs, s, var_list, res, obs, climo_yrs) - - #Set figure title - plt.suptitle(f'TEM Diagnostics: {s}', fontsize=20, y=.928) - - #Write the figure to provided workspace/file: - fig.savefig(plot_name, bbox_inches='tight', dpi=300) - - #Add plot to website (if enabled): - adf.add_website_data(plot_name, "TEM", None, season=s, multi_case=True) - + if 'time_bnds' in ds: + t = ds['time_bnds'].mean(dim='nbnd') + t.attrs = ds['time'].attrs + ds = ds.assign_coords({'time':t}) + elif 'time_bounds' in ds: + t = ds['time_bounds'].mean(dim='nbnd') + t.attrs = ds['time'].attrs + ds = ds.assign_coords({'time':t}) + else: + warnings.warn("\t INFO: Timeseries file does not have time bounds info.") + ds = xr.decode_cf(ds) + + #Loop over season dictionary: + for s in seasons: + + #Location to save plots + plot_name = plot_location / f"{var}_{s}_WACCM_SeasonalCycle_Mean.png" + + # Check redo_plot. If set to True: remove old plot, if it already exists: + if (not redo_plot) and plot_name.is_file(): + #Add already-existing plot to website (if enabled): + adf.debug_log(f"'{plot_name}' exists and clobber is false.") + adf.add_website_data(plot_name, var, None, season=s, plot_type="WACCM",ext="SeasonalCycle_Mean",category="TEM",multi_case=True) + + #plot_name = plot_loc / f"CPT_ANN_WACCM_SeasonalCycle_Mean.{plot_type}" + elif ((redo_plot) and plot_name.is_file()) or (not plot_name.is_file()): + if plot_name.is_file(): + plot_name.unlink() + + #Grab variable defaults for this variable + vres = res[var] + + #Gather data for both cases + mdata = ds[var].squeeze() + odata = ds_base[var].squeeze() + + # APPLY UNITS TRANSFORMATION IF SPECIFIED: + # NOTE: looks like our climo files don't have all their metadata + mdata = mdata * vres.get("scale_factor",1) + vres.get("add_offset", 0) + # update units + mdata.attrs['units'] = vres.get("new_unit", mdata.attrs.get('units', 'none')) + + # Do the same for the baseline case if need be: + if not obs: + odata = odata * vres.get("scale_factor",1) + vres.get("add_offset", 0) + # update units + odata.attrs['units'] = vres.get("new_unit", odata.attrs.get('units', 'none')) + # Or for observations + else: + odata = odata * vres.get("obs_scale_factor",1) + vres.get("obs_add_offset", 0) + # Note: we are going to assume that the specification ensures the conversion makes the units the same. Doesn't make sense to add a different unit. + + #Create array to avoid weighting missing values: + md_ones = xr.where(mdata.isnull(), 0.0, 1.0) + od_ones = xr.where(odata.isnull(), 0.0, 1.0) + + month_length = mdata.time.dt.days_in_month + weights = (month_length.groupby("time.season") / month_length.groupby("time.season").sum()) + + #Calculate monthly-weighted seasonal averages: + if s == 'ANN': + + #Calculate annual weights (i.e. don't group by season): + weights_ann = month_length / month_length.sum() + + mseasons = (mdata * weights_ann).sum(dim='time') + mseasons = mseasons / (md_ones*weights_ann).sum(dim='time') + + #Calculate monthly weights based on number of days: + if obs: + month_length_obs = odata.time.dt.days_in_month + weights_ann_obs = month_length_obs / month_length_obs.sum() + oseasons = (odata * weights_ann_obs).sum(dim='time') + oseasons = oseasons / (od_ones*weights_ann_obs).sum(dim='time') + else: + month_length_base = odata.time.dt.days_in_month + weights_ann_base = month_length_base / month_length_base.sum() + oseasons = (odata * weights_ann_base).sum(dim='time') + oseasons = oseasons / (od_ones*weights_ann_base).sum(dim='time') + + else: + #this is inefficient because we do same calc over and over + mseasons = (mdata * weights).groupby("time.season").sum(dim="time").sel(season=s) + wgt_denom = (md_ones*weights).groupby("time.season").sum(dim="time").sel(season=s) + mseasons = mseasons / wgt_denom + + if obs: + month_length_obs = odata.time.dt.days_in_month + weights_obs = (month_length_obs.groupby("time.season") / month_length_obs.groupby("time.season").sum()) + oseasons = (odata * weights_obs).groupby("time.season").sum(dim="time").sel(season=s) + wgt_denom = (od_ones*weights_obs).groupby("time.season").sum(dim="time").sel(season=s) + oseasons = oseasons / wgt_denom + else: + month_length_base = odata.time.dt.days_in_month + weights_base = (month_length_base.groupby("time.season") / month_length_base.groupby("time.season").sum()) + oseasons = (odata * weights_base).groupby("time.season").sum(dim="time").sel(season=s) + wgt_denom_base = (od_ones*weights_base).groupby("time.season").sum(dim="time").sel(season=s) + oseasons = oseasons / wgt_denom_base + + # Derive zonal mean temp from potential temp + if var == "thzm": + path = input_ts_locs[idx] + ds_pmid = xr.open_dataset(f"{path}{case_name}.cam.h0.PMID.{start_year}01-{end_year}12.nc") + + ds_pmid_interp = ds_pmid.interp(lat=mseasons.zalat,method="nearest") + pmid = ds_pmid_interp["PMID"] + pmid.attrs['units'] = 'Pa' + + #Create array to avoid weighting missing values: + pmid_ones = xr.where(pmid.isnull(), 0.0, 1.0) + + if s == 'ANN': + + #Calculate annual weights (i.e. don't group by season): + weights_ann = month_length / month_length.sum() + + pmid = (pmid * weights_ann).sum(dim='time') + pmid = pmid / (pmid_ones*weights_ann).sum(dim='time') + else: + #this is inefficient because we do same calc over and over + pmid = (pmid * weights).groupby("time.season").sum(dim="time").sel(season=s) + wgt_denom = (pmid_ones*weights).groupby("time.season").sum(dim="time").sel(season=s) + pmid = pmid / wgt_denom + + + mseasons.attrs['units'] = "K" + oseasons.attrs['units'] = "K" + pmid = pmid.mean(dim="lon") + + mseasons = thermo.temperature_from_potential_temperature(pmid* units.Pa,mseasons* units.kelvin) + oseasons = thermo.temperature_from_potential_temperature(pmid* units.Pa,oseasons* units.kelvin) + + if var == "utendepfd": + mseasons = mseasons*1000 + oseasons = oseasons*1000 + #difference: each entry should be (lat, lon) + dseasons = mseasons-oseasons + + #Gather contour plot options + cp_info = pf.prep_contour_plot(mseasons, oseasons, dseasons, **vres) + clevs = np.unique(np.array(cp_info['levels1'])) + norm = cp_info['norm1'] + cmap = cp_info['cmap1'] + clevs_diff = np.unique(np.array(cp_info['levelsdiff'])) + + # mesh for plots: + lat = mseasons['zalat'] + lev = mseasons['lev'] + lats, levs = np.meshgrid(lat, lev) + + # Find the next value below highest vertical level + prev_major_tick = 10 ** (np.floor(np.log10(np.min(levs)))) + prev_major_tick + + # Set padding for colorbar form axis + cmap_pad = 0.005 + + # create figure object + fig = plt.figure(figsize=(14,10)) + # LAYOUT WITH GRIDSPEC + # 4 rows, 8 columns, but each map will take up 4 columns and 2 rows + gs = mpl.gridspec.GridSpec(4, 8, wspace=0.75,hspace=0.5) + ax1 = plt.subplot(gs[0:2, :4], **cp_info['subplots_opt']) + ax2 = plt.subplot(gs[0:2, 4:], **cp_info['subplots_opt']) + ax3 = plt.subplot(gs[2:, 2:6], **cp_info['subplots_opt']) + ax = [ax1,ax2,ax3] + + #Contour fill + img0 = ax[0].contourf(lats, levs,mseasons, levels=clevs, norm=norm, cmap=cmap) + img1 = ax[1].contourf(lats, levs,oseasons, levels=clevs, norm=norm, cmap=cmap) + + #Add contours for highlighting + c0 = ax[0].contour(lats,levs,mseasons,levels=clevs[::2], norm=norm, + colors="k", linewidths=0.5) + + #Check if contour labels need to be adjusted + #ie if the values are large and/or in scientific notation, just label the + #contours with the leading numbers. + #EXAMPLE: plot values are 200000; plot the contours as 2.0 and let the colorbar + # indicate that it is e5. + fmt = {} + if 'contour_adjust' in vres: + test_strs = c0.levels/float(vres['contour_adjust']) + for l, str0 in zip(c0.levels, test_strs): + fmt[l] = str0 + + # Add contour labels + plt.clabel(c0, inline=True, fontsize=8, levels=c0.levels, fmt=fmt) + else: + # Add contour labels + plt.clabel(c0, inline=True, fontsize=8, levels=c0.levels) + + #Add contours for highlighting + c1 = ax[1].contour(lats,levs,oseasons,levels=clevs[::2], norm=norm, + colors="k", linewidths=0.5) + + #Check if contour labels need to be adjusted + #ie if the values are large and/or in scientific notation, just label the + #contours with the leading numbers. + #EXAMPLE: plot values are 200000; plot the contours as 2.0 and let the colorbar + # indicate that it is e5. + fmt = {} + if 'contour_adjust' in vres: + base_strs = c1.levels/float(vres['contour_adjust']) + for l, str0 in zip(c1.levels, base_strs): + fmt[l] = str0 + + # Add contour labels + plt.clabel(c1, inline=True, fontsize=8, levels=c1.levels, fmt=fmt) + else: + # Add contour labels + plt.clabel(c1, inline=True, fontsize=8, levels=c1.levels) + + + #Check if difference plot has contour levels, if not print notification + if len(dseasons.lev) == 0: + #Set empty message for comparison of cases with different vertical levels + #TODO: Work towards getting the vertical and horizontal interpolations!! - JR + empty_message = "These have different vertical levels\nCan't compare cases currently" + props = {'boxstyle': 'round', 'facecolor': 'wheat', 'alpha': 0.9} + prop_x = 0.18 + prop_y = 0.42 + ax[2].text(prop_x, prop_y, empty_message, + transform=ax[2].transAxes, bbox=props) + else: + img2 = ax[2].contourf(lats, levs, dseasons, + #cmap="BrBG", + cmap=cp_info['cmapdiff'], + levels=clevs_diff, + norm=cp_info['normdiff']) + ax[2].contour(lats, levs, dseasons, colors="k", linewidths=0.5, + levels=clevs_diff[::2], norm=cp_info['normdiff']) + cp_info['diff_colorbar_opt']["label"] = cp_info['colorbar_opt']["label"] + plt.colorbar(img2, ax=ax[2], location='right', pad=cmap_pad,**cp_info['diff_colorbar_opt']) + + #Format y-axis + for i,a in enumerate(ax[:]): + a.set_yscale("log") + a.set_xlabel("Latitude") + # Only plot y-axis label for test case + if i == 0: + a.set_ylabel('Pressure [hPa]', va='center', rotation='vertical') + if 'ylim' in vres: + y_lims = [float(lim) for lim in vres['ylim']] + y_lims[-1]=prev_major_tick + a.set_ylim(y_lims) + else: + a.set_ylim(a.get_ylim()[::-1]) + + # Format color bars + plt.colorbar(img1, ax=ax[1], location='right', pad=cmap_pad,**cp_info['colorbar_opt']) + # Remove the colorbar label for baseline + cp_info['colorbar_opt'].pop("label", None) + plt.colorbar(img0, ax=ax[0], location='right', pad=cmap_pad,**cp_info['colorbar_opt']) + + #Variable plot title name + longname = vres["long_name"] + plt.suptitle(f'{longname}: {s}', fontsize=20, y=.97) + + test_yrs = f"{start_year}-{end_year}" + + plot_title = "$\mathbf{Test}:$"+f"{test_nicknames[idx]}\nyears: {test_yrs}" + ax[0].set_title(plot_title, loc='left', fontsize=10) + + if obs: + obs_title = Path(vres["obs_name"]).stem + ax[1].set_title(f"{obs_title}\n",fontsize=10) + + else: + base_yrs = f"{syear_baseline}-{eyear_baseline}" + plot_title = "$\mathbf{Baseline}:$"+f"{base_nickname}\nyears: {base_yrs}" + ax[1].set_title(plot_title, loc='left', fontsize=10) + + #Set main title for difference plots column + ax[2].set_title("$\mathbf{Test} - \mathbf{Baseline}$",fontsize=10) + + #Write the figure to provided workspace/file: + fig.savefig(plot_name, bbox_inches='tight', dpi=300) + + #Add plot to website (if enabled): + adf.add_website_data(plot_name, var, case_name, season=s, plot_type="WACCM", + ext="SeasonalCycle_Mean",category="TEM") + + plt.close() print(" ...TEM plots have been generated successfully.") # Helper functions -################## - -def tem_plot(ds, ds_base, case_names, axs, s, var_list, res, obs, climo_yrs): - """ - TEM subplots - - """ - #Set empty message for comparison of cases with different vertical levels - #TODO: Work towards getting the vertical and horizontal interpolations!! - JR - empty_message = "These have different vertical levels\nCan't compare cases currently" - props = {'boxstyle': 'round', 'facecolor': 'wheat', 'alpha': 0.9} - prop_x = 0.18 - prop_y = 0.42 - - for var in var_list: - #Grab variable defaults for this variable - vres = res[var] - - #Gather data for both cases - mdata = ds[var].squeeze() - odata = ds_base[var].squeeze() - - #Create array to avoid weighting missing values: - md_ones = xr.where(mdata.isnull(), 0.0, 1.0) - od_ones = xr.where(odata.isnull(), 0.0, 1.0) - - month_length = mdata.time.dt.days_in_month - weights = (month_length.groupby("time.season") / month_length.groupby("time.season").sum()) - - #Calculate monthly-weighted seasonal averages: - if s == 'ANN': - - #Calculate annual weights (i.e. don't group by season): - weights_ann = month_length / month_length.sum() - - mseasons = (mdata * weights_ann).sum(dim='time') - mseasons = mseasons / (md_ones*weights_ann).sum(dim='time') - - #Calculate monthly weights based on number of days: - if obs: - month_length_obs = odata.time.dt.days_in_month - weights_ann_obs = month_length_obs / month_length_obs.sum() - oseasons = (odata * weights_ann_obs).sum(dim='time') - oseasons = oseasons / (od_ones*weights_ann_obs).sum(dim='time') - else: - month_length_base = odata.time.dt.days_in_month - weights_ann_base = month_length_base / month_length_base.sum() - oseasons = (odata * weights_ann_base).sum(dim='time') - oseasons = oseasons / (od_ones*weights_ann_base).sum(dim='time') - - else: - #this is inefficient because we do same calc over and over - mseasons = (mdata * weights).groupby("time.season").sum(dim="time").sel(season=s) - wgt_denom = (md_ones*weights).groupby("time.season").sum(dim="time").sel(season=s) - mseasons = mseasons / wgt_denom - - if obs: - month_length_obs = odata.time.dt.days_in_month - weights_obs = (month_length_obs.groupby("time.season") / month_length_obs.groupby("time.season").sum()) - oseasons = (odata * weights_obs).groupby("time.season").sum(dim="time").sel(season=s) - wgt_denom = (od_ones*weights_obs).groupby("time.season").sum(dim="time").sel(season=s) - oseasons = oseasons / wgt_denom - else: - month_length_base = odata.time.dt.days_in_month - weights_base = (month_length_base.groupby("time.season") / month_length_base.groupby("time.season").sum()) - oseasons = (odata * weights_base).groupby("time.season").sum(dim="time").sel(season=s) - wgt_denom_base = (od_ones*weights_base).groupby("time.season").sum(dim="time").sel(season=s) - oseasons = oseasons / wgt_denom_base - - #difference: each entry should be (lat, lon) - dseasons = mseasons-oseasons - - #Run through variables and plot each against the baseline on each row - #Each column will be a case, ie (test, base, difference) - - # uzm - #------------------------------------------------------------------------------------------ - if var == "uzm": - mseasons.plot(ax=axs[0,0], y='lev', yscale='log',ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[0,1], y='lev', yscale='log',ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[0,2].text(prop_x, prop_y, empty_message, transform=axs[0,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[0,2], y='lev', yscale='log', ylim=[1e3,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # epfy - #------------------------------------------------------------------------------------------ - if var == "epfy": - mseasons.plot(ax=axs[1,0], y='lev', yscale='log',vmax=1e6,ylim=[1e2,1], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[1,1], y='lev', yscale='log',vmax=1e6,ylim=[1e2,1], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[1,2].text(prop_x, prop_y, empty_message, transform=axs[1,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[1,2], y='lev', yscale='log', vmax=1e6, - ylim=[1e2,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # epfz - #------------------------------------------------------------------------------------------ - if var == "epfz": - mseasons.plot(ax=axs[2,0], y='lev', yscale='log',vmax=1e5,ylim=[1e2,1], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[2,1], y='lev', yscale='log',vmax=1e5,ylim=[1e2,1], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[2,2].text(prop_x, prop_y, empty_message, transform=axs[2,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[2,2], y='lev', yscale='log', vmax=1e5, - ylim=[1e2,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # vtem - #------------------------------------------------------------------------------------------ - if var == "vtem": - mseasons.plot.contourf(ax=axs[3,0], levels = 21, y='lev', yscale='log', - vmax=3,vmin=-3,ylim=[1e2,1], cmap='RdBu_r', - cbar_kwargs={'label': ds[var].units}) - mseasons.plot.contour(ax=axs[3,0], levels = 11, y='lev', yscale='log', - vmax=3,vmin=-3,ylim=[1e2,1], - colors='black', linestyles=None) - - oseasons.plot.contourf(ax=axs[3,1], levels = 21, y='lev', yscale='log', - vmax=3,vmin=-3,ylim=[1e2,1], cmap='RdBu_r', - cbar_kwargs={'label': ds[var].units}) - oseasons.plot.contour(ax=axs[3,1], levels = 11, y='lev', yscale='log', - vmax=3,vmin=-3,ylim=[1e2,1], - colors='black', linestyles=None) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[3,2].text(prop_x, prop_y, empty_message, transform=axs[3,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[3,2], y='lev', yscale='log', vmax=3,vmin=-3, - ylim=[1e2,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # wtem - #------------------------------------------------------------------------------------------ - if var == "wtem": - mseasons.plot.contourf(ax=axs[4,0], levels = 21, y='lev', yscale='log', - vmax=0.005, vmin=-0.005, ylim=[1e2,1], cmap='RdBu_r', - cbar_kwargs={'label': ds[var].units}) - mseasons.plot.contour(ax=axs[4,0], levels = 7, y='lev', yscale='log', - vmax=0.03, vmin=-0.03, ylim=[1e2,1], - colors='black', linestyles=None) - - oseasons.plot.contourf(ax=axs[4,1], levels = 21, y='lev', yscale='log', - vmax=0.005, vmin=-0.005, ylim=[1e2,1], cmap='RdBu_r', - cbar_kwargs={'label': ds[var].units}) - oseasons.plot.contour(ax=axs[4,1], levels = 7, y='lev', yscale='log', - vmax=0.03, vmin=-0.03, ylim=[1e2,1], - colors='black', linestyles=None) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[4,2].text(prop_x, prop_y, empty_message, transform=axs[4,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[4,2], y='lev', yscale='log',vmax=0.005, vmin=-0.005, - ylim=[1e2,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # psitem - #------------------------------------------------------------------------------------------ - if var == "psitem": - mseasons.plot.contourf(ax=axs[5,0], levels = 21, y='lev', yscale='log', - vmax=5e9, ylim=[1e2,2], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot.contourf(ax=axs[5,1], levels = 21, y='lev', yscale='log', - vmax=5e9, ylim=[1e2,2], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[5,2].text(prop_x, prop_y, empty_message, transform=axs[5,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[5,2], y='lev', yscale='log',vmax=5e9, - ylim=[1e2,2],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # utendepfd - #------------------------------------------------------------------------------------------ - if var == "utendepfd": - mseasons.plot(ax=axs[6,0], y='lev', yscale='log', - vmax=0.0001, vmin=-0.0001, ylim=[1e2,2], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[6,1], y='lev', yscale='log', - vmax=0.0001, vmin=-0.0001, ylim=[1e2,2], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[6,2].text(prop_x, prop_y, empty_message, transform=axs[6,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[6,2], y='lev', yscale='log',vmax=0.0001, vmin=-0.0001, - ylim=[1e2,2],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # utendvtem - #------------------------------------------------------------------------------------------ - if var == "utendvtem": - mseasons.plot(ax=axs[7,0], y='lev', yscale='log',vmax=0.001, ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[7,1], y='lev', yscale='log',vmax=0.001, ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[7,2].text(prop_x, prop_y, empty_message, transform=axs[7,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[7,2], y='lev', yscale='log', vmax=0.001, ylim=[1e3,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # utendwtem - #------------------------------------------------------------------------------------------ - if var == "utendwtem": - mseasons.plot(ax=axs[8,0], y='lev', yscale='log',vmax=0.0001, ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - oseasons.plot(ax=axs[8,1], y='lev', yscale='log',vmax=0.0001, ylim=[1e3,1], - cbar_kwargs={'label': ds[var].units}) - - #Check if difference plot has contour levels, if not print notification - if len(dseasons.lev) == 0: - axs[8,2].text(prop_x, prop_y, empty_message, transform=axs[8,2].transAxes, bbox=props) - else: - dseasons.plot(ax=axs[8,2], y='lev', yscale='log', vmax=0.0001, ylim=[1e3,1],cmap="BrBG", - cbar_kwargs={'label': ds[var].units}) - - # Set the ticks and ticklabels for all x-axes - #NOTE: This has to come after all subplots have been done, - #I am assuming this is because of the way xarray plots info automatically for labels and titles - #This is to change the default xarray labels for each instance of the xarray plot method - plt.setp(axs, xticks=np.arange(-80,81,20), xlabel='latitude', title="") - - #Set titles of subplots - #Set case names in first subplot only - uzm = ds["uzm"].long_name.replace(" ", "\ ") - - test_yrs = f"{climo_yrs['test'][0]}-{climo_yrs['test'][1]}" - axs[0,0].set_title(f"\n\n"+"$\mathbf{Test}$"+f" yrs: {test_yrs}\n"+f"{case_names[0]}\n\n\n",fontsize=14) - - if obs: - obs_title = Path(vres["obs_name"]).stem - axs[0,1].set_title(f"\n\n"+"$\mathbf{Baseline}$\n"+f"{obs_title}\n\n"+"$\mathbf{"+uzm+"}$"+"\n",fontsize=14) - - else: - base_yrs = f"{climo_yrs['base'][0]}-{climo_yrs['base'][1]}" - axs[0,1].set_title(f"\n\n"+"$\mathbf{Baseline}$"+f" yrs: {base_yrs}\n"+f"{case_names[1]}\n\n"+"$\mathbf{"+uzm+"}$"+"\n",fontsize=14) - - #Set main title for difference plots column - axs[0,2].set_title("$\mathbf{Test} - \mathbf{Baseline}$"+"\n\n\n",fontsize=14) - - #Set variable name on center plot (except first plot, see above) - for i in range(1,len(var_list)): - var_name = ds[var_list[i]].long_name.replace(" ", "\ ") - axs[i,1].set_title("$\mathbf{"+var_name+"}$"+"\n",fontsize=14) - - #Adjust subplots - #May need to adjust hspace and wspace depending on if multi-case diagnostics ever happen for TEM diags - hspace = 0.4 - plt.subplots_adjust(wspace=0.5, hspace=hspace) - - return axs - -############## -#END OF SCRIPT \ No newline at end of file +################## \ No newline at end of file diff --git a/scripts/plotting/zonal_mean.py b/scripts/plotting/zonal_mean.py index 9e034e8bf..e3cf41581 100644 --- a/scripts/plotting/zonal_mean.py +++ b/scripts/plotting/zonal_mean.py @@ -42,7 +42,11 @@ def zonal_mean(adfobj): msg = "\n Generating zonal mean plots..." print(f"{msg}\n {'-' * (len(msg)-3)}") + #Variable list var_list = adfobj.diag_var_list + #Remove unneccasry vairbale from plotting + if "PMID" in var_list: + var_list.remove("PMID") #Special ADF variable which contains the output paths for #all generated plots and tables: