Authoritative discretization rule files — and the conformance machinery that keeps them honest — for the EarthSci model stack.
This repository has three roles:
- A catalog of declarative discretization rule JSON files under
discretizations/(finite-difference and finite-volume stencils, reconstructions, flux forms, and boundary conditions), validated against the EarthSciSerialization (ESS) §7 discretization schema and executed by the ESS rule engine via the canonicaldiscretize → ArrayOp → evalpipeline. The package side contributes structural lowering between rule forms (src/stencil_lowering.jl) and thin coefficient-evaluation passthroughs (src/rule_eval.jl). This catalog is the repository's primary, durable role. - Grid runtimes and conformance machinery. Grid constructors for
cartesian, lat-lon, vertical, Arakawa-staggered, cubed-sphere, MPAS,
and DUO topologies (
src/grids/), mirrored by thin Python, Rust, and TypeScript bindings (python/,rust/,typescript/), plus the cross-binding conformance suite: golden fixtures undertests/conformance/, the dynamic rule walker (test/walk_esd_tests.jl), and its machine-readable per-rule skip ledger (test/junit-esd.xml). One catalog, four bindings, one canonical pipeline — conformance-tested. - Retired reference operators. Hand-coded finite-volume operators on
cubed-sphere grids (
transport_2d,flux_1d, PPM transport/reconstruction, ghost-cell handling) formerly lived undersrc/operators/as oracles while their math was ported into catalog rules. All have now been retired;src/operators/no longer exists (see the retirement log insrc/EarthSciDiscretizations.jl).fv_laplacianwas retired in esd-ecq; its math now lives entirely indiscretizations/finite_difference/covariant_laplacian_cubed_sphere.json. New math should land as rules, not operators.
Per the single-pathway rule in AGENTS.md, ESD is a
discretization catalog over ESS, not a parallel runtime: no binding
carries a rule evaluator, and every simulation flows through the ESS
discretize → ArrayOp → eval pipeline.
See docs/REPO_LAYOUT.md for the repository convention
and discretizations/README.md for how to add a
rule file.
julia --project=. -e 'using Pkg; Pkg.test()'