Workflow
The weather generator workflow is for performing coupled simulations of rainfall and other weather variables (e.g. temperature). Potential evapotranspiration can also be calculated.
It is best to read the rainfall model Workflow page before reading this page.
Example notebooks are under development.
Basic Workflow
The basic workflow for the weather generator consists of the following steps:
Initialise a weather generator
Initialise the rainfall model component of the weather generator
Perform preprocessing and fitting for the rainfall model
Initialise the weather model component of the weather generator
Perform preprocessing and fitting for the weather model
Simulate rainfall and weather variables
Postprocess simulation output to calculate/extract relevant quantities
Note
Preprocessing and fitting for the rainfall model can be replaced by setting the required reference statistics and/or parameters. This functionality is not yet implemented for the weather model.
Note
Postprocessing is currently only available for the rainfall model.
Example
The basic workflow can be carried out using a script like the following (for a single site model):
import rwgen
# Initialise weather generator
wg = rwgen.WeatherGenerator(
spatial_model=False,
project_name='brize-norton',
latitude=51.758,
longitude=-1.578,
easting=429124,
northing=206725,
elevation=82.0,
)
# Initialise rainfall model component
wg.initialise_rainfall_model(
input_timeseries='/path/to/input_timeseries.csv',
)
# Calculate rainfall reference statistics from gauge time series
wg.rainfall_model.preprocess()
# Fit rainfall model parameters using reference statistics
wg.rainfall_model.fit()
# Initialise weather model component
wg.initialise_weather_model(
input_timeseries='/path/to/input_timeseries',
)
# Calculate weather reference statistics from station time series
wg.weather_model.preprocess()
# Fit weather model parameters using reference statistics
wg.weather_model.fit()
# Simulate one realisation of 1000 years at an hourly timestep
wg.simulate(
simulation_length=1000,
n_realisations=1,
timestep_length=1,
)
# Calculate/extract statistics from simulated rainfall time series (e.g. AMAX, DDF)
wg.rainfall_model.postprocess(
amax_durations=[1, 6, 24], # durations in hours
ddf_return_periods=[20, 50, 100] # return periods in years
)
Explanation
In the example above we begin by initialising a weather generator object. Some basic options need to be specified at this point, including whether or not the model is for a single site and its coordinates.
Next we initialise the rainfall model as a component of the weather generator.
The wg
weather generator object now has a rainfall_model
attribute.
All of the rainfall model methods and attributes can be accessed as usual, but
now via e.g. wg.rainfall_model.preprocess()
rather than just
rainfall_model.preprocess()
.
Note
If we want to use pre-existing reference statistics or parameters then
they can be loaded via wg.rainfall_model.set_statistics()
and
wg.rainfall_model.set_parameters()
calls.
Now that the rainfall model component is ready we can initialise the weather
model component. For a single site model, the only compulsory argument is a
path to an input .csv
file containing weather time series.
The weather model has preprocess()
and fit()
methods, as per the
rainfall model. The former method calculates statistics and performs
transformations on the input weather series, while the latter fits the
regression models.
At this point we are now ready to simulate via a call to wg.simulate()
. By
default the model will try to simulate temperature, humidity, sunshine duration,
wind speed and potential evapotranspiration. See the
Weather Generator API and Weather Model API pages for further
details.