Code to run Data Assimilation with hydrological models on the eWaterCycle platform.
Install this package alongside your eWaterCycle installation
pip install ewatercycle-DA
Then DA becomes available to be used in eWaterCycle
from ewatercycle_DA import DA
Documentation can be found here
Changelog can be found in CHANGELOG.md on GitHub.
(maybe migrate this to docs?)
Can be used with or without assimilating, this will run 10 versions of the same model. By varying the setup_kwargs you can vary the model run itself.
HBVForcing = ...
ensemble = DA.Ensemble(N=10)
ensemble.setup()
ensemble.initialize(model_name="HBV",
forcing=HBVForcing,
setup_kwargs={'parameters':'7.6,0.5,460,3.8,0.19,1.3,0.082,0.0061',
'initial_storage':'0,100,0,5'}
)
ref_model = ensemble.ensemble_list[0].model
lst_Q = []
while ref_model.time < ref_model.end_time:
ensemble.update(assimilate=False)
lst_Q.append(ensemble.get_value("Q"))
For running HBV see seperate docs
...
ref_model = ...
#... same as above just add two more definitions
def H(Z):
"""returns discharge which is the last value on the state vector for HBV"""
return Z[-1]
ds_obs_dir = ...
ensemble.initialize_da_method(ensemble_method_name = "PF",
hyper_parameters = {
'like_sigma_weights' : 0.05,
'like_sigma_state_vector' : 0.01,
},
state_vector_variables = "all",
# the next three are keyword arguments but are needed:
observation_path = ds_obs_dir,
observed_variable_name = "Q",
measurement_operator = H,
)
lst_Q = []
while ref_model.time < ref_model.end_time:
ensemble.update(assimilate=True)
lst_Q.append(ensemble.get_value("Q"))