Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,6 @@ uv.lock

# evalml
.evalml_snakemake_cmd.txt

# Paper plotting scripts + their figure outputs (not part of the realv2 showcase)
paper_plots/
84 changes: 84 additions & 0 deletions config/windgust-peakweather.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# yaml-language-server: $schema=../workflow/tools/config.schema.json
description: |
As windgust.yaml (realv2 VMAX_10M showcase), but verifies against PeakWeather
station observations instead of the REAL-CH1 gridded analysis.

# One week of daily initialisations for verification.
dates:
start: 2024-02-01T00:00
end: 2024-02-07T00:00
frequency: 24h

runs:
- forecaster:
checkpoint: /scratch/mch/rradev/output/checkpoint/9efa01f8c7464328897edb2c03a407c2/inference-last.ckpt
label: realv2_vmax10m
steps: 0/120/6
config: resources/inference/configs/sgm-multidataset-forecaster-windgust-ich1.yaml
extra_requirements:
# checkpoint needs: (1) EmptyInput.create_input_state propagates the date
# (else KeyError 'date' in add_initial_forcings_to_input_state for the
- git+https://github.com/radiradev/anemoi-inference.git@fix/empty-input-propagate-date

- eccodes==2.39.1
- eccodes-cosmo-resources-python==2.38.3.1

- baseline:
label: ICON-CH1-ctrl
root: /store_new/mch/msopr/osm/ICON-CH1-EPS
steps: 0/33/6

truth:
label: PeakWeather
root: output/data/observations/peakweather

experiment:
params:
- VMAX_10M
stratification:
regions:
- jura
- mittelland
- voralpen
- alpennordhang
- innerealpentaeler
- alpensuedseite
root: /scratch/mch/bhendj/regions/Prognoseregionen_LV95_20220517
thresholds:
VMAX_10M:
gt: [10.0, 20.0, 30.0]
dashboard:
stratification:
- season

showcase:
params:
- T_2M
- SP_10M
- VMAX_10M
meteograms:
enabled: false
stations: [JUN]
animations:
enabled: true
domains:
- icon-ch
- switzerland

locations:
output_root: output/

profile:
executor: slurm
global_resources:
gpus: 16
default_resources:
slurm_partition: "postproc"
cpus_per_task: 1
mem_mb_per_cpu: 1800
runtime: "1h"
gpus: 0
slurm_extra: "--exclusive" # whole nodes; avoid oversubscription
jobs: 50
batch_rules:
plot_forecast_frame: 32
84 changes: 84 additions & 0 deletions config/windgust.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# yaml-language-server: $schema=../workflow/tools/config.schema.json
description: |
Showcase the multi-output "realv2" anemoi architecture (ICON-CH1 cutout forecaster
with a diagnostic VMAX_10M stream on the REAL-CH1 / ICON-CH1 1km grid).

# One week of daily initialisations for verification.
dates:
start: 2024-02-01T00:00
end: 2024-02-07T00:00
frequency: 24h

runs:
- forecaster:
checkpoint: /scratch/mch/rradev/output/checkpoint/9efa01f8c7464328897edb2c03a407c2/inference-last.ckpt
label: realv2_vmax10m
steps: 0/120/6
config: resources/inference/configs/sgm-multidataset-forecaster-windgust-ich1.yaml
extra_requirements:
# checkpoint needs: (1) EmptyInput.create_input_state propagates the date
# (else KeyError 'date' in add_initial_forcings_to_input_state for the
- git+https://github.com/radiradev/anemoi-inference.git@fix/empty-input-propagate-date

- eccodes==2.39.1
- eccodes-cosmo-resources-python==2.38.3.1

- baseline:
label: ICON-CH1-ctrl
root: /store_new/mch/msopr/osm/ICON-CH1-EPS
steps: 0/33/6

truth:
label: REAL-CH1
root: /store_new/mch/msopr/ml/datasets/mch-realch1-fdb-1km-2005-2025-1h-pl13-v2.0.zarr

experiment:
params:
- VMAX_10M
stratification:
regions:
- jura
- mittelland
- voralpen
- alpennordhang
- innerealpentaeler
- alpensuedseite
root: /scratch/mch/bhendj/regions/Prognoseregionen_LV95_20220517
thresholds:
VMAX_10M:
gt: [10.0, 20.0, 30.0]
dashboard:
stratification:
- season

showcase:
params:
- T_2M
- SP_10M
- VMAX_10M
meteograms:
enabled: false
stations: [JUN]
animations:
enabled: true
domains:
- icon-ch
- switzerland

locations:
output_root: output/

profile:
executor: slurm
global_resources:
gpus: 16
default_resources:
slurm_partition: "postproc"
cpus_per_task: 1
mem_mb_per_cpu: 1800
runtime: "1h"
gpus: 0
slurm_extra: "--exclusive" # whole nodes; avoid oversubscription
jobs: 50
batch_rules:
plot_forecast_frame: 32
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
lead_time: 120h
write_initial_state: true
allow_nans: true

env:
ANEMOI_INFERENCE_NUM_CHUNKS: 8 # OOM error if not set

# inputs
input:
test:
use_original_paths: true

output:
# Global cutout state (ICON-CH1 LAM + AIFS N320 global).
data:
tee:
- grib:
path: grib/{date}{time:04}_{step:03}.grib
encoding:
typeOfGeneratingProcess: 2
centre: lssw
templates:
samples: resources/templates_index_icon.yaml
post_processors:
- extract_mask: # keep only LAM points
mask: "lam_0/cutout_mask"
as_slice: true
- grib:
path: grib/ifs-{date}{time:04}_{step:03}.grib
encoding:
typeOfGeneratingProcess: 2
centre: ecmf
templates:
samples: resources/templates_index_ifs.yaml
post_processors:
- extract_mask: # removes LAM points
mask: "lam_0/cutout_mask"
as_slice: true
inverse: true
- assign_mask: # fill local/global overlapping points with nan
mask: "global/cutout_mask"
# Dianostic decoder on ICON grid only
realv2:
grib:
path: grib/realv2-{date}{time:04}_{step:03}.grib
# diagnostic is first valid at the model step (e.g. +6h)
write_initial_state: false
encoding:
typeOfGeneratingProcess: 2
centre: lssw
templates:
samples: resources/templates_index_realch1.yaml

# Remaps the `data` stream's IFS variable names (2t, 10u, tp, ...) to the COSMO
# shortNames expected by the ICON GRIB templates, and gives the realv2 VMAX_10M
# diagnostic a whole-hour max period (['6h', '12h']) so its GRIB time-processing
# is encoded correctly.
patch_metadata: resources/sgm-windgust-ich1-patch.yaml
Loading