EAMxx Source Code Structure
E3SM/components/eamxx/
.
├── cime_config/
├── cmake/
│ └── machine-files/
│── CMakeLists.txt
│── CTestConfig.cmake
├── docs/
├── mkdocs.yml
├── README.md
├── scripts/
│ ├── atmchange
│ ├── atmquery
│ └── test-all-eamxx
├── src/
│ ├── control/
│ ├── diagnostics/
│ ├── dynamics/
│ │ └── homme/
│ ├── mct_coupling/
│ ├── physics/
│ │ ├── cld_fraction/
│ │ ├── cosp/
│ │ ├── iop_forcing/
│ │ ├── mam/
│ │ ├── ml_correction/
│ │ ├── nudging/
│ │ ├── p3/
│ │ ├── rrtmgp/
│ │ ├── share/
│ │ ├── shoc/
│ │ ├── spa/
│ │ └── tms/
│ ├── python/
│ ├── eamxx_config.h.in
│ └── share/
├── tests/
│ ├── generic/
│ ├── meta-tests/
│ ├── multi-process/
│ │ ├── dynamics_physics/
│ │ └── physics_only/
│ ├── python/
│ └── single-process/
└── tpls/
All EAMxx-specific code can be found in components/eamxx
within the
E3SM repo.
Here's how things are organized:
cime_config
: Tools and XML files for integrating EAMxx with E3SM via the CIME framework.cmake
: CMake functions and macros used by the configuration/build system.docs
: Documentation for the EAMxx project, including design documents, instructions for building and testing EAMxx, and this document.scripts
: Miscellaneous scripts that implement workflows for running tests and analyzing performance.src
: All C++ source code (and any bridges to Fortran) for EAMxx are stored here. We describe the contents of this directory in greater detail below.tests
: Implements standalone, end-to-end tests for various EAMxx components (RRTMG, HOMME, P3, SHOC, etc).tpls
: Utilities for building EAMxx-specific third-party libraries.1
In addition, you'll notice the following files in components/eamxx
:
CMakeLists.txt
: The CMake file that defines EAMxx's configuration/build system.CTestConfig.cmake
: This CTest file contains parameters that determine how our test results are reported to the E3SM CDash Site.README.md
: EAMxx's top-level README file, which describes the project and its purpose.mkdocs.yml
: The configuration file for mkdocs, the tool we currently use to build and publish our documentation.
Herein lies the source code for EAMxx. Broadly, here's where things are located:
control
: Contains the atmosphere driver and basic tests for it.diagnostics
: A collection of simple classes used to compute diagnostic quantities.dynamics
: Home the files implementing the necessary interfaces between EAMxx and the HOMME non-hydrostatic dycore.- Note: HOMME itself is in components/homme
mct_coupling
: Glue code for embedding EAMxx within E3SM as an atmosphere component using the MCT coupler.physics
: Source code for physics-related atmospheric processes, includingcosp
: Diagnostic-only2 package used for computing radiation-related quantities.iop_forcing
: "Intensive Observation Period" package that can be used in conjunction with the Doubly-Periodic (DP) configuration of SCREAM.mam
: Contains the high-performance Modal Aerosol Model, parameterized with 4 size modes known as MAM4xx.ml_correction
: This is a product developed as a part of a Lawrence Livermore National Laboratory LDRD project in which the goal was to improve the results of low-resolution SCREAM runs by employing machine-learning algorithms to analyze the output of nudged high-resolution runs.- This code is not actively supported but may be useful/or interesting to some.
nudging
: Contains machinery that can be applied to "nudge" quantities in EAMxx toward desired values, typically coming from previous model runs or reanalysis data.- See the Nudging in EAMxx page in the User Guide for further details.
p3
: The C++/Kokkos implementation of P3 microphysics within EAMxx.rrtmgp
: A stub for the radiation processes as represented in EAMxx.share
: Utilities and data structures common to these processes.shoc
: The C++/Kokkos implementation of SHOC macrophysics within EAMxx.
python
: Source code for the experimental PyEAMxx package that enables building and running an individual EAMxx atmosphere process using python/conda.- As of time of writing, this feature is still in development and should
e considered a prototype.
- See the pyEAMxx page in the User Guide for a more detailed description.
- As of time of writing, this feature is still in development and should
e considered a prototype.
share
: Utilities used by various components within EAMxx. Of note:io
: EAMxx's interface to the SCORPIO library.
Each of these directories contains a CMakeLists.txt
file for defining how
EAMxx is configured and built, and a tests/
subdirectory that houses relevant
unit and verification tests.
You'll also see some other files in the src/
directory itself, such as
eamxx_config.h.in
: A template for generating a C++ header file with EAMxx configuration information.
generic/
:meta-tests/
:multi-process/
:dynamics_physics/
:physics_only/
:
python/
:single-process/
: