diff --git a/docs/paper/figures/figure1.png b/docs/paper/figures/figure1.png new file mode 100644 index 00000000..42b1d123 Binary files /dev/null and b/docs/paper/figures/figure1.png differ diff --git a/docs/paper/figures/figure2.png b/docs/paper/figures/figure2.png new file mode 100644 index 00000000..96dec153 Binary files /dev/null and b/docs/paper/figures/figure2.png differ diff --git a/docs/paper/figures/figure3.png b/docs/paper/figures/figure3.png new file mode 100644 index 00000000..26b78cbe Binary files /dev/null and b/docs/paper/figures/figure3.png differ diff --git a/docs/paper/paper.bib b/docs/paper/paper.bib new file mode 100644 index 00000000..bff8f93e --- /dev/null +++ b/docs/paper/paper.bib @@ -0,0 +1,395 @@ +@article{Golaz:2022, + author = {Golaz, Jean-Christophe + and Van Roekel, Luke P. + and Zheng, Xue + and Roberts, Andrew F. + and Wolfe, Jonathan D. + and Lin, Wuyin + and Bradley, Andrew M. + and Tang, Qi + and Maltrud, Mathew E. + and Forsyth, Ryan M. + and Zhang, Chengzhu + and Zhou, Tian + and Zhang, Kai + and Zender, Charles S. + and Wu, Mingxuan + and Wang, Hailong + and Turner, Adrian K. + and Singh, Balwinder + and Richter, Jadwiga H. + and Qin, Yi + and Petersen, Mark R. + and Mametjanov, Azamat + and Ma, Po-Lun + and Larson, Vincent E. + and Krishna, Jayesh + and Keen, Noel D. + and Jeffery, Nicole + and Hunke, Elizabeth C. + and Hannah, Walter M. + and Guba, Oksana + and Griffin, Brian M. + and Feng, Yan + and Engwirda, Darren + and Di Vittorio, Alan V. + and Dang, Cheng + and Conlon, LeAnn M. + and Chen, Chih-Chieh-Jack + and Brunke, Michael A. + and Bisht, Gautam + and Benedict, James J. + and Asay-Davis, Xylar S. + and Zhang, Yuying + and Zhang, Meng + and Zeng, Xubin + and Xie, Shaocheng + and Wolfram, Phillip J. + and Vo, Tom + and Veneziani, Milena + and Tesfa, Teklu K. + and Sreepathi, Sarat + and Salinger, Andrew G. + and Reeves Eyre, J. E. Jack + and Prather, Michael J. + and Mahajan, Salil + and Li, Qing + and Jones, Philip W. + and Jacob, Robert L. + and Huebler, Gunther W. + and Huang, Xianglei + and Hillman, Benjamin R. + and Harrop, Bryce E. + and Foucar, James G. + and Fang, Yilin + and Comeau, Darin S. + and Caldwell, Peter M. + and Bartoletti, Tony + and Balaguru, Karthik + and Taylor, Mark A. + and McCoy, Renata B. + and Leung, L. Ruby + and Bader, David C.}, + title = {The DOE E3SM Model Version 2: Overview of the Physical Model and Initial Model Evaluation}, + journal = {Journal of Advances in Modeling Earth Systems}, + volume = {14}, + number = {12}, + pages = {e2022MS003156}, + keywords = {DOE E3SM, climate modeling}, + doi = {10.1029/2022MS003156}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2022MS003156}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2022MS003156}, + note = {e2022MS003156 2022MS003156}, + year = {2022} +} + +@article{Hassell:2017, + title = {A data model of the Climate and Forecast metadata conventions (CF-1.6) with a software implementation (cf-python v2.1)}, + author = {Hassell, D. + and Gregory, J. + and Blower, J. + and Lawrence, B. N. + and Taylor, K. E.}, + doi = {10.5194/gmd-10-4619-2017}, + journal = {Geoscientific Model Development}, + number = {12}, + pages = {4619-4646}, + url = {https://gmd.copernicus.org/articles/10/4619/2017/}, + volume = {10}, + year = {2017} +} + +@article{Hoyer:2017, + title = {xarray: {N}-{D} labeled {Arrays} and {Datasets} in {Python}}, + author = {Hoyer, Stephan and Hamman, Joseph J.}, + doi = {10.5334/jors.148}, + issn = {2049-9647}, + journal = {Journal of Open Research Software}, + language = {en}, + month = apr, + pages = {10}, + shorttitle = {xarray}, + url = {http://openresearchsoftware.metajnl.com/articles/10.5334/jors.148/}, + urldate = {2019-07-02}, + volume = {5}, + year = {2017} +} + +@article{Lee:2023, + author = {Lee, J. + and Gleckler, P. J. + and Ahn, M.-S. + and Ordonez, A. + and Ullrich, P. A. + and Sperber, K. R. + and Taylor, K. E. + and Planton, Y. Y. + and Guilyardi, E. + and Durack, P. + and Bonfils, C. + and Zelinka, M. D. + and Chao, L.-W. + and Dong, B. + and Doutriaux, C. + and Zhang, C. + and Vo, T. + and Boutte, J. + and Wehner, M. F. + and Pendergrass, A. G. + and Kim, D. + and Xue, Z. + and Wittenberg, A. T. + and Krasting, J.}, + title = {Objective Evaluation of Earth System Models: PCMDI Metrics Package (PMP) version 3}, + journal = {EGUsphere}, + volume = {2023}, + year = {2023}, + pages = {1-48}, + url = {https://egusphere.copernicus.org/preprints/2023/egusphere-2023-2720/}, + doi = {10.5194/egusphere-2023-2720} +} + +@article{Po-Chedley:2022, + author = {Stephen Po-Chedley + and John T. Fasullo + and Nicholas Siler + and Zachary M. Labe + and Elizabeth A. Barnes + and Céline J. W. Bonfils + and Benjamin D. Santer}, + title = {Internal variability and forcing influence model–satellite differences in the rate of tropical tropospheric warming}, + journal = {Proceedings of the National Academy of Sciences}, + volume = {119}, + number = {47}, + pages = {e2209431119}, + year = {2022}, + doi = {10.1073/pnas.2209431119}, + url = {https://www.pnas.org/doi/abs/10.1073/pnas.2209431119}, + EPRINT = {https://www.pnas.org/doi/pdf/10.1073/pnas.2209431119}, +} + +@article{Williams:2009, + author = {Williams, Dean N. + and Doutriaux, Charles M. + and Drach, Robert S. + and Mccoy, Renata B.}, + booktitle = {2009 IEEE International Conference on Data Mining Workshops}, + title = {The Flexible Climate Data Analysis Tools (CDAT) for Multi-model Climate Simulation Data}, + year = {2009}, + volume = {}, + number = {}, + pages = {254-261}, + doi = {10.1109/ICDMW.2009.64} +} + +@article{Williams:2014, + title = {Visualization and Analysis Tools for Ultrascale Climate Data}, + author = {Williams, D. N.}, + doi = {10.1002/2014EO420002}, + journal = {Advanced Earth and Space Sciences}, + number = {42}, + pages = {377-378}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/10.1002/2014EO420002}, + volume = {95}, + year = {2014} +} + +@article{Zhang:2022, + author = {Zhang, C. + and Golaz, J.-C. + and Forsyth, R. + and Vo, T. + and Xie, S. + and Shaheen, Z. + and Potter, G. L. + and Asay-Davis, X. S. + and Zender, C. S. + and Lin, W. + and Chen, C.-C. + and Terai, C. R. + and Mahajan, S. + and Zhou, T. + and Balaguru, K. + and Tang, Q. + and Tao, C. + and Zhang, Y. + and Emmenegger, T. + and Burrows, S. + and Ullrich, P. A.}, + title = {The E3SM Diagnostics Package (E3SM Diags v2.7): a Python-based diagnostics package for Earth system model evaluation}, + journal = {Geoscientific Model Development}, + volume = {15}, + year = {2022}, + number = {24}, + pages = {9031-9056}, + url = {https://gmd.copernicus.org/articles/15/9031/2022/}, + doi = {10.5194/gmd-15-9031-2022} +} + +@manual{dask:2016, + title = {Dask: Library for dynamic task scheduling}, + author = {Dask-Development-Team}, + year = {2016}, + url = {https://dask.org}, +} + +@software{cdat, + author = {Charles Doutriaux + and Denis Nadeau + and Scott Wittenburg + and Dan Lipsa + and Lina Muryanto + and Aashish Chaudhary + and Dean N. Williams}, + title = {CDAT/cdat: CDAT 8.1}, + month = mar, + year = 2019, + publisher = {Zenodo}, + version = {v8.1}, + doi = {10.5281/zenodo.2586088}, + url = {https://doi.org/10.5281/zenodo.2586088} +} + +@software{cf-xarray, + author = {Cherian, Deepak + and Almansi, Mattia + and Bourgault, Pascal + and Thyng, Kristen + and Thielen, Jonathan + and Magin, Justus + and Aoun, Abel + and Buntemeyer, Lars + and Caneill, Romain + and Davis, Luke + and Fernandes, Filipe + and Hauser, Matthias + and Heerdegen, Aidan + and Kent, Julia + and Mankoff, Ken + and Müller, Sebastian + and Schupfner, Martin + and Vo, Tom + and Haëck, Clément}, + title = {cf\_xarray}, + month = oct, + year = 2023, + publisher = {Zenodo}, + version = {v0.8.5}, + doi = {10.5281/zenodo.10038784}, + url = {https://doi.org/10.5281/zenodo.10038784} +} + +@software{e3sm-diags, + author = {Jill Chengzhu Zhang + and Zeshawn Shaheen + and Tom Vo + and Ryan Forsyth + and Golaz + and Xylar Asay-Davis + and Naser Mahfouz + and Andrew M. Bradley + and Charles Doutriaux}, + title = {E3SM-Project/e3sm\_diags: v2.9.0}, + month = sep, + year = 2023, + publisher = {Zenodo}, + version = {v2.9.0}, + doi = {10.5281/zenodo.8339034}, + url = {https://doi.org/10.5281/zenodo.8339034} +} + +@software{e3sm-unified, + author = {Asay-Davis, Xylar}, + title = {E3SM-Unified: A metapackage for a unified anaconda environment for analyzing results from the Energy Exascale Earth System Model (E3SM)}, + month = dec, + year = 2023, + publisher = {GitHub}, + version = {v1.9.1}, + url = {https://github.com/E3SM-Project/e3sm-unified} +} + +@software{pcmdi-metrics, + author = {Lee, Jiwoo + and Gleckler, Peter + and Ordonez, Ana + and Ahn, Min-Seop + and Ullrich, Paul + and Vo, Tom + and Boutte, Jason + and Doutriaux, Charles + and Durack, Paul + and Shaheen, Zeshawn + and Muryanto, Lina + and Painter, Jeffrey + and Krasting, John}, + title = {PCMDI/pcmdi\_metrics: PMP Version 3.1.2}, + month = nov, + year = 2023, + publisher = {Zenodo}, + version = {v3.1.2}, + doi = {10.5281/zenodo.10236521}, + url = {https://doi.org/10.5281/zenodo.10236521} +} + +@software{xesmf, + author = {Jiawei Zhuang + and Raphael Dussin + and David Huard + and Pascal Bourgault + and Anderson Banihirwe + and Stephane Raynaud + and Brewster Malevich + and Martin Schupfner + and Filipe + and Sam Levang + and Charles Gauthier + and André Jüling + and Mattia Almansi + and Richardscottoz + and Rondeaug + and Stephan Rasp + and Trevor James Smith + and Jemma Stachelek + and Matthew Plough + and Pierre + and Ray Bell + and Romain Caneill + and Xianxiang Li}, + title = {pangeo-data/xESMF: v0.8.2}, + month = sep, + year = 2023, + publisher = {Zenodo}, + version = {v0.8.2}, + doi = {10.5281/zenodo.8356796}, + url = {https://doi.org/10.5281/zenodo.8356796} +} + +@software{xgcm, + author = {Abernathey, Ryan P. + and Busecke, Julius J. M. + and Smith, Timothy Andrew + and Deauna, Josephine Dianne + and Banihirwe, Anderson + and Nicholas, Thomas + and Fernandes, Filipe + and James, Bourbeau + and Dussin, Raphael + and Cherian, Deepak A. + and Caneill, Romain + and Sinha, Anirban + and Uieda, Leonardo + and Rath, Willi + and Balwada, Dhruv + and Constantinou, Navid C. + and Ponte, Aurélien + and Zhou, Yuxin + and Uchida, Takaya + and Thielen, Jon}, + title = {xgcm}, + month = nov, + year = 2022, + publisher = {Zenodo}, + version = {v0.8.1}, + doi = {10.5281/zenodo.7348619}, + url = {https://doi.org/10.5281/zenodo.7348619} +} diff --git a/docs/paper/paper.md b/docs/paper/paper.md new file mode 100644 index 00000000..d9e05588 --- /dev/null +++ b/docs/paper/paper.md @@ -0,0 +1,108 @@ +--- +title: "xCDAT: A Python Package for Simple and Robust Analysis of Climate Data" +tags: + - Python + - python + - xarray + - climate science + - climate research + - climate data + - climate data analysis +authors: + - name: Tom Vo + orcid: 0000-0002-2461-0191 + affiliation: 1 + - name: Stephen Po-Chedley + orcid: 0000-0002-0390-238X + affiliation: 1 + - name: Jason Boutte + orcid: 0009-0009-3996-3772 + affiliation: 1 + - name: Jiwoo Lee + orcid: 0000-0002-0016-7199 + affiliation: 1 + - name: Chengzhu Zhang + orcid: 0000-0002-9632-0716 + affiliation: 1 +affiliations: + - name: Lawrence Livermore National Lab, Livermore, USA + index: 1 +date: 24 July 2024 +bibliography: paper.bib +--- + +# Summary + +xCDAT (Xarray Climate Data Analysis Tools) is an open-source Python package that extends Xarray [@Hoyer:2017] for climate data analysis on structured grids. xCDAT streamlines analysis of climate data by exposing common climate analysis operations through a set of straightforward APIs. Some of xCDAT's key features include spatial averaging, temporal averaging, and regridding. These features are inspired by the Community Data Analysis Tools ([CDAT](https://cdat.llnl.gov/)) library [@Williams:2009] [@Williams:2014] [@cdat] and leverage powerful packages in the [Xarray](https://docs.xarray.dev/en/stable/) ecosystem including [xESMF](https://github.com/pangeo-data/xESMF) [@xesmf], [xgcm](https://xgcm.readthedocs.io/en/latest/) [@xgcm], and [CF xarray](https://cf-xarray.readthedocs.io/en/latest/) [@cf-xarray]. To ensure general compatibility across various climate models, xCDAT operates on datasets that are compliant with the Climate and Forecast (CF) metadata conventions [@Hassell:2017]. + +# Statement of Need + +Analysis of climate data frequently requires a number of core operations, including reading and writing of netCDF files, horizontal and vertical regridding, and spatial and temporal averaging. While many individual software packages address these needs in a variety of computational languages, CDAT stands out because it provides these essential operations via open-source, interoperable Python packages. Since CDAT’s inception, the volume of climate data has grown substantially as a result of both a larger pool of data products and increasing spatiotemporal resolution of model and observational data. Larger data stores are important for advancing geoscientific understanding, but also require increasingly performant software and hardware. These factors have sparked a need for new analysis software that offers core geospatial analysis functionalities capable of efficiently handling large datasets while using modern technologies and standardized software engineering principles. + +xCDAT addresses this need by combining the power of Xarray with meticulously developed geospatial analysis features inspired by CDAT. Xarray is the foundation of xCDAT because of its widespread adoption, technological maturity, and ability to handle large datasets with parallel computing via Dask. Xarray is also interoperable with the scientific Python ecosystem (e.g., [NumPy](https://numpy.org/), [pandas](https://pandas.pydata.org/), [Matplotlib](https://matplotlib.org/)), which greatly benefits users who need to use additional analysis tools. Since Xarray is designed as a general-purpose library, xCDAT fills in domain specific gaps by providing features to serve the climate science community _(refer to [Key Features](#key-features))_. + +Performance is one fundamental driver in how xCDAT is designed, especially with large datasets. xCDAT conveniently inherits Xarray's support for parallel computing with Dask [@dask:2016]. Parallel computing with Dask enables users to take advantage of compute resources through multithreading or multiprocessing. To use Dask's default multithreading scheduler, users only need to open and chunk datasets in Xarray before calling xCDAT APIs. xCDAT's seamless support for parallel computing enables users to run large-scale computations with minimal effort. If users require more resources, they can also configure and use a local Dask cluster to meet resource-intensive computational needs. Figure 1 shows xCDAT's significant performance advantage over CDAT for global spatial averaging on datasets of varying sizes. + +![A performance benchmark for global spatial averaging computations using CDAT (serial only) and xCDAT (serial and parallel with Dask distributed scheduler). xCDAT outperforms CDAT by a wide margin for the 7 GB and 12 GB datasets. Runtimes could not be captured for CDAT with datasets >= 22 GB and xCDAT serial for the 105 GB dataset due to memory allocation errors. The performance benchmark setup and scripts are available in the [`xcdat-validation` repo](https://github.com/xCDAT/xcdat-validation/tree/main/validation/v0.6.0/xcdat-cdat-perf-metrics). _Disclaimer: Performance will vary depending on hardware, dataset shapes/sizes, and how Dask and chunking schemes are configured. There are also some cases where selecting a regional averaging domain (e.g., Niño 3.4) can lead to CDAT outperforming xCDAT._ \label{fig:figure1}](figures/figure1.png){ height=40% } + +xCDAT's intentional design emphasizes software sustainability and reproducible science. It aims to make analysis code reusable, readable, and less-error prone by abstracting common Xarray boilerplate logic into simple and configurable APIs. xCDAT extends Xarray by using [accessor classes](https://docs.xarray.dev/en/stable/internals/extending-xarray.html) that operate directly on Xarray Dataset objects. xCDAT is rigorously tested using real-world datasets and maintains 100% unit test coverage (at the time this paper was written). To demonstrate the value in xCDAT's API design, Figure 2 compares code to calculate annual averages for global climatological anomalies using Xarray against xCDAT. xCDAT requires fewer lines of code and supports further user options (e.g., regional or seasonal averages, not shown). Figure 2 shows the plots for the results produced by xCDAT. + +![A comparison of the code to calculate annual averages for global climatological anomalies in A) Xarray and B) xCDAT. xCDAT abstracts most of the Xarray boilerplate logic for calculating weights and grouping data by specific time frequencies, leading to code that is more readable, maintainable, and flexible. The results from both sets of code are within machine precision. \label{fig:figure2}](figures/figure2.png){ height=100% } + +![A) Monthly surface skin temperature anomalies for September 1850. B) Monthly (gray) and annual (black) global mean surface skin temperature anomaly values. Temperature data is from an E3SMv2 climate model [@Golaz:2022] simulation over the historical period (1850 – 2014). \label{fig:figure3}](figures/figure3.png){ height=45% } + +xCDAT's mission is to provide a maintainable and extensible package that serves the needs of the climate community in the long-term. xCDAT is a community-driven project and the development team encourages all who are interested to get involved through the [GitHub repository](https://github.com/xCDAT/xcdat). + +# Key Features + +## Extension of `xarray.open_dataset()` and `xarray.open_mfdataset()` with post-processing options + +xCDAT extends `xarray.open_dataset()` and `xarray.open_mfdataset()` with additional post-processing operations to support climate data analysis. These APIs can generate missing coordinate bounds for the X, Y, T, and/or Z axes and lazily decode time coordinates represented by `cftime` ([more info](https://github.com/xCDAT/xcdat/pull/489#issuecomment-1579275827)). Other functionality includes re-centering time coordinates between time bounds and converting the longitudinal axis orientation between [0, 360) and [-180, 180). + +## Robust interpretation of CF metadata + +xCDAT uses [CF xarray](https://cf-xarray.readthedocs.io/en/latest/) to interpret CF metadata present in datasets, enabling xCDAT to operate generally across model and observational datasets that are CF-compliant. This feature enables xCDAT to generate missing coordinate bounds, recognize the coordinates and coordinate bounds to use for computational operations, and lazily decode time coordinates based on the CF calendar attribute. + +## Temporal averaging + +xCDAT's temporal averaging API utilizes Xarray and Pandas. It includes features for calculating time series averages (single-snapshot), grouped time series averages (e.g., seasonal or annual averages), climatologies, and departures. Averages can be weighted (default) or unweighted. There are optional configurations for seasonal grouping including how to group the month of December (DJF or JFD) and defining custom seasons to group by. + +## Geospatial weighted averaging + +xCDAT’s geospatial weighted averaging supports rectilinear grids with an option to compute averages over a regional domain (e.g., tropical region, Niño 3.4 region). + +## Horizontal structured regridding + +xCDAT makes use of [xESMF](https://pangeo-xesmf.readthedocs.io/en/latest/) for horizontal regridding capabilities. It simplifies and extends the xESMF horizontal regridding API by generating missing bounds and ensuring bounds and metadata are preserved in the output dataset. xCDAT also offers a Python implementation of [regrid2](https://cdms.readthedocs.io/en/latest/regrid2.html) for handling cartesian latitude by longitude grids. + +## Vertical structured regridding + +xCDAT makes use of [xgcm](https://xgcm.readthedocs.io/en/latest/) for vertical regridding capabilities. It simplifies and extends the xgcm vertical regridding API by automatically attempting to determine the grid point position relative to the bounds, transposing the output data to match the dimensional order of the input data, and ensuring bounds and metadata are preserved in the output dataset. + +# Documentation & Case Studies + +The xCDAT [documentation](https://xcdat.readthedocs.io/en/stable/index.html) includes the [public API list](https://xcdat.readthedocs.io/en/stable/api.html) and a Jupyter Notebook [Gallery](https://xcdat.readthedocs.io/en/stable/gallery.html) that demonstrates real-world applications of xCDAT: + +- [A Gentle Introduction to xCDAT (Xarray Climate Data Analysis Tools)](https://xcdat.readthedocs.io/en/stable/examples/introduction-to-xcdat.html) +- [General Dataset Utilities](https://xcdat.readthedocs.io/en/stable/examples/general-utilities.html) +- [Calculate Geospatial Weighted Averages from Monthly Time Series](https://xcdat.readthedocs.io/en/stable/examples/spatial-average.html) +- [Calculate Time Averages from Time Series Data](https://xcdat.readthedocs.io/en/stable/examples/temporal-average.html) +- [Calculating Climatology and Departures from Time Series Data](https://xcdat.readthedocs.io/en/stable/examples/climatology-and-departures.html) +- [Horizontal Regridding](https://xcdat.readthedocs.io/en/stable/examples/regridding-horizontal.html) +- [Vertical Regridding](https://xcdat.readthedocs.io/en/stable/examples/regridding-vertical.html) + +# Distribution + +xCDAT is available for Linux, MacOS, and Windows via the conda-forge channel on [Anaconda](https://anaconda.org/conda-forge/xcdat). The [GitHub Repository](https://github.com/xCDAT/xcdat) is where we host all development activity. xCDAT is released under the Apache 2-0 license. + +# Projects using xCDAT + +xCDAT is actively being integrated as a core component of the [Program for Climate Model Diagnosis and Intercomparison (PCMDI) Metrics Package](https://pcmdi.github.io/pcmdi_metrics/) [@pcmdi-metrics] [@Lee:2023] and the [Energy Exascale Earth System Model (E3SM) Diagnostics Package](https://e3sm-project.github.io/e3sm_diags/_build/html/main/index.html) [@Zhang:2022] [@e3sm-diags]. xCDAT is also included in the [E3SM Unified Anaconda Environment](https://e3sm.org/resources/tools/other-tools/e3sm-unified-environment/) [@e3sm-unified] deployed on numerous U.S Department of Energy supercomputers to run E3SM software tools. Members of the development team are also active users of xCDAT and apply the software to advance their own climate research [@Po-Chedley:2022]. + +# Acknowledgements + +xCDAT is jointly developed by scientists and developers at Lawrence Livermore National Laboratory ([LLNL](https://www.llnl.gov/)) from the Energy Exascale Earth System Model ([E3SM](https://e3sm.org/)) Project and Program for Climate Model Diagnosis and Intercomparison ([PCMDI](https://pcmdi.llnl.gov/)). The work is performed for the E3SM project, which is sponsored by Earth System Model Development ([ESMD](https://climatemodeling.science.energy.gov/program/earth-system-model-development)) program, and the Simplifying ESM Analysis Through Standards ([SEATS](https://www.seatstandards.org/)) project, which is sponsored by the Regional and Global Model Analysis ([RGMA](https://climatemodeling.science.energy.gov/program/regional-global-model-analysis)) program. ESMD and RGMA are programs for the Earth and Environmental Systems Sciences Division ([EESSD](https://science.osti.gov/ber/Research/eessd)) in the Office of Biological and Environmental Research ([BER](https://science.osti.gov/ber)) within the [Department of Energy](https://www.energy.gov/)'s [Office of Science](https://science.osti.gov/). This work is performed under the auspices of the U.S. Department of Energy by LLNL under Contract No. DE-AC52-07NA27344. + +Thank you to all of the xCDAT contributors and users including Rob Jacob, Ana Ordonez, Mark Zelinka, Christopher Terai, Min-Seop Ahn, Celine Bonfils, Jean-Yves Peterschmitt, Olivier Marti, Andrew Manaster, and Andrew Friedman. We also give a special thanks to Karl Taylor, Peter Gleckler, Paul Durack, and Chris Golaz who all have provided valuable knowledge and guidance throughout the course of this project. + +# References