Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 129 additions & 34 deletions config_noresm_ipcc.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#==============================
#config_cam_baseline_example.yaml
#config_noresm_default.yaml
# modified from config_amwg_default_plots.yaml

#This is the main CAM diagnostics config file
#for doing comparisons of a CAM run against
#another CAM run, or a CAM baseline simulation.
# This config file contains the standard set of variables and plots used for
# evaluating CAM simulations in the AMWG working group.

#Currently, if one is on NCAR's Casper or
#Cheyenne machine, then only the diagnostic output
Expand Down Expand Up @@ -52,7 +52,7 @@
#names, as this will likely cause issues with the current file parsing
#system.
#--------------------
user: 'your_user_name'
user: 'USER-NAME-NOT-SET'
#
##==============================
#
Expand All @@ -77,7 +77,7 @@ diag_basic_info:

#Is this a model vs observations comparison?
#If "false" or missing, then a model-model comparison is assumed:
compare_obs: true
compare_obs: false

#Generate HTML website (assumed false if missing):
#Note: The website files themselves will be located in the path
Expand All @@ -89,18 +89,18 @@ diag_basic_info:
#Location of observational datasets:
#Note: this only matters if "compare_obs" is true and the path
#isn't specified in the variable defaults file.
obs_data_loc: /diagnostics/ADF/obs
obs_data_loc: /diagnostics/ADF-obs

#Location where re-gridded and interpolated CAM climatology files are stored:
cam_regrid_loc: /scratch/${user}/diagnostics/ADF/regrid
cam_regrid_loc: /scratch/${user}/noresm3/${diag_cam_climo.cam_case_name}/atm/proc/tseries/regrid

#Overwrite CAM re-gridded files?
#If false, or missing, then regridding will be skipped for regridded variables
#that already exist in "cam_regrid_loc":
cam_overwrite_regrid: true
cam_overwrite_regrid: false

#Location where diagnostic plots are stored:
cam_diag_plot_loc: /projects/NS2345K-datalake/www/diagnostics/ADF/plots
cam_diag_plot_loc: /nird/datalake/NS2345K/www/diagnostics/ADF/${user}

#Location of ADF variable plotting defaults YAML file:
#If left blank or missing, ADF/lib/adf_variable_defaults.yaml will be used
Expand Down Expand Up @@ -149,8 +149,7 @@ diag_cam_climo:

#Overwrite CAM climatology files?
#If false, or not prsent, then already existing climatology files will be skipped:
#cam_overwrite_climo: true
cam_overwrite_climo: true
cam_overwrite_climo: false

#Name of CAM case (or CAM run name):
cam_case_name: n1850.ne30_tn14.hybrid_fatessp.20241219
Expand All @@ -163,10 +162,10 @@ diag_cam_climo:

#Location of CAM history (h0a) files:
#Example test files
cam_hist_loc: /projects/NS9560K-datalake/noresm3/cases/${diag_cam_climo.cam_case_name}/atm/hist
cam_hist_loc: /nird/datalake/NS9560K/noresm3/cases/${diag_cam_climo.cam_case_name}/atm/hist

#Location of CAM climatologies (to be created and then used by this script)
cam_climo_loc: /scratch/${user}/diagnostics/ADF/climo/${diag_cam_climo.cam_case_name}/atm/climo
cam_climo_loc: /scratch/${user}/noresm3/${diag_cam_climo.cam_case_name}/atm/proc/climo

#model year when time series files should start:
#Note: Leaving this entry blank will make time series
Expand All @@ -186,17 +185,33 @@ diag_cam_climo:

#Save interim time series files?
#WARNING: This can take up a significant amount of space,
# but will save processing time the next time
cam_ts_save: false
# but will save processing time the next time
cam_ts_save: true

#Overwrite time series files, if found?
#If set to false, then time series creation will be skipped if files are found:
cam_overwrite_ts: false

#Location where time series files are (or will be) stored:
cam_ts_loc: /scratch/${user}/diagnostics/ADF/${diag_cam_climo.cam_case_name}/atm/tseries
cam_ts_loc: /scratch/${user}/noresm3/${diag_cam_climo.cam_case_name}/atm/proc/tseries

#-------------------------------------------------------------------------------------
#TEM diagnostics
#---------------
#TEM history file number
#If missing or blank, ADF will default to h4
tem_hist_str: cam.h4

#Location where TEM files are stored:
#NOTE: If path not specified or commented out, TEM calculation/plots will be skipped!
cam_tem_loc: /scratch/${user}/noresm3/ADF/${diag_cam_climo.cam_case_name}/tem/

#Overwrite TEM files, if found?
#If set to false, then TEM creation will be skipped if files are found:
overwrite_tem: false

#----------------------

#This third set of variables provide info for the CAM baseline climatologies.
#-------------------------------------------------------------------------------------
#This only matters if "compare_obs" is false:
Expand All @@ -206,15 +221,15 @@ diag_cam_baseline_climo:
# eg. cam.h0 or ocn.pop.h.ecosys.nday1 or hist_str: [cam.h2,cam.h0]
# Only affects timeseries as everything else uses the created timeseries
# Default:
hist_str: cam.h0a
hist_str: cam.h0a

#Calculate cam baseline climatologies?
#If false, the climatology files will not be created:
calc_cam_climo: true

#Overwrite CAM climatology files?
#If false, or not present, then already existing climatology files will be skipped:
cam_overwrite_climo: true
cam_overwrite_climo: false

#Name of CAM baseline case:
cam_case_name: n1850.ne30_tn14.hybrid_fatessp.20241204
Expand All @@ -227,10 +242,10 @@ diag_cam_baseline_climo:

#Location of CAM baseline history (h0a) files:
#Example test files
cam_hist_loc: /projects/NS9560K-datalake/noresm3/cases/${diag_cam_baseline_climo.cam_case_name}/atm/hist
cam_hist_loc: /nird/datalake/NS9560K/noresm3/cases/${diag_cam_baseline_climo.cam_case_name}/atm/hist

#Location of baseline CAM climatologies:
cam_climo_loc: /scratch/${user}/diagnostics/ADF/${diag_cam_baseline.cam_case_name}/atm/climo
cam_climo_loc: /scratch/${user}/noresm3/${diag_cam_baseline_climo.cam_case_name}/atm/proc/climo

#model year when time series files should start:
#Note: Leaving this entry blank will make time series
Expand All @@ -250,14 +265,28 @@ diag_cam_baseline_climo:

#Save interim time series files for baseline run?
#WARNING: This can take up a significant amount of space:
cam_ts_save: false
cam_ts_save: true

#Overwrite baseline time series files, if found?
#If set to false, then time series creation will be skipped if files are found:
cam_overwrite_ts: false

#Location where time series files are (or will be) stored:
cam_ts_loc: /scratch/${user}/diagnostics/ADF/${diag_cam_baseline.cam_case_name}/atm/tseries
cam_ts_loc: /scratch/${user}/diagnostics/ADF/${diag_cam_baseline_climo.cam_case_name}/atm/tseries

#TEM diagnostics
#---------------
#TEM history file number
#If missing or blank, ADF will default to h4
tem_hist_str: cam.h4

#Location where TEM files are stored:
#NOTE: If path not specified or commented out, TEM calculation/plots will be skipped!
cam_tem_loc: /scratch/${user}/${diag_cam_baseline_climo.cam_case_name}/tem/

#Overwrite TEM files, if found?
#If set to false, then TEM creation will be skipped if files are found:
overwrite_tem: false

#-------------------------------------------------------------------------------------
#This fourth set of variables provides settings for calling the Climate Variability
Expand All @@ -284,6 +313,67 @@ diag_cvdp_info:
# tar up CVDP results?
cvdp_tar: false

# This set of variables provides settings for calling NOAA's
# Model Diagnostic Task Force (MDTF) diagnostic package.
# https://github.com/NOAA-GFDL/MDTF-diagnostics
#
# If mdtf_run: true, the MDTF will be set up and
# run in background mode, likely completing after the ADF has completed.
#
# WARNING: This currently only runs on CASPER (not derecho)
#
# The variables required depend on the diagnostics (PODs) selected.
# AMWG-developed PODS and their required variables:
# (Note that PRECT can be computed from PRECC & PRECL)
# - MJO_suite: daily PRECT, FLUT, U850, U200, V200 (all required)
# - Wheeler-Kiladis Wavenumber Frequency Spectra: daily PRECT, FLUT, U200, U850, OMEGA500
# (will use what is available)
# - Blocking (Rich Neale): daily OMEGA500
# - Precip Diurnal Cycle (Rich Neale): 3-hrly PRECT
#
# Many other diagnostics are available; see
# https://mdtf-diagnostics.readthedocs.io/en/main/sphinx/start_overview.html

#
diag_mdtf_info:
# Run the MDTF on the model cases
mdtf_run: false

# The file that will be written by ADF to input to MDTF. Call this whatever you want.
mdtf_input_settings_filename : mdtf_input.json

## MDTF code path, sets the location of the MDTF codebase and pre-compiled conda envs
# CHANGE if you have any: your own MDTF code, installed conda envs and/or obs_data

mdtf_codebase_path : /glade/campaign/cgd/amp/amwg/mdtf
mdtf_codebase_loc : ${mdtf_codebase_path}/MDTF-diagnostics.v3.1.20230817.ADF
conda_root : /glade/u/apps/opt/conda
conda_env_root : ${mdtf_codebase_path}/miniconda2/envs.MDTFv3.1.20230412/
OBS_DATA_ROOT : ${mdtf_codebase_path}/obs_data

# SET this to a writable dir. The ADF will place ts files here for the MDTF to read (adds the casename)
MODEL_DATA_ROOT : ${diag_cam_climo.cam_ts_loc}/mdtf/inputdata/model

# Choose diagnostics (PODs). Full list of available PODs: https://github.com/NOAA-GFDL/MDTF-diagnostics
pod_list : [ "MJO_suite" ]

# Intermediate/output file settings
make_variab_tar: false # tar up MDTF results
save_ps : false # save postscript figures in addition to bitmaps
save_nc : false # save netCDF files of processed data (recommend true when starting with new model data)
overwrite: true # overwrite results in OUTPUT_DIR; otherwise results will be saved under a unique name

# Settings used in debugging:
verbose : 3 # Log verbosity level.
test_mode: false # Set to true for framework test. Data is fetched but PODs are not run.
dry_run : false # Framework test. No external commands are run and no remote data is copied. Implies test_mode.

# Settings that shouldn't change in ADF implementation for now
data_type : single_run # single_run or multi_run (only works with single right now)
data_manager : Local_File # Fetch data or it is local?
environment_manager : Conda # Manage dependencies



#+++++++++++++++++++++++++++++++++++++++++++++++++++
#These variables below only matter if you are using
Expand All @@ -298,7 +388,7 @@ diag_cvdp_info:
#Name of time-averaging scripts being used to generate climatologies.
#These scripts must be located in "scripts/averaging":
time_averaging_scripts:
- create_climo_files
- {create_climo_files: {kwargs: {clobber: false}}}
#- create_TEM_files #To generate TEM files, please un-comment

#Name of regridding scripts being used.
Expand All @@ -316,18 +406,20 @@ analysis_scripts:
plotting_scripts:
- global_mean_timeseries
- global_latlon_map
- global_latlon_vect_map
- zonal_mean
- meridional_mean
- polar_map
- global_latlon_vect_map
- cam_taylor_diagram
- ozone_diagnostics
- qbo
#- tape_recorder
#- tem #To plot TEM, please un-comment fill-out the "tem_info" section below

#List of CAM variables that will be processesd:
#If CVDP is to be run PSL, TREFHT, TS and PRECT (or PRECC and PRECL) should be listed
diag_var_list:
- AODDUST
- AODVIS
- cb_SULFATE
- cb_isoprene
Expand Down Expand Up @@ -373,13 +465,15 @@ diag_var_list:
- FSNTC
- LHFLX
- LWCF
- OMEGA500
- PBLH
- PRECT
- PS
- PSL
- QFLX
- RELHUM
- SHFLX
- SST
- SWCF
- T
- TAUX
Expand All @@ -391,15 +485,16 @@ diag_var_list:
- TS
- U
- U10
# - ICEFRAC
# - OCNFRAC
# - LANDFRAC
# 2d fields
# - SFSO2 0 => 1.4e-10 kg/m2/s (SO2 surface flux)
# - WD_DMS -4.5e-15 => 1.7e-22 kg/m2/s (vertical integrated wet deposition flux)
# - WD_SO2 -1.5e-10 => 3.8e-16 kg/m2/s (vertical integrated wet deposition flux)
# - DF_DMS -4.5e-21 => 5.1e-13 kg/m2/s (vertical integrated dry deposition flux)
# - DF_H2O2 6.6e-26 => 2.7e-11 kg/m2/s (vertical integrated dry deposition flux)
- ICEFRAC
- OCNFRAC
- LANDFRAC
- O3
# 2d fields
# - SFSO2 0 => 1.4e-10 kg/m2/s (SO2 surface flux)
# - WD_DMS -4.5e-15 => 1.7e-22 kg/m2/s (vertical integrated wet deposition flux)
# - WD_SO2 -1.5e-10 => 3.8e-16 kg/m2/s (vertical integrated wet deposition flux)
# - DF_DMS -4.5e-21 => 5.1e-13 kg/m2/s (vertical integrated dry deposition flux)
# - DF_H2O2 6.6e-26 => 2.7e-11 kg/m2/s (vertical integrated dry deposition flux)
# - DF_SO2 1.5e-27 => 7.0e-10 kg/m2/s (vertical integrated dry deposition flux)
# 3d fields
# - sum_BC 1.8e-14 => 1.2e-8 kg/kg (sum of BC concentrations)
Expand Down
8 changes: 6 additions & 2 deletions scripts/plotting/cam_taylor_diagram.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,11 @@ def cam_taylor_diagram(adfobj):
# LOOP OVER VARIABLES
#
for v in var_list:
base_x = _retrieve(adfobj, v, data_name, data_loc) # get the baseline field
try:
base_x = _retrieve(adfobj, v, data_name, data_loc) # get the baseline field
except Exception as e:
print(f"[WARN] Skipping variable '{v}' due to error: {e}")
continue
for casenumber, case in enumerate(case_names): # LOOP THROUGH CASES
case_x = _retrieve(adfobj, v, case, case_climo_loc[casenumber])
# ASSUMING `time` is 1-12, get the current season:
Expand Down Expand Up @@ -590,4 +594,4 @@ def taylor_plot_finalize(wks, test_nicknames, casecolors, syear_cases, eyear_cas
bias_legend_labels = ["> 20%", "10-20%", "5-10%", "1-5%", "< 1%"]
wks.legend(handles=bias_legend_elements, labels=bias_legend_labels, loc='upper left', handler_map={tuple: HandlerTuple(ndivide=None, pad=2.)}, labelspacing=2, handletextpad=2, frameon=False, title=" - / + Bias",
title_fontsize=18)
return wks
return wks
8 changes: 5 additions & 3 deletions scripts/plotting/global_mean_timeseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,9 +304,11 @@ def make_plot(ref_ts_da, case_ts, var, label=None):
ax.set_title(var, loc="left")
ax.set_xlabel("YEAR")
# Place the legend
ax.legend(
bbox_to_anchor=(0.5, -0.15), loc="upper center", ncol=min(len(case_ts), 3)
)
handles, labels = ax.get_legend_handles_labels()
if handles and labels:
ax.legend(
bbox_to_anchor=(0.5, -0.15),loc="upper center", ncol=min(len(handles), 3),
)
plt.tight_layout(pad=2, w_pad=1.0, h_pad=1.0)

return fig, ax
Expand Down
Loading