Skip to content

Commit cd9e6a0

Browse files
committed
Rewrite the README around ClimaCore's role and numerics
1 parent 7b53de8 commit cd9e6a0

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

‎README.md‎

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
# ClimaCore.jl
66

7-
The dynamical core (_dycore_) of the CliMA Earth System Model: composable, GPU-capable tools for discretizing and solving partial differential equations on the sphere and in Cartesian domains.
7+
The dynamical core (_dycore_) of the CliMA Earth System Model: composable, performance-portable tools for discretizing partial differential equations on the sphere and in Cartesian domains.
88

99
|||
1010
|------------------:|:------------------------------------------------------------|
@@ -43,17 +43,18 @@ The dynamical core (_dycore_) of the CliMA Earth System Model: composable, GPU-c
4343
[zenodo-img]: https://img.shields.io/badge/DOI-10.5281%2Fzenodo.5554759-blue.svg
4444
[zenodo-url]: https://zenodo.org/badge/latestdoi/356355994
4545

46-
ClimaCore.jl provides the spatial discretization building blocks for the [Climate Modeling Alliance (CliMA)](https://clima.caltech.edu/) Earth System Model, which is written entirely in [Julia](https://julialang.org/). It pairs a high-level API for composing differential operators and defining flexible discretizations with low-level APIs for data layouts, specialized implementations, and threading — targeting both CPU and GPU architectures from a single codebase.
46+
ClimaCore.jl is the spatial discretization layer of the [Climate Modeling Alliance (CliMA)](https://clima.caltech.edu/) Earth System Model, written entirely in [Julia](https://julialang.org/). It supplies the grids, fields, and differential operators that [ClimaAtmos.jl](https://github.com/CliMA/ClimaAtmos.jl) and [ClimaLand.jl](https://github.com/CliMA/ClimaLand.jl) build their equations on, and time steps them with [ClimaTimeSteppers.jl](https://github.com/CliMA/ClimaTimeSteppers.jl). Configurations range from a single column to large-eddy simulation on a box to a global cubed sphere, and it runs on a CPU, on many nodes through MPI, and on a GPU.
4747

4848
## Features
4949

50-
- **Spectral-element horizontal discretizations**: continuous (CG) and discontinuous (DG) Galerkin spectral elements.
51-
- **Flexible vertical discretization**: staggered finite differences on center/face grids.
52-
- **Multiple geometries**: Cartesian and spherical domains, with governing equations expressed in covariant vectors for curvilinear systems and Cartesian vectors for Euclidean spaces.
53-
- **`Field` abstraction**: scalar-, vector-, or struct-valued fields carrying values, geometry, and mesh information, with flexible memory layouts (AoS, SoA, AoSoA) and useful overloads (`sum`, `norm`, ...).
54-
- **Composable operators via broadcasting**: differential operators (`grad`, `div`, `interpolate`, ...) act like functions when broadcast over a `Field`, fusing operators and function calls into a single pass.
55-
- **GPU acceleration**: broadcast expressions compile to custom CUDA kernels, with specialization on polynomial degree for kernel performance.
56-
- **Time-stepper compatible**: `Field`s and `FieldVector`s act as the state vector for [ClimaTimeSteppers](https://github.com/CliMA/ClimaTimeSteppers.jl), which the tests and examples here time-step with.
50+
- **Horizontal spectral elements**: continuous (CG) and discontinuous (DG) Galerkin discretizations on quadrilateral elements, selected by one keyword and completed across element boundaries by direct stiffness summation (CG) or numerical fluxes (DG).
51+
- **Staggered vertical finite differences**: Lorenz staggering on cell centers and faces, with center-to-face and face-to-center operators and their boundary conditions.
52+
- **Upwinding and limiters**: upwind-biased, FCT, and TVD reconstructions for advection, plus the quasi-monotone horizontal limiter and the vertical mass-borrowing limiter for positivity.
53+
- **Curvilinear geometry**: covariant and contravariant bases, metric terms, and terrain-following coordinates, so operators apply to Cartesian and spherical domains alike.
54+
- **Matrix-free operators via broadcasting**: differential operators act like functions when broadcast over a `Field`, fusing operators and function calls into a single pass and compiling to one CPU loop or one CUDA kernel.
55+
- **Performance portability and scaling**: ClimaCore runs on CPUs and GPUs and distributes over MPI, with weak-scaling efficiency above 92% on GPUs and above 98% on CPUs, and 0.20 simulated years per day at 6 km resolution on 256 H100 GPUs ([Yatunin et al. 2026](https://CliMA.github.io/ClimaCore.jl/stable/explanation/performance/)).
56+
- **Differentiability**: fields and operators carry `ForwardDiff` dual numbers, so a column tendency can be differentiated for Jacobians and calibration.
57+
- **Time-stepper compatible**: `Field`s and `FieldVector`s are the state vector for [ClimaTimeSteppers.jl](https://github.com/CliMA/ClimaTimeSteppers.jl).
5758

5859
## Installation
5960

@@ -92,7 +93,7 @@ grad = Operators.GradientC2F(
9293
∂θ = @. Geometry.WVector(grad(θ)) # face-valued vertical gradient (≈ cos(z))
9394
```
9495

95-
More runnable examples (column, plane, and sphere configurations) are in the [`examples/`](examples/) directory.
96+
This snippet is the [Home page](https://CliMA.github.io/ClimaCore.jl/stable/) example, which the docs build runs on every commit. More runnable examples (column, plane, and sphere configurations) are in the [`examples/`](examples/) directory.
9697

9798
## Documentation
9899

@@ -107,6 +108,8 @@ ClimaCore.jl is the dynamical core used throughout the [CliMA](https://github.co
107108
- [ClimaAtmos.jl](https://github.com/CliMA/ClimaAtmos.jl) — atmosphere model
108109
- [ClimaLand.jl](https://github.com/CliMA/ClimaLand.jl) — land model
109110

111+
Device and communication backends come from [ClimaComms.jl](https://github.com/CliMA/ClimaComms.jl), and time integration from [ClimaTimeSteppers.jl](https://github.com/CliMA/ClimaTimeSteppers.jl).
112+
110113
## Contributing
111114

112115
Contributors should follow the shared CliMA engineering standards in [`docs/dev-guides/`](docs/dev-guides/), which cover architecture, performance, code quality, documentation, and workflows. These are vendored from [CliMA/DeveloperGuides](https://github.com/CliMA/DeveloperGuides). The repo's [`AGENTS.md`](AGENTS.md) is a starting point for AI agents with repo-specific guidance.

0 commit comments

Comments
 (0)