Nonpoint Sources in Tillamook Bay

Center for Research in Water Resources

The University of Texas at Austin

Prepared by: Patrice Melancon and David R. Maidment
pmelancon@mail.utexas.edu
25 Sep 98

Table of Contents

    1. Getting Acquainted with the Basin
    2. Annual Precipitation in the Basin
    3. Create a Runoff Grid
    4. Connecting the Rivers and Bay Segments
    5. Linking Land Use to Event Mean Concentration (EMC) of Pollutants
    6. Estimating Annual Loadings
    7. Cleaning Up

Goals of the Exercise

This exercise is based on an exercise written for the Corpus Christi Bay National Estuary Project by Ann Quenzer.  Tillamook Bay is also part of the EPA's National Estuary Program.  This exercise has taken the Corpus Christi Bay framework and utilized data for Tillamook Bay to calculate annual loadings of fecal coliforms and suspended sediment.

The purpose of this exercise is to show how Arcview 3.0a with Spatial Analyst (v 1.1)  and the Hydrology Extensions can be used to provide estimates of nonpoint source pollutant loads to a receiving body of water. For this exercise, the receiving water is Tillamook Bay on the northern coast of Oregon.  The Miami, Kilchis, Wilson, Trask, and Tillamook are the five major rivers that drain into Tillamook Bay.

You will use a coverage of land uses in the Tillamook Bay watershed and associate Event Mean Concentration (EMC) values of various pollutant constituents with those land uses. Then, for selected pollutants, you will create an EMC grid and multiply it by a grid of average annual total flow in the basin. The result will be the annual loading of the constituent to each grid cell in the basin, i.e. Load = Flow * Concentration, or L (Mass/Time) = Q (Volume/Time) * C (Mass/Volume).

Finally, you'll perform a flow accumulation on the cell-based loads to determine average annual loads to the rivers and the bay.  You will also explore how those loads change as you follow a river from it's headwaters to the mouth to the bay.

Computer and Data Requirements

This exercise makes use of ArcView 3.0a using the Spatial Analyst and the Hydrology Extensions.  This exercise can be completed on the PC or the Alpha Workstations.

If you will be working on a PC in the LRC, the files are located in /class/maidment/giswr/tbay, you will need to:
 - Copy the .apr and .avl files to your working directory (I suggest you use the c:\temp)
- Add the files from the /class directory to the project as you are requested to do so.  It is not necessary to copy them from the /class directory.

All of the data needed for this exercise is also available via anonymous ftp from ftp.crwr.utexas.edu in /pub/gisclass/tbay in the file tbay.zipInstructions on how to use anonymous ftp. If you use this approach to getting the files, you will need to:
- unzip the tbay.zip file.
 - Import the .e00 files using Arc/Info or using ArcView.  For ArcView the Import function is accessed from the Start Menu outside of ArcView and the function is called Import71
 - Once you import all the files, delete the .e00 files - they are file space hogs!

Be sure to get or import all of the following files:

Baymodel (polygon coverage of bay segments) - you will need to import this one to your working directory for LRC work!  Don't use the one in the class folder.
Bayarc (arc coverage of bay segments)
Bdemfill (grid of the burned in DEM that has been filled with the Hydrology/Fill function)
Tbaylu (coverage of land use in the Tillamook Bay watershed) - you will need to import this one to your working directory for LRC work!  Don't use the one in the class folder.

Outfalls (point coverage of STP outfall locations)

Tbaylugr (grid representation of land use)
River.shp (shapefile of the 5 major rivers) ** there are 3 files that you need - .shx, .shp, and .dbf
Precip (grid of precipitation)

stpfcgrid  (grid of sewage treatment plant outfall loads)

nonpoint.apr (the project file for the exercise)
landuse.avl (legend editor color scheme for land use data)
This exercise is rather memory intensive.  You can use the c:\temp directory by creating a new folder under it for your work. Create a subdirectory under c:\temp called tbayex.

Assignment Procedure

Start ArcView and open the project nonpoint.apr. The first thing that you need to do is set the work directory for the project.  Go to the project window and select Project/Properties. In the box called Work Directory, set the path to c:\temp\tbayex\.  This is very important so that the grids/coverages that you will be creating will be saved in the right place.  Click on File/Extensions and check that the Spatial Analyst and Hydrologic Modeling are turned on.  Also, you should save the .apr file to your local working directory now (after setting the work directory), and work from there throughout the exercise.  You may want to periodically save the project as you work just in case ArcView crashes; that way you won't have to start all over.  Also, did you remember to import the baymodel and tbaylu coverages?  These have to be imported to your working directory because the scripts actually edit the attribute table.

1. Getting Acquainted with the Basin DEM

Go to the Project Window and Open View 1.  Add the Bdemfill grid to the view by clicking on , change the Data Source Type to Grid Data Source, highlight bdemfill, and click OK. Once the theme has been added, check the   box next to the theme to view the DEM of the area. The Bdemfill grid is a specially modified DEM of the region that has the land surface cells not on the stream raised by 2000m from their original elevation so that the cells on the stream will be clearly defined and coincident with the mapped streams of the Tillamook Bay basin.  This has the effect of "burning in" the stream paths into the DEM.  In this case, the stream paths have included the bay segments in the burn in process.  Refer to the project report on Modeling the Hydrology of Tillamook Bay for more detail.

At any time in the exercise you may hide the legend of any theme by making the theme active and going to Theme/Hide/Show Legend.

Take a look at the DEM. Zoom in to the area around the bay on the center left region of the grid.  Let's take a look at some of the cell elevations within the grid.  Make the Bdemfill theme active by clicking on its display in the Legend bar of the View window. Click on the identify tool .

Go to the view and click on some points on the grid.  Remember that most of the cell elevations have been artificially raised as part of the burning in process.  These values are land surface elevations in feet above mean sea level.


 
Let's take a look at the properties of this grid. With the grid bdemfill theme active, choose Theme/Properties. Make note of the following: grid cell-size, number of rows and number of columns. The parameters of this projection are defined by the Oregon Lambert projection; units are feet. For further details about the parameters of this projection, see http://osu.orst.edu/dept/tbaynep/maps.html

To Be Turned In: What is the cell size of the grid? How many rows and columns does the grid have? What is the total number of cells in this grid? What land surface area is covered by this grid?

2. Annual Precipitation in the Basin

Tillamook Bay is located on the coast of Oregon in the rainy Pacific Northwest.  The basin has quite a lot of mountainous land.  The basin averages between 90 inches/yr of rain in the flat, lowlands and upwards of 150 inches/yr of rain in the forested areas at higher elevations.  The USDA Natural Resources Conservation Service and Oregon State University are publishing annual and monthly precipitation grids of the United States, developed using an interpolation process called PRISM, and verified by consultation with State climatologists. The grid is an annual long term average of precipitation and is based on data from 1961-1990.  The original precipitation data are presented in mm/yr.  The data presented in this exercise have been converted to in/yr.  In this exercise, you will use the portion of this annual precipitation grid for the Tillamook Bay basin.

Using the  button, add the grid precip (remember to change to grid data source).  When the theme shows up in the legend of the view, double click on the precip symbol to bring up the Legend Editor window. In the Legend Editor, change the color scheme to get a ramped effect. Click on the arrow next to the Color Ramps box, scroll down, and select the Precipitation color scheme (you may want to make the NoData cells transparent). When you are finished, select in the Legend Editor window and then close the Legend Editor. Finally, select  for the precip theme in the View Legend. You should be able to easily see the distribution of average precipitation in the Tillamook Bay Basin.


 

Save your project so that if ArcView crashes, you won't have to recreate everything.

Use the identify tool  to check out some values of precipitation in the basin.  Note that the units of these values are in in/yr.  With the precip theme highlighted, use Theme/Properties to check out cell size, number of cells, etc.  Make a histogram of the precipitation using the histogram button  in the view window with the precip theme highlighted.

Determine the mean precipitation over the basin (in.yr).  You will need to convert the grids from floating point into integer values.  Do this by using the Analysis/Map Calculator function and with the slider bar in the upper right corner set to Arithmetic, you'll see a button  Int show up, which if pressed gives the integer value of the grid e.g. ([Precip].int).  In the attribute table of this grid, you have two columns, Value and Count.  To determine the mean precipitation you need to create a new field (Use Table/Edit/Add Field) which is the product (Use Field/Calculate) of the values in these two columns, find the Sum of this product using the Field/Statistics function, and divide the result by the Sum of the values in the Count field, i.e. Mean = (Sum (Value * Count) / Sum (Count)).

To be turned in:  What is the range of precipitation across the basin in in/yr?  What is the basin mean precipitation (in/yr)?  What are the corresponding values in mm/yr?  What grid cell size is used?  Show the histogram of the basin precipitation.

3. Create the Surface Runoff and Baseflow Grids

Mathematical relationships have been determined between average precipitation and baseflow and surface runoff in the basin.  These relationships are based on a calculated longterm average precipitation  grid, daily rainfall data at the Tillamook 1W raingage (near the city of Tillamook), and daily flow data from the Wilson River USGS flow gage which is located up from the bay in the forested area.  For details on how these relationships were derived, please see the report "Modeling the Hydrology of Tillamook Bay."

The rainfall/discharge relationships are:

Q(r) = 0.3763(P) – 15.478 For Surface Runoff (in/yr)

Q(b) = 0.5188(P) + 1.857 For Baseflow (in/yr)

Q = Q(r) + Q(b)

Where Q = total runoff (in/yr) and P = average precipitation (in/yr)

An Avenue script has been written to calculate the two components of streamflow and convert them to units of cubic feet/yr for the Tillamook Bay Basin. The script inserts the precip grid into the rainfall/discharge equations to calculate three runoff grids, one for surface runoff, one for baseflow, and one for total streamflow.  For this exercise, the streamflow grid is not needed, so it is not saved or displayed in the View window.  This script looks at a grid of the land use and checks the value of that grid to determine which parcels of land are water.  For areas that are water, there is no baseflow component, so Q(b) is set to zero, and all of the precipitation is transformed into surface runoff, so Q(r) = P.  So, before we can run the script, we need to add in the grid of the land use for the basin.  Using the  button, add the tbaylugr grid (remember to change to grid data source).  This grid was created from a larger land use/land cover coverage that can be downloaded from an EPA website or a USGS website.  This is discussed in more detail in Section 5 of this exercise.

There is a pre-prepared color scheme that was developed for land use that we will use for this grid.  Double click on the tbaylugr symbol to bring up the Legend Editor, click on load, and select landuse.avl.  A dialog box will pop up and ask for a Field - select "value."  Now select the  button to turn on the tbaylugr theme in your view.  Here is what the grid should look like:

You are now going to calculate the flow grids. Before you do this, go to Analysis/Properties and set the Analysis Extent to "Same as precip" and Analysis Cell Size to "Same As precip." Go to the drop down menu called NPS Analysis and select Flow Grids. You will be asked to select the theme within the view which will be used as the precipitation input (precip) and the land use grid (tbaylugr).     The grids are calculated, saved in the c:\temp\tbayex folder and added to the view as "baseflow" and "runoff."  Both grids will be displayed in the view.  Feel free the change the color scheme using the Legend Editor.  Here is what the surface runoff grid should look like:

 

Make sure that the runoff theme is active.  Use the identify tool  to investigate values of surface runoff throughout the basin. Use the histogram tool  to prepare a histogram of both the runoff and the baseflow.  Determine the mean runoff and baseflow from the basin in the same manner as you determined the mean precipitation earlier.

To Be Turned In:  What is the mean value and the range of the runoff from  the basin in (cf/yr)?  What are the corresponding values in in/yr (Cell size = 100ft)?  What are the mean value and range of the baseflow in in/yr?  What percentage of the basin precipitation is discharged as baseflow and what percentage as runoff?  Prepare histograms of both the surface runoff and baseflow.

4.  Connecting the Rivers and the Bay

In a later part of this exercise, we will be determining pollutant loads and conducting weighted flow accumulations to collect these loads in the rivers and subsequently into the bay.  To be able to do this, we need to connect the rivers and the bay segments hydrologically in the model.  This is accomplished by altering the bdemfill grid.  This grid currently reflects the fact that the elevations of the land in the bay are below sea level, and thus lower than the surrounding land.  However, in order to model the accumulation of pollutants into the 5 different segments of the bay, we need to artificially create a large sink in each of the bay segments at the segment's centroid.  If we did not create these sinks, the flow would follow the naturally developed channels from the uppermost segment out to the ocean.  For this exercise, we will not look at flow within the bay or between bay segments; we will merely focus on what is delivered to each bay segment.

Add the bayarc theme and the baymodel (polygon) theme - Remember to add baymodel from your working directory.  Go to Analysis/Properties and check that the Analysis Extent and Cell Size are set to "Same as bdemfill."  Go to the NPS Analysis pull down menu and select "Connect Bay/Rivers."  Once the program is running, it will ask you to specify the bay polygon theme, the bay arc theme, and the filled DEM.  It will also ask if you would like to save the temporary data sets.  Do not save these files - they are not needed and they take up a lot of file space.  This step takes a while to run, so please be patient.  Get up and stretch your legs for a minute, say hello to your neighbor!  A new grid is calculated called connectsink.

Next a flow direction must be computed on the connectsink grid.  Make the connectsink theme active.  Go to Analysis/Properties and check that the Analysis Extent and Cell Size are set to "Same as bdemfill."  Go to the NPS Analysis pull down menu and select "Flow Direction."  This will compute the flow direction grid that will be used later on in the exercise.  This flow direction grid is a temporary grid, so if you want to keep it, use Theme/Save Dataset and give it a name (maybe flowdir).   Each bay segment has a centroid identified by the black dot.  The flow directions are set so that the water and pollutant loads, once they enter a bay segment, migrate to the centroid where they can be measured easily.

The segments of Tillamook Bay shown in this exercise were set in order to manage the oyster fisheries in the bay.  In the most inland segments, no oyster fishing is permitted because the runoff waters into the bay are too polluted by bacteria from dairy waste and other runoff.  In the segments nearer the ocean, oyster fishing is permitted except when the Tillamook rivers are in flood, in which case oyster fishing is prohibited.  One of the objectives of the research on which this exercise is based is to examine more precisely how large the bacteria loads are and how they can be reduced by better waste management.

5.  Linking Land Use to Expected Mean Concentration (EMC) of Pollutants

Now you are going to associate Event Mean Concentration (EMC) values of various pollutant constituents to the land use types. For this exercise, we will focus on fecal coliform bacteria.  This method of determining pollutant concentrations based on the land use type is fairly common in nopoint source pollution control.  The expected levels of bacteria for various land use types have been taken from various literature sources.  The  fecal coliform concentration associated with diary operations (land use # 23 - CAFO) has been based on information found in a 1983 ASAE publication on Bacterial Pollution (Crane, et al, 1983).

The tbaylu land use coverage uses the Anderson Land Use Code classification system, in which major land use types are broken out into 9 categories.  Seven of these 9 categories show up in the Tillamook Bay land use coverage.  The tbaylu coverage was created from a larger land use/land cover coverage.  Files for the state of Oregon based on 1:250,000 map sheet names can be downloaded from the USGS Land Use/Land Cover site. The Vancouver dataset is the one used in this study.  These files are in UTM coordinates and have been converted to the Oregon Lambert Projection.  Land Use data are also available from the EPA Geographic Information Retrieval and Analysis System (GIRAS) ftp site:  ftp.epa.gov:/pub/EPAGIRAS/wgiras.  You can access this site using any FTP program.  The file ‘lva45122.e00.gz’ is the quad sheet that contains Tillamook County.   The file was in Albers projection and was re-projected to the Oregon Lambert projection.  The larger coverage was converted to a grid and clipped down to the extent of the study area.  The clipped land use/land cover coverage was modified to incorporate two non-standard land use classifications (rural residential and rural industrial) that the TBNEP office is using.

Add in the tbaylu coverage (remember to add from your working directory) by using the  button (remember to set the data source type to 'feature data source').  Again, use the pre-developed color scheme for the landuse data. Double click on the tbaylu symbol to bring up the Legend Editor, click on load, and select landuse.avl. When it asks for Field, select "grid code."  Click on the   button and then close the Legend Editor.  Now select  for the tbaylu theme in your view and note where all the different land use categories in the basin are.  Open the attribute table using the table button .  Notice there are no concentration values here yet.

A script has been written to allow the user to either accept default concentration values or update them to reflect more current data.  The EMC values for fecal coliform are in units of fc/100ml.  Extra fields are written to the attribute table of the tbaylu coverage and populated based on the land use code (grid code).  Go to the NPS Analysis pull down menu and select "Set EMCs."  The script will ask you to select the land use coverage - select tbaylu.  You may also be prompted to add fields for baseflow and runoff fecal coliform concentrations.  If you are prompted, select "yes" in both cases.  Use "Gridcode" as the attribute field which indicates land use type.  Once the script has finished running, it will pull up a table that you can examine to see the EMC values.

Here are the EMC values for Fecal Coliform in number of bacteria  per 100ml:
 
 
Land Use Type Baseflow  Runoff
11-17 Urban  100 2000
18 Rural Residential 100 8000
19 Rural Industrial 100 10000
21,22,24 Various Agricultural land 100 1500
23 CAFO (Confined Animal Feeding Operation) 1000 25000
31- 43 Forest and range 5 20
51 - 62 Water, wetlands 0 0
72-75 Barren 5 20
 
Notice that the numbers are higher for runoff than for baseflow and that by far the highest numbers are for runoff from Confined Animal Feeding Operations (CAFOs).  These values have been taken from the literature and are concentration values.  Now we'll multiply them by the volume of water flow to get pollutant loads.

6.Estimating Annual Loadings

We will now use the land use coverage to create per cell load grids as well as accumulated grids of fecal coliform bacteria in baseflow and surface runoff.  The script that does this also incorporates a point source grid of Sewage Treatment Plant outfalls.  So, you will need to use the  button to add in the stpfcgrid grid theme.  When you do this, you will basically see a large square that is all one color with a value of zero.  This is because the each of the 6 outfall loads have been assigned to one individual grid cell with all of the rest being assigned a value of zero.  This stp grid is added to the runoff load.  If you add in the outfalls coverage, you can see where to zoom in to see the individual grid cells that actually have a value other than zero.  Note that these values are *10^7 fc/yr.  Yes, that is a quirky unit to use, but that's what was needed to be able to convert the point coverage into a grid.  The script that is invoked takes the units into account, so you don't have to worry about that.

Be sure that you still have the flow direction grid, baseflowcf grid, and runoffcf grids in the view.  Go to Analysis/Properties and check that the Analysis Extent and Cell Size are set to "Same as bdemfill."   Then go to the NPS Analysis pull down menu and select "Bacti Grid."  There will be a series of dialog boxes to fill in - they are self explanatory.  Remember that the average flow grids are the per cell grids (baseflowcf and runoffcf) that were created in the Flow Grids step.  The bactigrid.ave script takes the land use coverage and creates two grids from the attribute table - one is a grid that has the baseflow EMC numbers as the cell value; the other grid has the runoff EMC numbers as the cell value.  These grids are multiplied by the baseflowcf and runoffcf flow grids, respectively, employing a conversion factor of 283 to get load grids in fecal coliform per year (fc/yr).  The contribution from the STPs is added in to the runoff load grid.  These per cell load grids are named bfbactigrid (for baseflow) and robactigrid (for runoff).

In effect, for each cell, the load is computed as

Load = Runoff * Concentration For bacteria loads, concentration is in fc/100ml and flow is in cf/yr. Once these grids are calculated, the user is prompted for whether or not flow accumulations should be calculated.  Go ahead and select yes.  These flow accumulations are actually weighted flow accumulations.  Rather than just counting the number of cells upstream of a particular point, a weighted flow accumulation will add up the values in the designated weight grid for all cells upstream of any given point.  The accumulated load grids are named bfaccbgrid (for baseflow) and roaccbgrid (for runoff).  Both grids will be added to the view.  If you had selected not to accomplish flow accumulations, the per cell load grids would have been added to the view.   Again, this step takes a little while to run, so it's time for another leg stretch.

The accumulated grid of bacteria associated with surface runoff should look like this:

This is not a very exciting graphic to look at, but if you will notice the darker areas that indicate the larger loads correspond to the locations of the rivers.

To Be Turned In:  Do a units analysis for the load calculation to 'prove' that the conversion factor of 283 leads to the correct units for the bacteria loading (fc/yr).
 
Let's take a look at predicted concentrations and modeled loads to the bay segments.  We'll look at fecal coliform concentrations contributed from runoff along the length of the Wilson River.  Before we do that, we need to calculate a grid of predicted concentrations associated with runoff loads.  And, we need an accumulated runoff grid to do this.  We'll be using the NPS Analysis/Accumulated Flow function.  The script that is invoked was written to do weighted flow accumulations on both the runoff and baseflow grids.  However, in the interest of time, the commands applying to baseflow have been commented out, so that the accumulation will be done for the runoff grid only.  So, check your Analysis/Properties to make sure that things are set to "Same as bdemfill."  Be sure that you have the flow direction grid and the runoffcf grid in the view.  Then go to the pull down menu and select Accumulated Flow.  The accumulated runoff will be saved as accrunoff.  Next, we will take the accumulated runoff bacteria grid and the accumulated runoff (flow) grids and divide the two with an appropriate conversion factor to come up with a grid of predicted concentrations in fc/100ml for the entire basin.  Go to the pull down menu and select Concentration Grid.  The dialog boxes are self-explanatory.  The resultant grid is saved as runoffconc.

Now we will look at how the concentration varies along the length of the Wilson River.  Using the  button, add in the rivers.shp shapefile.  Use the identify tool  to determine which river is the Wilson River.  Then using the select tool , select the Wilson River line segment.  Make sure that both river.shp and the runoffconc themes are active.  Go to the NPS Analysis pull down menu and select "River Profile."  A dialog box will give you the total length in units (which are actually feet in our case) and ask you for the number of segments that you would like the length divided into for the analysis.  You can divide it into as many segments as you feel is appropriate to get a feel for how the concentration changes.  Hit OK and give the file a name (preferably somewhere in your working directory, and one that makes sense to you) to save to.  The chart that comes up will be a graphical representation of loads as you travel from the headwaters of the Wilson River (at the zero point on the graph) down to the mouth.  This 'canned' graphic leaves a lot to be desired, so take the .dbf file that you saved and open it in excel and create a nice graphic of how concentration changes along the length of the river.  If you look at the headings of the columns in excel, you will see that the profile script named the value of interest (in our case, the accumulated bacteria) "elevation" by default.  You should change this header to something more appropriate in excel.

Let's also explore the roaccbgrid at a couple of key points along the Wilson River.  Using the landuse coverage and the rivers shapefile as a guide, query the roaccbgrid at the point where the landuse changes from forest to agricultural.  Be sure that you are zoomed in enough that you can click on a point that is actually on the river (if you click off to the side, the value will be grossly lower than it should be).  This value will substantially reflect the contribution from the forest land use since this point is still upstream of the agricultural and CAFO land.  Also, pick a point down toward the bay that would represent the mouth of the river -  this point should be somewhat upstream of the 'fingers' that lead from the river into the bay.  This value will represent the additional load from the ag/CAFO land use.  Make note of these two values (in fc/yr).

The last thing that we will do is to examine the FC load from surface runoff that is delivered to each segment of the bay.  Earlier in the exercise, we connected the rivers and the bay segments by dropping a large sink at each of the bay segment centroids.  At the actual centroid point, a nodata cell is created.  So, we can't actually query the centroid for a value.  All of the flow to the centroids goes to one of four cells (immediately and directly above, below, left, and right) before going to the centroid.  So, a script was written to query each of these four cells and add up the values to determine the total value.  The baymodel polygon theme attribute table is edited to add a field to which the results are written.  Go to the NPS Analysis pull down menu and select Pick Bay Loads.  When you are asked for a 'Value Grid' select the roaccbgrid since we are concerned with accumulated bacteria load from runoff.  You may be prompted to add a field for accumulated fecal coliform - answer 'yes.'  Once the script has finished running, you can open up the baymodel attribute table and see what the accumulated loads are.  Pretty big numbers, aren't they?!?!  This should make it quite evident that some controls need to be implemented to reduce the loads going to the bay.

To Be Turned In:  An excel graph showing the Wilson River profile of precicted fecal coliform concentration associated with surface runoff.  Make a comparison of the accumulated load at the forest/ag interface versus at the mouth.  What can you say about relative contributions from forest versus Ag/CAFO lands?  Provide a table showing the accumulated bacteria loads to each of the 5 bay segments.
 

7. Cleaning Up

If you want to, I would suggest you keep the .apr file because it has some useful scripts that you may want to use later.  If you want to save the exercise as it is with all of the view, grids, etc., I would suggest that you name it something else so that you have the original exercise intact.

Other than that, you can pretty much delete all of the files/folders that are in your working directory.

Ok, you're done! Hope you enjoyed it!


References:

[1]  Crane, S.R., Moore, J.A., Grismer, M.E., and Miner, J.R.  1983.  "Bacterial Pollution from Agricultural Sources:  A Review."  Transactions of the ASAE.  pp. 858-872.


Go to Patrice's Homepage.