From 0f5a3d671aa651dbd222e8e0153b015290b9066a Mon Sep 17 00:00:00 2001 From: chengzhuzhang Date: Mon, 19 May 2025 13:51:25 -0700 Subject: [PATCH 1/6] update tropical_subseasonal_for_eamxx --- .../driver/tropical_subseasonal_driver.py | 117 ++++++++---------- 1 file changed, 52 insertions(+), 65 deletions(-) diff --git a/e3sm_diags/driver/tropical_subseasonal_driver.py b/e3sm_diags/driver/tropical_subseasonal_driver.py index d0ebf522d..e108b753d 100644 --- a/e3sm_diags/driver/tropical_subseasonal_driver.py +++ b/e3sm_diags/driver/tropical_subseasonal_driver.py @@ -9,8 +9,7 @@ from __future__ import annotations -import glob -from typing import TYPE_CHECKING # , Optional +from typing import TYPE_CHECKING, Tuple import numpy as np import xarray as xr @@ -18,7 +17,6 @@ from e3sm_diags.driver.utils import zwf_functions as wf from e3sm_diags.driver.utils.climo_xr import ClimoFreq from e3sm_diags.driver.utils.dataset_xr import Dataset -from e3sm_diags.driver.utils.general import pad_year from e3sm_diags.logger import _setup_child_logger from e3sm_diags.plot.tropical_subseasonal_plot import plot @@ -47,35 +45,28 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara ref_data = Dataset(parameter, data_type="ref") for variable in parameter.variables: - test, test_start, test_end = calculate_spectrum( - parameter.test_data_path, - variable, - parameter.test_start_yr, - parameter.test_end_yr, - ) + # Get test dataset + test_ds = test_data.get_time_series_dataset(variable) + test_spectrum, test_start, test_end = calculate_spectrum(test_ds, variable) + + # Update parameters with actual time range parameter.test_start_yr = test_start parameter.test_end_yr = test_end parameter.test_name_yrs = test_data.get_name_yrs_attr(season) + + # Get reference dataset if run_type == "model_vs_model": - ref, ref_start, ref_end = calculate_spectrum( - parameter.reference_data_path, - variable, - parameter.ref_start_yr, - parameter.ref_end_yr, - ) + ref_ds = ref_data.get_time_series_dataset(variable) + ref_spectrum, ref_start, ref_end = calculate_spectrum(ref_ds, variable) elif run_type == "model_vs_obs": # TODO use pre-calculated spectral power # if parameter.ref_start_yr == "": # parameter.ref_name_yrs = parameter.reference_name # # read precalculated data. # else: - ref_data_path = f"{parameter.reference_data_path}/{parameter.ref_name}" - ref, ref_start, ref_end = calculate_spectrum( - ref_data_path, - variable, - parameter.ref_start_yr, - parameter.ref_end_yr, - ) + ref_ds = ref_data.get_time_series_dataset(variable) + ref_spectrum, ref_start, ref_end = calculate_spectrum(ref_ds, variable) + parameter.ref_start_yr = ref_start parameter.ref_end_yr = ref_end parameter.ref_name_yrs = ref_data.get_name_yrs_attr(season) @@ -84,16 +75,24 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara for diff_name in ["raw_sym", "raw_asy", "norm_sym", "norm_asy", "background"]: diff = ( 100 - * (test[f"spec_{diff_name}"] - ref[f"spec_{diff_name}"]) - / ref[f"spec_{diff_name}"] + * ( + test_spectrum[f"spec_{diff_name}"] + - ref_spectrum[f"spec_{diff_name}"] + ) + / ref_spectrum[f"spec_{diff_name}"] ) diff.name = f"spec_{diff_name}" - diff.attrs.update(test[f"spec_{diff_name}"].attrs) + diff.attrs.update(test_spectrum[f"spec_{diff_name}"].attrs) parameter.spec_type = diff_name parameter.output_file = f"{parameter.var_id}_{parameter.spec_type}_15N-15S" parameter.diff_title = "percent difference" - plot(parameter, test[f"spec_{diff_name}"], ref[f"spec_{diff_name}"], diff) + plot( + parameter, + test_spectrum[f"spec_{diff_name}"], + ref_spectrum[f"spec_{diff_name}"], + diff, + ) if "norm" in diff_name: parameter.spec_type = f"{diff_name}_zoom" @@ -102,8 +101,8 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara ) plot( parameter, - test[f"spec_{diff_name}"], - ref[f"spec_{diff_name}"], + test_spectrum[f"spec_{diff_name}"], + ref_spectrum[f"spec_{diff_name}"], diff, do_zoom=True, ) @@ -111,7 +110,24 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara return parameter -def calculate_spectrum(path, variable, start_year, end_year): +def calculate_spectrum(ds: xr.Dataset, variable: str) -> Tuple[xr.Dataset, str, str]: + """Calculate wavenumber-frequency power spectra for a variable. + + Parameters + ---------- + ds : xr.Dataset + Dataset containing the variable of interest + variable : str + Name of the variable to analyze + + Returns + ------- + Tuple[xr.Dataset, str, str] + Tuple containing: + - Dataset with spectral power components + - Start year (as string) + - End year (as string) + """ # latitude bounds for analysis latBound = (-15, 15) # SAMPLES PER DAY @@ -131,42 +147,13 @@ def calculate_spectrum(path, variable, start_year, end_year): "dosymmetries": True, "rmvLowFrq": True, } - # TODO the time subsetting and variable derivation should be replaced during - # cdat revamp. - - start_year_str = pad_year(start_year) - end_year_str = pad_year(end_year) - try: - var = xr.open_mfdataset(glob.glob(f"{path}/{variable}_*.nc")).sel( - lat=slice(-15, 15), - time=slice(f"{start_year_str}-01-01", f"{end_year_str}-12-31"), - )[variable] - actual_start = var.time.dt.year.values[0] - actual_end = var.time.dt.year.values[-1] - except OSError: - logger.info( - f"No files to open for {variable} within {start_year} and {end_year} from {path}." - ) - raise - # Unit conversion - if var.name == "PRECT": - if var.attrs["units"] == "m/s" or var.attrs["units"] == "m s{-1}": - logger.info( - "\nBEFORE unit conversion: Max/min of data: " - + str(var.values.max()) - + " " - + str(var.values.min()) - ) - var.values = ( - var.values * 1000.0 * 86400.0 - ) # convert m/s to mm/d, do not alter metadata (yet) - var.attrs["units"] = "mm/d" # adjust metadata to reflect change in units - logger.info( - "\nAFTER unit conversion: Max/min of data: " - + str(var.values.max()) - + " " - + str(var.values.min()) - ) + + # Extract variable data from dataset and subset to tropical latitudes + var = ds[variable].sel(lat=slice(-15, 15)) + + # Get actual time range from the data + actual_start = var.time.dt.year.values[0] + actual_end = var.time.dt.year.values[-1] # Wavenumber Frequency Analysis spec_all = wf_analysis(var, **opt) From d8ca55bfbee23051b75c08b53939e45ed6b67994 Mon Sep 17 00:00:00 2001 From: chengzhuzhang Date: Tue, 20 May 2025 11:19:42 -0500 Subject: [PATCH 2/6] use sub_monthly flag --- e3sm_diags/driver/tropical_subseasonal_driver.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/e3sm_diags/driver/tropical_subseasonal_driver.py b/e3sm_diags/driver/tropical_subseasonal_driver.py index e108b753d..cf07a0ad5 100644 --- a/e3sm_diags/driver/tropical_subseasonal_driver.py +++ b/e3sm_diags/driver/tropical_subseasonal_driver.py @@ -46,7 +46,7 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara for variable in parameter.variables: # Get test dataset - test_ds = test_data.get_time_series_dataset(variable) + test_ds = test_data.get_time_series_dataset(variable, single_point=True) test_spectrum, test_start, test_end = calculate_spectrum(test_ds, variable) # Update parameters with actual time range @@ -56,7 +56,7 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara # Get reference dataset if run_type == "model_vs_model": - ref_ds = ref_data.get_time_series_dataset(variable) + ref_ds = ref_data.get_time_series_dataset(variable, single_point=True) ref_spectrum, ref_start, ref_end = calculate_spectrum(ref_ds, variable) elif run_type == "model_vs_obs": # TODO use pre-calculated spectral power @@ -64,7 +64,7 @@ def run_diag(parameter: TropicalSubseasonalParameter) -> TropicalSubseasonalPara # parameter.ref_name_yrs = parameter.reference_name # # read precalculated data. # else: - ref_ds = ref_data.get_time_series_dataset(variable) + ref_ds = ref_data.get_time_series_dataset(variable, single_point=True) ref_spectrum, ref_start, ref_end = calculate_spectrum(ref_ds, variable) parameter.ref_start_yr = ref_start From 82e4945f8a7e9c6a7568d6637083302169761e66 Mon Sep 17 00:00:00 2001 From: ChengzhuZhang Date: Fri, 23 May 2025 15:47:07 -0700 Subject: [PATCH 3/6] support U_at_850hPa with missing value --- e3sm_diags/derivations/derivations.py | 3 +++ .../default_diags/tropical_subseasonal_model_vs_obs.cfg | 1 + e3sm_diags/driver/tropical_subseasonal_driver.py | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/e3sm_diags/derivations/derivations.py b/e3sm_diags/derivations/derivations.py index 77f6dfbda..ee0951788 100644 --- a/e3sm_diags/derivations/derivations.py +++ b/e3sm_diags/derivations/derivations.py @@ -880,6 +880,9 @@ ("wind_speed_10m",): rename, # EAMxx ("si10",): rename, }, + "U850": { + ("U_at_850hPa",): rename, # EAMxx + }, "QREFHT": { ("QREFHT",): lambda q: convert_units(q, target_units="g/kg"), ("qv_2m",): lambda q: convert_units(q, target_units="g/kg"), # EAMxx diff --git a/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg b/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg index d81bdd23e..57cb28231 100644 --- a/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg +++ b/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg @@ -26,3 +26,4 @@ ref_name = "ERA5_Daily" reference_name = "ERA5 Daily" # (1980-2022)" regions = ["15S15N"] + diff --git a/e3sm_diags/driver/tropical_subseasonal_driver.py b/e3sm_diags/driver/tropical_subseasonal_driver.py index cf07a0ad5..dccd2ee39 100644 --- a/e3sm_diags/driver/tropical_subseasonal_driver.py +++ b/e3sm_diags/driver/tropical_subseasonal_driver.py @@ -207,6 +207,11 @@ def wf_analysis(x, **kwargs): # OPTIONAL kwargs: # segsize, noverlap, spd, latitude_bounds (tuple: (south, north)), dosymmetries, rmvLowFrq + # Interpolate missing values along longitude before spectral analysis + if np.any(np.isnan(x)): + logger.info("Interpolating missing values along longitude before spectral analysis") + x = x.interpolate_na(dim='lon', method='linear', fill_value='extrapolate') + z2 = wf.spacetime_power(x, **kwargs) z2avg = z2.mean(dim="component") z2.loc[{"frequency": 0}] = np.nan # get rid of spurious power at \nu = 0 (mean) From 58e35a2f90083e421d62b472af3c2b30846aa793 Mon Sep 17 00:00:00 2001 From: ChengzhuZhang Date: Fri, 23 May 2025 15:52:25 -0700 Subject: [PATCH 4/6] add example pre-processing and run script --- .../run_e3sm_diags_eamxx256_climo.py | 66 +++++++++++++++++++ .../e3sm_diags_for_eamxx/test_eamxx_ne256.sh | 45 +++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py create mode 100644 examples/e3sm_diags_for_eamxx/test_eamxx_ne256.sh diff --git a/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py b/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py new file mode 100644 index 000000000..c2e45d13e --- /dev/null +++ b/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py @@ -0,0 +1,66 @@ +import os +from e3sm_diags.parameter.core_parameter import CoreParameter +from e3sm_diags.parameter.diurnal_cycle_parameter import DiurnalCycleParameter +#from e3sm_diags.parameter.enso_diags_parameter import EnsoDiagsParameter +#from e3sm_diags.parameter.qbo_parameter import QboParameter +#from e3sm_diags.parameter.streamflow_parameter import StreamflowParameter +#from e3sm_diags.parameter.tc_analysis_parameter import TCAnalysisParameter +from e3sm_diags.parameter.tropical_subseasonal_parameter import TropicalSubseasonalParameter +from e3sm_diags.run import runner + +param = CoreParameter() + +param.reference_data_path = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology' + +test_base_path = '/pscratch/sd/c/chengzhu/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128' +ref_climo = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology/' +ref_ts = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/time-series' +param.test_data_path = f'{test_base_path}/rgr/climo' +param.test_name = '1ma_ne30pg2.AVERAGE.nmonths_x1' +param.seasons = ["ANN","DJF","MAM","JJA","SON"] +#param.save_netcdf = True + +prefix = '/global/cfs/cdirs/e3sm/www/zhang40/tests/eamxx' +param.results_dir = os.path.join(prefix, 'eamxx_ne256_0520_trop') +params = [param] + +trop_param = TropicalSubseasonalParameter() +trop_param.test_data_path = f'{test_base_path}/rgr/ts_daily' +trop_param.short_test_name = "Daily_3hi_ne30pg2" +trop_param.test_start_yr = 1996 +trop_param.test_end_yr = 2001 + +# Obs +trop_param.reference_data_path = ref_ts +trop_param.ref_start_yr = 2001 +trop_param.ref_end_yr = 2010 + +params.append(trop_param) + +dc_param = DiurnalCycleParameter() +dc_param.test_data_path = f'{test_base_path}/rgr/climo_diurnal_3hrly' +dc_param.test_name = "3hi_ne30pg2.INSTANT.nhours_x3" +dc_param.short_test_name = "3hi_ne30pg2" +# Plotting diurnal cycle amplitude on different scales. Default is True +dc_param.normalize_test_amp = False + +# Obs +dc_param.reference_data_path = ref_climo + +params.append(dc_param) + +runner.sets_to_run = [ + #"lat_lon", + #"zonal_mean_xy", + #"zonal_mean_2d", + #"zonal_mean_2d_stratosphere", + #"polar", + #"cosp_histogram", + #"meridional_mean_2d", + #"annual_cycle_zonal_mean", + "tropical_subseasonal", + #"diurnal_cycle", + ] + +runner.run_diags(params) + diff --git a/examples/e3sm_diags_for_eamxx/test_eamxx_ne256.sh b/examples/e3sm_diags_for_eamxx/test_eamxx_ne256.sh new file mode 100644 index 000000000..5cd1d90b6 --- /dev/null +++ b/examples/e3sm_diags_for_eamxx/test_eamxx_ne256.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +source /global/common/software/e3sm/anaconda_envs/load_latest_e3sm_unified_pm-cpu.sh +# +drc_in=/global/cfs/cdirs/e3sm/beydoun/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128/run +drc_out=/pscratch/sd/c/chengzhu/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128 +map_file=/global/cfs/projectdirs/e3sm/zender/maps/map_ne30pg2_to_cmip6_180x360_traave.20231201.nc +#Monthly averaged: 1ma_ne30pg2.AVERAGE.nmonths_x1. +#3hourly instantaneous: 3hi_ne30pg2.INSTANT.nhours_x3. +#1hourly instantaneous: 1hi_ne30pg2.INSTANT.nhours_x1. +start=1996 +end=2001 + +echo "Generating Climatology files" +mkdir -p $drc_out +drc_rgr=${drc_out}/rgr/climo +drc=${drc_out}/native/climo +echo $drc_out +cd ${drc_in};eval ls 1ma_ne30pg2.AVERAGE.nmonths_x1.*{${start}..${end}}*.nc | ncclimo -P eamxx -p serial --fml_nm=1ma_ne30pg2.AVERAGE.nmonths_x1 --yr_srt=${start} --yr_end=${end} --drc_out=$drc -O $drc_rgr --map=${map_file} + +echo "Generating Diurnal Cycle Climo files" +# Following drc_in included 3hi_ne30pg2.INSTANT.nhours_x3.*nc but with time_bnds +drc_in=/global/cfs/cdirs/e3sm/chengzhu/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128/run + +drc_rgr=${drc_out}/rgr/climo_diurnal_3hrly +drc=${drc_out}/native/climo_diurnal_3hrly +echo ${drc_in} + +cd ${drc_in};eval ls 3hi_ne30pg2.INSTANT.nhours_x3.*{${start}..${end}}*-10800.nc | ncclimo -P eamxx --clm_md=hfc --caseid=3hi_ne30pg2.INSTANT.nhours_x3 -v precip_liq_surf_mass_flux,precip_ice_surf_mass_flux --yr_srt=${start} --yr_end=${end} --drc_out=${drc} -O $drc_rgr --map=${map_file} #--tpd=8 +## +echo "Generating per-variable time-series from 3hourly instantaneous output." +drc_rgr=${drc_out}/rgr/ts_3hrly +drc=${drc_out}/native/ts_3hrly + +cd ${drc_in};eval ls 3hi_ne30pg2.INSTANT.nhours_x3.*{${start}..${end}}*-10800.nc | ncclimo -P eamxx --clm_md=hfs --caseid=3hi_ne30pg2.INSTANT.nhours_x3 --var=precip_liq_surf_mass_flux,precip_ice_surf_mass_flux,U_at_850hPa,LW_flux_up_at_model_top --yr_srt=$start --yr_end=$end --drc_out=${drc} -O $drc_rgr --map=${map_file} --split # --tpd=8 + +echo "Average 3hrly to daily" +drc_rgr=${drc_out}/rgr/ts_daily +mkdir -p $drc_rgr +cd ${drc_out}/rgr/ts_3hrly +for i in *.nc; do ncra --mro -O -d time,0,,8,8 "$i" "${drc_rgr}/$i";done + +exit + + From c9817f4813513526bba68393333cc4e7401d1443 Mon Sep 17 00:00:00 2001 From: ChengzhuZhang Date: Fri, 23 May 2025 15:57:27 -0700 Subject: [PATCH 5/6] fix pre-commit issues --- .../default_diags/tropical_subseasonal_model_vs_obs.cfg | 1 - e3sm_diags/driver/tropical_subseasonal_driver.py | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg b/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg index 57cb28231..d81bdd23e 100644 --- a/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg +++ b/e3sm_diags/driver/default_diags/tropical_subseasonal_model_vs_obs.cfg @@ -26,4 +26,3 @@ ref_name = "ERA5_Daily" reference_name = "ERA5 Daily" # (1980-2022)" regions = ["15S15N"] - diff --git a/e3sm_diags/driver/tropical_subseasonal_driver.py b/e3sm_diags/driver/tropical_subseasonal_driver.py index dccd2ee39..a8494da17 100644 --- a/e3sm_diags/driver/tropical_subseasonal_driver.py +++ b/e3sm_diags/driver/tropical_subseasonal_driver.py @@ -209,8 +209,10 @@ def wf_analysis(x, **kwargs): # Interpolate missing values along longitude before spectral analysis if np.any(np.isnan(x)): - logger.info("Interpolating missing values along longitude before spectral analysis") - x = x.interpolate_na(dim='lon', method='linear', fill_value='extrapolate') + logger.info( + "Interpolating missing values along longitude before spectral analysis" + ) + x = x.interpolate_na(dim="lon", method="linear", fill_value="extrapolate") z2 = wf.spacetime_power(x, **kwargs) z2avg = z2.mean(dim="component") From 4fb0a3f1dc42b4bc527979be4247f88f529bb3d8 Mon Sep 17 00:00:00 2001 From: tomvothecoder Date: Mon, 26 May 2025 15:09:06 -0500 Subject: [PATCH 6/6] Remove commented out code in example run script --- .../run_e3sm_diags_eamxx256_climo.py | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py b/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py index c2e45d13e..8b30ff8a1 100644 --- a/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py +++ b/examples/e3sm_diags_for_eamxx/run_e3sm_diags_eamxx256_climo.py @@ -1,31 +1,31 @@ import os from e3sm_diags.parameter.core_parameter import CoreParameter from e3sm_diags.parameter.diurnal_cycle_parameter import DiurnalCycleParameter -#from e3sm_diags.parameter.enso_diags_parameter import EnsoDiagsParameter -#from e3sm_diags.parameter.qbo_parameter import QboParameter -#from e3sm_diags.parameter.streamflow_parameter import StreamflowParameter -#from e3sm_diags.parameter.tc_analysis_parameter import TCAnalysisParameter -from e3sm_diags.parameter.tropical_subseasonal_parameter import TropicalSubseasonalParameter +from e3sm_diags.parameter.tropical_subseasonal_parameter import ( + TropicalSubseasonalParameter, +) from e3sm_diags.run import runner param = CoreParameter() -param.reference_data_path = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology' +param.reference_data_path = ( + "/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology" +) -test_base_path = '/pscratch/sd/c/chengzhu/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128' -ref_climo = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology/' -ref_ts = '/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/time-series' -param.test_data_path = f'{test_base_path}/rgr/climo' -param.test_name = '1ma_ne30pg2.AVERAGE.nmonths_x1' -param.seasons = ["ANN","DJF","MAM","JJA","SON"] -#param.save_netcdf = True +test_base_path = "/pscratch/sd/c/chengzhu/ne256pg2_ne256pg2.F20TR-SCREAMv1.rainfrac1.spanc1000.auto2700.acc150.n0128" +ref_climo = "/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/climatology/" +ref_ts = "/global/cfs/cdirs/e3sm/diagnostics/observations/Atm/time-series" +param.test_data_path = f"{test_base_path}/rgr/climo" +param.test_name = "1ma_ne30pg2.AVERAGE.nmonths_x1" +param.seasons = ["ANN", "DJF", "MAM", "JJA", "SON"] +# param.save_netcdf = True -prefix = '/global/cfs/cdirs/e3sm/www/zhang40/tests/eamxx' -param.results_dir = os.path.join(prefix, 'eamxx_ne256_0520_trop') +prefix = "/global/cfs/cdirs/e3sm/www/zhang40/tests/eamxx" +param.results_dir = os.path.join(prefix, "eamxx_ne256_0520_trop") params = [param] trop_param = TropicalSubseasonalParameter() -trop_param.test_data_path = f'{test_base_path}/rgr/ts_daily' +trop_param.test_data_path = f"{test_base_path}/rgr/ts_daily" trop_param.short_test_name = "Daily_3hi_ne30pg2" trop_param.test_start_yr = 1996 trop_param.test_end_yr = 2001 @@ -38,7 +38,7 @@ params.append(trop_param) dc_param = DiurnalCycleParameter() -dc_param.test_data_path = f'{test_base_path}/rgr/climo_diurnal_3hrly' +dc_param.test_data_path = f"{test_base_path}/rgr/climo_diurnal_3hrly" dc_param.test_name = "3hi_ne30pg2.INSTANT.nhours_x3" dc_param.short_test_name = "3hi_ne30pg2" # Plotting diurnal cycle amplitude on different scales. Default is True @@ -49,18 +49,6 @@ params.append(dc_param) -runner.sets_to_run = [ - #"lat_lon", - #"zonal_mean_xy", - #"zonal_mean_2d", - #"zonal_mean_2d_stratosphere", - #"polar", - #"cosp_histogram", - #"meridional_mean_2d", - #"annual_cycle_zonal_mean", - "tropical_subseasonal", - #"diurnal_cycle", - ] +runner.sets_to_run = ["tropical_subseasonal"] runner.run_diags(params) -