Station Assimilation
ROI-based assimilation of station snow depth and SWE observations.
Table of contents
Overview
openAMUNDSEN-DA supports ROI-based assimilation of in situ station snow observations:
station_hsfor snow depthstation_swefor snow water equivalent- each active station contributes one likelihood term,
- stations with lower uncertainty influence the weights more strongly,
- stations with higher uncertainty influence the weights more weakly,
- all active stations on one assimilation date are combined into one ROI-level member weighting.
Supported Variables
The following assimilation-event variables are supported:
data_assimilation:
assimilation_events:
- date: 2023-01-10
variable: station_hs
- date: 2023-03-09
variable: station_swe
Required Inputs
Station observation CSVs
Station observations live under:
obs/stations/<station_id>.csv
Expected columns:
timesnow_depthswe
Typical layout:
time,snow_depth,swe
2022-10-01 00:00:00,0.10,15.1
2022-10-01 01:00:00,0.10,14.8
...
Notes:
snow_depthis expected inmsweis expected inmm- a station file may exist even if only one variable is later assimilated
- missing values are allowed, but the requested variable must exist for the station/date to become active
Station DA metadata
Station DA metadata live in:
obs/stations/stations_da_metadata.csv
Expected columns:
station_idstation_uncertainty_pcths_sigma_abs_minswe_sigma_abs_min
Example:
station_id,station_uncertainty_pct,hs_sigma_abs_min,swe_sigma_abs_min
proviantdepot,20,0.05,15
latschbloder,80,0.20,
Notes:
station_uncertainty_pctstill falls back to the project-level default when the metadata value is empty.hs_sigma_abs_minis required for every activestation_hsstation.swe_sigma_abs_minis required for every activestation_swestation.- Missing required absolute sigma metadata is a hard configuration error.
Configuration
Project-level station DA settings live under:
data_assimilation:
station:
default_station_uncertainty_pct: 25
min_station_uncertainty_pct: 10
single_station_factor: 2.0
Meaning of the keys:
default_station_uncertainty_pct: fallback whenstation_uncertainty_pctis empty in metadatamin_station_uncertainty_pct: lower bound to avoid overconfident station influencesingle_station_factor: extra sigma inflation when only one active station is available for a date
The absolute sigma floor is configured per station in stations_da_metadata.csv:
hs_sigma_abs_mininmforstation_hsswe_sigma_abs_mininmmforstation_swe
Effective Station Uncertainty
The station uncertainty used in DA is an effective uncertainty, not only sensor error.
It can absorb:
- instrument uncertainty
- local station quality and maintenance confidence
- siting concerns
- flat-field or sheltered-location concerns
- broad point-to-ROI representativeness concerns
Interpretation:
- lower station uncertainty -> narrower likelihood -> stronger update
- higher station uncertainty -> wider likelihood -> weaker update
Because percentage-only scaling can become unrealistically strict near zero snow, the implementation always combines the relative term with the station-wise absolute sigma floor from metadata.
Likelihood
For one assimilation date, each active station contributes a Gaussian log-likelihood term for every ensemble member.
Definitions:
y_s= observed station valueH_m,s= modeled point value at the same station for membermsigma_s= effective station sigma for stations
Residual:
residual_m,s = H_m,s - y_s
Station contribution:
log L_m,s ∝ -0.5 * (residual_m,s / sigma_s)^2
ROI-level member likelihood:
log L_m,total = sum over all active stations s of log L_m,s
The normalized particle-filter weights are then computed from these summed log-likelihoods.
Single-Station Handling
If only one active station is available on a DA date, the observation is still used, but more cautiously.
Version 1 policy:
- write a warning
- inflate the station sigma by
single_station_factor
Effective single-station sigma:
sigma_eff = sigma_base * single_station_factor
This keeps a single station from speaking too loudly at ROI scale while still allowing it to contribute.
What Counts as an Active Station
A station is active on a DA date when:
- the station belongs to the ROI / setup station set,
- the required observation variable exists,
- the observation value is finite,
- the observation value is nonnegative,
- a unique nearest timestamp can be resolved,
- model point output exists for the station for all members.
Stations failing these checks are skipped and logged.
Outputs and Diagnostics
For station DA dates, the pipeline writes:
weights_station_hs_YYYYMMDD.csvorweights_station_swe_YYYYMMDD.csvstation_diagnostics_station_hs_YYYYMMDD.csvorstation_diagnostics_station_swe_YYYYMMDD.csv- one diagnostic PNG per station-DA date
The diagnostics CSV contains station-level details used for the update, such as:
station_idmember_idobs_valuemodel_valuesigma- residual terms
- final member weights
The fraction time-series plot also marks station DA dates with vertical lines:
HSforstation_hsSWEforstation_swe
Practical Interpretation
The station DA update does not force the ensemble mean directly to the station observation.
Instead, it reweights the members that already exist.
That means:
- if the ensemble already contains members close to the station observation, the posterior mean can move strongly toward the station
- if no ensemble member is close to the station observation, the DA can only move toward the best available members
This is standard particle-filter behavior and is especially important for strong, low-uncertainty station updates.