WRF-Hydro Logo

Lesson 5 - Land surface experiments

Overview

In Lesson 4 we experimented with different initial and boundary conditions (precipitation).

In this lesson, we experiment with parameter adjustments to evaluate impacts on streamflow.

NOTE: If you have not completed Lessons 1 through 4, please stop and do so now.

Compiling WRF-Hydro

Below are the commands to compile WRF-Hydro. We are doing a quick short-cut to edit the setEnvar.sh to make sure HYDRO_D and SPATIAL_SOIL are both active. See Lesson 1 if you have any questions on these settings.

NOTE: You only need to do these steps if you do not already have a compiled binary. If you do, you can skip the compile steps.

Experiment with Modified Parameters

There are a number of key parameters that impact water partitioning, storage, and movement through the model system. We have pulled many of the most important model parameters into NetCDF files to ease parameter display and manipulation, as well as to allow the parameters to vary independently in space. Key terrain routing parameter files include:

In this lesson, we will manipulate parameters in the soil_properties.nc (refkdt, dksat, bexp) and Fulldom_hires.nc (LKSATFAC, RETDEPRTFAC) files.

Step 1: Create a new template directory and and run default parameter test case

As in the first section, we will make a new simulation directory and use this as a template for creating multiple new simulation directories.

Step 1a: Create a new template directory for the parameter experiments.

Step 1b: Setup and run the default parameter baseline experiment

We now make a new run directory to run the baseline simulation with default (uncalibrated) parameters.

Launch the baseline run and make sure it completes successfully.

Step 1c: Plot the hydrograph for the baseline (default) run

We want to take a quick look at the hydrograph for the default parameter run so we see what behavior we might want to adjust.

We will use Python and the xarray library to load the data and plot hydrographs. For an intro to these tools, please see Lesson 3.

Load the xarray python package

Plot the hydrograph for the outlet gage (feature_id = 2, USGS ID 01447720)

Table 1. USGS Stream Gage IDs and associated WRF-Hydro feature_id indices.

USGS Gage ID WRF-Hydro gage feature_id Gage Information
01447680 1 https://waterdata.usgs.gov/pa/nwis/uv/?site_no=01447680
01447720 2 https://waterdata.usgs.gov/nwis/nwismap/?site_no=01447720

Step 2: Modify NoahMP parameters using NCO tools

We will create a new simulation directory for our parameter manipulation experiment.

All of the parameter file edits will be done using NCO. NCO (NetCDF Operators, http://nco.sourceforge.net/) is a set of useful utilities to manipulate NetCDF files.

Step 2a: Setup the parameter experiment run directory

First make a new run directory where we can start modifying parameter files.

Step 2b: Use the NCO command ncap2 to modify the refkdt parameter values in the soil_properties.nc file.

REFKDT

An important Noah/NoahMP parameter that we commonly adjust when activating terrain routing is refkdt. Refkdt controls how easily precipitation reaching the surface infiltrates into the soil column vs. stays on the surface where it can become surface runoff. Higher values of refkdt lead to more infiltration and less surface (fast) runoff. This tunable parameter can be set to a relatively high value (e.g., 3.0) suitable for running the column land surface model only. When activating terrain routing to explicitly model these processes, we often reduce this parameter. In addition, if you are calling the land surface model on a small timestep (e.g., seconds to minutes), you may want to reduce this parameter to compensate for the more frequent calls to the vertical infiltration scheme.

Here we will use the NCO command ncap2 to decrease the refkdt value.

First, we check the current parameter values using ncdump.

The default value for refkdt is a global 3.0. We modify the parameter values using ncap2 to a lower value (1.0).

We check to make sure the changes are as expected.

Step 2c: Use the NCO command ncap2 to modify the dksat parameter values in the soil_properties.nc file.

DKSAT and BEXP

As with most physically-based hydrological models, the soil saturated hydraulic conductivity (dksat) controls the speed at which water moves through the subsurface. This is a sensitive parameter in the model, and while easy to measure at the point scale, dksat is tricky to estimate at the scale of kilometers. Initial values are estimated based on soil texture class, but reported ranges have large (many orders of magnitude) variability. This is a common calibration parameter, along with the related bexp parameter that controls how actual conductivity is scaled from saturated conductivity based on soil water content.

Here we will use the NCO command ncap2 to increase the dksat value by a factor of 8 and bexp by a factor of 1.5.

First, we check the current parameter values using ncdump.

Note that this parameter's initial values vary in space based on soil texture class. We modify the parameter values using ncap2 to increase by a factor of 8. This maintains the spatial distribution, but encourage faster soil water movement overall.

Use ncdump to check the starting values of bexp. Note that these also vary spatially by soil type. We will increase these values by a factor of 1.5.

Step 3: Modify terrain routing parameters using NCO tools

Now we will turn our attention to the parameters that affect lateral routing behavior.

Step 3a: Use the NCO command ncap2 to modify the LKSATFAC and RETDEPRTFAC parameter values in the Fulldom_hires.nc file

LKSATFAC

The Fulldom_hires.nc file contains two parameters that are also important for lateral flow processes. The LKSATFAC parameter is a multiplier on the prescribed lateral saturated hydraulic conductivity values specified in hydro2dtbl.nc. By default, lateral conductivity in hydro2dtbl.nc matches vertical conductivity specified in soil_properties.nc. However, in the real world we frequently see many orders of magnitude higher conductivities in the lateral direction vs. the vertical direction (due to soil stratigraphy, preferential flowpaths caused by roots and animals, etc.). LKSATFAC is an easy way to adjust this anisotropy, and by default it is set to 1,000.

We will use the NCO command ncap2 to increase the LKSATFAC value to 16,000 (this encompasses the original dksat multipler of 8 and an additional anisotropy factor of 2,000).

First, we check the current parameter values.

Then, we modify the parameter values using ncap2 and confirm our changes.

RETDEPRTFAC

The RETDEPRTFAC parameter is a multiplier on the maximum retention depth. Ponded water on the surface above this retention depth threshold can be moved around the landscape via overland flow. The default value in the code is quite small (~0.001mm, though variable by terrain slope) to allow almost all ponded water to be available for routing. However, in many regions landscape features like wetlands, small detention ponds, and heavy vegetation litter/debris can trap water on the land surface. Increasing the RETDEPRTFAC multiplier will hold more ponded water on the surface before it becomes runoff.

We will use the NCO command ncap2 to increase the RETDEPRTFAC value to 10000 (max of 10mm).

First, we check the current parameter values.

Then, we modify the parameter values using ncap2 and confirm our changes.

Step 3b: Run the simulation

Now we are ready to run a simulation with our new modified parameters.

Check to make sure your run completed successfully.

Results

We will now look at the differences in streamflow between our baseline run with default parmeters and the simulation using our new modified parameters.

We will use Python and the xarray library to load the data and plot hydrographs. For an intro to these tools, please see Lesson 3.

Load the CHANOBS streamflow datasets

We are going to use the CHANOBS files because it will limit the number of grid cells to only those which we have specified have a gage.

Plot the hydrographs

We see definite differences between the streamflow responses with and without parameter modifications (red solid and black dashed lines, respectively). The low streamflow bias in the original run (black) is mitigated in the "calibrated" run (red), and we now see a slight high bias. So where did all the new streamflow come from?

Load the LDASOUT land model output files

In our simulations, we specified land surface model output (LDASOUT) files once per day. We will read those in using xarray.

Plot the mean soil moisture time series

In the "calibrated" simulation, we are partitoning more water to surface runoff and encouraging faster vertical and lateral soil water drainage. Both parameter modifications result in less water being stored in the soil column, as shown in the soil moisture plot above, and more water going to streamflow.

Discussion

Our baseline simulation with default parameters had an initial event peak that was far too low in magnitude, too early, and overly flashy, followed by a longer prolonged flow signal well after the event. We reduced refkdt to better match our activated terrain physics and encourage more surface runoff. We increased dksat and bexp (controlling the vertical drainage rate) and LKSATFAC (controlling the lateral drainage rate) to add more spread to the flow peak. We increased RETDEPRTFAC to hold more ponded water at the surface. Our modified parameter experiment results do better match the gage observations, though we still have some slight timing issues (too early for the first event, too late for the second) and slightly prolonged recessions. Both could likely be mitigated through further parameter modifications.

IMPORTANT NOTE: We abbreviated this parameter calibration exercise to fit within a short lesson. In practice, you would want to give the model time to adjust to a new parameter set by running an extended "spin-up" period before the time period you are evaluating. You would also want to expose the model to a wider range of conditions than the short event demostrated here. Model parameters calibrated to a short event may not transfer well to other time periods. Good practice is to calibrate your model to a wide range of conditions to minimize the impacts of forcing, gage, or model physics/parameter uncertainties.

Other Commonly Calibrated Parameters

SLOPE

There are a number of Noah/NoahMP model parameters that affect water partitioning. One important parameter that we commonly adjust is slope. Originally estimated based on land surface topography (hence the name slope), the slope parameter controls how open or closed the bottom boundary of the soil column is. It is a multiplier on the bottom boundary conductivity. Values range from 0 to 1, where 0 is a completely closed bottom boundary and 1 is completely open. Lower slope values will keep more water in the soil column, while higher values will allow more water to drain to the channel or to deeper baseflow stores, depending on the selected baseflow physics options.

SMCMAX, SMCREF, SMCWLT

Soil water holding capacity is controlled by the porosity (smcmax), field capacity (smcref), and wilting point (smcwlt). These properties are specified by soil texture class, but also vary significantly in space so can be calibrated.

Next up - Do it yourself!

This concludes Lesson 5. Spend some time creating your own parameter experiments.

The next lesson is Lesson 6.

IT IS BEST TO EITHER SHUTDOWN THIS LESSON OR CLOSE IT BEFORE PROCEEDING TO THE NEXT LESSON TO AVOID POSSIBLY EXCEEDING ALLOCATED MEMORY. Shutdown the lesson be either closing the browser tab for the lesson or selecting Kernel -> Shut Down Kernel in JupyterLab.

© UCAR 2020