UU Fall 2026 course: Atmospheric Composition and Chemical processes
  • Typst 51.4%
  • Python 40.1%
  • Nix 7%
  • Just 1.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Niccolò Zanotti fae4783992
docs(assignment2): add hand-in 2 report
Solutions for problem 1 (ozone production system: standard case, NO and
isoprene emission sensitivity, contour of the maximum) and problem 2 (role of
entrainment: multi-day episode, EU threshold exceedance and boundary-layer
timing), with the questions and the generated figures.
2026-09-28 14:00:08 +02:00
assets refactor(typst): extract shared ACCP report template 2026-09-20 22:34:44 +02:00
assignments docs(assignment2): add hand-in 2 report 2026-09-28 14:00:08 +02:00
template chore(template): add reusable assignment scaffold 2026-09-20 22:36:55 +02:00
typst style(typst): format sources with typstyle 2026-09-20 23:40:48 +02:00
.gitignore chore(nix): add reproducible flake, justfile and rebuild report 2026-09-20 23:40:49 +02:00
.python-version chore: add project metadata, gitignore and MIT license 2026-09-20 22:34:28 +02:00
flake.lock feat(nix): provide the CLASS model in the dev shell 2026-09-28 13:59:56 +02:00
flake.nix feat(nix): provide the CLASS model in the dev shell 2026-09-28 13:59:56 +02:00
justfile feat(just): add all recipe for figures and reports 2026-09-28 14:00:01 +02:00
LICENSE chore: add project metadata, gitignore and MIT license 2026-09-20 22:34:28 +02:00
pyproject.toml chore(deps): add classmodel from the CLASS-model fork 2026-09-28 10:45:26 +02:00
README.md docs: document figure generation and the nix workflow 2026-09-28 14:00:01 +02:00
uv.lock chore(deps): add classmodel from the CLASS-model fork 2026-09-28 10:45:26 +02:00

Atmospheric Chemistry and Physical Processes (ACCP)

Course assignments for ACCP, Utrecht University, Fall 2026. Author: Niccolò Zanotti (student number 2259540).

Each hand-in pairs a Typst report with the Python that generates its figures. Reports are built from a shared theme in typst/accp.typ; template/ is the scaffold for the next assignment.

Assignments

# Topic Report Figures Code
01 Methyl chloroform, H₂ deposition velocity, box vs. puff model, atmospheric layers PDF problem 2, problem 4 1, 2, 3, 4, diagram

Build and run

The toolchain (Typst 0.15.1 with pinned fonts, uv/Python, ruff, typstyle and the headless CLASS model) is provided by the Nix flake. The flake fetches the CLASS-model fork, puts its class-cli binary on the path and exports CLASS_BIN, so the assignment 02 figures can be regenerated inside the shell:

nix develop              # enter the reproducible shell
just all                 # regenerate all figures + compile every report
just figures             # regenerate all figures
just build               # compile every report in place
just lint                # typstyle --check + ruff check
just sync                # uv sync

The whole workflow is reproducible with a single command:

nix develop --command just all

nix build compiles the reports hermetically into ./result, and nix flake check runs the compilation, style and lint checks. Reports are compiled with --ignore-system-fonts and SOURCE_DATE_EPOCH, so the output is reproducible.

Without Nix:

uv sync
typst compile --root . assignments/01/hand-in.typ   # --root . lets reports import ../../typst/accp.typ and ../assets/
uv run python assignments/01/code/problem2.py       # scripts resolve figures/ relative to the repo

# assignment 02 additionally needs the headless CLASS model:
git clone https://git.niccolozanotti.eu/niccolozanotti/CLASS-model.git
cmake -S CLASS-model -B CLASS-model/build && cmake --build CLASS-model/build -j
export CLASS_BIN=$PWD/CLASS-model/build/class-cli
uv run python assignments/02/code/problem1.py

Starting a new assignment

cp -r template assignments/02

Then edit assignments/02/hand-in.typ (set the title and add the problems) and drop scripts and generated figures into assignments/02/code/ and assignments/02/figures/.

Local-only material

The textbook and the assignment statements are not part of this repository: they are kept locally in reference/ and assignments/*/statement/, both git-ignored.

License

Released under the MIT License.