# e3sm-project/omega architecture

> Architecture diagram of the GitHub repository e3sm-project/omega, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/e3sm-project/omega
- Repository: https://github.com/e3sm-project/omega

## Overview

E3SM is a coupled Earth-system simulation model. The principal workflow is a researcher launching a case, the atmosphere driver advancing atmospheric dynamics and physical processes, and model output being written for analysis or restart. The tree and excerpts strongly expose the EAMxx atmosphere and its data/output layers, but provide little implementation evidence for the other coupled domains; those appear here only as documented model components, without speculative runtime links.

Main entry points: [`components/eamxx/src/control/atmosphere_driver.cpp`](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_driver.cpp) (Atmosphere driver), [`components/eamxx/src/physics`](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics) (Atmospheric physics), [`components/CMakeLists.txt`](https://github.com/e3sm-project/omega/blob/develop/components/CMakeLists.txt) (Other model domains), [`components/eamxx/src/share/io/eamxx_output_manager.cpp`](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/io/eamxx_output_manager.cpp) (Output manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Atmosphere orchestration"]
  node_driver["Atmosphere driver"]
  node_grids["HOMME grids"]
end

subgraph group_atmosphere["Atmosphere processes"]
  node_dynamics["HOMME dynamics"]
  node_physics["Atmospheric physics"]
  node_p3["P3 microphysics"]
  node_mam["MAM aerosols"]
  node_cloud["Cloud fraction"]
  node_gravity["Gravity waves"]
  node_radiation["RRTMGP radiation"]
  node_crm["Cloud-resolving model<br/>[crm.cpp]"]
end

subgraph group_coupling["Earth-system coupling"]
  node_coupling_export["Surface export"]
  node_coupling_import["Surface import"]
  node_otherdomains["Other model domains<br/>[CMakeLists.txt]"]
  node_land["Land<br/>[CMakeLists.txt]"]
  node_ocean["Ocean<br/>[CMakeLists.txt]"]
  node_ice["Sea ice<br/>[CMakeLists.txt]"]
  node_glacier["Glacier<br/>[CMakeLists.txt]"]
  node_river["River runoff<br/>[CMakeLists.txt]"]
  node_wave["Waves<br/>[CMakeLists.txt]"]
end

subgraph group_data["Model data and output"]
  node_iop["IOP forcing<br/>[IOPDataManager.cpp]"]
  node_fieldmanager["Field manager<br/>[field_manager.cpp]"]
  node_output["Output manager"]
end

node_researcher(("Researcher"))
node_outputfiles["History and restart files"]
node_inputfiles["Model input files"]

node_researcher -->|"runs case"| node_driver
node_driver -->|"sets up grids"| node_grids
node_driver -->|"advances dynamics"| node_dynamics
node_driver -->|"runs processes"| node_physics
node_physics -->|"includes"| node_p3
node_physics -->|"includes"| node_mam
node_physics -->|"includes"| node_cloud
node_physics -->|"includes"| node_gravity
node_physics -->|"includes"| node_radiation
node_physics -->|"includes"| node_crm
node_driver -->|"uses forcing"| node_iop
node_driver -->|"accesses fields"| node_fieldmanager
node_driver -->|"sets up output"| node_output
node_output -->|"reads fields"| node_fieldmanager
node_output -->|"writes files"| node_outputfiles
node_driver -->|"exports surface data"| node_coupling_export
node_driver -->|"imports surface data"| node_coupling_import
node_inputfiles -->|"provides forcing"| node_iop
node_otherdomains -->|"defines component"| node_land
node_otherdomains -->|"defines component"| node_ocean
node_otherdomains -->|"defines component"| node_ice
node_otherdomains -->|"defines component"| node_glacier
node_otherdomains -->|"defines component"| node_river
node_otherdomains -->|"defines component"| node_wave

click node_driver "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_driver.cpp"
click node_dynamics "https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/dynamics/homme"
click node_grids "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/dynamics/homme/homme_grids_manager.cpp"
click node_physics "https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics"
click node_p3 "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp"
click node_mam "https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/mam"
click node_cloud "https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/cld_fraction"
click node_gravity "https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/gw"
click node_radiation "https://github.com/e3sm-project/omega/blob/develop/components/eam/src/physics/rrtmgp/cpp/rrtmgp_interface.cpp"
click node_crm "https://github.com/e3sm-project/omega/blob/develop/components/eam/src/physics/crm/samxx/crm.cpp"
click node_iop "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/data_managers/IOPDataManager.cpp"
click node_fieldmanager "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/data_managers/field_manager.cpp"
click node_output "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/io/eamxx_output_manager.cpp"
click node_coupling_export "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_surface_coupling_exporter.cpp"
click node_coupling_import "https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_surface_coupling_importer.cpp"
click node_otherdomains "https://github.com/e3sm-project/omega/blob/develop/components/CMakeLists.txt"
click node_land "https://github.com/e3sm-project/omega/blob/develop/components/cmake/lnd/CMakeLists.txt"
click node_ocean "https://github.com/e3sm-project/omega/blob/develop/components/cmake/ocn/CMakeLists.txt"
click node_ice "https://github.com/e3sm-project/omega/blob/develop/components/cmake/ice/CMakeLists.txt"
click node_glacier "https://github.com/e3sm-project/omega/blob/develop/components/cmake/glc/CMakeLists.txt"
click node_river "https://github.com/e3sm-project/omega/blob/develop/components/cmake/rof/CMakeLists.txt"
click node_wave "https://github.com/e3sm-project/omega/blob/develop/components/cmake/wav/CMakeLists.txt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_driver,node_grids toneBlue
class node_dynamics,node_physics,node_p3,node_mam,node_cloud,node_gravity,node_radiation,node_crm toneAmber
class node_coupling_export,node_coupling_import,node_otherdomains,node_land,node_ocean,node_ice,node_glacier,node_river,node_wave toneMint
class node_iop,node_fieldmanager,node_output toneRose
class node_researcher,node_outputfiles,node_inputfiles toneIndigo
```

## Components

### Atmosphere orchestration

- [Atmosphere driver](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_driver.cpp): `components/eamxx/src/control/atmosphere_driver.cpp`
- [HOMME grids](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/dynamics/homme/homme_grids_manager.cpp): `components/eamxx/src/dynamics/homme/homme_grids_manager.cpp`

### Atmosphere processes

- [HOMME dynamics](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/dynamics/homme): `components/eamxx/src/dynamics/homme`
- [Atmospheric physics](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics): `components/eamxx/src/physics`
- [P3 microphysics](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp): `components/eamxx/src/physics/p3/eamxx_p3_process_interface.cpp`
- [MAM aerosols](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/mam): `components/eamxx/src/physics/mam`
- [Cloud fraction](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/cld_fraction): `components/eamxx/src/physics/cld_fraction`
- [Gravity waves](https://github.com/e3sm-project/omega/tree/develop/components/eamxx/src/physics/gw): `components/eamxx/src/physics/gw`
- [RRTMGP radiation](https://github.com/e3sm-project/omega/blob/develop/components/eam/src/physics/rrtmgp/cpp/rrtmgp_interface.cpp): `components/eam/src/physics/rrtmgp/cpp/rrtmgp_interface.cpp`
- [Cloud-resolving model](https://github.com/e3sm-project/omega/blob/develop/components/eam/src/physics/crm/samxx/crm.cpp): `components/eam/src/physics/crm/samxx/crm.cpp`

### Earth-system coupling

- [Surface export](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_surface_coupling_exporter.cpp): `components/eamxx/src/control/atmosphere_surface_coupling_exporter.cpp`
- [Surface import](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/control/atmosphere_surface_coupling_importer.cpp): `components/eamxx/src/control/atmosphere_surface_coupling_importer.cpp`
- [Other model domains](https://github.com/e3sm-project/omega/blob/develop/components/CMakeLists.txt): `components/CMakeLists.txt`
- [Land](https://github.com/e3sm-project/omega/blob/develop/components/cmake/lnd/CMakeLists.txt): `components/cmake/lnd/CMakeLists.txt`
- [Ocean](https://github.com/e3sm-project/omega/blob/develop/components/cmake/ocn/CMakeLists.txt): `components/cmake/ocn/CMakeLists.txt`
- [Sea ice](https://github.com/e3sm-project/omega/blob/develop/components/cmake/ice/CMakeLists.txt): `components/cmake/ice/CMakeLists.txt`
- [Glacier](https://github.com/e3sm-project/omega/blob/develop/components/cmake/glc/CMakeLists.txt): `components/cmake/glc/CMakeLists.txt`
- [River runoff](https://github.com/e3sm-project/omega/blob/develop/components/cmake/rof/CMakeLists.txt): `components/cmake/rof/CMakeLists.txt`
- [Waves](https://github.com/e3sm-project/omega/blob/develop/components/cmake/wav/CMakeLists.txt): `components/cmake/wav/CMakeLists.txt`

### Model data and output

- [IOP forcing](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/data_managers/IOPDataManager.cpp): `components/eamxx/src/share/data_managers/IOPDataManager.cpp`
- [Field manager](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/data_managers/field_manager.cpp): `components/eamxx/src/share/data_managers/field_manager.cpp`
- [Output manager](https://github.com/e3sm-project/omega/blob/develop/components/eamxx/src/share/io/eamxx_output_manager.cpp): `components/eamxx/src/share/io/eamxx_output_manager.cpp`

### Other components

- **Researcher**
- **History and restart files**
- **Model input files**

## Connections

- Researcher → Atmosphere driver: runs case
- Atmosphere driver → HOMME grids: sets up grids
- Atmosphere driver → HOMME dynamics: advances dynamics
- Atmosphere driver → Atmospheric physics: runs processes
- Atmospheric physics → P3 microphysics: includes
- Atmospheric physics → MAM aerosols: includes
- Atmospheric physics → Cloud fraction: includes
- Atmospheric physics → Gravity waves: includes
- Atmospheric physics → RRTMGP radiation: includes
- Atmospheric physics → Cloud-resolving model: includes
- Atmosphere driver → IOP forcing: uses forcing
- Atmosphere driver → Field manager: accesses fields
- Atmosphere driver → Output manager: sets up output
- Output manager → Field manager: reads fields
- Output manager → History and restart files: writes files
- Atmosphere driver → Surface export: exports surface data
- Atmosphere driver → Surface import: imports surface data
- Model input files → IOP forcing: provides forcing
- Other model domains → Land: defines component
- Other model domains → Ocean: defines component
- Other model domains → Sea ice: defines component
- Other model domains → Glacier: defines component
- Other model domains → River runoff: defines component
- Other model domains → Waves: defines component
