Homework
Exercise 1
- Download module4_model.zip into a new project folder and extract its content.
- Review the folder structure and files of the model. It should be as follows:
module4_model
├── data
│ ├── flow_meter_A_2020_09.dfs0
│ ├── flow_meter_B_2020_09.dfs0
│ └── rainfall_events_2020-09.dfs0
├── Dyrup_uncalibrated.mupp
├── Dyrup_uncalibrated.sqlite
├── LTS
│ └── rainfall_events_LTS_2020_09.MJL
└── results
├── rainfallBaseDefault_Network_HD.res1d
└── rainfallBaseDefault_Surface_runoff.res1d- Open
Dyrup_uncalibrated.muppin MIKE+ and familiarize yourself with the model.- Review the boundary conditions. Can you see where the rainfall is applied?
- Find the system’s only node outlet: G60F360.
- Locate the two flow meters (A and B). Which reach IDs are they associated with?
- Review the simulation setup.
- Make a new LTS job list for the simulation. How does it compare with
LTS/rainfall_events_LTS_2020_09.MJL? - Run a simulation. Do you get the same results as those in the
resultsfolder?
Exercise 2
- Create a new Jupyter Notebook and save it in your project folder.
- Create a
PointObservationobject for “Flow Meter A” usingdata/flow_meter_A_2020_09.dfs0. - Create a
PointObservationobject for “Flow Meter B” usingdata/flow_meter_B_2020_09.dfs0. - For both
obs_Aandobs_B:- Print their objects and inspect the data.
- Plot their time series.
Exercise 3
- Use the model network results from Exercise 1 (or the provided reference results).
- For “Flow Meter A” (model reach
G60F380_G60F360_l1), extract its ‘Discharge’ quantity to adfs0file. - Create a
PointModelResultobject from thedfs0file created above. - For “Flow Meter B” (model reach
G62F070_G62F060_l1), extract its ‘Discharge’ quantity to adfs0file. - Create a
PointModelResultobject from thedfs0file created above. - For both
mod_Aandmod_B:- Print the object summary.
- Plot the model result time series.
Exercise 4
- Match
obs_Awithmod_Ausingms.match(). Store incomparer_A. - Match
obs_Bwithmod_B. Store incomparer_B. - For
comparer_A:- Generate time series plot:
comparer_A.plot.timeseries(). - Generate scatter plot:
comparer_A.plot.scatter(). - Calculate and display skill table:
comparer_A.skill().
- Generate time series plot:
- Repeat step 3 for
comparer_B. - Examine the skill tables. Qualitatively, which metrics suggest better or worse performance for each location?
Exercise 5
- Create a
ComparerCollectionnamedccfromcomparer_Aandcomparer_B. - Display
cc. Checkcc.obs_namesandcc.mod_names. - Make a temporal coverage plot:
cc.plot.temporal_coverage(). - Make a scatter plot:
cc.plot.scatter(). - Make a residual histogram:
cc.plot.residual_hist(). - Calculate and display the skill table for the collection:
cc.skill().- Modify to show only ‘rmse’, ‘bias’, ‘nse’, and ‘kge’ metrics.
- Calculate and display the mean skill table:
cc.mean_skill().- Modify to show only ‘rmse’, ‘bias’, ‘nse’, and ‘kge’.
- Using
cc.score(), retrieve and print the mean ‘kge’ score for the model.
Exercise 6
- Repeat Exercise 4 and 5, but using the
max_model_gapparameter ofms.match(). Use a value of 600 seconds. - How do the number of observation points in each Comparer change?
- How does the temporal coverage plot change?
- How does this approach impact the skill assessment?
- Review ModelSkill’s documentation on ‘nse’. How do both flow meters, and the overall model perform on this metric?
Want to check your work?
Download the exercise solutions: