From f674bc0e63878595e7b533b4d5544557c531f399 Mon Sep 17 00:00:00 2001 From: wrongkindofdoctor <20195932+wrongkindofdoctor@users.noreply.github.com> Date: Tue, 26 Mar 2024 09:50:15 -0400 Subject: [PATCH 1/5] add push command to sphinx_action.yml --- .github/workflows/sphinx_action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sphinx_action.yml b/.github/workflows/sphinx_action.yml index f7c2d33fa..b0d81e553 100644 --- a/.github/workflows/sphinx_action.yml +++ b/.github/workflows/sphinx_action.yml @@ -1,6 +1,6 @@ name: sphinx_action -on: [pull_request] +on: [push, pull_request] jobs: build: From 054f5380cced23e16b11870535885e1cbf82bf1f Mon Sep 17 00:00:00 2001 From: wrongkindofdoctor <20195932+wrongkindofdoctor@users.noreply.github.com> Date: Tue, 26 Mar 2024 09:52:07 -0400 Subject: [PATCH 2/5] delete latexmkrc from docs --- doc/latexmkrc | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 doc/latexmkrc diff --git a/doc/latexmkrc b/doc/latexmkrc deleted file mode 100644 index 735b1ece1..000000000 --- a/doc/latexmkrc +++ /dev/null @@ -1,11 +0,0 @@ -$latex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S'; -$pdflatex = 'echo "using custom latexmkrc"; ' -. 'for f in *.tex_; do xelatex -jobname="${f%.*}" -interaction=nonstopmode -recorder "$f"; done; ' -. 'xelatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; -$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S'; -$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S'; -$makeindex = 'makeindex -s python.ist %O -o %D %S'; -add_cus_dep( "glo", "gls", 0, "makeglo" ); -sub makeglo { - return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); -} From 22cebaa1d955ee6eb3add4f923e3649d164bd187 Mon Sep 17 00:00:00 2001 From: Jacob Mims Date: Tue, 26 Mar 2024 16:20:23 -0400 Subject: [PATCH 3/5] remove old conda envs if found on build --- src/conda/conda_env_setup.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/conda/conda_env_setup.sh b/src/conda/conda_env_setup.sh index 67b0a2239..6bbf6ba9e 100755 --- a/src/conda/conda_env_setup.sh +++ b/src/conda/conda_env_setup.sh @@ -166,8 +166,15 @@ if [ "$make_envs" = "true" ]; then else conda_prefix="${_CONDA_ENV_ROOT}/${env_name}" fi + echo "$conda_prefix" + if [ -d "$conda_prefix" ]; then + # remove conda env of same name + echo "Removing previous conda env ${env_name}..." + conda remove -q -y -n "$env_name" --all + echo "... previous env ${env_name} removed." + fi echo "Creating conda env ${env_name} in ${conda_prefix}..." - "$_INSTALL_EXE" env create --force -q -p="$conda_prefix" -f="$env_file" + "$_INSTALL_EXE" env create -q -p="$conda_prefix" -f="$env_file" echo "... conda env ${env_name} created." done "$_INSTALL_EXE" clean -aqy @@ -196,4 +203,4 @@ fi echo "\"\${_mdtf}/mdtf_framework.py\" \"\$@\"" >> "$_CONDA_WRAPPER" echo "exit \$?" >> "$_CONDA_WRAPPER" chmod +x "$_CONDA_WRAPPER" -echo "Created MDTF wrapper script at ${_CONDA_WRAPPER}" \ No newline at end of file +echo "Created MDTF wrapper script at ${_CONDA_WRAPPER}" From 907e669445b565b8315ce43e52f01a0df7507645 Mon Sep 17 00:00:00 2001 From: wrongkindofdoctor <20195932+wrongkindofdoctor@users.noreply.github.com> Date: Thu, 28 Mar 2024 12:03:39 -0400 Subject: [PATCH 4/5] fix logic ing nc_var_encoding method in preprocessor to account for non-string attributes --- src/preprocessor.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/preprocessor.py b/src/preprocessor.py index 1fcfb2fef..dd5491b9f 100644 --- a/src/preprocessor.py +++ b/src/preprocessor.py @@ -3,6 +3,7 @@ """ import os import shutil +import collections.abc import abc import dataclasses import datetime @@ -929,7 +930,11 @@ def clean_nc_var_encoding(self, var, name, ds_obj): # mark attrs with sentinel value for deletion for k, v in attrs.items(): - if v == xr_parser.ATTR_NOT_FOUND: + if isinstance(v, (np.ndarray, tuple, collections.abc.Sequence)) and not isinstance(v, str): + if v.any() == xr_parser.ATTR_NOT_FOUND: + var.log.debug("Caught unset attribute '%s' of '%s'.", k, name) + attrs_to_delete.add(k) + elif v == xr_parser.ATTR_NOT_FOUND: var.log.debug("Caught unset attribute '%s' of '%s'.", k, name) attrs_to_delete.add(k) # clean up _FillValue @@ -1643,3 +1648,4 @@ def process(self, var): associated with the POD variable *var*. """ var.log.debug("Skipping preprocessing for %s.", var) + From c9e7a1e8d12a87a7e5b6d828a15dd93d7d71b10d Mon Sep 17 00:00:00 2001 From: wrongkindofdoctor <20195932+wrongkindofdoctor@users.noreply.github.com> Date: Thu, 28 Mar 2024 14:47:32 -0400 Subject: [PATCH 5/5] update README.md --- README.md | 159 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 97 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 4b1d15fc1..86b65dc08 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,15 @@ [![MDTF_test](https://github.com/NOAA-GFDL/MDTF-diagnostics/actions/workflows/mdtf_tests.yml/badge.svg)](https://github.com/NOAA-GFDL/MDTF-diagnostics/actions/workflows/mdtf_tests.yml) [![CodeQL](https://github.com/NOAA-GFDL/MDTF-diagnostics/actions/workflows/codeql.yml/badge.svg)](https://github.com/NOAA-GFDL/MDTF-diagnostics/actions/workflows/codeql.yml) [![Documentation Status](https://readthedocs.org/projects/mdtf-diagnostics/badge/?version=main)](https://mdtf-diagnostics.readthedocs.io/en/main/?badge=main) -The MDTF-diagnostics package is a portable framework for running process-oriented diagnostics (PODs) on weather and climate model data. +The MDTF-diagnostics package is a portable framework for running process-oriented diagnostics (PODs) on weather and +climate model data. ## What is a POD? ![MDTF_logo](<./doc/img/logo_MDTF.png>) -Each process-oriented diagnostic [POD; [Maloney et al.(2019)](#citations)] targets a specific physical process or emergent behavior to determine how well one or more models represent the process, ensure that models produce the right answers for the right reasons, and identify gaps in the understanding of phenomena. Each POD is independent of other PODs. PODs generate diagnostic figures that can be viewed as an html file using a web browser. +Each process-oriented diagnostic [POD; [Maloney et al.(2019)](#citations)] targets a specific physical process or +emergent behavior to determine how well one or more models represent the process, ensure that models produce the right +answers for the right reasons, and identify gaps in the understanding of phenomena. Each POD is independent of other +PODs. PODs generate diagnostic figures that can be viewed as an html file using a web browser. ## Available and Planned Diagnostics The links in the table below show sample output, a brief description, @@ -68,12 +72,14 @@ or [micromamba](https://mamba.readthedocs.io/en/latest/user_guide/micromamba.htm - Installation instructions are available [here](https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html). - MDTF-diagnositics is developed for macOS and Linux systems. The package has been tested on, but is not fully supported for, the Windows Subsystem for Linux. -- **Attention macOS M-series chip users**: the MDTF-diagnostics base and python3 conda environments will only build with micromamba on -machines running Apple M-series chips. The NCL and R environments will NOT build on M-series machines because the conda -packages do not support them at this time. +- **Attention macOS M-series chip users**: the MDTF-diagnostics base and python3 conda environments will only build with + micromamba on machines running Apple M-series chips. The NCL and R environments will NOT build on M-series machines + because the conda packages do not support them at this time. ## Notes -- `$` indicates strings to be substituted, e.g., the string `$CODE_ROOT` should be substituted by the actual path to the MDTF-diagnostics directory. -- Consult the [Getting started](https://mdtf-diagnostics.readthedocs.io/en/main/sphinx/start_toc.html) section to learn how to run the framework on your own data and configure general settings. +- `$` indicates strings to be substituted, e.g., the string `$CODE_ROOT` should be substituted by the actual path to the + MDTF-diagnostics directory. +- Consult the [Getting started](https://mdtf-diagnostics.readthedocs.io/en/main/sphinx/start_toc.html) section to learn how to run the framework on your own data and configure general + settings. - POD contributors can consult the **[Developer Cheatsheet](https://github.com/NOAA-GFDL/MDTF-diagnostics/blob/main/doc/sphinx/dev_cheatsheet.rst)** for brief instructions and useful tips @@ -84,7 +90,8 @@ packages do not support them at this time. - Clone your fork of the MDTF repo on your machine: `git clone https://github.com/[your fork name]/MDTF-diagnostics` - Check out the latest official release: `git checkout tags/[version name]` -- Run `% conda info --base` to determine the location of your Conda installation. This path will be referred to as `$CONDA_ROOT`. +- Run `% conda info --base` to determine the location of your Conda installation. This path will be referred to as + `$CONDA_ROOT`. - `cd $CODE_ROOT`, then run ### ANACONADA/MINICONDA `% ./src/conda/conda_env_setup.sh --all --conda_root $CONDA_ROOT --env_dir $CONDA_ENV_DIR` @@ -95,7 +102,8 @@ packages do not support them at this time. `% ./src/conda/micromamba_env_setup.sh --e python3_base --micromamba_root $MICROMAMBA_ROOT ---micromamba_exe $MICROMAMBA_EXE -env_dir $CONDA_ENV_DIR` - - Substitute the actual paths for `$CODE_ROOT`, `$CONDA_ROOT`, `$MICROMAMBA_ROOT`, `MICROMAMBA_EXE`, and `$CONDA_ENV_DIR`. + - Substitute the actual paths for `$CODE_ROOT`, `$CONDA_ROOT`, `$MICROMAMBA_ROOT`, `MICROMAMBA_EXE`, and + `$CONDA_ENV_DIR`. - `$MICROMAMBA_ROOT` is the path to micromamba installation on your system (e.g., /home/${USER}/micromamba). This is defined by the `$MAMBA_ROOT_PREFIX` environment variable on your system when micromamba is installed @@ -108,9 +116,12 @@ packages do not support them at this time. ## 2. Download the sample data Supporting observational data and sample model data are available via anonymous FTP at [ftp://ftp.cgd.ucar.edu/archive/mdtf](ftp://ftp.cgd.ucar.edu/archive/mdtf). -- Digested observational data: run ` wget ftp://ftp.cgd.ucar.edu/archive/mdtf/obs_data_latest/\*` or download the collection "NCAR CGD Anon" from [Globus](https://www.globus.org/) -- NCAR-CESM-CAM sample data (12.3 Gb): model.QBOi.EXP1.AMIP.001.tar (ftp://ftp.cgd.ucar.edu/archive/mdtf/model.QBOi.EXP1.AMIP.001.tar) -- NOAA-GFDL-CM4 sample data (4.8 Gb): model.GFDL.CM4.c96L32.am4g10r8.tar (ftp://ftp.cgd.ucar.edu/archive/mdtf/model.GFDL.CM4.c96L32.am4g10r8.tar) +- Digested observational data: run ` wget ftp://ftp.cgd.ucar.edu/archive/mdtf/obs_data_latest/\*` or download the + collection "NCAR CGD Anon" from [Globus](https://www.globus.org/) +- NCAR-CESM-CAM sample data (12.3 Gb): model.QBOi.EXP1.AMIP.001.tar + (ftp://ftp.cgd.ucar.edu/archive/mdtf/model.QBOi.EXP1.AMIP.001.tar) +- NOAA-GFDL-CM4 sample data (4.8 Gb): model.GFDL.CM4.c96L32.am4g10r8.tar + (ftp://ftp.cgd.ucar.edu/archive/mdtf/model.GFDL.CM4.c96L32.am4g10r8.tar) Note that the above paths are symlinks to the most recent versions of the data and will be reported as zero bytes in an FTP client. @@ -141,9 +152,11 @@ mdtf ├── (... supporting data for individual PODs ) ``` -The default test case uses the QBOi.EXP1.AMIP.001 sample data. The GFDL.CM4.c96L32.am4g10r8 sample data is only needed to test the MJO Propagation and Amplitude POD. +The default test case uses the QBOi.EXP1.AMIP.001 sample data. The GFDL.CM4.c96L32.am4g10r8 sample data is only +needed to test the MJO Propagation and Amplitude POD. -You can put the observational data and model output in different locations (e.g., for space reasons) by changing the values of `OBS_DATA_ROOT` and `MODEL_DATA_ROOT` as described below in section 3. +You can put the observational data and model output in different locations (e.g., for space reasons) by changing the +values of `OBS_DATA_ROOT`as described below in section 3. ## 3. Configure framework paths @@ -152,14 +165,18 @@ configuration file format is provided at [templates/runtime_config.[jsonc | yml] We recommend configuring the following settings by editing a copy of this file. - `CATALOG_DIR`: path to the ESM-intake data catalog -- If you've saved the supporting data in the directory structure described in section 2, the default values for - `OBS_DATA_ROOT` and `MODEL_DATA_ROOT` given in `src/default_tests.jsonc` - (`../inputdata/obs_data` and `../inputdata/model`, respectively) will be correct. If you put the data in a different - location, these paths should be changed accordingly. -- `WORK_DIR` is used as a scratch location for files generated by the PODs, and **should have sufficient quota to handle the full set of model variables you plan to analyze. This includes the sample model and observational data (approx. 19 GB) PLUS data required for the POD(s) you are developing.** No files are saved here, so your system's temp directory would be a good choice. -- `OUTPUT_DIR` should be set to the desired location for output files. `OUTPUT_DIR` and `WORK_DIR` are set to the same locations by default. The output of each run of the framework will be saved in a different subdirectory in this location. **As with the WORKING_DIR, ensure that OUTPUT_DIR has sufficient space for all POD output**. +- If you've saved the supporting data in the directory structure described in section 2, and use observational input data + the default value for `OBS_DATA_ROOT` (`../inputdata/obs_data`) will be correct. If you put the data in a different + location, the path should be changed accordingly. +- `WORK_DIR` is used as a scratch location for files generated by the PODs, and **should** have sufficient quota to + handle the full set of model variables you plan to analyze. This includes the sample model and observational data + (approx. 19 GB) PLUS data required for the POD(s) you are developing.** No files are saved here unless you set + `OUTPUT_DIR` to the same location as `WORK_DIR`, so a temporary directory would be a good choice. +- `OUTPUT_DIR` should be set to the desired location for output files. `OUTPUT_DIR` and `WORK_DIR` are set to the same + locations by default. The output of each run of the framework will be saved in a different subdirectory in this + location. **As with the `WORK_DIR`, ensure that `OUTPUT_DIR` has sufficient space for all POD output**. - `conda_root` should be set to the value of `$CONDA_ROOT` used in section 2. -- If you specified a non-default conda environment location with `$CONDA_ENV_DIR`, set `conda_env_root` to that value; otherwise, leave it blank. +- Likewise, set `conda_env_root` to the same location as `$CONDA_ENV_DIR` in section 2 We recommend using absolute paths in `runtime_config.[jsonc | yml]`, but relative paths are also allowed and should be relative to `$CODE_ROOT`.`$CODE_ROOT` contains the following subdirectories: @@ -172,46 +189,27 @@ relative to `$CODE_ROOT`.`$CODE_ROOT` contains the following subdirectories: - `tools/`: helper scripts for building ESM-intake catalogs, and other utilities - `user_scripts/`: directory where users can place custom preprocessing scripts -## 4. Execute the MDTF package with default test settings in `single_run` mode - -The MDTF framework is run via the wrapper script `$CODE_ROOT/mdtf` that is generated conda_env_install.sh. -To test the installation, `% $CODE_ROOT/mdtf --help` will print help text on the command-line options. -Note that if your current working directory is `$CODE_ROOT`, you will need to run `% ./mdtf --help`. - -This should print the current version of the framework. - -To run the code in *single_run* mode on the test data using the version of default_tests.jsonc you modified: +## 4. Run the framework +The framework runs PODs that analyze one or more model datasets (cases), along with optional observational datasets, +using. To run the framework on the **[example_multicase](https://github.com/NOAA-GFDL/MDTF-diagnostics/blob/main/diagnostics/example_multicase)** POD, modify the example configuration file and run ```commandline cd $CODE_ROOT ./mdtf -f templates/[runtime_config.[jsonc | yml] ``` -Run time may be 10-20 minutes, depending on your system. - -- If you edited/renamed `runtime_config.[jsonc | yml]`, pass that file instead. - -- The output files for the single-run test case will be written to - `$OUTPUT_DIR/MDTF_OUTPUT/QBOi.EXP1.AMIP.001_19770101_19811231`. - When the framework is finished, open `$OUTPUT_DIR/MDTF_OUTPUT/[POD NAME]/index.html` in a web browser to view - the output report. - -- The above command will execute PODs included in `pod_list` of `runtime_config.[jsonc | yml]`. +The above command will execute PODs included in `pod_list` block of `runtime_config.[jsonc | yml]`. -- Currently the framework only analyzes data from one model run at a time. To run the MJO_prop_amp POD on the GFDL.CM4.c96L32.am4g10r8 sample data, delete or comment out the section for QBOi.EXP1.AMIP.001 in "caselist" of `default_tests.jsonc`, and uncomment the section for GFDL.CM4.c96L32.am4g10r8. +If you re-run the above command, the result will be written to another subdirectory under `$OUTPUT_DIR`, +i.e., output files saved previously will not be overwritten unless you change `overwrite` in the configuration file +to `true`. -- If you re-run the above command, the result will be written to another subdirectory under `$OUTPUT_DIR`, - i.e., output files saved previously will not be overwritten unless you change `overwrite` in the configuration file - to `true`. +The output files for the test case will be written to `$OUTPUT_DIR/MDTF_OUTPUT/`. +When the framework is finished, open `$OUTPUT_DIR/MDTF_OUTPUT/[POD NAME]/index.html` in a web browser to view +the output report. -## 5. Run the framework in *multi_run* mode (under development) -The framework is ready to test on PODs that analyze multiple model and or observational datasets (cases) using the -latest version of the main branch. To run the framework on the **[example_multicase](https://github.com/NOAA-GFDL/MDTF-diagnostics/blob/main/diagnostics/example_multicase)** POD, -modify the example configuration file and run -```commandline -./mdtf -f templates/[runtime_config.[jsonc | yml] -``` -You can specify your own datasets in the caselist block, or run the example_multicase POD on the same synthetic data -specified in the configuration file. To generate the synthetic CMIP data, run: +You can specify your own datasets in the caselist block, and provide a catalog with the model data, +or run the example_multicase POD on the synthetic data and associated test catalog specified in the configuration file. +To generate the synthetic CMIP data, run: ```commandline mamba env create --force -q -f ./src/conda/_env_synthetic_data.yml conda activate _MDTF_synthetic_data @@ -220,8 +218,14 @@ mkdir mdtf_test_data && cd mdtf_test_data mdtf_synthetic.py -c CMIP --startyear 1980 --nyears 5 mdtf_synthetic.py -c CMIP --startyear 1985 --nyears 5 ``` +Then, modify the ``path`` entries in diagnostic/example_multicase/esm_catalog_CMIP_synthetic_r1i1p1f1_gr1.csv, and +the `"catalog_file":` path in diagnostic/example_multicase/esm_catalog_CMIP_synthetic_r1i1p1f1_gr1.json to include the +root directory locations on your file system. Full paths must be specified. + +Depending on the POD(s) you run, the size of your input datasets, and your system hardware, run time may be 10--20 +minutes. -## 6. Next steps +## 5. Next steps For more detailed information, consult the [documentation site](https://mdtf-diagnostics.readthedocs.io/en/main/). The ["Getting Started"](https://mdtf-diagnostics.readthedocs.io/en/main/sphinx/start_toc.html) section has more detailed information on customizing your installation and running the framework on your own data. Users interested in @@ -231,18 +235,49 @@ contributing a POD should consult the ["Developer Information"](https://mdtf-dia ![MDTF_funding_sources](<./doc/img/mdtf_funding.jpg>) -Development of this code framework for process-oriented diagnostics was supported by the [National Oceanic and Atmospheric Administration](https://www.noaa.gov/) (NOAA) Climate Program Office [Modeling, Analysis, Predictions and Projections](https://cpo.noaa.gov/Meet-the-Divisions/Earth-System-Science-and-Modeling/MAPP) (MAPP) Program (grant # NA18OAR4310280). Additional support was provided by [University of California Los Angeles](https://www.ucla.edu/), the [Geophysical Fluid Dynamics Laboratory](https://www.gfdl.noaa.gov/), the [National Center for Atmospheric Research](https://ncar.ucar.edu/), [Colorado State University](https://www.colostate.edu/), [Lawrence Livermore National Laboratory](https://www.llnl.gov/) and the US [Department of Energy](https://www.energy.gov/). +Development of this code framework for process-oriented diagnostics was supported by the +[National Oceanic and Atmospheric Administration](https://www.noaa.gov/) +(NOAA) Climate Program Office [Modeling, Analysis, Predictions and Projections](https://cpo.noaa.gov/Meet-the-Divisions/Earth-System-Science-and-Modeling/MAPP) +(MAPP) Program (grant # NA18OAR4310280). Additional support was provided by [University of California Los Angeles](https://www.ucla.edu/), +the [Geophysical Fluid Dynamics Laboratory](https://www.gfdl.noaa.gov/), the [National Center for Atmospheric Research](https://ncar.ucar.edu/), +[Colorado State University](https://www.colostate.edu/), [Lawrence Livermore National Laboratory](https://www.llnl.gov/) and the US [Department of Energy](https://www.energy.gov/). -Many of the process-oriented diagnostics modules (PODs) were contributed by members of the NOAA [Model Diagnostics Task Force](https://cpo.noaa.gov/Meet-the-Divisions/Earth-System-Science-and-Modeling/MAPP/MAPP-Task-Forces/Model-Diagnostics-Task-Force) under MAPP support. Statements, findings or recommendations in these documents do not necessarily reflect the views of NOAA or the US Department of Commerce. +Many of the process-oriented diagnostics modules (PODs) were contributed by members of the NOAA +[Model Diagnostics Task Force](https://cpo.noaa.gov/Meet-the-Divisions/Earth-System-Science-and-Modeling/MAPP/MAPP-Task-Forces/Model-Diagnostics-Task-Force) under MAPP support. Statements, findings or recommendations in these documents do +not necessarily reflect the views of NOAA or the US Department of Commerce. ## Citations -Guo, Huan; John, Jasmin G; Blanton, Chris; McHugh, Colleen; Nikonov, Serguei; Radhakrishnan, Aparna; Rand, Kristopher; Zadeh, Niki T.; Balaji, V; Durachta, Jeff; Dupuis, Christopher; Menzel, Raymond; Robinson, Thomas; Underwood, Seth; Vahlenkamp, Hans; Bushuk, Mitchell; Dunne, Krista A.; Dussin, Raphael; Gauthier, Paul PG; Ginoux, Paul; Griffies, Stephen M.; Hallberg, Robert; Harrison, Matthew; Hurlin, William; Lin, Pu; Malyshev, Sergey; Naik, Vaishali; Paulot, Fabien; Paynter, David J; Ploshay, Jeffrey; Reichl, Brandon G; Schwarzkopf, Daniel M; Seman, Charles J; Shao, Andrew; Silvers, Levi; Wyman, Bruce; Yan, Xiaoqin; Zeng, Yujin; Adcroft, Alistair; Dunne, John P.; Held, Isaac M; Krasting, John P.; Horowitz, Larry W.; Milly, P.C.D; Shevliakova, Elena; Winton, Michael; Zhao, Ming; Zhang, Rong (2018). NOAA-GFDL GFDL-CM4 model output historical. Version YYYYMMDD[1].Earth System Grid Federation. https://doi.org/10.22033/ESGF/CMIP6.8594 - -Krasting, John P.; John, Jasmin G; Blanton, Chris; McHugh, Colleen; Nikonov, Serguei; Radhakrishnan, Aparna; Rand, Kristopher; Zadeh, Niki T.; Balaji, V; Durachta, Jeff; Dupuis, Christopher; Menzel, Raymond; Robinson, Thomas; Underwood, Seth; Vahlenkamp, Hans; Dunne, Krista A.; Gauthier, Paul PG; Ginoux, Paul; Griffies, Stephen M.; Hallberg, Robert; Harrison, Matthew; Hurlin, William; Malyshev, Sergey; Naik, Vaishali; Paulot, Fabien; Paynter, David J; Ploshay, Jeffrey; Schwarzkopf, Daniel M; Seman, Charles J; Silvers, Levi; Wyman, Bruce; Zeng, Yujin; Adcroft, Alistair; Dunne, John P.; Dussin, Raphael; Guo, Huan; He, Jian; Held, Isaac M; Horowitz, Larry W.; Lin, Pu; Milly, P.C.D; Shevliakova, Elena; Stock, Charles; Winton, Michael; Xie, Yuanyu; Zhao, Ming (2018). NOAA-GFDL GFDL-ESM4 model output prepared for CMIP6 CMIP historical. Version YYYYMMDD[1].Earth System Grid Federation. https://doi.org/10.22033/ESGF/CMIP6.8597 - -E. D. Maloney et al. (2019): Process-Oriented Evaluation of Climate and Weather Forecasting Models. BAMS, 100 (9), 1665–1686, [doi:10.1175/BAMS-D-18-0042.1](https://doi.org/10.1175/BAMS-D-18-0042.1). +Guo, Huan; John, Jasmin G; Blanton, Chris; McHugh, Colleen; Nikonov, Serguei; Radhakrishnan, Aparna; Rand, Kristopher; +Zadeh, Niki T.; Balaji, V; Durachta, Jeff; Dupuis, Christopher; Menzel, Raymond; Robinson, Thomas; Underwood, Seth; +Vahlenkamp, Hans; Bushuk, Mitchell; Dunne, Krista A.; Dussin, Raphael; Gauthier, Paul PG; Ginoux, Paul; Griffies, +Stephen M.; Hallberg, Robert; Harrison, Matthew; Hurlin, William; Lin, Pu; Malyshev, Sergey; Naik, Vaishali; +Paulot, Fabien; Paynter, David J; Ploshay, Jeffrey; Reichl, Brandon G; Schwarzkopf, Daniel M; Seman, Charles J; +Shao, Andrew; Silvers, Levi; Wyman, Bruce; Yan, Xiaoqin; Zeng, Yujin; Adcroft, Alistair; Dunne, John P.; +Held, Isaac M; Krasting, John P.; Horowitz, Larry W.; Milly, P.C.D; Shevliakova, Elena; Winton, Michael; Zhao, Ming; +Zhang, Rong (2018). NOAA-GFDL GFDL-CM4 model output historical. Version YYYYMMDD[1].Earth System Grid Federation. +https://doi.org/10.22033/ESGF/CMIP6.8594 + +Krasting, John P.; John, Jasmin G; Blanton, Chris; McHugh, Colleen; Nikonov, Serguei; Radhakrishnan, Aparna; +Rand, Kristopher; Zadeh, Niki T.; Balaji, V; Durachta, Jeff; Dupuis, Christopher; Menzel, Raymond; Robinson, Thomas; +Underwood, Seth; Vahlenkamp, Hans; Dunne, Krista A.; Gauthier, Paul PG; Ginoux, Paul; Griffies, Stephen M.; +Hallberg, Robert; Harrison, Matthew; Hurlin, William; Malyshev, Sergey; Naik, Vaishali; +Paulot, Fabien; Paynter, David J; Ploshay, Jeffrey; Schwarzkopf, Daniel M; Seman, Charles J; Silvers, Levi; +Wyman, Bruce; Zeng, Yujin; Adcroft, Alistair; Dunne, John P.; Dussin, Raphael; Guo, Huan; He, Jian; Held, Isaac M; +Horowitz, Larry W.; Lin, Pu; Milly, P.C.D; Shevliakova, Elena; Stock, Charles; Winton, Michael; Xie, Yuanyu; +Zhao, Ming (2018). NOAA-GFDL GFDL-ESM4 model output prepared for CMIP6 CMIP historical. +Version YYYYMMDD[1].Earth System Grid Federation. https://doi.org/10.22033/ESGF/CMIP6.8597 + +E. D. Maloney et al. (2019): Process-Oriented Evaluation of Climate and Weather Forecasting Models. BAMS, 100 (9), +1665–1686, [doi:10.1175/BAMS-D-18-0042.1](https://doi.org/10.1175/BAMS-D-18-0042.1). ## Disclaimer -This repository is a scientific product and is not an official communication of the National Oceanic and Atmospheric Administration, or the United States Department of Commerce. All NOAA GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. Any claims against the Department of Commerce or Department of Commerce bureaus stemming from the use of this GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. +This repository is a scientific product and is not an official communication of the National Oceanic and Atmospheric +Administration, or the United States Department of Commerce. All NOAA GitHub project code is provided on an ‘as is’ +basis and the user assumes responsibility for its use. Any claims against the Department of Commerce or +Department of Commerce bureaus stemming from the use of this GitHub project will be governed by all applicable +Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, +manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the +Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be +used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government.