Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Station Assimilation

ROI-based assimilation of station snow depth and SWE observations.

Table of contents
  1. Overview
  2. Supported Variables
  3. Required Inputs
    1. Station observation CSVs
    2. Station DA metadata
  4. Configuration
  5. Effective Station Uncertainty
  6. Likelihood
  7. Single-Station Handling
  8. What Counts as an Active Station
  9. Outputs and Diagnostics
  10. Practical Interpretation
  11. Related Documentation

Overview

openAMUNDSEN-DA supports ROI-based assimilation of in situ station snow observations:

  • station_hs for snow depth
  • station_swe for 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:

  • time
  • snow_depth
  • swe

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_depth is expected in m
  • swe is expected in mm
  • 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_id
  • station_uncertainty_pct
  • hs_sigma_abs_min
  • swe_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_pct still falls back to the project-level default when the metadata value is empty.
  • hs_sigma_abs_min is required for every active station_hs station.
  • swe_sigma_abs_min is required for every active station_swe station.
  • 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 when station_uncertainty_pct is empty in metadata
  • min_station_uncertainty_pct: lower bound to avoid overconfident station influence
  • single_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_min in m for station_hs
  • swe_sigma_abs_min in mm for station_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 value
  • H_m,s = modeled point value at the same station for member m
  • sigma_s = effective station sigma for station s

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.csv or weights_station_swe_YYYYMMDD.csv
  • station_diagnostics_station_hs_YYYYMMDD.csv or station_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_id
  • member_id
  • obs_value
  • model_value
  • sigma
  • residual terms
  • final member weights

The fraction time-series plot also marks station DA dates with vertical lines:

  • HS for station_hs
  • SWE for station_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.