USGS - science for a changing world

USGS Multimedia Gallery

Maps, Imagery, and Publications Hazards Newsroom Education Jobs Partnerships Library About USGS Social Media

Multimedia Gallery Home | Videos

USGS-NPS Vital Signs coho-stream synthesis model

Information presented is factual at the time of creation.
If no transcript and/or closed-caption is available, please notify us.


*Hello, I’m Andrea Woodward of the USGS Forest & Rangeland Ecosystem Science Center and today I’m going to present a tutorial demonstrating the use of a system dynamics model of fish populations, a model that Alicia Torregrosa, Mary Ann Madej and I developed for the San Francisco Bay Area Network of national parks. This example model is for Olema Creek, a watershed in Point Reyes National Seashore.

*The over-arching purpose of this project is to develop methods to integrate among Vital Signs monitoring data sets for the National Park Service. Working among these data sets can be challenging for a number of reasons, including short duration, measurements not corresponding in time or place, methods and quality checks varying through time, missing data, and the need to incorporate expert knowledge when data on important factors were not collected.

*We found that system dynamics modeling can be an effective means to meet these challenges, and to illustrate the point, this tutorial demonstrates the use of a system dynamics model and the example of salmon population dynamics. We built the model in Stella® software, but other software packages are available. The goal of the presentation is to give you tools to interact with the models rather than provide a comprehensive demonstration of the features of Stella®. A free, limited-capability version of the Stella® software, the model and the input file can be downloaded from this website.


*Let’s start with background on the lifecycle of coho salmon. What is of interest to the park is the freshwater stage of the lifecycle because that is what occurs in their jurisdiction. What happens is that spawners return to the watershed in December to February, they build redds, lay eggs which hatch into alevins and emerge as fry in the spring. Then the juveniles grow in the freshwater habitat through summer, fall, and the following winter until they smolt in the spring and migrate to the ocean. After 18 months in the ocean they return to freshwater as spawners to repeat the cycle. But as I mentioned, it is the freshwater stage of the lifecycle that is of most interest to the park.

*So to model the freshwater stage of the lifecycle we used a system dynamics modeling framework which consists of stocks, which are things you can count, and flows, which describe the change in those stocks over time. Then we can also incorporate converters, which are factors that affect the rate of flow in any given time period. For example, a couple of stocks might be eggs that become juveniles through the flow of survival. And an example of a factor that might affect the rate of survival is high stream flow events.

*For the Olema model, we looked at it in a slightly more complicated way. We found it easier to describe the factors affecting fish by looking at how those factors increased mortality rather than how they decreased survival. So we modeled survival as what is left over after the mortality factors have reduced the stock. These cloud symbols represent stocks we are no longer keeping track of. So once the eggs have died, they are gone from the model.

*Looking at the Olema model more completely, it consists of four main stocks: eggs, juveniles at the beginning of the summer (BoS), juveniles at the end of the summer (EoS) and smolts, with survival occurring between each pair of stocks and mortality diminishing each stock.

*The model runs on a weekly time step and for each section of the model there are mortality factors and inputs. In the first part of the model, eggs to juveniles-beginning-of-summer, we have baseline mortality, which accounts for all of the sources of mortality that we are not specifically keeping track of; scouring stream flow events, which are those stream flows that disrupt the redds; and what we are calling fry stress stream flow events, which are stream flows that are high enough that the fry are forced to put all of their energy into swimming against the flow to avoid being washed out rather than being able to feed. The inputs to this part of the model are the number of eggs and weekly high stream flow levels.

During the juvenile phase of the model, juveniles-beginning-of-summer to juveniles-end-of-summer, we once again have baseline mortality; a juvenile density effect, which accounts for competition among fish; summer low flow, which can decrease dissolved oxygen and/or increase the vulnerability of fish to predation; and high stream temperature. Inputs are weekly low flow values and weekly average air temperature, which is a surrogate for water temperature.

In the winter-second spring part of the model, between juveniles-end-of-summer until they become smolts, we once again have a baseline mortality factor, a density effect, as well as high stream flow and poor habitat. The inputs to this phase of the model are weekly high stream flow and a habitat index. Now let’s go to the model itself.

Orientation to Stella®

*So we’ll switch to the Stella® software. This is what the model looks like in Stella®.

First, let me orient you to the display. Notice that up the side of the screen we have some tabs. At the top, we have an interface view. I’ll come back to this in more detail, but this is a place where you can run the model and also easily experiment with it by changing the parameters between each run. Next we have the map tab, which shows a simplified diagram of the model. You can see the same elements that I was describing earlier: boxes for stocks, arrows with valves for flows, circles for converters, and clouds for stocks that disappear from the model. You can see the same four stocks that I described earlier in the boxes across the top (eggs, juvenile beginning of summer, juveniles end of summer, and smolts), the survival flows, the mortality flows; and the rest of this just implements all of the factors that I talked about. We have a few additional stocks down here that are basically counters of stream flow events.

Next is the model tab, which describes the nuts and bolts of the model in more detail. We’ll come back here shortly. Finally, under the equation tab you can look at all of the equations that run the model.

Let’s go back to the Model tab. If we look inside some of these converters, for example fry flow event threshold, you can see that there is a number, 200, and if you click on the ‘Documentation’ tab you can see the documentation that explains what units the number represents and the source of the number. So you can see that this number was chosen based on expert knowledge.

Now let’s look at mortality due to scour events over here. Once again we have a number. This time the number is based on data and the description of how it was derived is also found within the documentation.

Now if we look at mortality due to stream temperature, this time we have an equation. What we have done here is to predict stream temperature from air temperature because the data record for stream temperature is much shorter than the record for air temperature. So here, average weekly stream temperature is this function of average weekly air temperature.

This equation says that if the predicted stream temperature is greater than a stream temperature threshold that is thought to be detrimental to fish, then apply the fish mortality factor, else do not apply anything. So you can see that there can be all sorts of things inside of these converters: primarily numbers from various sources, and equations.

Also note that we have these little symbols in some of the converters. They each represent a slider on the interface, so they each provide an opportunity to change the numbers every time you run the model. I’m going to talk more about this later, but that is what they signify.

Also, some of these converters have graph symbols, and that just indicates that these contain graphical data. (open graph)

Now, before we run the model, let me show you the input to the model, which is in an excel spreadsheet, and looks like this.

Model Input File

*In this spreadsheet, we have a tab for every year for which we have data. And each tab has an initial eggs value, the week during which spawning began, the week when the last redd was observed to be built, a habitat value, which is basically an index describing habitat quality, and environmental variables. So we have the weeks down this side and I’ve highlighted in blue the weeks between the beginning of December and the end of May, which represent the first section of the model. And for this section we have values for spring high stream flow on a weekly basis.

In the next section of the model we have summer, weeks 27 to 46, with summer low stream flow and average air temperature. And then from the middle of October to the end of the model in March, we have high stream flow again. The purple signifies that these are estimated values, which we had to determine from other sources because they were missing values in the Olema Creek data set.

Running the Model

*Now, back to the model. You can run the model from several tabs, but let’s use the interface tab. In order to run the model, we have to first import the data I just showed you. Go to the Edit tab, click on ‘Import Data’. I recommend that you just do it one time rather than establishing persistent links. You browse to the place where you have the input file, open, and then choose the year. Open the drop down menu for ‘Worksheet Name’ and you can see that all of the years are available here. We’ll just go ahead and use the first one. Be sure that the data orientation is this, where you have the headings across the top and values down the columns. Click ‘OK’. You get a dialog box telling you that the data have been successfully imported and then you can run the model. Click ‘OK’. Go to the Run tab and click ‘Run’. Then you can watch the model run.

Now let’s look at the table. This table begins at the beginning of the time steps and runs through all of the weeks of the model. You can see that all of the mortality from the first part of the model is applied in one step so that beginning with nearly 52,000 eggs you end up with about 12,000 juveniles at beginning of summer. That number declines until the end of summer when the remaining fish are transferred to the next stock and then all of the final mortality is applied at the end of the time steps so you end up with about 3300 smolts.

If you want to include other values in the tables, double-click on the table and add any other value to the table. If you want to remove a value, you just do the reverse.

If we look at the graph, we see that it is set up with the same values that are in the table. Notice that each has its own scale. So eggs are on a scale from 0 to 60,000, while juveniles beginning of summer are on a scale from 0 to 20,000. This is done so you can actually see the relatively small numbers towards the end of the run. The scale automatically adjusts for each model run.

If you want to modify the graph, double-click on the graph. You can use the same steps to add and remove variables as you did on the tables. You can also change the scales and make other modifications, but I am not going to go into those features.

Next, you can run through all of the years in the same way, or you can use the interface to play with the values and see how changes in some of the parameters might affect the outcome of the model. One way to do that is to simply take ‘base_mortality_factor_spring’, for example. Let’s say you want to see what happens if ‘base_mortality_factor_spring’ is higher because you suspect there is disease in the system. Change the value and re-run the model. Once you’ve done that, if you want to go back to the default value, click the ‘U’ button for undo. Also in this view, if you click on the question mark you’ll see that you have access to all of the documentation that is available in the model view.

Also, if you want to change any of the graphical input data, for example the flow regime for any model run to perhaps simulate the effects of climate change, you can go into this graph by double-clicking on it. Then you can simply click above or below the original line to change the graph, and then re-run the model.

I also want to show you the Sensi-Specs feature, which allows you to do a sensitivity analysis. So we’ll look at that in more detail. You go to the Run tab, click on ‘Sensi-Specs’ and pick a value for which you want to look at the sensitivity of the model. Let’s take ‘base-mortality-wint-spr2’ and make that the selected value, highlight it, then enter the desired number of runs. We’ll stick with ‘3’. Pick a beginning and ending number, let’s use .1 and .3 to bracket our default value of .2, click on ‘Set’. It will distribute those values evenly over the number of runs that you requested because ‘incremental’ is selected, sensitivity is now on, click ‘OK’.

Now let’s go to the graph and set it up to display the results. Double click on the graph. We want a ‘Comparative’ graph. Probably the most interesting number is the number of smolts, so we’ll make it our selected variable. Because smolts come out at the end of the model run, we’ll just display the last steps. Just stay on page 1 of the graph and click ‘OK’.

Next, let’s set up the table. Double click on the table. Again, let’s look at smolts, add that to the table, we want a ‘Comparative” table, we’re on page 1, click ‘OK’. Now we’ll run the model. Go to the Run tab. This time there’s an S in front of ‘Run’, indicating that you’re running Sensi-Specs, and run the model. You will see results from 3 runs. Now you have the graphical representation of the differences among the runs and you can also look at the table to easily see the actual values. Now you have a sense of how sensitive the model is to changes in ‘base-mortality-wint-spr2’. To clear the graphs and tables, click on the dynamite symbol. Please remember that each year of data has different numbers of eggs and environmental conditions so sensitivity to various factors will vary with year.

So with this tutorial I’ve tried to give you enough tools to experiment with the model we’ve developed and we hope you enjoy doing so.


In conclusion, I would like to thank the San Francisco Bay Area Network, and especially Michael Reichmuth and Darren Fong, for helping design the model and populate the relationships. Not only did they and others provide data for this analysis, they also provided expert knowledge and great discussions. We would also like to thank the USGS Status and Trends and Land Change Science programs for funding us to explore ways to synthesize Vital Signs data.

Finally, the full documentation of the model, including a detailed description and rationale can be found at this website.


Title: USGS-NPS Vital Signs coho-stream synthesis model


Introduction and tutorial on using the system dynamics model (finalized Oct 2012) to explore ecosystem parameters affecting coho salmon viability in Olema Creek Pt. Reyes National Seashore, CA

Location: CA, Olema Creek Pt. Reyes National Seashore, USA

Date Taken: 11/1/2012

Length: 19:49

Video Producer: Andrea Woodward , U.S. Geological Survey

Note: This video has been released into the public domain by the U.S. Geological Survey for use in its entirety. Some videos may contain pieces of copyrighted material. If you wish to use a portion of the video for any purpose, other than for resharing/reposting the video in its entirety, please contact the Video Producer/Videographer listed with this video. Please refer to the USGS Copyright section for how to credit this video.


For more information go to: Vital Signs of Salmon Streams: North Coastal California National Park Units on the USGS Western Ecological Research Center website

File Details:

Suggest an update to the information/tags?

Fish (Set) RSS Media RSS USGS Bloater Prey Fish Stocking into Lake Ontario (Fall 2015) USGS Bottom Trawl Sampling on Lake Erie
In: Biology collection

Tags: ClimateChange Coho DecisionSupport DynamicModel DynamicSystemsModel Ecosystem EcosystemModel FutureScenarios NPS PtReyes Riparian Salmon Stella Stream SystemDynamicsModel VitalSigns


Browse More: Video Collections | Video Sets

* DOI and USGS link and privacy policies apply.


Accessibility FOIA Privacy Policies and Notices

Take Pride in America logo logo U.S. Department of the Interior | U.S. Geological Survey
Page Contact Information: Image Gallery Webmaster
Page Last Modified: Friday, March 20, 2015