Assimilation
Assimilation is a means by which you can update the state of a model with a set of observations so that the model is a better match to the observed data.
The updated state can be used as the starting point of a forecast or to propagate to the next set of observations.
Assimilation may prove useful when the model results and observations do not match. This may occur as a result of the following:
- Input measurement errors
- Discretisation
- Modelling assumptions
- Parameter values, such as roughness
- Observation measurement errors
The implementation uses the Ensemble Kalman Filter (EnKF) algorithms for state updating. A number of error terms are introduced through the use of observation variance and boundary condition variance:
- Global observation variance, which is set in the Variance field in the simulation parameters. A typical variance is 0.05.
- Individual observation variance per time series. This is set on TVD connectors, which link observed time series data to the model. The individual variance overrides the global observation variance. A typical individual variance is 0.05.
- Perturb boundary condition variance, which is set on an assimilation object and is used to introduce some errors into model inflows, levels and rainfall. A typical perturb boundary condition variance is 0.05.
In order to update the state of a model, an assimilation object, which contains the assimilation parameters, must be created. See Assimilate the State of a Model for details of how to update the state of a model.
Temporary perturbed simulations
A large number of temporary perturbed simulations are required to produce the final assimilation result. The number of temporary perturbed simulations is calculated by the following formula:
number_perturbed_sims = ensemble_size * generations;
The ensemble size variable is specified by the user, and represents the number of times the boundary condition data is initially perturbed. The generations variable is inferred from the number of observation timesteps. The number of generations is calculated as follows:
generations = number_of_time_steps – 1;
A number of additional temporary runs and simulations are also required. The end result is a simulation that can be used as an initial state to another simulation. The initial state should be a better representation of the observed data than before assimilation took place.

Assimilation cannot currently be performed on 2D models.
Assimilation cannot be performed on runoff only runs.
Assimilation can only be performed when the observed data is held in a TSDB, rather than in event files.
Assimilation runs must produce a saved state.