Skip to content

Commit aee525a

Browse files
zhangshixuan1987forsyth2
authored andcommitted
Add PCMDI Diags to zppy
1 parent cdedf03 commit aee525a

12 files changed

Lines changed: 2824 additions & 2 deletions

File tree

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
exclude: "docs|node_modules|migrations|.git|.tox"
2-
default_stages: [commit]
2+
default_stages: [pre-commit]
33
fail_fast: true
44

55
repos:

conda/chrisalis.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: zppy_dev
2+
channels:
3+
- conda-forge
4+
- defaults
5+
dependencies:
6+
# Base
7+
# =================
8+
- python=3.9.13
9+
- pip=22.2.2
10+
- configobj=5.0.6
11+
- jinja2=3.1.2
12+
- mache>=1.5.0
13+
- mpas_tools>=0.15.0
14+
- pillow=9.2.0
15+
# Developer Tools
16+
# =================
17+
# If versions are updated, also update 'rev' in `.pre-commit-config.yaml`
18+
- black=22.8.0 # version from https://anaconda.org/conda-forge/black
19+
- flake8=5.0.4 # version from https://anaconda.org/conda-forge/flake8
20+
# This line also implicitly installs isort
21+
- flake8-isort=4.2.0 # version from https://anaconda.org/conda-forge/flake8-isort
22+
- mypy=0.982 # version from https://anaconda.org/conda-forge/mypy
23+
- pre-commit=2.20.0 # version from https://anaconda.org/conda-forge/pre-commit
24+
- tbump=6.9.0
25+
# Documentation
26+
# If versions are updated, also update in `.github/workflows/build_workflow.yml`
27+
# =================
28+
- sphinx=5.2.3
29+
- sphinx-multiversion=0.2.4
30+
- sphinx_rtd_theme=1.0.0
31+
# Need to pin docutils because 0.17 has a bug with unordered lists
32+
# https://github.com/readthedocs/sphinx_rtd_theme/issues/1115
33+
- docutils=0.16
34+
prefix: /home/ac.szhang/.conda/envs/zppy_dev

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def package_files(directory, prefixes, extensions):
1818

1919

2020
data_files = package_files(
21-
"zppy", prefixes=[], extensions=["bash", "csh", "cfg", "ini", "sh", "json"]
21+
"zppy", prefixes=[], extensions=["bash", "csh", "cfg", "ini", "sh", "json", "py"]
2222
)
2323

2424
setup(

zppy/__main__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from zppy.ilamb import ilamb
1818
from zppy.logger import _setup_custom_logger
1919
from zppy.mpas_analysis import mpas_analysis
20+
from zppy.pcmdi_diags import pcmdi_diags
2021
from zppy.tc_analysis import tc_analysis
2122
from zppy.ts import ts
2223
from zppy.utils import check_status, submit_script
@@ -247,6 +248,9 @@ def _launch_scripts(config: ConfigObj, script_dir, job_ids_file, plugins) -> Non
247248
# ilamb tasks
248249
existing_bundles = ilamb(config, script_dir, existing_bundles, job_ids_file)
249250

251+
# pcmdi_diags tasks
252+
existing_bundles = pcmdi_diags(config, script_dir, existing_bundles, job_ids_file)
253+
250254
# zppy external plugins
251255
for plugin in plugins:
252256
# Get plugin module function

zppy/defaults/default.ini

100644100755
Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,21 @@ input_component = string(default="")
123123

124124
[ts]
125125
area_nm = string(default="area")
126+
cmip_metadata = string(default="inclusions/e3sm_to_cmip/default_metadata.json")
127+
cmip_plevdata = string(default="inclusions/e3sm_to_cmip/vrt_remap_plev19.nc")
126128
# Days per file
127129
dpf = integer(default=30)
128130
extra_vars = string(default="")
131+
interp_vars = string(default="U,V,T,Q,RELHUM,OMEGA,Z3")
129132
# Time-steps per day
130133
tpd = integer(default=1)
131134
# Model component having generated input files (eam, eamxx, elm, mosart, ...)
132135
input_component = string(default="")
133136

134137
[[__many__]]
135138
area_nm = string(default=None)
139+
cmip_metadata = string(default=None)
140+
cmip_plevdata = string(default=None)
136141
dpf = integer(default=None)
137142
extra_vars = string(default=None)
138143
tpd = integer(default=None)
@@ -150,6 +155,7 @@ input_component = string(default="")
150155
cmip_metadata = string(default=None)
151156
cmip_vars = string(default=None)
152157
input_component = string(default=None)
158+
interp_vars = string(default=None)
153159

154160
[tc_analysis]
155161
# NOTE: always overrides value in [default]
@@ -158,6 +164,229 @@ input_files = string(default="eam.h2")
158164
# If not set, zppy will attempt to infer this value from the topography file.
159165
res = string(default="")
160166

167+
[pcmdi_diags]
168+
backend = string(default="mpl")
169+
cfg = string(default="")
170+
# Title of zppy-pcmdi diagnostics
171+
pcmdi_webtitle = string(default="E3SM-PMP Diagnostics")
172+
# Version of zppy-pcmdi code
173+
pcmdi_version = string(default="v3.8.2")
174+
# File of specified regions for mean climate calculation
175+
regions_specs = string(default="pcmdi_data/region/regions_specs.json")
176+
# File of observation data name for mean climate calculation
177+
reference_alias = string(default="pcmdi_data/reference/reference_alias.json")
178+
# Utility file with functions for zppy-pcmdi data processing
179+
pcmdi_zppy_util = string(default="pcmdi_data/utility/pcmdi_zppy_util.py")
180+
# Utility file with functions for zppy-pcmdi viewer page processing
181+
pcmdi_viewer_util = string(default="pcmdi_data/utility/pcmdi_viewer_util.py")
182+
# Template files for zppy-pcmdi viewer page processing
183+
pcmdi_viewer_template = string(default="pcmdi_data/viewer")
184+
# File of variable list to generate synthetic metrics plot
185+
synthetic_metrics = string(default="pcmdi_data/synthetic_metrics/synthetic_metrics_list.json")
186+
# Path to observation time-series data
187+
# Required for "mean_climate","variability_mode","enso"
188+
obs_ts = string(default="")
189+
# observational data sets (see reference_alias.json)
190+
# observation data tag in reference_alias
191+
obs_sets = string(default="default")
192+
# options specific for constructing pcmdi preferred file name conventions
193+
# required for "model_vs_obs" comparison
194+
model_name = string(default="e3sm.historical.v3-LR.0051")
195+
model_tableID = string(default="Amon")
196+
# required for "model_vs_model" comparison
197+
model_name_ref = string(default="ERA5")
198+
model_tableID_ref = string(default="Amon")
199+
# variables in the cmip6 table that can be potentially used by pcmdi
200+
# this list depends on the definition of cmip variable
201+
# required for "mean climate" diagnostics
202+
cmip_vars = string(default="pr,prw,psl,rlds,rldscs,rlut,rlutcs,rsut,rsutcs,rsds,rsdscs,rsdt,rsus,rsuscs,rlus,rtmt,sfcWind,tas,tauu,tauv,ts,ta,ua,va,zg")
203+
# flag to process the land/sea mask within pcmdi
204+
generate_sftlf = string(default=True)
205+
# variables to be used by the pcmdi diagnostics
206+
# needs to setup for each subsections, defalut setup is the mean climate metrics
207+
vars = string(default="pr,prw,psl,rlds,rldscs,rltcre,rstcre,rlut,rlutcs,rsds,rsdscs,rsdt,rsus,rsuscs,rlus,rsut,rtmt,sfcWind,tas,tauu,tauv,ts,ta-200,ta-850,ua-200,ua-850,va-200,va-850,zg-500")
208+
# sets of diagnostics from pcmdi package
209+
sets = string_list(default=list("mean_climate","variability_modes_atm","variability_modes_cpl","enso","synthetic_plots"))
210+
# options to identify subset of pcmdi drivers ("mean_climate","variability_mode","enso")
211+
subsets = string_list(default=list("mean_climate","variability_modes","enso"))
212+
###########################################################################################
213+
# Required for run_type="model_vs_model" runs, different from e3sm_diag,
214+
# model_vs_model in pcmdi referred to the comparision of two model simulations
215+
# with observations and cmip models.
216+
###########################################################################################
217+
#path for reference model data (time series)
218+
reference_data_path = string(default="")
219+
reference_data_path_ts = string(default="")
220+
# pcmdi_diags.py will set to match `years` if not specified
221+
ref_years = string_list(default=list(""))
222+
# The years increment for reference data
223+
ts_num_years_ref = integer(default=5)
224+
# Final year (i.e., the last available year) for the reference data
225+
ref_final_yr = string(default="")
226+
# Start year for the reference data
227+
ref_start_yr = string(default="")
228+
# reference model name
229+
ref_name = string(default="")
230+
# The years range for test model data
231+
ts_years = string_list(default=list(""))
232+
# The years increment for test model data
233+
ts_num_years = integer(default=5)
234+
# Set to true to swap test and ref when run_type="model_vs_model"
235+
swap_test_ref = boolean(default=False)
236+
##########################################################################################
237+
# below followed the setup in e3sm_diag but used for PCMDI workflow
238+
##########################################################################################
239+
# See url<need to work on document later>
240+
multiprocessing = boolean(default=True)
241+
# See url<need to work on document later>
242+
num_workers = integer(default=24)
243+
# See url<need to work on document later>
244+
figure_format = string(default="png")
245+
# comparision type (same as e3sm_diag)
246+
run_type = string(default="model_vs_obs")
247+
# Used to label the results directory
248+
# Options are "model_vs_obs" and "model_vs_model"
249+
tag = string(default="model_vs_obs")
250+
##########################################################################################
251+
# options for pcmdi mode varibility diagnostics
252+
# vars = "psl" for atm_modes
253+
# vars = "ts" for cpl_modes
254+
#########################################################################################
255+
#name of atmospheric modes varibility
256+
atm_modes = string(default="NAM,NAO,PNA,NPO,SAM,PSA1,PSA2")
257+
#name of coupled modes varibility
258+
cpl_modes = string(default="PDO,NPGO,AMO")
259+
#keywards for unit conversion in pcmdi (model)
260+
ModUnitsAdjust = string(default="")
261+
#keywards for unit conversion in pcmdi (observation)
262+
ObsUnitsAdjust = string(default="")
263+
#frequency of the model data
264+
frequency = string(default="mo")
265+
#options specific for mode varibility metrics in pcmdi
266+
seasons = string(default="monthly")
267+
landmask = string(default=False)
268+
RmDomainMean = string(default=True)
269+
EofScaling = string(default=False)
270+
ConvEOF = string(default=True)
271+
CBF = string(default=True)
272+
mov_plot_obs = string(default=True)
273+
mov_plot_model = string(default=True)
274+
mov_nc_out_obs = string(default=True)
275+
mov_nc_out_model = string(default=True)
276+
##########################################################################################
277+
# options for pcmdi enso diagnostics
278+
# vars = "psl,pr,prsn,ts,tas,tauu,tauv,hflx,hfss,rlds,rsds,rlus,rlut,rsdt"
279+
##########################################################################################
280+
enso_groups = string(default="ENSO_perf,ENSO_proc,ENSO_tel")
281+
##########################################################################################
282+
# optional for mean climate diagnostics
283+
# vars = "pr,prw,psl,rlds,rldscs,rltcre,rstcre,rlut,rlutcs,rsds,rsdscs,rsdt,rsus,rsuscs,
284+
# rlus,rsut,rtmt,sfcWind,tas,tauu,tauv,ts,ta-200,ta-850,ua-200,ua-850,va-200,
285+
# va-850,zg-500"
286+
##########################################################################################
287+
# model data grid after remapping
288+
grid = string(default="180x360_aave")
289+
#default regions for mean climate metrics data
290+
#more options can be found at "regions_specs"
291+
#regions = string(default="global,ocean,land,NHEX,SHEX,TROPICS,NHEX_ocean,SHEX_ocean,NHEX_land,SHEX_land,ocean_50S50N")
292+
regions = string(default="global,ocean,land,NHEX,SHEX,TROPICS")
293+
# save derived climatology data
294+
save_test_clims = string(default=True)
295+
# Regridding by pcmdi (required for mean climate)
296+
# OPTIONS: '1x1' for e3sm, '2.5x2.5' for cmip, or an actual cdms2 grid object,
297+
target_grid = string(default="1x1")
298+
# OPTIONS: "1px1p" for e3sm, "2p5x2p5" for cmip, description on the selected grid
299+
target_grid_string = string(default="1px1p")
300+
# OPTIONS: 'regrid2','esmf'
301+
regrid_tool = string(default="esmf")
302+
# OPTIONS: 'linear','conservative', only if tool is esmf
303+
regrid_method = string(default="regrid2")
304+
# OPTIONS: 'linear','conservative', only if tool is esmf
305+
regrid_method_ocn = string(default="conservative")
306+
###################################################################
307+
#options for synthetic plots with exisiting pcmdi cmip model metrics
308+
###################################################################
309+
synthetic_sets = string(default="portrait,parcoord")
310+
# path to pcmdi generated cmip metrics data
311+
cmip_enso_dir = string(default="")
312+
cmip_clim_dir = string(default="")
313+
cmip_movs_dir = string(default="")
314+
#group of pcmdi generated cmip metrics data (mip.exp.version)
315+
cmip_clim_set = string(default="cmip6.historical.v20250108")
316+
cmip_movs_set = string(default="cmip6.historical.v20220825")
317+
cmip_enso_set = string(default="cmip6.historical.v20210620")
318+
# options shared by pcmdi
319+
pcmdi_debug = string(default=False)
320+
321+
[[__many__]]
322+
backend = string(default=None)
323+
cfg = string(default=None)
324+
vars = string(default=None)
325+
grid = string(default=None)
326+
cmip_enso_set = string(default=None)
327+
cmip_clim__set = string(default=None)
328+
cmip_movs_set = string(default=None)
329+
cmip_enso_dir = string(default=None)
330+
cmip_clim_dir = string(default=None)
331+
cmip_movs_dir = string(default=None)
332+
synthetic_sets = string(default=None)
333+
reference_alias = string(default=None)
334+
regions_specs = string(default=None)
335+
pcmdi_webtitle = string(default=None)
336+
pcmdi_version = string(default=None)
337+
pcmdi_zppy_util = string(default=None)
338+
pcmdi_viewer_util = string(default=None)
339+
pcmdi_viewer_template = string(default=None)
340+
synthetic_metrics = string(default=None)
341+
multiprocessing = boolean(default=None)
342+
num_workers = integer(default=None)
343+
obs_ts = string(default=None)
344+
figure_format = string(default=None)
345+
ref_name = string(default=None)
346+
ref_years = string_list(default=None)
347+
ref_start_yr = string(default=None)
348+
ref_final_yr = string(default=None)
349+
reference_data_path = string(default=None)
350+
reference_data_path_ts = string(default=None)
351+
run_type = string(default=None)
352+
sets = string_list(default=None)
353+
swap_test_ref = boolean(default=None)
354+
tag = string(default=None)
355+
ts_years = string_list(default=None)
356+
ts_num_years = integer(default=None)
357+
ts_num_years_ref = integer(default=None)
358+
target_grid = string(default=None)
359+
target_grid_string = string(default=None)
360+
regrid_tool = string(default=None)
361+
regrid_method = string(default=None)
362+
regrid_method_ocn = string(default=None)
363+
obs_sets = string(default=None)
364+
regions = string(default=None)
365+
save_test_clims = string(default=None)
366+
seasons = string(default=None)
367+
RmDomainMean = string(default=None)
368+
EofScaling = string(default=None)
369+
ConvEOF = string(default=None)
370+
CBF = string(default=None)
371+
subsets = string_list(default=None)
372+
landmask = string(default=None)
373+
frequency = string(default=None)
374+
generate_sftlf = string(default=None)
375+
atm_modes = string(default=None)
376+
cpl_modes = string(default=None)
377+
enso_groups = string(default=None)
378+
ModUnitsAdjust = string(default=None)
379+
ObsUnitsAdjust = string(default=None)
380+
model_name = string(default=None)
381+
model_name_ref = string(default=None)
382+
model_tableID = string(default=None)
383+
model_vars = string(default=None)
384+
mov_nc_out_obs = string(default=None)
385+
mov_nc_out_model = string(default=None)
386+
mov_plot_obs = string(default=None)
387+
mov_plot_model = string(default=None)
388+
pcmdi_debug = string(default=None)
389+
161390
[e3sm_diags]
162391
# See https://e3sm-project.github.io/e3sm_diags/_build/html/master/available-parameters.html
163392
backend = string(default="mpl")

0 commit comments

Comments
 (0)