Index: /DVD_images/DO_THIS_BEFORE_RELEASE.txt
===================================================================
--- /DVD_images/DO_THIS_BEFORE_RELEASE.txt	(revision 7205)
+++ /DVD_images/DO_THIS_BEFORE_RELEASE.txt	(revision 7205)
@@ -0,0 +1,4 @@
+. Use 'update_DVD_images.py' script to refresh data in jurisdictions.
+. Update the PDFs in the 'manuals' directory.
+. Delete all temporary/test files.
+. Test that all simulations actually start.
Index: /DVD_images/Jonos_README.txt
===================================================================
--- /DVD_images/Jonos_README.txt	(revision 7205)
+++ /DVD_images/Jonos_README.txt	(revision 7205)
@@ -0,0 +1,40 @@
+#PARAMETERS
+# For this model run the following parameters were set in the project.py file:
+
+tide = 1.0			# Tide height above mean sea level. Tide is modelled in ANUGA as a constant
+				# height above or below MSL.
+event_number = 51436    # Event number from probabilistic tsunami hazard map of Australia
+				# 1 in 10000 yr event from New Hebrides
+
+
+# ELEVATION DATA
+#The following elevation data sources were set in the project.py file:
+
+# Format for ascii grids: as produced in ArcGIS (e.g. using Conversion Tools - Raster to ASCII)
+# Must also include a projection file of the same name
+# Data must be projected in correct UTM zone
+ascii_grid_filenames = ['1a						# Listed without file extension
+                        '1b',
+                        '2b',
+                        '2a_3',
+                        '3b',
+                        '3a',
+                        '4a_2',
+                        '4b',
+                        'off1',
+                        'off2',
+                        'off3',
+                        'bbhd',
+                        'sd100031996_p',
+                        'sd100031996_p2',
+                        'sd100031996_p3',
+                        'sd100031996_p4']
+
+# Format for point is x,y,elevation (with header, projected coordinates)                    
+point_filenames = ['SD100031996_jgriffin_clip.csv',		# Listed with file extension
+                   'tomaga_offshore_AHD_MGA_1997.csv',
+                   'Batemans_BBHD_MGA_1995.csv',
+                   'moruya_AHD_MGA_2000.csv']
+
+# To include new data please prepare data in the same formats as those above. 
+# For further information on ANUGA file formats please see the ANUGA User Maunal section 6.1
Index: /DVD_images/README.txt
===================================================================
--- /DVD_images/README.txt	(revision 7205)
+++ /DVD_images/README.txt	(revision 7205)
@@ -0,0 +1,19 @@
+The jurisdiction directories here contain the data that will go
+onto the DVDs.
+
+For example, under the 'Hobart' subdirectory is the filesystem
+that will exist in the root directory of the created Hobart DVD.
+
+Other files/directories at the top level are used to build the
+four jurisdiction DVD directories:
+. BatemansBay
+. Gosford
+. GoldCoast
+. Hobart
+
+Use the 'update_DVD_images.py' program to refresh everything under
+the <jurisdiction> directory.
+
+If you edit anything in the jurisdiction directories (Hobart, etc),
+you WILL LOSE DATA, as everything in those directories comes from
+somewhere else.
Index: /DVD_images/extra_files/BatemansBay/README.txt
===================================================================
--- /DVD_images/extra_files/BatemansBay/README.txt	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/README.txt	(revision 7205)
@@ -0,0 +1,6 @@
+This disk contains the Geoscience Australia Tsunami Inundation Models
+for the BATEMANS BAY region.
+
+If this DVD does not autostart and display a browser page, open the
+file X:\index.htm in your browser, where 'X' is the drive letter of
+your DVD drive.
Index: /DVD_images/extra_files/BatemansBay/auxiliary_scripts.html
===================================================================
--- /DVD_images/extra_files/BatemansBay/auxiliary_scripts.html	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/auxiliary_scripts.html	(revision 7205)
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the BATEMANS BAY region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+
+  <a name="auxiliary scripts"<h2><b>Auxiliary Scripts</b></h2></a>
+  There are number of auxiliary scripts on this disk that you can use to extract information from the SWW files
+  produced by a simulation run.  These scripts are not meant to be the definitive answer on how to get information
+  from SWW files, but are offered as an example of one way to do it.
+  <p>
+  This page describes the scripts and shows how to use them.  Note that due to the ad-hoc nature of the scripts, 
+  you <b>must</b> modify these scripts before they can be used to extract information from any SWW files you
+  generate.
+
+  <a name="export_results_max.py scripts"<h3><b>export_results_max.py</b></h3></a>
+  The <font color="red">export_results_max.py</font> script can be used to create an ASC file that contains the maximum
+  of an ANUGA variable or expression for each point in a user-defined raster on the simulation region.
+  <p>
+  You must change certain values within the <font color="red">export_results_max.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Modify the <b>cellsize</b> value to set the size of the raster you require.  For example:
+<pre><font color="brown">    cellsize = 20		# raster cell size in metres</font></pre>
+
+    <li> Now set the timestep at which you want the raster generated.  Either set the actual timestep required or use 
+         <b>None</b> to indicate that you want the maximum values in the raster over all timesteps:
+<pre><font color="brown">    timestep = 1000
+    #timestep = None		# over all timesteps</font></pre>
+         <p>
+         Note that if you specify a particular timestep here you may not need to include all SWW files in the 
+         <b>time_dirs</b> list above.  For example, iy you wanted data from timestep 0 only then you would need
+         to include only the first SWW file in the list.
+
+    <li> If you want to clip the raster to one or more small regions then put the names of the regions of interest
+         into the <b>area</b> list:
+<pre><font color="brown">    area = ['Hobart', 'NW', 'South']</font></pre>
+         Note that the name strings you put into the <b>area</b> list must match the names used in the
+         <font color="red">project.py</font> file.  That is, if you use a name such as 'NW', then the
+         <font color="red">project.py</font> file must have lines like:
+<pre><font color="brown">    xminNW = 548000
+    xmaxNW = 561000
+    yminNW = 5250000
+    ymaxNW = 5258000</font></pre>
+         which set the maximum and minimum eastings and northings that define a rectangular region.
+         <p>
+         If you don't want to clip to a region of interest, then do this:
+<pre><font color="brown">    area = ['All']		# no region of interest</font></pre>
+
+    <li> Now you must decide which variable or expression values you want sampled on your raster.
+         Define a list <b>var</b> that contains strings defining the required variable/expression:
+<pre><font color="brown">    var = ['depth', 'speed']</font></pre>
+         Note that the strings you supply must be defined in the <b>var_equations</b> dictionary
+         prior to your definition of <b>var</b>:
+<pre><font color="brown">    var_equations = {'stage':     'stage',
+                     'momentum':  '(xmomentum**2 + ymomentum**2)**0.5',
+                     'depth':     'stage-elevation',
+                     'speed':     '(xmomentum**2 + ymomentum**2)**0.5/(stage-elevation+1.e-6)',
+                     'elevation': 'elevation' }</font></pre>
+         This dictionary maps your <b>var</b> strings to a variable or expression.
+  </ul>
+
+  <a name="get_runup.py"<h3><b>get_runup.py</b></h3></a>
+  The <font color="red">get_runup.py</font> script is used to get the maximum runup height in a specified region
+  or regions.
+  <p>
+  You must change certain values within the <font color="red">get_runup.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>images</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the regions within the simulation that you want the maximum runup for.
+  </ul>
+
+  <a name="get_timeseries.py"<h3><b>get_timeseries.py</b></h3></a>
+  The <font color="red">get_timeseries.py</font> script is used to get timeseries data for a selection of variable
+  data at one or more gauge points in a simulation.
+  <p>
+  You must change certain values within the <font color="red">get_timeseries.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>gauges</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the gauges within the simulation that you want the timeseries data for.
+  </ul>
+</body>
+</html>
Index: /DVD_images/extra_files/BatemansBay/index.html
===================================================================
--- /DVD_images/extra_files/BatemansBay/index.html	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/index.html	(revision 7205)
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the BATEMANS BAY region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+<!--
+  <ul class="navbar">
+    <li><a href="#introduction">Introduction</a>
+    <li><a href="#installing">Installing</a>
+    <li><a href="#simulating">Running</a>
+    <li><a href="#userslist">Mailing list</a>
+    <li><a href="#auxscripts">Auxiliary scripts</a>
+    <li><a href="#FAQ">Frequently Asked Questions</a>
+    <li><a href="#extra">Extra stuff</a>
+  </ul>
+-->
+
+  <a name="introduction"<h3><b>Introduction</b></h3></a>
+  The information on this DVD and the associated report is intended to assist emergency managers in developing preparation and
+  response plans that can be used during a tsunami threat or emergency.
+  <p>
+  The Attorney General's Department (AGD) has supported Geoscience Australia (GA) in developing a range of products to support
+  the understanding of tsunami hazard through the Australian Tsunami Warning System Project. The work reported here is intended
+  to further build the capacity of the Jurisdictions in developing inundation models for prioritised locations. 
+  <p>
+  While the associated report provides background, model results and interpretations, the DVD contains all data, scripts and
+  software necessary to reproduce and potentially augment the models underpinning the report. This will allow the Jurisdiction
+  to rerun the models with minor modifications or new elevation data as needed and also potentially replicate the methodology
+  to other locations if desired.  
+  <p>
+  The data provided on this DVD is:
+  <ul>
+    <li> The Professional Opinion Report 2009/XX entitled <i>Capacity Building for Tsunami Planning and Preparation: 
+         Inundation Models for Four East Coast Australian Communities</i>
+    <li> Elevation data used with the tsunami inundation model
+    <li> Input data for a range of tsunami events
+    <li> The Python scripts used to run the models
+  </ul>
+
+  <a name="requirements"<h3><b>Requirements</b></h3></a>
+
+  The tsunami inundation simulations are based on the Open Source software package called ANUGA.
+  For more information about ANUGA visit <a href="https://datamining.anu.edu.au/anuga">https://datamining.anu.edu.au/anuga</a>. 
+  <p>
+  ANUGA has been developed and tested under the Windows XP and Linux (Ubuntu, Mint and Red Hat) operating systems.  
+  ANUGA may also be installed on a Windows Vista system and Debian Linux, but these have not been extensively tested.
+  <p>
+  The ANUGA scripts on this DVD require a minimum of 3GB of memory and possibly more, if mesh resolutions are increased. For this reason
+  we recommend using 64 bit Ubuntu Linux as this operating system can use more than 3GB of memory, whereas Windows XP cannot.
+
+  <a name="installing"<h3><b>Installing ANUGA</b></h3></a>
+
+  You must install ANUGA according to the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  As the installation procedure comprises a number of steps we suggest that it is carried out by someone with a
+  basic understanding of how to install software packages on the operating system of choice. 
+
+  <a name="simulating"<h3><b>How to run a simulation</b></h3></a>
+
+  This is how a user should run a model from the 'Tsunami Inundation Models' DVDs.
+  We assume that you are using Windows and will give examples for that operating system.
+  The translation to Linux is left as an exercise for the student!
+  <p>
+  <hr align="left" width="100">
+  <p>
+  First, it is assumed you have installed the ANUGA software according to the
+  <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you must copy the entire contents of the DVD to a place in your filesystem. Let's assume
+  that you want to put the data into <b>C:\ANUGA</b>. You would do this in a Command Prompt window:
+  <table class="code"><tr><td>
+    C:<br>
+    cd \<br>
+    mkdir ANUGA<br>
+    xcopy /e X:\ ANUGA
+  </td></tr></table>
+  <p>
+  Of course, you could just drag all files on the DVD (X:\ is the assumed drive letter) to the desired target directory with Explorer.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Now you must create an environment variable <b>ANUGADATA</b> that points to the directory you just created:
+  <table class="code"><tr><td>
+    set ANUGADATA=C:\ANUGA
+  </td></tr></table>
+  <p>
+  Doing the above in a Command Prompt window is temporary - if you open another
+  window you will not have the ANUGADATA environment variable defined. To make
+  the variable permanent you must set it in the <b>Start|Settings|Control Panel|System</b>
+  tool (<b>Advanced</b> tab).  See the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>
+  if you don't know how to do this.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  At this point you should run the <font color="red">build_elevation.py</font>
+  script to convert the raw elevation data to a set of 'combined_elevation'
+  files ready to be used by the ANUGA system. It is possible that you have not
+  been given the elevation data on the DVD as it is too large. In that case you
+  cannot run the <font color="red">build_elevation.py</font> script and you
+  should skip to the next step.
+  <table class="code"><tr><td>
+    cd C:\ANUGA<br>
+    cd project<br>
+    python build_elevation.py
+  </td></tr></table>
+  <p>
+  When you get to the point of running the model with your own data, you must
+  run <font color="red">build_elevation.py</font> to recreate the combined elevation files every time
+  you change the elevation data.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you prepare and execute the model:
+  <table class="code"><tr><td>
+    python setup_model.py<br >
+    python run_model.py
+  </td></tr></table>
+  <p>
+  <hr align="left" width="100">
+  <p>
+  This should all run to completion, though it may take several days, depending on
+  the hardware used.
+  <p>
+  If you do get an error from <font color="red">setup_model.py</font>
+  or <font color="red">run_model.py</font> look for some explanation in the log
+  files, which you should find somewhere under <b>C:\ANUGA\data</b>. Just keep
+  drilling down from that point until you find a directory called <b>outputs</b>.
+  The latest directory in outputs should contain a file called screen_error.txt
+  with an explanation of the error at the end. 
+  <p>
+  Once the simulation has completed you may view the results using the ANUGA
+  viewer as described in the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a> 
+  and <a href="documents/anuga_user_manual.pdf">User Manual</a>, run the script
+  <font color="red">export_results_max.py</font> to generate rasters suitable
+  for GIS mapping, or write dedicated scripts extracting timeseries at selected
+  locations.
+  <p>
+  The input waves are all derived from events available in the Australian Tsunami
+  Hazard Map. As this dataset is very large, this DVD only contains the events
+  described in the report. If other events from the Hazard Map are obtained,
+  the script <font color="red">build_urs_boundary.py</font> has been designed
+  to prepare the associated input wave for ingestion into ANUGA.  This script
+  is documented in the <a href="documents/anuga_user_manual.pdf">User Manual</a>.
+  <p>
+  The ANUGA <a href="documents/anuga_user_manual.pdf">User Manual</a> describes
+  how to use the ANUGA system in general and provides some examples of its use.
+
+  <a name="userslist"<h3><b>How to join the ANUGA user's mailing list</b></h3></a>
+
+  One of the quickest ways to get your ANUGA questions answered is by asking them on the <b>ANUGA-user</b> mailing list.
+  You can subscribe to the list <a href="https://lists.sourceforge.net/lists/listinfo/anuga-user">here</a>
+  and can view the mailing list <a href="https://sourceforge.net/mailarchive/forum.php?forum_name=anuga-user">archives</a>.
+  <p>
+  It costs nothing to register and you can choose to have list mail sent to you as individual emails or have them batched
+  into a few emails per day.  You can unsubscribe at any time through the subscribe link above.
+
+  <a name="auxscripts"<h3><b>How to use the auxiliary scripts</b></h3></a>
+
+  On this disk there are a selection of auxiliary scripts that you can use to extract various pieces of information
+  from the generated SWW files.  The <a href="auxiliary_scripts.html">auxiliary scripts</a> page explains how to use the scripts.
+
+  <a name="FAQ"<h3><b>Frequently Asked Questions</b></h3></a>
+
+  There is a <b>Frequently Asked Questions</b> (FAQ) page at
+  <a href="https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions">https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions</a>.
+  Look in here and search the mailing list archives before asking questions on the ANUGA user's mailing list.
+  Someone may already have asked your question!
+  <p>
+  Note that you can edit the FAQ pages, so it is helpful if you can update the FAQ with your question and its answer if you feel
+  it would be helpful to others.
+</body>
+</html>
Index: /DVD_images/extra_files/BatemansBay/project/project.py
===================================================================
--- /DVD_images/extra_files/BatemansBay/project/project.py	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/project/project.py	(revision 7205)
@@ -0,0 +1,278 @@
+"""
+This file contains all your file and directory definitions 
+for elevation, meshes and outputs.
+"""
+
+import os
+from anuga.utilities.system_tools import get_user_name, get_host_name
+from time import localtime, strftime, gmtime
+from os.path import join, exists
+
+
+#-------------------------------------------------------------------------------
+# Directory setup
+#-------------------------------------------------------------------------------
+
+# this section needs to be updated to reflect the modelled community.
+# Note, the user needs to set up the directory system accordingly
+state = 'new_south_wales'
+scenario_name = 'batemans_bay'
+scenario_folder = 'batemans_bay_tsunami_scenario_2009'
+
+#-------------------------------------------------------------------------------
+# Initial Conditions
+#-------------------------------------------------------------------------------
+
+# Model specific parameters.
+# One or all can be changed each time the run_model script is executed
+tide = 0.0                # difference between MSL and HAT (1.0)
+
+# the event number or the mux file name
+##event_number = 58129  #1 in 200 yr Puyesgur
+##event_number = 58115    #1 in 500 yr Puysegur
+##event_number = 58226    #1 in 1000 yr Puysegur
+##event_number = 58284    #1 in 2000 yr Puysegur
+##event_number = 58286    #1 in 5000 yr Puysegur
+##event_number = 58346      #1 in 10000 yr Puysegur
+
+##event_number = 51077  #1 in 200 yr New Hebrides
+##event_number = 51378    #1 in 500 yr New Hebrides
+##event_number = 51347    #1 in 1000 yr New Hebrides
+##event_number = 51292    #1 in 2000 yr New Hebrides
+event_number = 51424    #1 in 5000 yr New Hebrides
+##event_number = 51204     #1 in 10000 yr New Hebrides
+
+######event_number = 58368    #1 in 100 000 yr Puysegur!!!
+######event_number = 51436    #1 in 100 000 yr New Hebrides!!!
+######event_number = 58272      #1 in 10000 yr Puysegur????
+######event_number = 51445     #1 in 10000 yr New Hebrides????
+
+alpha = 0.1             # smoothing parameter for mesh
+friction=0.01           # manning's friction coefficient
+starttime=0             # start time for simulation
+finaltime=60000         # final time for simulation
+
+setup = 'final'         # This can be one of three values
+                        #    trial - coarsest mesh, fast
+                        #    basic - coarse mesh
+                        #    final - fine mesh, slowest
+
+#-------------------------------------------------------------------------------
+# Output filename
+#
+# Your output filename should be unique between different runs on different data.
+# The list of items below will be used to create a file in your output directory.
+# Your user name and time+date will be automatically added.  For example,
+#     [setup, tide, event_number]
+# will result in a filename like
+#     20090212_091046_run_final_0_27283_rwilson
+#-------------------------------------------------------------------------------
+
+output_comment = [setup, tide, event_number]
+
+#-------------------------------------------------------------------------------
+# Input Data
+#-------------------------------------------------------------------------------
+
+# ELEVATION DATA
+# Used in build_elevation.py
+# Format for ascii grids, as produced in ArcGIS + a projection file
+ascii_grid_filenames = ['1a',# Topographic data
+                        '1b',
+                        '2b',
+                        '2a_3',
+                        '3b',
+                        '3a',
+                        '4a_2',
+                        '4b',
+                        'off1',
+                        'off2',
+                        'off3',
+                        'bbhd',
+                        'sd100031996_p',
+                        'sd100031996_p2',
+                        'sd100031996_p3',
+                        'sd100031996_p4']
+                    
+# Format for point is x,y,elevation (with header)
+point_filenames = ['SD100031996_jgriffin_clip.csv',
+                   'tomaga_offshore_AHD_MGA_1997.csv',
+                   'Batemans_BBHD_MGA_1995.csv',
+                   'moruya_AHD_MGA_2000.csv']
+          
+
+### Add csv header list to all files in point_filenames
+##headerlist = ['x', 'y', 'elevation'] 
+##for f in point_filenames:
+##    add_csv_header(join(topographies_folder, f), headerlist)
+
+    # BOUNDING POLYGON - for data clipping and estimate of triangles in mesh
+# Used in build_elevation.py
+# Format for points easting,northing (no header)
+bounding_polygon_filename = 'bounding_polygon.csv'
+bounding_polygon_maxarea = 100000
+
+# INTERIOR REGIONS -  for designing the mesh
+# Used in run_model.py
+# Format for points easting,northing (no header)
+
+interior_regions_data = [['area_of_interest.csv', 500],
+                        ['area_of_significance.csv', 2500],
+                        ['shallow_water.csv', 10000]]
+
+
+# LAND - used to set the initial stage/water to be offcoast only
+# Used in run_model.py.  Format for points easting,northing (no header)
+land_initial_conditions_filename = [['initial_conditions.csv', 0]]
+                                  
+
+# GAUGES - for creating timeseries at a specific point
+# Used in get_timeseries.py.  
+# Format easting,northing,name,elevation (with header)
+gauges_filename = 'gauges.csv'
+
+# BUILDINGS EXPOSURE - for identifying inundated houses
+# Used in run_building_inundation.py
+# Format latitude,longitude etc (geographic)
+##building_exposure_filename = 'busselton_res_clip.csv' # from NEXIS
+
+# AREA OF IMAGES - Extent of each image to find out highest runup
+# Header - easting,northing,id,value
+# Used in get_runup.py
+images_filename = 'images.csv'
+
+# BOUNDING POLYGON - used in build_boundary.py and run_model.py respectively
+# NOTE: when files are put together the points must be in sequence
+# For ease go clockwise!
+# Check the run_model.py for boundary_tags
+
+# Thinned ordering file from Hazard Map (geographic)
+# Format is index,latitude,longitude (with header)
+urs_order_filename = 'thinned_boundary_ordering_extend.csv'
+
+# Landward bounding points
+# Format easting,northing (no header)
+landward_boundary_filename = 'landward_boundary_extend.csv'
+
+# MUX input filename.
+# If a meta-file from EventSelection is used, set 'multi-mux' to True.
+# If a single MUX stem filename (*.grd) is used, set 'multi-mux' to False.
+##mux_input_filename = event_number # to be found in event_folder
+                                    # (ie boundaries/event_number/)
+##multi_mux = False
+mux_input_filename = 'event.list'
+multi_mux = True
+
+zone = 56
+#-------------------------------------------------------------------------------
+# Clipping regions for export to asc and regions for clipping data
+# Final inundation maps should only be created in regions of the finest mesh
+#-------------------------------------------------------------------------------
+
+# ASCII export grid for Busselton
+xminBusselton = 340000
+xmaxBusselton = 352000
+yminBusselton = 6271500
+ymaxBusselton = 6280000
+
+# ASCII export grid for Bunbury
+xminBunbury = 369000
+xmaxBunbury = 381000
+yminBunbury = 6308000
+ymaxBunbury = 6316500
+
+################################################################################
+################################################################################
+####         NOTE: NOTHING WOULD NORMALLY CHANGE BELOW THIS POINT.          ####
+################################################################################
+################################################################################
+
+# Get system user and host names.
+# These values can be used to distinguish between two similar runs by two
+# different users or runs by the same user on two different machines.
+user = get_user_name()
+host = get_host_name()
+
+# Environment variable names.
+# The inundation directory, not the data directory.
+ENV_INUNDATIONHOME = 'ANUGADATA'
+
+#-------------------------------------------------------------------------------
+# Output Elevation Data
+#-------------------------------------------------------------------------------
+
+# Output filename for elevation
+# this is a combination of all the data generated in build_elevation.py
+combined_elevation_basename = scenario_name + '_combined_elevation'
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# determines time for setting up output directories
+time = strftime('%Y%m%d_%H%M%S', localtime()) 
+gtime = strftime('%Y%m%d_%H%M%S', gmtime()) 
+build_time = time + '_build'
+run_time = time + '_run_'
+
+# create paths generated from environment variables.
+home = join(os.getenv(ENV_INUNDATIONHOME), 'data') # Absolute path for data folder
+
+# check various directories/files that must exist
+anuga_folder = join(home, state, scenario_folder, 'anuga')
+topographies_folder = join(anuga_folder, 'topographies')
+polygons_folder = join(anuga_folder, 'polygons')
+boundaries_folder = join(anuga_folder, 'boundaries')
+output_folder = join(anuga_folder, 'outputs')
+gauges_folder = join(anuga_folder, 'gauges')
+meshes_folder = join(anuga_folder, 'meshes')
+event_folder = join(boundaries_folder, str(event_number))
+
+#-------------------------------------------------------------------------------
+# Location of input and output data
+#-------------------------------------------------------------------------------
+
+# Convert the user output_comment to a string for run_model.py
+output_comment = ('_'.join([str(x) for x in output_comment if x != user])
+                  + '_' + user)
+
+# The absolute pathname of the all elevation, generated in build_elevation.py
+combined_elevation = join(topographies_folder, combined_elevation_basename)
+
+# The absolute pathname of the mesh, generated in run_model.py
+meshes = join(meshes_folder, scenario_name) + '.msh'
+
+# The pathname for the urs order points, used within build_urs_boundary.py
+urs_order = join(boundaries_folder, urs_order_filename)
+
+# The absolute pathname for the landward points of the bounding polygon,
+# Used within run_model.py)
+landward_boundary = join(boundaries_folder, landward_boundary_filename)
+
+# The absolute pathname for the .sts file, generated in build_boundary.py
+event_sts = join(event_folder, scenario_name)
+
+# The absolute pathname for the output folder names
+# Used for build_elevation.py
+output_build = join(output_folder, build_time) + '_' + str(user) 
+# Used for run_model.py
+output_run = join(output_folder, run_time) + output_comment 
+# Used by post processing
+output_run_time = join(output_run, scenario_name) 
+
+# The absolute pathname for the gauges file
+# Used for get_timeseries.py
+gauges = join(gauges_folder, gauges_filename)       
+
+# The absolute pathname for the building file
+# Used for run_building_inundation.py
+##building_exposure = join(gauges_folder, building_exposure_filename)
+
+# The absolute pathname for the image file
+# Used for get_runup.py
+if images_filename:
+    images = join(polygons_folder, images_filename)
+
+# full path to where MUX files (or meta-files) live
+mux_input = join(event_folder, mux_input_filename)
+
Index: /DVD_images/extra_files/BatemansBay/project/run_model.py
===================================================================
--- /DVD_images/extra_files/BatemansBay/project/run_model.py	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/project/run_model.py	(revision 7205)
@@ -0,0 +1,178 @@
+"""Run a tsunami inundation scenario for Busselton, WA, Australia.
+
+The scenario is defined by a triangular mesh created from project.polygon, the
+elevation data is compiled into a pts file through build_elevation.py and a
+simulated tsunami is generated through an sts file from build_boundary.py.
+
+Input: sts file (build_boundary.py for respective event)
+       pts file (build_elevation.py)
+       information from project file
+Outputs: sww file stored in project.output_run_time_dir 
+The export_results_all.py and get_timeseries.py is reliant
+on the outputs of this script
+
+Ole Nielsen and Duncan Gray, GA - 2005, Jane Sexton, Nick Bartzis, GA - 2006
+Ole Nielsen, Jane Sexton and Kristy Van Putten - 2008
+"""
+
+#------------------------------------------------------------------------------
+# Import necessary modules
+#------------------------------------------------------------------------------
+
+# Standard modules
+import os
+import os.path
+import time
+from time import localtime, strftime, gmtime
+
+# Related major packages
+from Scientific.IO.NetCDF import NetCDFFile
+import Numeric as num
+
+from anuga.interface import create_domain_from_regions
+from anuga.interface import Transmissive_stage_zero_momentum_boundary
+from anuga.interface import Dirichlet_boundary
+from anuga.interface import Reflective_boundary
+from anuga.interface import Field_boundary
+from anuga.interface import create_sts_boundary
+from anuga.interface import csv2building_polygons
+from file_length import file_length
+
+from anuga.shallow_water.data_manager import start_screen_catcher
+from anuga.shallow_water.data_manager import copy_code_files
+from anuga.shallow_water.data_manager import urs2sts
+from anuga.utilities.polygon import read_polygon, Polygon_function
+
+# Application specific imports
+from setup_model import project
+import build_urs_boundary as bub
+
+#-------------------------------------------------------------------------------
+# Copy scripts to time stamped output directory and capture screen
+# output to file. Copy script must be before screen_catcher
+#-------------------------------------------------------------------------------
+
+copy_code_files(project.output_run, __file__, 
+                os.path.join(os.path.dirname(project.__file__),
+                             project.__name__+'.py'))
+start_screen_catcher(project.output_run, 0, 1)
+
+#-------------------------------------------------------------------------------
+# Create the computational domain based on overall clipping polygon with
+# a tagged boundary and interior regions defined in project.py along with
+# resolutions (maximal area of per triangle) for each polygon
+#-------------------------------------------------------------------------------
+
+print 'Create computational domain'
+
+# Create the STS file
+if not os.path.exists(project.event_sts + '.sts'):
+    bub.build_urs_boundary(project.mux_input_filename, project.event_sts)
+
+# Read in boundary from ordered sts file
+event_sts = create_sts_boundary(project.event_sts)
+
+# Reading the landward defined points, this incorporates the original clipping
+# polygon minus the 100m contour
+landward_boundary = read_polygon(project.landward_boundary)
+
+# Combine sts polyline with landward points
+bounding_polygon_sts = event_sts + landward_boundary
+
+# Number of boundary segments
+num_ocean_segments = len(event_sts) - 1
+# Number of landward_boundary points
+num_land_points = file_length(project.landward_boundary)
+
+# Boundary tags refer to project.landward_boundary
+# 4 points equals 5 segments start at N
+boundary_tags={'back': range(num_ocean_segments+1,
+                             num_ocean_segments+num_land_points),
+               'side': [num_ocean_segments,
+                        num_ocean_segments+num_land_points],
+               'ocean': range(num_ocean_segments)}
+
+# Build mesh and domain
+domain = create_domain_from_regions(bounding_polygon_sts,
+                                    boundary_tags=boundary_tags,
+                                    maximum_triangle_area=project.bounding_maxarea,
+                                    interior_regions=project.interior_regions,
+                                    mesh_filename=project.meshes,
+                                    use_cache=False,
+                                    verbose=True)
+
+domain.geo_reference.zone = project.zone
+print domain.statistics()
+
+domain.set_name(project.scenario_name)
+domain.set_datadir(project.output_run) 
+domain.set_minimum_storable_height(0.01)    # Don't store depth less than 1cm
+
+#-------------------------------------------------------------------------------
+# Setup initial conditions
+#-------------------------------------------------------------------------------
+
+print 'Setup initial conditions'
+
+# Set the initial stage in the offcoast region only
+if project.land_initial_conditions:
+    IC = Polygon_function(project.land_initial_conditions,
+                          default=project.tide,
+                          geo_reference=domain.geo_reference)
+else:
+    IC = 0
+domain.set_quantity('stage', IC, use_cache=True, verbose=True)
+domain.set_quantity('friction', project.friction) 
+domain.set_quantity('elevation', 
+                    filename=project.combined_elevation+'.pts',
+                    use_cache=True,
+                    verbose=True,
+                    alpha=project.alpha)
+
+#-------------------------------------------------------------------------------
+# Setup boundary conditions 
+#-------------------------------------------------------------------------------
+
+print 'Set boundary - available tags:', domain.get_boundary_tags()
+
+Br = Reflective_boundary(domain)
+Bt = Transmissive_stage_zero_momentum_boundary(domain)
+Bd = Dirichlet_boundary([project.tide, 0, 0])
+Bf = Field_boundary(project.event_sts+'.sts',
+                    domain, mean_stage=project.tide,
+                    time_thinning=1,
+                    default_boundary=Dirichlet_boundary([0, 0, 0]),
+                    boundary_polygon=bounding_polygon_sts,                    
+                    use_cache=True,
+                    verbose=True)
+
+
+domain.set_boundary({'back': Br,
+                     'side': Bt,
+                     'ocean': Bf}) 
+
+#-------------------------------------------------------------------------------
+# Evolve system through time
+#-------------------------------------------------------------------------------
+
+t0 = time.time()
+##for t in domain.evolve(yieldstep=project.yieldstep, 
+##                       finaltime=1440,
+##                       skip_initial_step=False): 
+##    print domain.timestepping_statistics()
+##    print domain.boundary_statistics(tags='ocean')
+##
+##for t in domain.evolve(yieldstep=5, 
+##                       finaltime=6000,
+##                       skip_initial_step=True): 
+##    print domain.timestepping_statistics()
+##    print domain.boundary_statistics(tags='ocean')
+
+
+for t in domain.evolve(yieldstep=project.yieldstep, 
+                       finaltime=project.finaltime,
+                       skip_initial_step=False): 
+    print domain.timestepping_statistics()
+    print domain.boundary_statistics(tags='ocean')
+
+print 'Simulation took %.2f seconds' % (time.time()-t0)
Index: /DVD_images/extra_files/BatemansBay/project/setup_model.py
===================================================================
--- /DVD_images/extra_files/BatemansBay/project/setup_model.py	(revision 7205)
+++ /DVD_images/extra_files/BatemansBay/project/setup_model.py	(revision 7205)
@@ -0,0 +1,148 @@
+"""
+Module to import the project.py 'configuration' file and perform
+sanity checks plus a quick check on mesh generation.
+
+Also callable as a stand-alone program, mainly to view the results
+of the mesh generation.
+"""
+
+import os
+
+from os.path import join, exists
+from anuga.utilities.polygon import read_polygon, number_mesh_triangles
+
+import project
+
+
+#-------------------------------------------------------------------------------
+# Sanity checks - check that required files/directories, etc, exist.
+#-------------------------------------------------------------------------------
+
+# flag - we check many things and then don't proceed if anything wrong
+sanity_error = False               # checked at bottom of this file
+
+# Test that environment variables are defined.
+if os.getenv(project.ENV_INUNDATIONHOME) is None:
+    print "Environment variable '%s' is not set" % project.ENV_INUNDATIONHOME
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# check folders generated from environment variables.
+if not exists(project.home):
+    print "Sorry, data directory '%s' doesn't exist" % project.home
+    sanity_error = True
+    
+if not exists(project.anuga_folder):
+    print "Sorry, ANUGA directory '%s' doesn't exist" % project.anuga_folder
+    sanity_error = True
+
+if not exists(project.topographies_folder):
+    print ("Sorry, topo directory '%s' doesn't exist"
+           % project.topographies_folder)
+    sanity_error = True
+
+if not exists(project.polygons_folder):
+    print ("Sorry, polygon directory '%s' doesn't exist"
+           % project.polygons_folder)
+    sanity_error = True
+
+if not exists(project.boundaries_folder):
+    print ("Sorry, boundaries directory '%s' doesn't exist"
+           % project.boundaries_folder)
+    sanity_error = True
+
+if not exists(project.output_folder):
+    print "Sorry, outputs directory '%s' doesn't exist" % project.output_folder
+    sanity_error = True
+
+if not exists(project.gauges_folder):
+    print "Sorry, gauges directory '%s' doesn't exist" % project.gauges_folder
+    sanity_error = True
+
+if not exists(project.meshes_folder):
+    print "Sorry, meshes directory '%s' doesn't exist" % project.meshes_folder
+    sanity_error = True
+
+# if multi_mux is True, check if multi-mux file exists
+if project.multi_mux:
+    if not exists(project.mux_input):
+        print ("Sorry, MUX input file '%s' doesn't exist"
+               % project.mux_input)
+        sanity_error = True
+
+#-----
+# If this directory don't exist, EventSelection hasn't been run.
+#-----
+
+if not exists(project.event_folder):
+    print ("Sorry, you must generate event %s with EventSelection."
+           % project.event_number)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Determine type of run
+#-------------------------------------------------------------------------------
+
+if project.setup == 'trial':
+    print 'trial'
+    project.scale_factor = 100
+    project.time_thinning = 96
+    project.yieldstep = 240
+elif project.setup == 'basic': 
+    print 'basic'
+    project.scale_factor = 4
+    project.time_thinning = 12
+    project.yieldstep = 120
+elif project.setup == 'final': 
+    print 'final'
+    project.scale_factor = 1
+    project.time_thinning = 4
+    project.yieldstep = 60
+else:
+    print ("Sorry, you must set the 'setup' variable to one of:"
+           '   trial - coarsest mesh, fast\n'
+           '   basic - coarse mesh\n'
+           '   final - fine mesh, slowest\n'
+           '\n'
+           "'setup' was set to '%s'" % project.setup)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Check for errors detected above.
+#-------------------------------------------------------------------------------
+
+if sanity_error:
+    msg = 'You must fix the above errors before continuing.'
+    raise Exception, msg
+
+#-------------------------------------------------------------------------------
+# Reading polygons and creating interior regions
+#-------------------------------------------------------------------------------
+
+# Create list of land polygons with initial conditions
+project.land_initial_conditions = []
+for filename, MSL in project.land_initial_conditions_filename:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.land_initial_conditions.append([polygon, MSL])
+
+# Create list of interior polygons with scaling factor
+project.interior_regions = []
+for filename, maxarea in project.interior_regions_data:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.interior_regions.append([polygon,
+                                     maxarea*project.scale_factor])
+
+# Initial bounding polygon for data clipping 
+project.bounding_polygon = read_polygon(join(project.polygons_folder,
+                                             project.bounding_polygon_filename))
+project.bounding_maxarea = project.bounding_polygon_maxarea*project.scale_factor
+
+# Estimate the number of triangles                     
+trigs_min = number_mesh_triangles(project.interior_regions,
+                                  project.bounding_polygon,
+                                  project.bounding_maxarea)
+
+print 'min estimated number of triangles', trigs_min
Index: /DVD_images/extra_files/GoldCoast/README.txt
===================================================================
--- /DVD_images/extra_files/GoldCoast/README.txt	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/README.txt	(revision 7205)
@@ -0,0 +1,6 @@
+This disk contains the Geoscience Australia Tsunami Inundation Models
+for the GOLD COAST region.
+
+If this DVD does not autostart and display a browser page, open the
+file X:\index.htm in your browser, where 'X' is the drive letter of
+your DVD drive.
Index: /DVD_images/extra_files/GoldCoast/auxiliary_scripts.html
===================================================================
--- /DVD_images/extra_files/GoldCoast/auxiliary_scripts.html	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/auxiliary_scripts.html	(revision 7205)
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the GOLD COAST region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+
+  <a name="auxiliary scripts"<h2><b>Auxiliary Scripts</b></h2></a>
+  There are number of auxiliary scripts on this disk that you can use to extract information from the SWW files
+  produced by a simulation run.  These scripts are not meant to be the definitive answer on how to get information
+  from SWW files, but are offered as an example of one way to do it.
+  <p>
+  This page describes the scripts and shows how to use them.  Note that due to the ad-hoc nature of the scripts, 
+  you <b>must</b> modify these scripts before they can be used to extract information from any SWW files you
+  generate.
+
+  <a name="export_results_max.py scripts"<h3><b>export_results_max.py</b></h3></a>
+  The <font color="red">export_results_max.py</font> script can be used to create an ASC file that contains the maximum
+  of an ANUGA variable or expression for each point in a user-defined raster on the simulation region.
+  <p>
+  You must change certain values within the <font color="red">export_results_max.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Modify the <b>cellsize</b> value to set the size of the raster you require.  For example:
+<pre><font color="brown">    cellsize = 20		# raster cell size in metres</font></pre>
+
+    <li> Now set the timestep at which you want the raster generated.  Either set the actual timestep required or use 
+         <b>None</b> to indicate that you want the maximum values in the raster over all timesteps:
+<pre><font color="brown">    timestep = 1000
+    #timestep = None		# over all timesteps</font></pre>
+         <p>
+         Note that if you specify a particular timestep here you may not need to include all SWW files in the 
+         <b>time_dirs</b> list above.  For example, iy you wanted data from timestep 0 only then you would need
+         to include only the first SWW file in the list.
+
+    <li> If you want to clip the raster to one or more small regions then put the names of the regions of interest
+         into the <b>area</b> list:
+<pre><font color="brown">    area = ['Hobart', 'NW', 'South']</font></pre>
+         Note that the name strings you put into the <b>area</b> list must match the names used in the
+         <font color="red">project.py</font> file.  That is, if you use a name such as 'NW', then the
+         <font color="red">project.py</font> file must have lines like:
+<pre><font color="brown">    xminNW = 548000
+    xmaxNW = 561000
+    yminNW = 5250000
+    ymaxNW = 5258000</font></pre>
+         which set the maximum and minimum eastings and northings that define a rectangular region.
+         <p>
+         If you don't want to clip to a region of interest, then do this:
+<pre><font color="brown">    area = ['All']		# no region of interest</font></pre>
+
+    <li> Now you must decide which variable or expression values you want sampled on your raster.
+         Define a list <b>var</b> that contains strings defining the required variable/expression:
+<pre><font color="brown">    var = ['depth', 'speed']</font></pre>
+         Note that the strings you supply must be defined in the <b>var_equations</b> dictionary
+         prior to your definition of <b>var</b>:
+<pre><font color="brown">    var_equations = {'stage':     'stage',
+                     'momentum':  '(xmomentum**2 + ymomentum**2)**0.5',
+                     'depth':     'stage-elevation',
+                     'speed':     '(xmomentum**2 + ymomentum**2)**0.5/(stage-elevation+1.e-6)',
+                     'elevation': 'elevation' }</font></pre>
+         This dictionary maps your <b>var</b> strings to a variable or expression.
+  </ul>
+
+  <a name="get_runup.py"<h3><b>get_runup.py</b></h3></a>
+  The <font color="red">get_runup.py</font> script is used to get the maximum runup height in a specified region
+  or regions.
+  <p>
+  You must change certain values within the <font color="red">get_runup.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>images</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the regions within the simulation that you want the maximum runup for.
+  </ul>
+
+  <a name="get_timeseries.py"<h3><b>get_timeseries.py</b></h3></a>
+  The <font color="red">get_timeseries.py</font> script is used to get timeseries data for a selection of variable
+  data at one or more gauge points in a simulation.
+  <p>
+  You must change certain values within the <font color="red">get_timeseries.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>gauges</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the gauges within the simulation that you want the timeseries data for.
+  </ul>
+</body>
+</html>
Index: /DVD_images/extra_files/GoldCoast/index.html
===================================================================
--- /DVD_images/extra_files/GoldCoast/index.html	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/index.html	(revision 7205)
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the GOLD COAST region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+<!--
+  <ul class="navbar">
+    <li><a href="#introduction">Introduction</a>
+    <li><a href="#installing">Installing</a>
+    <li><a href="#simulating">Running</a>
+    <li><a href="#userslist">Mailing list</a>
+    <li><a href="#auxscripts">Auxiliary scripts</a>
+    <li><a href="#FAQ">Frequently Asked Questions</a>
+    <li><a href="#extra">Extra stuff</a>
+  </ul>
+-->
+
+  <a name="introduction"<h3><b>Introduction</b></h3></a>
+  The information on this DVD and the associated report is intended to assist emergency managers in developing preparation and
+  response plans that can be used during a tsunami threat or emergency.
+  <p>
+  The Attorney General's Department (AGD) has supported Geoscience Australia (GA) in developing a range of products to support
+  the understanding of tsunami hazard through the Australian Tsunami Warning System Project. The work reported here is intended
+  to further build the capacity of the Jurisdictions in developing inundation models for prioritised locations. 
+  <p>
+  While the associated report provides background, model results and interpretations, the DVD contains all data, scripts and
+  software necessary to reproduce and potentially augment the models underpinning the report. This will allow the Jurisdiction
+  to rerun the models with minor modifications or new elevation data as needed and also potentially replicate the methodology
+  to other locations if desired.  
+  <p>
+  The data provided on this DVD is:
+  <ul>
+    <li> The Professional Opinion Report 2009/XX entitled <i>Capacity Building for Tsunami Planning and Preparation: 
+         Inundation Models for Four East Coast Australian Communities</i>
+    <li> Elevation data used with the tsunami inundation model
+    <li> Input data for a range of tsunami events
+    <li> The Python scripts used to run the models
+  </ul>
+
+  <a name="requirements"<h3><b>Requirements</b></h3></a>
+
+  The tsunami inundation simulations are based on the Open Source software package called ANUGA.
+  For more information about ANUGA visit <a href="https://datamining.anu.edu.au/anuga">https://datamining.anu.edu.au/anuga</a>. 
+  <p>
+  ANUGA has been developed and tested under the Windows XP and Linux (Ubuntu, Mint and Red Hat) operating systems.  
+  ANUGA may also be installed on a Windows Vista system and Debian Linux, but these have not been extensively tested.
+  <p>
+  The ANUGA scripts on this DVD require a minimum of 3GB of memory and possibly more, if mesh resolutions are increased. For this reason
+  we recommend using 64 bit Ubuntu Linux as this operating system can use more than 3GB of memory, whereas Windows XP cannot.
+
+  <a name="installing"<h3><b>Installing ANUGA</b></h3></a>
+
+  You must install ANUGA according to the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  As the installation procedure comprises a number of steps we suggest that it is carried out by someone with a
+  basic understanding of how to install software packages on the operating system of choice. 
+
+  <a name="simulating"<h3><b>How to run a simulation</b></h3></a>
+
+  <a name="userslist"<h3><b>How to join the ANUGA user's mailing list</b></h3></a>
+
+  This is how a user should run a model from the 'Tsunami Inundation Models' DVDs.
+  We assume that you are using Windows and will give examples for that operating system.
+  The translation to Linux is left as an exercise for the student!
+  <p>
+  <hr align="left" width="100">
+  <p>
+  First, it is assumed you have installed the ANUGA software according to the
+  <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you must copy the entire contents of the DVD to a place in your filesystem. Let's assume
+  that you want to put the data into <b>C:\ANUGA</b>. You would do this in a Command Prompt window:
+  <table class="code"><tr><td>
+    C:<br>
+    cd \<br>
+    mkdir ANUGA<br>
+    xcopy /e X:\ ANUGA
+  </td></tr></table>
+  <p>
+  Of course, you could just drag all files on the DVD (X:\ is the assumed drive letter) to the desired target directory with Explorer.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Now you must create an environment variable <b>ANUGADATA</b> that points to the directory you just created:
+  <table class="code"><tr><td>
+    set ANUGADATA=C:\ANUGA
+  </td></tr></table>
+  <p>
+  Doing the above in a Command Prompt window is temporary - if you open another
+  window you will not have the ANUGADATA environment variable defined. To make
+  the variable permanent you must set it in the <b>Start|Settings|Control Panel|System</b>
+  tool (<b>Advanced</b> tab).  See the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>
+  if you don't know how to do this.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  At this point you should run the <font color="red">build_elevation.py</font>
+  script to convert the raw elevation data to a set of 'combined_elevation'
+  files ready to be used by the ANUGA system. It is possible that you have not
+  been given the elevation data on the DVD as it is too large. In that case you
+  cannot run the <font color="red">build_elevation.py</font> script and you
+  should skip to the next step.
+  <table class="code"><tr><td>
+    cd C:\ANUGA<br>
+    cd project<br>
+    python build_elevation.py
+  </td></tr></table>
+  <p>
+  When you get to the point of running the model with your own data, you must
+  run <font color="red">build_elevation.py</font> to recreate the combined elevation files every time
+  you change the elevation data.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you prepare and execute the model:
+  <table class="code"><tr><td>
+    python setup_model.py<br >
+    python run_model.py
+  </td></tr></table>
+  <p>
+  <hr align="left" width="100">
+  <p>
+  This should all run to completion, though it may take several days, depending on
+  the hardware used.
+  <p>
+  If you do get an error from <font color="red">setup_model.py</font>
+  or <font color="red">run_model.py</font> look for some explanation in the log
+  files, which you should find somewhere under <b>C:\ANUGA\data</b>. Just keep
+  drilling down from that point until you find a directory called <b>outputs</b>.
+  The latest directory in outputs should contain a file called screen_error.txt
+  with an explanation of the error at the end. 
+  <p>
+  Once the simulation has completed you may view the results using the ANUGA
+  viewer as described in the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a> 
+  and <a href="documents/anuga_user_manual.pdf">User Manual</a>, run the script
+  <font color="red">export_results_max.py</font> to generate rasters suitable
+  for GIS mapping, or write dedicated scripts extracting timeseries at selected
+  locations.
+  <p>
+  The input waves are all derived from events available in the Australian Tsunami
+  Hazard Map. As this dataset is very large, this DVD only contains the events
+  described in the report. If other events from the Hazard Map are obtained,
+  the script <font color="red">build_urs_boundary.py</font> has been designed
+  to prepare the associated input wave for ingestion into ANUGA.  This script
+  is documented in the <a href="documents/anuga_user_manual.pdf">User Manual</a>.
+  <p>
+  The ANUGA <a href="documents/anuga_user_manual.pdf">User Manual</a> describes
+  how to use the ANUGA system in general and provides some examples of its use.
+
+  One of the quickest ways to get your ANUGA questions answered is by asking them on the <b>ANUGA-user</b> mailing list.
+  You can subscribe to the list <a href="https://lists.sourceforge.net/lists/listinfo/anuga-user">here</a>
+  and can view the mailing list <a href="https://sourceforge.net/mailarchive/forum.php?forum_name=anuga-user">archives</a>.
+  <p>
+  It costs nothing to register and you can choose to have list mail sent to you as individual emails or have them batched
+  into a few emails per day.  You can unsubscribe at any time through the subscribe link above.
+
+  <a name="auxscripts"<h3><b>How to use the auxiliary scripts</b></h3></a>
+
+  On this disk there are a selection of auxiliary scripts that you can use to extract various pieces of information
+  from the generated SWW files.  The <a href="auxiliary_scripts.html">auxiliary scripts</a> page explains how to use the scripts.
+
+  <a name="FAQ"<h3><b>Frequently Asked Questions</b></h3></a>
+
+  There is a <b>Frequently Asked Questions</b> (FAQ) page at
+  <a href="https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions">https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions</a>.
+  Look in here and search the mailing list archives before asking questions on the ANUGA user's mailing list.
+  Someone may already have asked your question!
+  <p>
+  Note that you can edit the FAQ pages, so it is helpful if you can update the FAQ with your question and its answer if you feel
+  it would be helpful to others.
+</body>
+</html>
Index: /DVD_images/extra_files/GoldCoast/project/project.py
===================================================================
--- /DVD_images/extra_files/GoldCoast/project/project.py	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/project/project.py	(revision 7205)
@@ -0,0 +1,250 @@
+"""
+This file contains all your file and directory definitions 
+for elevation, meshes and outputs.
+"""
+
+import os
+from anuga.utilities.system_tools import get_user_name, get_host_name
+from time import localtime, strftime, gmtime
+from os.path import join, exists
+
+
+#-------------------------------------------------------------------------------
+# Directory setup
+#-------------------------------------------------------------------------------
+
+# this section needs to be updated to reflect the modelled community.
+# Note, the user needs to set up the directory system accordingly
+state = 'queensland'
+scenario_name = 'gold_coast'
+scenario_folder = 'gold_coast_tsunami_scenario_2009'
+
+#-------------------------------------------------------------------------------
+# Initial Conditions
+#-------------------------------------------------------------------------------
+
+# Model specific parameters.
+# One or all can be changed each time the run_model script is executed
+
+               # difference between MSL and HAT in metres
+central_meridian = None # Central meridian for projection (optional)
+zone = 56
+import sys
+if len(sys.argv) > 1:
+    event_number = int(sys.argv[1])
+else:    
+    event_number = 51469    # the event number or the mux file name
+
+event_number_list = [51469, 50863, 51392] # To piggy back multiple events
+
+tide = 0
+alpha = 0.1             # smoothing parameter for mesh
+friction=0.01           # manning's friction coefficient
+starttime=0             # start time for simulation
+finaltime=80000         # final time for simulation
+
+setup = 'final'         # This can be one of three values
+                        #    trial - coarsest mesh, fast
+                        #    basic - coarse mesh
+                        #    final - fine mesh, slowest
+
+#-------------------------------------------------------------------------------
+# Output filename
+#
+# Your output filename should be unique between different runs on different data.
+# The list of items below will be used to create a file in your output directory.
+# Your user name and time+date will be automatically added.  For example,
+#     [setup, tide, event_number]
+# will result in a filename like
+#     20090212_091046_run_final_0_27283_rwilson
+#-------------------------------------------------------------------------------
+
+output_comment = [setup, tide, '250m', event_number]
+
+#-------------------------------------------------------------------------------
+# Input Datayieldstep
+#-------------------------------------------------------------------------------
+
+# ELEVATION DATA
+# Used in build_elevation.py
+# Format for ascii grids, as produced in ArcGIS + a projection file
+ascii_grid_filenames = ['grid250m_all_pro'] # 2005 250m grid
+##                      ['GC_DTM_30m']] # supplied DEM
+
+# Format for point is x,y,elevation (with header)
+point_filenames = []
+
+### Add csv header list to all files in point_filenames
+##headerlist = ['x', 'y', 'elevation'] 
+##for f in point_filenames:
+##    add_csv_header(join(topographies_folder, f), headerlist)
+
+# BOUNDING POLYGON - for data clipping and estimate of triangles in mesh
+# Used in build_elevation.py
+# Format for points easting,northing (no header)
+bounding_polygon_filename = 'bounding_polygon_sml.csv'
+bounding_polygon_maxarea = 125000
+
+# INTERIOR REGIONS -  for designing the mesh
+# Used in run_model.py
+# Format for points easting,northing (no header)                    
+interior_regions_data = []
+
+# LAND - used to set the initial stage/water to be offcoast only
+# Used in run_model.py.  Format for points easting,northing (no header)
+land_initial_conditions_filename = [['initial_conditions_sml.csv', 0]]
+
+# GAUGES - for creating timeseries at a specific point
+# Used in get_timeseries.py.  
+# Format easting,northing,name,elevation (with header)
+gauges_filename = 'gauges.csv'
+
+# BUILDINGS EXPOSURE - for identifying inundated houses
+# Used in run_building_inundation.py
+# Format latitude,longitude etc (geographic)
+building_exposure_filename = 'gold_coast_res_clip.csv' # from NEXIS
+
+# AREA OF IMAGES - Extent of each image to find out highest runup
+# Headerr: easting, northing, id, value
+# Used in get_runup.py
+images_filename = 'images.csv'
+
+# BOUNDING POLYGON - used in build_boundary.py and run_model.py respectively
+# NOTE: when files are put together the points must be in sequence
+# For ease go clockwise!
+# Check the run_model.py for boundary_tags
+
+
+# Thinned ordering file from Hazard Map (geographic)
+# Format is index,latitude,longitude (with header)
+urs_order_filename = 'urs_order_sml.csv'
+
+# Landward bounding points
+# Format easting,northing (no header)
+landward_boundary_filename = 'landward_boundary_sml.csv'
+
+# MUX input filename.
+# If a meta-file from EventSelection is used, set 'multi-mux' to True.
+# If a single MUX stem filename (*.grd) is used, set 'multi-mux' to False.
+##mux_input_filename = event_number # to be found in event_folder
+                                    # (ie boundaries/event_number/)
+##multi_mux = False
+mux_input_filename = 'event.list'
+multi_mux = True
+
+#-------------------------------------------------------------------------------
+# Clipping regions for export to asc and regions for clipping data
+# Final inundation maps should only be created in regions of the finest mesh
+#-------------------------------------------------------------------------------
+
+# ASCII export grid for Gold Coast
+xminGold_Coast = 541500
+xmaxGold_Coast = 546000
+yminGold_Coast = 6893500
+ymaxGold_Coast = 6898500
+
+# ASCII export grid for dune study
+xminDune = 536710
+xmaxDune = 556150
+yminDune = 6881125
+ymaxDune = 6926860
+
+################################################################################
+################################################################################
+####         NOTE: NOTHING WOULD NORMALLY CHANGE BELOW THIS POINT.          ####
+################################################################################
+################################################################################
+
+# Get system user and host names.
+# These values can be used to distinguish between two similar runs by two
+# different users or runs by the same user on two different machines.
+user = get_user_name()
+host = get_host_name()
+
+# Environment variable names.
+# The inundation directory, not the data directory.
+ENV_INUNDATIONHOME = 'ANUGADATA'
+
+#-------------------------------------------------------------------------------
+# Output Elevation Data
+#-------------------------------------------------------------------------------
+
+# Output filename for elevation
+# this is a combination of all the data generated in build_elevation.py
+combined_elevation_basename = scenario_name + '_combined_elevation_250m'
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# determines time for setting up output directories
+time = strftime('%Y%m%d_%H%M%S', localtime()) 
+gtime = strftime('%Y%m%d_%H%M%S', gmtime()) 
+build_time = time + '_build'
+run_time = time + '_run_'
+
+# create paths generated from environment variables.
+home = join(os.getenv(ENV_INUNDATIONHOME), 'data') # Absolute path for data folder
+    
+# check various directories/files that must exist
+anuga_folder = join(home, state, scenario_folder, 'anuga')
+topographies_folder = join(anuga_folder, 'topographies')
+polygons_folder = join(anuga_folder, 'polygons')
+boundaries_folder = join(anuga_folder, 'boundaries')
+output_folder = join(anuga_folder, 'outputs')
+gauges_folder = join(anuga_folder, 'gauges')
+event_folder = join(boundaries_folder, str(event_number))
+
+#-------------------------------------------------------------------------------
+# Location of input and output data
+#-------------------------------------------------------------------------------
+
+# Convert the user output_comment to a string for run_model.py
+output_comment = ('_'.join([str(x) for x in output_comment if x != user])
+                  + '_' + user)
+
+# The absolute pathname of the all elevation, generated in build_elevation.py
+combined_elevation = join(topographies_folder, combined_elevation_basename)
+
+
+# The pathname for the urs order points, used within build_urs_boundary.py
+if urs_order_filename:
+    urs_order = join(boundaries_folder, urs_order_filename)
+
+# The absolute pathname for the landward points of the bounding polygon,
+# Used within run_model.py)
+if landward_boundary_filename:
+    landward_boundary = join(boundaries_folder, landward_boundary_filename)
+
+# The absolute pathname for the .sts file, generated in build_boundary.py
+event_sts = join(event_folder, scenario_name)
+
+# The absolute pathname for the output folder names
+# Used for build_elevation.py
+output_build = join(output_folder, build_time) + '_' + str(user) 
+# Used for run_model.py
+output_run = join(output_folder, run_time) + output_comment 
+# Used by post processing
+output_run_time = join(output_run, scenario_name) 
+
+# The absolute pathname of the mesh, generated in run_model.py
+meshes = join(output_run, scenario_name) + '.msh'
+
+# The absolute pathname for the gauges file
+# Used for get_timeseries.py
+if gauges_filename:
+    gauges = join(gauges_folder, gauges_filename)       
+
+# The absolute pathname for the building file
+# Used for run_building_inundation.py
+if building_exposure_filename:
+    building_exposure = join(gauges_folder, building_exposure_filename)
+
+# The absolute pathname for the image file
+# Used for get_runup.py
+if images_filename:
+    images = join(polygons_folder, images_filename)
+
+# full path to where MUX files (or meta-files) live
+mux_input = join(event_folder, mux_input_filename)
+
Index: /DVD_images/extra_files/GoldCoast/project/run_model.py
===================================================================
--- /DVD_images/extra_files/GoldCoast/project/run_model.py	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/project/run_model.py	(revision 7205)
@@ -0,0 +1,162 @@
+"""Run a tsunami inundation scenario for Busselton, WA, Australia.
+
+The scenario is defined by a triangular mesh created from project.polygon, the
+elevation data is compiled into a pts file through build_elevation.py and a
+simulated tsunami is generated through an sts file from build_boundary.py.
+
+Input: sts file (build_boundary.py for respective event)
+       pts file (build_elevation.py)
+       information from project file
+Outputs: sww file stored in project.output_run_time_dir 
+The export_results_all.py and get_timeseries.py is reliant
+on the outputs of this script
+
+Ole Nielsen and Duncan Gray, GA - 2005, Jane Sexton, Nick Bartzis, GA - 2006
+Ole Nielsen, Jane Sexton and Kristy Van Putten - 2008
+"""
+
+#------------------------------------------------------------------------------
+# Import necessary modules
+#------------------------------------------------------------------------------
+
+# Standard modules
+import os
+import os.path
+import time
+from time import localtime, strftime, gmtime
+
+# Related major packages
+from Scientific.IO.NetCDF import NetCDFFile
+import Numeric as num
+
+from anuga.interface import create_domain_from_regions
+from anuga.interface import Transmissive_stage_zero_momentum_boundary
+from anuga.interface import Dirichlet_boundary
+from anuga.interface import Reflective_boundary
+from anuga.interface import Field_boundary
+from anuga.interface import create_sts_boundary
+from anuga.interface import csv2building_polygons
+from file_length import file_length
+
+from anuga.shallow_water.data_manager import start_screen_catcher
+from anuga.shallow_water.data_manager import copy_code_files
+from anuga.shallow_water.data_manager import urs2sts
+from anuga.utilities.polygon import read_polygon, Polygon_function
+
+# Application specific imports
+from setup_model import project
+import build_urs_boundary as bub
+
+#-------------------------------------------------------------------------------
+# Copy scripts to time stamped output directory and capture screen
+# output to file. Copy script must be before screen_catcher
+#-------------------------------------------------------------------------------
+
+copy_code_files(project.output_run, __file__, 
+                os.path.join(os.path.dirname(project.__file__),
+                             project.__name__+'.py'))
+start_screen_catcher(project.output_run, 0, 1)
+
+#-------------------------------------------------------------------------------
+# Create the computational domain based on overall clipping polygon with
+# a tagged boundary and interior regions defined in project.py along with
+# resolutions (maximal area of per triangle) for each polygon
+#-------------------------------------------------------------------------------
+
+print 'Create computational domain'
+
+# Create the STS file
+if not os.path.exists(project.event_sts + '.sts'):
+    bub.build_urs_boundary(project.mux_input_filename, project.event_sts)
+
+# Read in boundary from ordered sts file
+event_sts = create_sts_boundary(project.event_sts)
+
+# Reading the landward defined points, this incorporates the original clipping
+# polygon minus the 100m contour
+landward_boundary = read_polygon(project.landward_boundary)
+
+# Combine sts polyline with landward points
+bounding_polygon_sts = event_sts + landward_boundary
+
+# Number of boundary segments
+num_ocean_segments = len(event_sts) - 1
+# Number of landward_boundary points
+num_land_points = file_length(project.landward_boundary)
+
+# Boundary tags refer to project.landward_boundary
+# 4 points equals 5 segments start at N
+boundary_tags={'back': range(num_ocean_segments+1,
+                             num_ocean_segments+num_land_points),
+               'side': [num_ocean_segments,
+                        num_ocean_segments+num_land_points],
+               'ocean': range(num_ocean_segments)}
+
+# Build mesh and domain
+domain = create_domain_from_regions(bounding_polygon_sts,
+                                    boundary_tags=boundary_tags,
+                                    maximum_triangle_area=project.bounding_maxarea,
+                                    interior_regions=project.interior_regions,
+                                    mesh_filename=project.meshes,
+                                    use_cache=True,
+                                    verbose=True)
+print domain.statistics()
+
+domain.set_name(project.scenario_name)
+domain.set_datadir(project.output_run) 
+domain.set_minimum_storable_height(0.01)    # Don't store depth less than 1cm
+
+#-------------------------------------------------------------------------------
+# Setup initial conditions
+#-------------------------------------------------------------------------------
+
+print 'Setup initial conditions'
+
+# Set the initial stage in the offcoast region only
+if project.land_initial_conditions:
+    IC = Polygon_function(project.land_initial_conditions,
+                          default=project.tide,
+                          geo_reference=domain.geo_reference)
+else:
+    IC = 0
+domain.set_quantity('stage', IC, use_cache=True, verbose=True)
+domain.set_quantity('friction', project.friction) 
+domain.set_quantity('elevation', 
+                    filename=project.combined_elevation+'.pts',
+                    use_cache=True,
+                    verbose=True,
+                    alpha=project.alpha)
+
+#-------------------------------------------------------------------------------
+# Setup boundary conditions 
+#-------------------------------------------------------------------------------
+
+print 'Set boundary - available tags:', domain.get_boundary_tags()
+
+Br = Reflective_boundary(domain)
+Bt = Transmissive_stage_zero_momentum_boundary(domain)
+Bd = Dirichlet_boundary([project.tide, 0, 0])
+Bf = Field_boundary(project.event_sts+'.sts',
+                    domain, mean_stage=project.tide,
+                    time_thinning=1,
+                    default_boundary=Dirichlet_boundary([0, 0, 0]),
+                    boundary_polygon=bounding_polygon_sts,                    
+                    use_cache=True,
+                    verbose=True)
+
+domain.set_boundary({'back': Br,
+                     'side': Bt,
+                     'ocean': Bf}) 
+
+#-------------------------------------------------------------------------------
+# Evolve system through time
+#-------------------------------------------------------------------------------
+
+t0 = time.time()
+for t in domain.evolve(yieldstep=project.yieldstep, 
+                       finaltime=project.finaltime,
+                       skip_initial_step=False): 
+    print domain.timestepping_statistics()
+    print domain.boundary_statistics(tags='ocean')
+
+print 'Simulation took %.2f seconds' % (time.time()-t0)
Index: /DVD_images/extra_files/GoldCoast/project/setup_model.py
===================================================================
--- /DVD_images/extra_files/GoldCoast/project/setup_model.py	(revision 7205)
+++ /DVD_images/extra_files/GoldCoast/project/setup_model.py	(revision 7205)
@@ -0,0 +1,158 @@
+"""
+Module to import the project.py 'configuration' file and perform
+sanity checks plus a quick check on mesh generation.
+
+Also callable as a stand-alone program, mainly to view the results
+of the mesh generation.
+"""
+
+import os
+
+from os.path import join, exists
+from anuga.utilities.polygon import read_polygon, number_mesh_triangles
+
+import project
+
+
+#-------------------------------------------------------------------------------
+# Sanity checks - check that required files/directories, etc, exist.
+#-------------------------------------------------------------------------------
+
+# flag - we check many things and then don't proceed if anything wrong
+sanity_error = False               # checked at bottom of this file
+
+# Test that environment variables are defined.
+if os.getenv(project.ENV_INUNDATIONHOME) is None:
+    print "Environment variable '%s' is not set" % project.ENV_INUNDATIONHOME
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Check filename strings that MUST be set
+#-------------------------------------------------------------------------------
+
+if not project.urs_order_filename:
+    print ("Sorry, thinned ordering file parameter 'urs_order_filename' "
+           "isn't set")
+    sanity_error = True
+
+if not project.landward_boundary_filename:
+    print ("Sorry, landward bounding points parameter "
+           "'landward_boundary_filename' isn't set")
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# check folders generated from environment variables.
+if not exists(project.home):
+    print "Sorry, data directory '%s' doesn't exist" % project.home
+    sanity_error = True
+    
+if not exists(project.anuga_folder):
+    print "Sorry, ANUGA directory '%s' doesn't exist" % project.anuga_folder
+    sanity_error = True
+
+if not exists(project.topographies_folder):
+    print ("Sorry, topo directory '%s' doesn't exist"
+           % project.topographies_folder)
+    sanity_error = True
+
+if not exists(project.polygons_folder):
+    print ("Sorry, polygon directory '%s' doesn't exist"
+           % project.polygons_folder)
+    sanity_error = True
+
+if not exists(project.boundaries_folder):
+    print ("Sorry, boundaries directory '%s' doesn't exist"
+           % project.boundaries_folder)
+    sanity_error = True
+
+if not exists(project.output_folder):
+    print "Sorry, outputs directory '%s' doesn't exist" % project.output_folder
+    sanity_error = True
+
+if not exists(project.gauges_folder):
+    print "Sorry, gauges directory '%s' doesn't exist" % project.gauges_folder
+    sanity_error = True
+
+# if multi_mux is True, check if multi-mux file exists
+if project.multi_mux:
+    if not exists(project.mux_input):
+        print ("Sorry, MUX input file '%s' doesn't exist"
+               % project.mux_input)
+        sanity_error = True
+
+#-----
+# If this directory don't exist, EventSelection hasn't been run.
+#-----
+
+if not exists(project.event_folder):
+    print ("Sorry, you must generate event %s with EventSelection."
+           % project.event_number)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Determine type of run
+#-------------------------------------------------------------------------------
+
+if project.setup == 'trial':
+    print 'trial'
+    project.scale_factor = 100
+    project.time_thinning = 96
+    project.yieldstep = 240
+elif project.setup == 'basic': 
+    print 'basic'
+    project.scale_factor = 4
+    project.time_thinning = 12
+    project.yieldstep = 120
+elif project.setup == 'final': 
+    print 'final'
+    project.scale_factor = 1
+    project.time_thinning = 4
+    project.yieldstep = 60
+else:
+    print ("Sorry, you must set the 'setup' variable to one of:"
+           '   trial - coarsest mesh, fast\n'
+           '   basic - coarse mesh\n'
+           '   final - fine mesh, slowest\n'
+           '\n'
+           "'setup' was set to '%s'" % project.setup)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Check for errors detected above.
+#-------------------------------------------------------------------------------
+
+if sanity_error:
+    msg = 'You must fix the above errors before continuing.'
+    raise Exception, msg
+
+#-------------------------------------------------------------------------------
+# Reading polygons and creating interior regions
+#-------------------------------------------------------------------------------
+
+# Create list of land polygons with initial conditions
+project.land_initial_conditions = []
+for filename, MSL in project.land_initial_conditions_filename:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.land_initial_conditions.append([polygon, MSL])
+
+# Create list of interior polygons with scaling factor
+project.interior_regions = []
+for filename, maxarea in project.interior_regions_data:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.interior_regions.append([polygon,
+                                     maxarea*project.scale_factor])
+
+# Initial bounding polygon for data clipping 
+project.bounding_polygon = read_polygon(join(project.polygons_folder,
+                                             project.bounding_polygon_filename))
+project.bounding_maxarea = project.bounding_polygon_maxarea*project.scale_factor
+
+# Estimate the number of triangles                     
+trigs_min = number_mesh_triangles(project.interior_regions,
+                                  project.bounding_polygon,
+                                  project.bounding_maxarea)
+
+print 'min estimated number of triangles', trigs_min
Index: /DVD_images/extra_files/Gosford/README.txt
===================================================================
--- /DVD_images/extra_files/Gosford/README.txt	(revision 7205)
+++ /DVD_images/extra_files/Gosford/README.txt	(revision 7205)
@@ -0,0 +1,6 @@
+This disk contains the Geoscience Australia Tsunami Inundation Models
+for the GOSFORD region.
+
+If this DVD does not autostart and display a browser page, open the
+file X:\index.htm in your browser, where 'X' is the drive letter of
+your DVD drive.
Index: /DVD_images/extra_files/Gosford/auxiliary_scripts.html
===================================================================
--- /DVD_images/extra_files/Gosford/auxiliary_scripts.html	(revision 7205)
+++ /DVD_images/extra_files/Gosford/auxiliary_scripts.html	(revision 7205)
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the GOSFORD region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+
+  <a name="auxiliary scripts"<h2><b>Auxiliary Scripts</b></h2></a>
+  There are number of auxiliary scripts on this disk that you can use to extract information from the SWW files
+  produced by a simulation run.  These scripts are not meant to be the definitive answer on how to get information
+  from SWW files, but are offered as an example of one way to do it.
+  <p>
+  This page describes the scripts and shows how to use them.  Note that due to the ad-hoc nature of the scripts, 
+  you <b>must</b> modify these scripts before they can be used to extract information from any SWW files you
+  generate.
+
+  <a name="export_results_max.py scripts"<h3><b>export_results_max.py</b></h3></a>
+  The <font color="red">export_results_max.py</font> script can be used to create an ASC file that contains the maximum
+  of an ANUGA variable or expression for each point in a user-defined raster on the simulation region.
+  <p>
+  You must change certain values within the <font color="red">export_results_max.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Modify the <b>cellsize</b> value to set the size of the raster you require.  For example:
+<pre><font color="brown">    cellsize = 20		# raster cell size in metres</font></pre>
+
+    <li> Now set the timestep at which you want the raster generated.  Either set the actual timestep required or use 
+         <b>None</b> to indicate that you want the maximum values in the raster over all timesteps:
+<pre><font color="brown">    timestep = 1000
+    #timestep = None		# over all timesteps</font></pre>
+         <p>
+         Note that if you specify a particular timestep here you may not need to include all SWW files in the 
+         <b>time_dirs</b> list above.  For example, iy you wanted data from timestep 0 only then you would need
+         to include only the first SWW file in the list.
+
+    <li> If you want to clip the raster to one or more small regions then put the names of the regions of interest
+         into the <b>area</b> list:
+<pre><font color="brown">    area = ['Hobart', 'NW', 'South']</font></pre>
+         Note that the name strings you put into the <b>area</b> list must match the names used in the
+         <font color="red">project.py</font> file.  That is, if you use a name such as 'NW', then the
+         <font color="red">project.py</font> file must have lines like:
+<pre><font color="brown">    xminNW = 548000
+    xmaxNW = 561000
+    yminNW = 5250000
+    ymaxNW = 5258000</font></pre>
+         which set the maximum and minimum eastings and northings that define a rectangular region.
+         <p>
+         If you don't want to clip to a region of interest, then do this:
+<pre><font color="brown">    area = ['All']		# no region of interest</font></pre>
+
+    <li> Now you must decide which variable or expression values you want sampled on your raster.
+         Define a list <b>var</b> that contains strings defining the required variable/expression:
+<pre><font color="brown">    var = ['depth', 'speed']</font></pre>
+         Note that the strings you supply must be defined in the <b>var_equations</b> dictionary
+         prior to your definition of <b>var</b>:
+<pre><font color="brown">    var_equations = {'stage':     'stage',
+                     'momentum':  '(xmomentum**2 + ymomentum**2)**0.5',
+                     'depth':     'stage-elevation',
+                     'speed':     '(xmomentum**2 + ymomentum**2)**0.5/(stage-elevation+1.e-6)',
+                     'elevation': 'elevation' }</font></pre>
+         This dictionary maps your <b>var</b> strings to a variable or expression.
+  </ul>
+
+  <a name="get_runup.py"<h3><b>get_runup.py</b></h3></a>
+  The <font color="red">get_runup.py</font> script is used to get the maximum runup height in a specified region
+  or regions.
+  <p>
+  You must change certain values within the <font color="red">get_runup.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>images</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the regions within the simulation that you want the maximum runup for.
+  </ul>
+
+  <a name="get_timeseries.py"<h3><b>get_timeseries.py</b></h3></a>
+  The <font color="red">get_timeseries.py</font> script is used to get timeseries data for a selection of variable
+  data at one or more gauge points in a simulation.
+  <p>
+  You must change certain values within the <font color="red">get_timeseries.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>gauges</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the gauges within the simulation that you want the timeseries data for.
+  </ul>
+</body>
+</html>
Index: /DVD_images/extra_files/Gosford/index.html
===================================================================
--- /DVD_images/extra_files/Gosford/index.html	(revision 7205)
+++ /DVD_images/extra_files/Gosford/index.html	(revision 7205)
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the GOSFORD region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+<!--
+  <ul class="navbar">
+    <li><a href="#introduction">Introduction</a>
+    <li><a href="#installing">Installing</a>
+    <li><a href="#simulating">Running</a>
+    <li><a href="#userslist">Mailing list</a>
+    <li><a href="#auxscripts">Auxiliary scripts</a>
+    <li><a href="#FAQ">Frequently Asked Questions</a>
+    <li><a href="#extra">Extra stuff</a>
+  </ul>
+-->
+
+  <a name="introduction"<h3><b>Introduction</b></h3></a>
+  The information on this DVD and the associated report is intended to assist emergency managers in developing preparation and
+  response plans that can be used during a tsunami threat or emergency.
+  <p>
+  The Attorney General's Department (AGD) has supported Geoscience Australia (GA) in developing a range of products to support
+  the understanding of tsunami hazard through the Australian Tsunami Warning System Project. The work reported here is intended
+  to further build the capacity of the Jurisdictions in developing inundation models for prioritised locations. 
+  <p>
+  While the associated report provides background, model results and interpretations, the DVD contains all data, scripts and
+  software necessary to reproduce and potentially augment the models underpinning the report. This will allow the Jurisdiction
+  to rerun the models with minor modifications or new elevation data as needed and also potentially replicate the methodology
+  to other locations if desired.  
+  <p>
+  The data provided on this DVD is:
+  <ul>
+    <li> The Professional Opinion Report 2009/XX entitled <i>Capacity Building for Tsunami Planning and Preparation: 
+         Inundation Models for Four East Coast Australian Communities</i>
+    <li> Elevation data used with the tsunami inundation model
+    <li> Input data for a range of tsunami events
+    <li> The Python scripts used to run the models
+  </ul>
+
+  <a name="requirements"<h3><b>Requirements</b></h3></a>
+
+  The tsunami inundation simulations are based on the Open Source software package called ANUGA.
+  For more information about ANUGA visit <a href="https://datamining.anu.edu.au/anuga">https://datamining.anu.edu.au/anuga</a>. 
+  <p>
+  ANUGA has been developed and tested under the Windows XP and Linux (Ubuntu, Mint and Red Hat) operating systems.  
+  ANUGA may also be installed on a Windows Vista system and Debian Linux, but these have not been extensively tested.
+  <p>
+  The ANUGA scripts on this DVD require a minimum of 3GB of memory and possibly more, if mesh resolutions are increased. For this reason
+  we recommend using 64 bit Ubuntu Linux as this operating system can use more than 3GB of memory, whereas Windows XP cannot.
+
+  <a name="installing"<h3><b>Installing ANUGA</b></h3></a>
+
+  You must install ANUGA according to the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  As the installation procedure comprises a number of steps we suggest that it is carried out by someone with a
+  basic understanding of how to install software packages on the operating system of choice. 
+
+  <a name="simulating"<h3><b>How to run a simulation</b></h3></a>
+
+  This is how a user should run a model from the 'Tsunami Inundation Models' DVDs.
+  We assume that you are using Windows and will give examples for that operating system.
+  The translation to Linux is left as an exercise for the student!
+  <p>
+  <hr align="left" width="100">
+  <p>
+  First, it is assumed you have installed the ANUGA software according to the
+  <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you must copy the entire contents of the DVD to a place in your filesystem. Let's assume
+  that you want to put the data into <b>C:\ANUGA</b>. You would do this in a Command Prompt window:
+  <table class="code"><tr><td>
+    C:<br>
+    cd \<br>
+    mkdir ANUGA<br>
+    xcopy /e X:\ ANUGA
+  </td></tr></table>
+  <p>
+  Of course, you could just drag all files on the DVD (X:\ is the assumed drive letter) to the desired target directory with Explorer.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Now you must create an environment variable <b>ANUGADATA</b> that points to the directory you just created:
+  <table class="code"><tr><td>
+    set ANUGADATA=C:\ANUGA
+  </td></tr></table>
+  <p>
+  Doing the above in a Command Prompt window is temporary - if you open another
+  window you will not have the ANUGADATA environment variable defined. To make
+  the variable permanent you must set it in the <b>Start|Settings|Control Panel|System</b>
+  tool (<b>Advanced</b> tab).  See the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>
+  if you don't know how to do this.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  At this point you should run the <font color="red">build_elevation.py</font>
+  script to convert the raw elevation data to a set of 'combined_elevation'
+  files ready to be used by the ANUGA system. It is possible that you have not
+  been given the elevation data on the DVD as it is too large. In that case you
+  cannot run the <font color="red">build_elevation.py</font> script and you
+  should skip to the next step.
+  <table class="code"><tr><td>
+    cd C:\ANUGA<br>
+    cd project<br>
+    python build_elevation.py
+  </td></tr></table>
+  <p>
+  When you get to the point of running the model with your own data, you must
+  run <font color="red">build_elevation.py</font> to recreate the combined elevation files every time
+  you change the elevation data.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you prepare and execute the model:
+  <table class="code"><tr><td>
+    python setup_model.py<br >
+    python run_model.py
+  </td></tr></table>
+  <p>
+  <hr align="left" width="100">
+  <p>
+  This should all run to completion, though it may take several days, depending on
+  the hardware used.
+  <p>
+  If you do get an error from <font color="red">setup_model.py</font>
+  or <font color="red">run_model.py</font> look for some explanation in the log
+  files, which you should find somewhere under <b>C:\ANUGA\data</b>. Just keep
+  drilling down from that point until you find a directory called <b>outputs</b>.
+  The latest directory in outputs should contain a file called screen_error.txt
+  with an explanation of the error at the end. 
+  <p>
+  Once the simulation has completed you may view the results using the ANUGA
+  viewer as described in the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a> 
+  and <a href="documents/anuga_user_manual.pdf">User Manual</a>, run the script
+  <font color="red">export_results_max.py</font> to generate rasters suitable
+  for GIS mapping, or write dedicated scripts extracting timeseries at selected
+  locations.
+  <p>
+  The input waves are all derived from events available in the Australian Tsunami
+  Hazard Map. As this dataset is very large, this DVD only contains the events
+  described in the report. If other events from the Hazard Map are obtained,
+  the script <font color="red">build_urs_boundary.py</font> has been designed
+  to prepare the associated input wave for ingestion into ANUGA.  This script
+  is documented in the <a href="documents/anuga_user_manual.pdf">User Manual</a>.
+  <p>
+  The ANUGA <a href="documents/anuga_user_manual.pdf">User Manual</a> describes
+  how to use the ANUGA system in general and provides some examples of its use.
+
+  <a name="userslist"<h3><b>How to join the ANUGA user's mailing list</b></h3></a>
+
+  One of the quickest ways to get your ANUGA questions answered is by asking them on the <b>ANUGA-user</b> mailing list.
+  You can subscribe to the list <a href="https://lists.sourceforge.net/lists/listinfo/anuga-user">here</a>
+  and can view the mailing list <a href="https://sourceforge.net/mailarchive/forum.php?forum_name=anuga-user">archives</a>.
+  <p>
+  It costs nothing to register and you can choose to have list mail sent to you as individual emails or have them batched
+  into a few emails per day.  You can unsubscribe at any time through the subscribe link above.
+
+  <a name="auxscripts"<h3><b>How to use the auxiliary scripts</b></h3></a>
+
+  On this disk there are a selection of auxiliary scripts that you can use to extract various pieces of information
+  from the generated SWW files.  The <a href="auxiliary_scripts.html">auxiliary scripts</a> page explains how to use the scripts.
+
+  <a name="FAQ"<h3><b>Frequently Asked Questions</b></h3></a>
+
+  There is a <b>Frequently Asked Questions</b> (FAQ) page at
+  <a href="https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions">https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions</a>.
+  Look in here and search the mailing list archives before asking questions on the ANUGA user's mailing list.
+  Someone may already have asked your question!
+  <p>
+  Note that you can edit the FAQ pages, so it is helpful if you can update the FAQ with your question and its answer if you feel
+  it would be helpful to others.
+</body>
+</html>
Index: /DVD_images/extra_files/Gosford/project/project.py
===================================================================
--- /DVD_images/extra_files/Gosford/project/project.py	(revision 7205)
+++ /DVD_images/extra_files/Gosford/project/project.py	(revision 7205)
@@ -0,0 +1,281 @@
+"""
+This file contains all your file and directory definitions 
+for elevation, meshes and outputs.
+"""
+
+import os
+from anuga.utilities.system_tools import get_user_name, get_host_name
+from time import localtime, strftime, gmtime
+from os.path import join, exists
+import csv
+
+
+#-------------------------------------------------------------------------------
+# Directory setup
+#-------------------------------------------------------------------------------
+
+# this section needs to be updated to reflect the modelled community.
+# Note, the user needs to set up the directory system accordingly
+state = 'new_south_wales'
+scenario_name = 'gosford'
+scenario_folder = 'gosford_tsunami_scenario_2009'
+
+#-------------------------------------------------------------------------------
+# Initial Conditions
+#-------------------------------------------------------------------------------
+
+
+# Model specific parameters.
+# One or all can be changed each time the run_model script is executed
+tide = 0.0                # difference between MSL and HAT in metres
+zone = 56               # specify zone of model
+#event_number = 58242    # Puysegur 1 in 10 000 # the event number or the mux file name
+event_number = 51436    # New Hebrides 1 in 10 000
+#event_number = 58349    # Puysegur 1 in 5000
+#event_number = 58284    # Puysegur 1 in 2000
+#event_number = 58187    # Puysegur 1 in 1000
+#event_number = 58113    # Puysegur 1 in 500
+#event_number = 58025    # Puysegur 1 in 200
+
+
+alpha = 0.1             # smoothing parameter for mesh
+friction=0.01           # manning's friction coefficient
+starttime=0             # start time for simulation
+finaltime=60000         # final time for simulation
+
+setup = 'final'         # This can be one of three values
+                        #    trial - coarsest mesh, fast
+                        #    basic - coarse mesh
+                        #    final - fine mesh, slowest
+
+#-------------------------------------------------------------------------------
+# Output filename
+#
+# Your output filename should be unique between different runs on different data.
+# The list of items below will be used to create a file in your output directory.
+# Your user name and time+date will be automatically added.  For example,
+#     [setup, tide, event_number]
+# will result in a filename like
+#     20090212_091046_run_final_0_27283_rwilson
+#-------------------------------------------------------------------------------
+
+output_comment = [setup, tide, event_number]
+
+#-------------------------------------------------------------------------------
+# Input Data
+#-------------------------------------------------------------------------------
+
+# ELEVATION DATA
+# Used in build_elevation.py
+# Format for ascii grids, as produced in ArcGIS + a projection file
+ascii_grid_filenames = ['e151_s34_clip2',
+                        'aus197_topo2raster_clip2',
+                        'hydro_topo2raster_clip2']
+                        #'aus197_topo2raster_terrigal']   #GA data??
+                    
+
+
+#Get long list of Lidar filenames.
+ENV_INUNDATIONHOME = 'ANUGADATA'
+home = join(os.getenv(ENV_INUNDATIONHOME), 'data')
+anuga_folder = join(home, state, scenario_folder, 'anuga')
+topographies_folder = join(anuga_folder, 'topographies/original')
+
+#This reads a file containing lidar filenames and appends to a list
+file_list = join(topographies_folder, 'file_list.csv')
+fid = csv.reader(open(file_list))
+lidar_filenames = []
+for row in fid:
+    lidar_filenames.append(','.join(row))
+
+
+# Format for point is x,y,elevation (with header)
+point_filenames = ['estuaries.txt',
+##                   'XYHI341_HSDB_SD100035103',
+##                   'XYAHD',
+##                   'XYSCHOOL_11_99_HSDB_SD100021002_MGA',
+                   'ENT5C1S08_03_AHD_prepared.txt',
+                   'ENT5C1S09_03_AHD_prepared.txt',
+                   'ENT5C1S10_03_AHD_prepared.txt',
+##                   'XYAHD',
+##                   'XYHI341_HSDB_SD100035103_MGA',
+##                   'XYHI339_F_HSDB_SD100031669_MGA',
+##                   'AUS197_MGA_AHD_1972.txt',
+                   'hydro_clip_neg.txt'
+                   ]
+point_filenames.extend(lidar_filenames)
+#print point_filenames 
+          
+
+### Add csv header list to all files in point_filenames
+##headerlist = ['x', 'y', 'elevation'] 
+##for f in point_filenames:
+##    add_csv_header(join(topographies_folder, f), headerlist)
+
+    # BOUNDING POLYGON - for data clipping and estimate of triangles in mesh
+# Used in build_elevation.py
+# Format for points easting,northing (no header)
+bounding_polygon_filename = 'bounding_polygon.csv'
+bounding_polygon_maxarea = 100000
+
+# INTERIOR REGIONS -  for designing the mesh
+# Used in run_model.py
+# Format for points easting,northing (no header)
+
+interior_regions_data =[['aoi_umina_large.csv', 500],
+                        ['aoi_terrigal.csv', 500],
+                        ['aos_umina_large.csv', 2500],
+                        ['aos_terrigal.csv', 2500]]
+
+
+# LAND - used to set the initial stage/water to be offcoast only
+# Used in run_model.py.  Format for points easting,northing (no header)
+land_initial_conditions_filename = [['initial_conditions.csv', 0]]
+                                  
+
+# GAUGES - for creating timeseries at a specific point
+# Used in get_timeseries.py.  
+# Format easting,northing,name,elevation (with header)
+gauges_filename = 'gauges.csv'
+
+# BUILDINGS EXPOSURE - for identifying inundated houses
+# Used in run_building_inundation.py
+# Format latitude,longitude etc (geographic)
+##building_exposure_filename = 'busselton_res_clip.csv' # from NEXIS
+
+# AREA OF IMAGES - Extent of each image to find out highest runup
+# Header - easting,northing,id,value
+# Used in get_runup.py
+images_filename = 'images.csv'
+
+# BOUNDING POLYGON - used in build_boundary.py and run_model.py respectively
+# NOTE: when files are put together the points must be in sequence
+# For ease go clockwise!
+# Check the run_model.py for boundary_tags
+
+# Thinned ordering file from Hazard Map (geographic)
+# Format is index,latitude,longitude (with header)
+urs_order_filename = 'urs_order.csv'
+
+# Landward bounding points
+# Format easting,northing (no header)
+landward_boundary_filename = 'landward_boundary.csv'
+
+# MUX input filename.
+# If a meta-file from EventSelection is used, set 'multi-mux' to True.
+# If a single MUX stem filename (*.grd) is used, set 'multi-mux' to False.
+##mux_input_filename = event_number # to be found in event_folder
+                                    # (ie boundaries/event_number/)
+##multi_mux = False
+mux_input_filename = 'event.list'
+multi_mux = True
+
+zone = 56
+#-------------------------------------------------------------------------------
+# Clipping regions for export to asc and regions for clipping data
+# Final inundation maps should only be created in regions of the finest mesh
+#-------------------------------------------------------------------------------
+
+# ASCII export grid for Busselton
+xminBusselton = 340000
+xmaxBusselton = 352000
+yminBusselton = 6271500
+ymaxBusselton = 6280000
+
+# ASCII export grid for Bunbury
+xminBunbury = 369000
+xmaxBunbury = 381000
+yminBunbury = 6308000
+ymaxBunbury = 6316500
+
+################################################################################
+################################################################################
+####         NOTE: NOTHING WOULD NORMALLY CHANGE BELOW THIS POINT.          ####
+################################################################################
+################################################################################
+
+# Get system user and host names.
+# These values can be used to distinguish between two similar runs by two
+# different users or runs by the same user on two different machines.
+user = get_user_name()
+host = get_host_name()
+
+#-------------------------------------------------------------------------------
+# Output Elevation Data
+#-------------------------------------------------------------------------------
+
+# Output filename for elevation
+# this is a combination of all the data generated in build_elevation.py
+combined_elevation_basename = scenario_name + '_combined_elevation'
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# determines time for setting up output directories
+time = strftime('%Y%m%d_%H%M%S', localtime()) 
+gtime = strftime('%Y%m%d_%H%M%S', gmtime()) 
+build_time = time + '_build'
+run_time = time + '_run_'
+
+# create paths generated from environment variables.
+home = join(os.getenv(ENV_INUNDATIONHOME), 'data') # Absolute path for data folder
+ 
+# check various directories/files that must exist
+anuga_folder = join(home, state, scenario_folder, 'anuga')
+topographies_folder = join(anuga_folder, 'topographies/original')
+polygons_folder = join(anuga_folder, 'polygons')
+boundaries_folder = join(anuga_folder, 'boundaries')
+output_folder = join(anuga_folder, 'outputs')
+gauges_folder = join(anuga_folder, 'gauges')
+meshes_folder = join(anuga_folder, 'meshes')
+event_folder = join(boundaries_folder, str(event_number))
+
+#-------------------------------------------------------------------------------
+# Location of input and output data
+#-------------------------------------------------------------------------------
+
+# Convert the user output_comment to a string for run_model.py
+output_comment = ('_'.join([str(x) for x in output_comment if x != user])
+                  + '_' + user)
+
+# The absolute pathname of the all elevation, generated in build_elevation.py
+combined_elevation = join(topographies_folder, combined_elevation_basename)
+
+# The absolute pathname of the mesh, generated in run_model.py
+meshes = join(meshes_folder, scenario_name) + '.msh'
+
+# The pathname for the urs order points, used within build_urs_boundary.py
+urs_order = join(boundaries_folder, urs_order_filename)
+
+# The absolute pathname for the landward points of the bounding polygon,
+# Used within run_model.py)
+landward_boundary = join(boundaries_folder, landward_boundary_filename)
+
+# The absolute pathname for the .sts file, generated in build_boundary.py
+event_sts = join(event_folder, scenario_name)
+
+# The absolute pathname for the output folder names
+# Used for build_elevation.py
+output_build = join(output_folder, build_time) + '_' + str(user) 
+# Used for run_model.py
+output_run = join(output_folder, run_time) + output_comment 
+# Used by post processing
+output_run_time = join(output_run, scenario_name) 
+
+# The absolute pathname for the gauges file
+# Used for get_timeseries.py
+gauges = join(gauges_folder, gauges_filename)       
+
+# The absolute pathname for the building file
+# Used for run_building_inundation.py
+##building_exposure = join(gauges_folder, building_exposure_filename)
+
+# The absolute pathname for the image file
+# Used for get_runup.py
+if images_filename:
+    images = join(polygons_folder, images_filename)
+
+# full path to where MUX files (or meta-files) live
+mux_input = join(event_folder, mux_input_filename)
+
Index: /DVD_images/extra_files/Gosford/project/run_model.py
===================================================================
--- /DVD_images/extra_files/Gosford/project/run_model.py	(revision 7205)
+++ /DVD_images/extra_files/Gosford/project/run_model.py	(revision 7205)
@@ -0,0 +1,178 @@
+"""Run a tsunami inundation scenario for Busselton, WA, Australia.
+
+The scenario is defined by a triangular mesh created from project.polygon, the
+elevation data is compiled into a pts file through build_elevation.py and a
+simulated tsunami is generated through an sts file from build_boundary.py.
+
+Input: sts file (build_boundary.py for respective event)
+       pts file (build_elevation.py)
+       information from project file
+Outputs: sww file stored in project.output_run_time_dir 
+The export_results_all.py and get_timeseries.py is reliant
+on the outputs of this script
+
+Ole Nielsen and Duncan Gray, GA - 2005, Jane Sexton, Nick Bartzis, GA - 2006
+Ole Nielsen, Jane Sexton and Kristy Van Putten - 2008
+"""
+
+#------------------------------------------------------------------------------
+# Import necessary modules
+#------------------------------------------------------------------------------
+
+# Standard modules
+import os
+import os.path
+import time
+from time import localtime, strftime, gmtime
+
+# Related major packages
+from Scientific.IO.NetCDF import NetCDFFile
+import Numeric as num
+
+from anuga.interface import create_domain_from_regions
+from anuga.interface import Transmissive_stage_zero_momentum_boundary
+from anuga.interface import Dirichlet_boundary
+from anuga.interface import Reflective_boundary
+from anuga.interface import Field_boundary
+from anuga.interface import create_sts_boundary
+from anuga.interface import csv2building_polygons
+from file_length import file_length
+
+from anuga.shallow_water.data_manager import start_screen_catcher
+from anuga.shallow_water.data_manager import copy_code_files
+from anuga.shallow_water.data_manager import urs2sts
+from anuga.utilities.polygon import read_polygon, Polygon_function
+
+# Application specific imports
+from setup_model import project
+import build_urs_boundary as bub
+
+#-------------------------------------------------------------------------------
+# Copy scripts to time stamped output directory and capture screen
+# output to file. Copy script must be before screen_catcher
+#-------------------------------------------------------------------------------
+
+copy_code_files(project.output_run, __file__, 
+                os.path.join(os.path.dirname(project.__file__),
+                             project.__name__+'.py'))
+start_screen_catcher(project.output_run, 0, 1)
+
+#-------------------------------------------------------------------------------
+# Create the computational domain based on overall clipping polygon with
+# a tagged boundary and interior regions defined in project.py along with
+# resolutions (maximal area of per triangle) for each polygon
+#-------------------------------------------------------------------------------
+
+print 'Create computational domain'
+
+# Create the STS file
+if not os.path.exists(project.event_sts + '.sts'):
+    bub.build_urs_boundary(project.mux_input_filename, project.event_sts)
+
+# Read in boundary from ordered sts file
+event_sts = create_sts_boundary(project.event_sts)
+
+# Reading the landward defined points, this incorporates the original clipping
+# polygon minus the 100m contour
+landward_boundary = read_polygon(project.landward_boundary)
+
+# Combine sts polyline with landward points
+bounding_polygon_sts = event_sts + landward_boundary
+
+# Number of boundary segments
+num_ocean_segments = len(event_sts) - 1
+# Number of landward_boundary points
+num_land_points = file_length(project.landward_boundary)
+
+# Boundary tags refer to project.landward_boundary
+# 4 points equals 5 segments start at N
+boundary_tags={'back': range(num_ocean_segments+1,
+                             num_ocean_segments+num_land_points),
+               'side': [num_ocean_segments,
+                        num_ocean_segments+num_land_points],
+               'ocean': range(num_ocean_segments)}
+
+# Build mesh and domain
+domain = create_domain_from_regions(bounding_polygon_sts,
+                                    boundary_tags=boundary_tags,
+                                    maximum_triangle_area=project.bounding_maxarea,
+                                    interior_regions=project.interior_regions,
+                                    mesh_filename=project.meshes,
+                                    use_cache=False,
+                                    verbose=True)
+
+domain.geo_reference.zone = project.zone
+print domain.statistics()
+
+domain.set_name(project.scenario_name)
+domain.set_datadir(project.output_run) 
+domain.set_minimum_storable_height(0.01)    # Don't store depth less than 1cm
+
+#-------------------------------------------------------------------------------
+# Setup initial conditions
+#-------------------------------------------------------------------------------
+
+print 'Setup initial conditions'
+
+# Set the initial stage in the offcoast region only
+if project.land_initial_conditions:
+    IC = Polygon_function(project.land_initial_conditions,
+                          default=project.tide,
+                          geo_reference=domain.geo_reference)
+else:
+    IC = 0
+domain.set_quantity('stage', IC, use_cache=True, verbose=True)
+domain.set_quantity('friction', project.friction) 
+domain.set_quantity('elevation', 
+                    filename=project.combined_elevation+'.pts',
+                    use_cache=True,
+                    verbose=True,
+                    alpha=project.alpha)
+
+#-------------------------------------------------------------------------------
+# Setup boundary conditions 
+#-------------------------------------------------------------------------------
+
+print 'Set boundary - available tags:', domain.get_boundary_tags()
+
+Br = Reflective_boundary(domain)
+Bt = Transmissive_stage_zero_momentum_boundary(domain)
+Bd = Dirichlet_boundary([project.tide, 0, 0])
+Bf = Field_boundary(project.event_sts+'.sts',
+                    domain, mean_stage=project.tide,
+                    time_thinning=1,
+                    default_boundary=Dirichlet_boundary([0, 0, 0]),
+                    boundary_polygon=bounding_polygon_sts,                    
+                    use_cache=True,
+                    verbose=True)
+
+
+domain.set_boundary({'back': Br,
+                     'side': Bt,
+                     'ocean': Bf}) 
+
+#-------------------------------------------------------------------------------
+# Evolve system through time
+#-------------------------------------------------------------------------------
+
+t0 = time.time()
+##for t in domain.evolve(yieldstep=project.yieldstep, 
+##                       finaltime=1440,
+##                       skip_initial_step=False): 
+##    print domain.timestepping_statistics()
+##    print domain.boundary_statistics(tags='ocean')
+##
+##for t in domain.evolve(yieldstep=5, 
+##                       finaltime=6000,
+##                       skip_initial_step=True): 
+##    print domain.timestepping_statistics()
+##    print domain.boundary_statistics(tags='ocean')
+
+
+for t in domain.evolve(yieldstep=project.yieldstep, 
+                       finaltime=project.finaltime,
+                       skip_initial_step=False): 
+    print domain.timestepping_statistics()
+    print domain.boundary_statistics(tags='ocean')
+
+print 'Simulation took %.2f seconds' % (time.time()-t0)
Index: /DVD_images/extra_files/Gosford/project/setup_model.py
===================================================================
--- /DVD_images/extra_files/Gosford/project/setup_model.py	(revision 7205)
+++ /DVD_images/extra_files/Gosford/project/setup_model.py	(revision 7205)
@@ -0,0 +1,148 @@
+"""
+Module to import the project.py 'configuration' file and perform
+sanity checks plus a quick check on mesh generation.
+
+Also callable as a stand-alone program, mainly to view the results
+of the mesh generation.
+"""
+
+import os
+
+from os.path import join, exists
+from anuga.utilities.polygon import read_polygon, number_mesh_triangles
+
+import project
+
+
+#-------------------------------------------------------------------------------
+# Sanity checks - check that required files/directories, etc, exist.
+#-------------------------------------------------------------------------------
+
+# flag - we check many things and then don't proceed if anything wrong
+sanity_error = False               # checked at bottom of this file
+
+# Test that environment variables are defined.
+if os.getenv(project.ENV_INUNDATIONHOME) is None:
+    print "Environment variable '%s' is not set" % project.ENV_INUNDATIONHOME
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Directory Structure
+#-------------------------------------------------------------------------------
+
+# check folders generated from environment variables.
+if not exists(project.home):
+    print "Sorry, data directory '%s' doesn't exist" % project.home
+    sanity_error = True
+    
+if not exists(project.anuga_folder):
+    print "Sorry, ANUGA directory '%s' doesn't exist" % project.anuga_folder
+    sanity_error = True
+
+if not exists(project.topographies_folder):
+    print ("Sorry, topo directory '%s' doesn't exist"
+           % project.topographies_folder)
+    sanity_error = True
+
+if not exists(project.polygons_folder):
+    print ("Sorry, polygon directory '%s' doesn't exist"
+           % project.polygons_folder)
+    sanity_error = True
+
+if not exists(project.boundaries_folder):
+    print ("Sorry, boundaries directory '%s' doesn't exist"
+           % project.boundaries_folder)
+    sanity_error = True
+
+if not exists(project.output_folder):
+    print "Sorry, outputs directory '%s' doesn't exist" % project.output_folder
+    sanity_error = True
+
+if not exists(project.gauges_folder):
+    print "Sorry, gauges directory '%s' doesn't exist" % project.gauges_folder
+    sanity_error = True
+
+if not exists(project.meshes_folder):
+    print "Sorry, meshes directory '%s' doesn't exist" % project.meshes_folder
+    sanity_error = True
+
+# if multi_mux is True, check if multi-mux file exists
+if project.multi_mux:
+    if not exists(project.mux_input):
+        print ("Sorry, MUX input file '%s' doesn't exist"
+               % project.mux_input)
+        sanity_error = True
+
+#-----
+# If this directory don't exist, EventSelection hasn't been run.
+#-----
+
+if not exists(project.event_folder):
+    print ("Sorry, you must generate event %s with EventSelection."
+           % project.event_number)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Determine type of run
+#-------------------------------------------------------------------------------
+
+if project.setup == 'trial':
+    print 'trial'
+    project.scale_factor = 100
+    project.time_thinning = 96
+    project.yieldstep = 240
+elif project.setup == 'basic': 
+    print 'basic'
+    project.scale_factor = 4
+    project.time_thinning = 12
+    project.yieldstep = 120
+elif project.setup == 'final': 
+    print 'final'
+    project.scale_factor = 1
+    project.time_thinning = 4
+    project.yieldstep = 60
+else:
+    print ("Sorry, you must set the 'setup' variable to one of:"
+           '   trial - coarsest mesh, fast\n'
+           '   basic - coarse mesh\n'
+           '   final - fine mesh, slowest\n'
+           '\n'
+           "'setup' was set to '%s'" % project.setup)
+    sanity_error = True
+
+#-------------------------------------------------------------------------------
+# Check for errors detected above.
+#-------------------------------------------------------------------------------
+
+if sanity_error:
+    msg = 'You must fix the above errors before continuing.'
+    raise Exception, msg
+
+#-------------------------------------------------------------------------------
+# Reading polygons and creating interior regions
+#-------------------------------------------------------------------------------
+
+# Create list of land polygons with initial conditions
+project.land_initial_conditions = []
+for filename, MSL in project.land_initial_conditions_filename:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.land_initial_conditions.append([polygon, MSL])
+
+# Create list of interior polygons with scaling factor
+project.interior_regions = []
+for filename, maxarea in project.interior_regions_data:
+    polygon = read_polygon(join(project.polygons_folder, filename))
+    project.interior_regions.append([polygon,
+                                     maxarea*project.scale_factor])
+
+# Initial bounding polygon for data clipping 
+project.bounding_polygon = read_polygon(join(project.polygons_folder,
+                                             project.bounding_polygon_filename))
+project.bounding_maxarea = project.bounding_polygon_maxarea*project.scale_factor
+
+# Estimate the number of triangles                     
+trigs_min = number_mesh_triangles(project.interior_regions,
+                                  project.bounding_polygon,
+                                  project.bounding_maxarea)
+
+print 'min estimated number of triangles', trigs_min
Index: /DVD_images/extra_files/Hobart/README.txt
===================================================================
--- /DVD_images/extra_files/Hobart/README.txt	(revision 7205)
+++ /DVD_images/extra_files/Hobart/README.txt	(revision 7205)
@@ -0,0 +1,6 @@
+This disk contains the Geoscience Australia Tsunami Inundation Models
+for the HOBART region.
+
+If this DVD does not autostart and display a browser page, open the
+file X:\index.htm in your browser, where 'X' is the drive letter of
+your DVD drive.
Index: /DVD_images/extra_files/Hobart/auxiliary_scripts.html
===================================================================
--- /DVD_images/extra_files/Hobart/auxiliary_scripts.html	(revision 7205)
+++ /DVD_images/extra_files/Hobart/auxiliary_scripts.html	(revision 7205)
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the HOBART region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+
+  <a name="auxiliary scripts"<h2><b>Auxiliary Scripts</b></h2></a>
+  There are number of auxiliary scripts on this disk that you can use to extract information from the SWW files
+  produced by a simulation run.  These scripts are not meant to be the definitive answer on how to get information
+  from SWW files, but are offered as an example of one way to do it.
+  <p>
+  This page describes the scripts and shows how to use them.  Note that due to the ad-hoc nature of the scripts, 
+  you <b>must</b> modify these scripts before they can be used to extract information from any SWW files you
+  generate.
+
+  <a name="export_results_max.py scripts"<h3><b>export_results_max.py</b></h3></a>
+  The <font color="red">export_results_max.py</font> script can be used to create an ASC file that contains the maximum
+  of an ANUGA variable or expression for each point in a user-defined raster on the simulation region.
+  <p>
+  You must change certain values within the <font color="red">export_results_max.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Modify the <b>cellsize</b> value to set the size of the raster you require.  For example:
+<pre><font color="brown">    cellsize = 20		# raster cell size in metres</font></pre>
+
+    <li> Now set the timestep at which you want the raster generated.  Either set the actual timestep required or use 
+         <b>None</b> to indicate that you want the maximum values in the raster over all timesteps:
+<pre><font color="brown">    timestep = 1000
+    #timestep = None		# over all timesteps</font></pre>
+         <p>
+         Note that if you specify a particular timestep here you may not need to include all SWW files in the 
+         <b>time_dirs</b> list above.  For example, iy you wanted data from timestep 0 only then you would need
+         to include only the first SWW file in the list.
+
+    <li> If you want to clip the raster to one or more small regions then put the names of the regions of interest
+         into the <b>area</b> list:
+<pre><font color="brown">    area = ['Hobart', 'NW', 'South']</font></pre>
+         Note that the name strings you put into the <b>area</b> list must match the names used in the
+         <font color="red">project.py</font> file.  That is, if you use a name such as 'NW', then the
+         <font color="red">project.py</font> file must have lines like:
+<pre><font color="brown">    xminNW = 548000
+    xmaxNW = 561000
+    yminNW = 5250000
+    ymaxNW = 5258000</font></pre>
+         which set the maximum and minimum eastings and northings that define a rectangular region.
+         <p>
+         If you don't want to clip to a region of interest, then do this:
+<pre><font color="brown">    area = ['All']		# no region of interest</font></pre>
+
+    <li> Now you must decide which variable or expression values you want sampled on your raster.
+         Define a list <b>var</b> that contains strings defining the required variable/expression:
+<pre><font color="brown">    var = ['depth', 'speed']</font></pre>
+         Note that the strings you supply must be defined in the <b>var_equations</b> dictionary
+         prior to your definition of <b>var</b>:
+<pre><font color="brown">    var_equations = {'stage':     'stage',
+                     'momentum':  '(xmomentum**2 + ymomentum**2)**0.5',
+                     'depth':     'stage-elevation',
+                     'speed':     '(xmomentum**2 + ymomentum**2)**0.5/(stage-elevation+1.e-6)',
+                     'elevation': 'elevation' }</font></pre>
+         This dictionary maps your <b>var</b> strings to a variable or expression.
+  </ul>
+
+  <a name="get_runup.py"<h3><b>get_runup.py</b></h3></a>
+  The <font color="red">get_runup.py</font> script is used to get the maximum runup height in a specified region
+  or regions.
+  <p>
+  You must change certain values within the <font color="red">get_runup.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>images</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the regions within the simulation that you want the maximum runup for.
+  </ul>
+
+  <a name="get_timeseries.py"<h3><b>get_timeseries.py</b></h3></a>
+  The <font color="red">get_timeseries.py</font> script is used to get timeseries data for a selection of variable
+  data at one or more gauge points in a simulation.
+  <p>
+  You must change certain values within the <font color="red">get_timeseries.py</font> file to get what you want:
+  <ul>
+    <li> You must determine how many SWW files your simulation produced and create as many lines like this:
+<pre><font color="brown">    time_dir1 = '20090505_150430_run_final_0.8_58292_None_kvanputt'
+    time_dir2 = '20090505_150517_run_final_0_58292_None_kvanputt'
+    time_dir3 = '20090505_150711_run_final_0_58280_None_kvanputt'
+    time_dir4 = '20090505_150805_run_final_0.8_58280_None_kvanputt'
+    time_dir5 = '20090505_151322_run_final_0.8_64477_None_kvanputt'
+    time_dir6 = '20090505_151447_run_final_0_64477_None_kvanputt'</font></pre>
+         as necessary.  Then modify the line:
+<pre><font color="brown">    time_dirs = [time_dir1, time_dir2, time_dir3, time_dir4, time_dir5, time_dir6]</font></pre>
+         to include each of the variables you defined above.
+
+    <li> Make sure that the <b>gauges</b> list in <font color="red">projects.py</font> contains one or more CSV files
+         defining the gauges within the simulation that you want the timeseries data for.
+  </ul>
+</body>
+</html>
Index: /DVD_images/extra_files/Hobart/index.html
===================================================================
--- /DVD_images/extra_files/Hobart/index.html	(revision 7205)
+++ /DVD_images/extra_files/Hobart/index.html	(revision 7205)
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+  <title>Geoscience Australia</title>
+  <link rel="stylesheet" href="browser_files/style.css">
+  <link REL="SHORTCUT ICON" HREF="browser_files/favicon.ico">
+</head>
+<body>
+  <table cellspacing="10" border="0">
+    <tr>
+      <td>
+        <img src="browser_files/logo.jpg" alt="Australian Government, Geoscience Australia" width="327" height="80" border="0"/>
+      </td>
+      <td width="50">
+        &nbsp;
+      </td>
+      <td>
+        <H1>Tsunami Inundation Models for the HOBART region</H1>
+      </td>
+    </tr>
+  </table>
+  <hr>
+<!--
+  <ul class="navbar">
+    <li><a href="#introduction">Introduction</a>
+    <li><a href="#installing">Installing</a>
+    <li><a href="#simulating">Running</a>
+    <li><a href="#userslist">Mailing list</a>
+    <li><a href="#auxscripts">Auxiliary scripts</a>
+    <li><a href="#FAQ">Frequently Asked Questions</a>
+    <li><a href="#extra">Extra stuff</a>
+  </ul>
+-->
+
+  <a name="introduction"<h3><b>Introduction</b></h3></a>
+  The information on this DVD and the associated report is intended to assist emergency managers in developing preparation and
+  response plans that can be used during a tsunami threat or emergency.
+  <p>
+  The Attorney General's Department (AGD) has supported Geoscience Australia (GA) in developing a range of products to support
+  the understanding of tsunami hazard through the Australian Tsunami Warning System Project. The work reported here is intended
+  to further build the capacity of the Jurisdictions in developing inundation models for prioritised locations. 
+  <p>
+  While the associated report provides background, model results and interpretations, the DVD contains all data, scripts and
+  software necessary to reproduce and potentially augment the models underpinning the report. This will allow the Jurisdiction
+  to rerun the models with minor modifications or new elevation data as needed and also potentially replicate the methodology
+  to other locations if desired.  
+  <p>
+  The data provided on this DVD is:
+  <ul>
+    <li> The Professional Opinion Report 2009/XX entitled <i>Capacity Building for Tsunami Planning and Preparation: 
+         Inundation Models for Four East Coast Australian Communities</i>
+    <li> Elevation data used with the tsunami inundation model
+    <li> Input data for a range of tsunami events
+    <li> The Python scripts used to run the models
+  </ul>
+
+  <a name="requirements"<h3><b>Requirements</b></h3></a>
+
+  The tsunami inundation simulations are based on the Open Source software package called ANUGA.
+  For more information about ANUGA visit <a href="https://datamining.anu.edu.au/anuga">https://datamining.anu.edu.au/anuga</a>. 
+  <p>
+  ANUGA has been developed and tested under the Windows XP and Linux (Ubuntu, Mint and Red Hat) operating systems.  
+  ANUGA may also be installed on a Windows Vista system and Debian Linux, but these have not been extensively tested.
+  <p>
+  The ANUGA scripts on this DVD require a minimum of 3GB of memory and possibly more, if mesh resolutions are increased. For this reason
+  we recommend using 64 bit Ubuntu Linux as this operating system can use more than 3GB of memory, whereas Windows XP cannot.
+
+  <a name="installing"<h3><b>Installing ANUGA</b></h3></a>
+
+  You must install ANUGA according to the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  As the installation procedure comprises a number of steps we suggest that it is carried out by someone with a
+  basic understanding of how to install software packages on the operating system of choice. 
+
+  <a name="simulating"<h3><b>How to run a simulation</b></h3></a>
+
+  This is how a user should run a model from the 'Tsunami Inundation Models' DVDs.
+  We assume that you are using Windows and will give examples for that operating system.
+  The translation to Linux is left as an exercise for the student!
+  <p>
+  <hr align="left" width="100">
+  <p>
+  First, it is assumed you have installed the ANUGA software according to the
+  <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you must copy the entire contents of the DVD to a place in your filesystem. Let's assume
+  that you want to put the data into <b>C:\ANUGA</b>. You would do this in a Command Prompt window:
+  <table class="code"><tr><td>
+    C:<br>
+    cd \<br>
+    mkdir ANUGA<br>
+    xcopy /e X:\ ANUGA
+  </td></tr></table>
+  <p>
+  Of course, you could just drag all files on the DVD (X:\ is the assumed drive letter) to the desired target directory with Explorer.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Now you must create an environment variable <b>ANUGADATA</b> that points to the directory you just created:
+  <table class="code"><tr><td>
+    set ANUGADATA=C:\ANUGA
+  </td></tr></table>
+  <p>
+  Doing the above in a Command Prompt window is temporary - if you open another
+  window you will not have the ANUGADATA environment variable defined. To make
+  the variable permanent you must set it in the <b>Start|Settings|Control Panel|System</b>
+  tool (<b>Advanced</b> tab).  See the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a>
+  if you don't know how to do this.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  At this point you should run the <font color="red">build_elevation.py</font>
+  script to convert the raw elevation data to a set of 'combined_elevation'
+  files ready to be used by the ANUGA system. It is possible that you have not
+  been given the elevation data on the DVD as it is too large. In that case you
+  cannot run the <font color="red">build_elevation.py</font> script and you
+  should skip to the next step.
+  <table class="code"><tr><td>
+    cd C:\ANUGA<br>
+    cd project<br>
+    python build_elevation.py
+  </td></tr></table>
+  <p>
+  When you get to the point of running the model with your own data, you must
+  run <font color="red">build_elevation.py</font> to recreate the combined elevation files every time
+  you change the elevation data.
+  <p>
+  <hr align="left" width="100">
+  <p>
+  Next, you prepare and execute the model:
+  <table class="code"><tr><td>
+    python setup_model.py<br >
+    python run_model.py
+  </td></tr></table>
+  <p>
+  <hr align="left" width="100">
+  <p>
+  This should all run to completion, though it may take several days, depending on
+  the hardware used.
+  <p>
+  If you do get an error from <font color="red">setup_model.py</font>
+  or <font color="red">run_model.py</font> look for some explanation in the log
+  files, which you should find somewhere under <b>C:\ANUGA\data</b>. Just keep
+  drilling down from that point until you find a directory called <b>outputs</b>.
+  The latest directory in outputs should contain a file called screen_error.txt
+  with an explanation of the error at the end. 
+  <p>
+  Once the simulation has completed you may view the results using the ANUGA
+  viewer as described in the <a href="documents/anuga_installation_guide.pdf">Installation Guide</a> 
+  and <a href="documents/anuga_user_manual.pdf">User Manual</a>, run the script
+  <font color="red">export_results_max.py</font> to generate rasters suitable
+  for GIS mapping, or write dedicated scripts extracting timeseries at selected
+  locations.
+  <p>
+  The input waves are all derived from events available in the Australian Tsunami
+  Hazard Map. As this dataset is very large, this DVD only contains the events
+  described in the report. If other events from the Hazard Map are obtained,
+  the script <font color="red">build_urs_boundary.py</font> has been designed
+  to prepare the associated input wave for ingestion into ANUGA.  This script
+  is documented in the <a href="documents/anuga_user_manual.pdf">User Manual</a>.
+  <p>
+  The ANUGA <a href="documents/anuga_user_manual.pdf">User Manual</a> describes
+  how to use the ANUGA system in general and provides some examples of its use.
+
+  <a name="userslist"<h3><b>How to join the ANUGA user's mailing list</b></h3></a>
+
+  One of the quickest ways to get your ANUGA questions answered is by asking them on the <b>ANUGA-user</b> mailing list.
+  You can subscribe to the list <a href="https://lists.sourceforge.net/lists/listinfo/anuga-user">here</a>
+  and can view the mailing list <a href="https://sourceforge.net/mailarchive/forum.php?forum_name=anuga-user">archives</a>.
+  <p>
+  It costs nothing to register and you can choose to have list mail sent to you as individual emails or have them batched
+  into a few emails per day.  You can unsubscribe at any time through the subscribe link above.
+
+  <a name="auxscripts"<h3><b>How to use the auxiliary scripts</b></h3></a>
+
+  On this disk there are a selection of auxiliary scripts that you can use to extract various pieces of information
+  from the generated SWW files.  The <a href="auxiliary_scripts.html">auxiliary scripts</a> page explains how to use the scripts.
+
+  <a name="FAQ"<h3><b>Frequently Asked Questions</b></h3></a>
+
+  There is a <b>Frequently Asked Questions</b> (FAQ) page at
+  <a href="https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions">https://datamining.anu.edu.au/anuga/wiki/FrequentlyAskedQuestions</a>.
+  Look in here and search the mailing list archives before asking questions on the ANUGA user's mailing list.
+  Someone may already have asked your question!
+  <p>
+  Note that you can edit the FAQ pages, so it is helpful if you can update the FAQ with your question and its answer if you feel
+  it would be helpful to others.
+</body>
+</html>
Index: /DVD_images/extra_files/README.txt
===================================================================
--- /DVD_images/extra_files/README.txt	(revision 7205)
+++ /DVD_images/extra_files/README.txt	(revision 7205)
@@ -0,0 +1,14 @@
+This directory contains extra files/directories that are added to
+the data and scripts for each jurisdiction.  This does *not*
+include this file.
+
+Files/directories here *other* than BatemansBay, GoldCoast,
+Gosford and Hobart are to be copied into the root directory of
+*all* jurisdiction directories.  That is, autorun.inf and the
+directories browser_files and documents are copied to each DVD
+staging area.
+
+The BatemansBay, GoldCoast, Gosford and Hobart directory contents
+are to be copied into the corresponding jurisdiction DVD image
+directory.  Any files in these directories will replace those
+copied from the user data area.
Index: /DVD_images/extra_files/autorun.inf
===================================================================
--- /DVD_images/extra_files/autorun.inf	(revision 7205)
+++ /DVD_images/extra_files/autorun.inf	(revision 7205)
@@ -0,0 +1,3 @@
+[autorun]
+shellexecute=index.html
+icon=favicon.ico
Index: /DVD_images/extra_files/browser_files/README.txt
===================================================================
--- /DVD_images/extra_files/browser_files/README.txt	(revision 7205)
+++ /DVD_images/extra_files/browser_files/README.txt	(revision 7205)
@@ -0,0 +1,1 @@
+Files here are required by the index.htm file in the root directory.
Index: /DVD_images/extra_files/browser_files/style.css
===================================================================
--- /DVD_images/extra_files/browser_files/style.css	(revision 7205)
+++ /DVD_images/extra_files/browser_files/style.css	(revision 7205)
@@ -0,0 +1,39 @@
+body {
+  padding-left: 1em;
+  padding-right: 1em;
+  font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif;
+  background-color: white}
+h1 {
+  font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif }
+h2 {
+  font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif }
+h3 {
+  font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif }
+a:link {
+  color: blue }
+a:visited {
+  color: purple }
+table.code {
+	border-width: 1px 1px 1px 1px;
+	border-spacing: 0px;
+	border-style: dashed dashed dashed dashed;
+	border-color: gray gray gray gray;
+	border-collapse: separate;
+	background-color: rgb(250, 240, 230);
+}
+table.code th {
+	border-width: 5px 5px 5px 5px;
+	padding: 5px 5px 5px 5px;
+	border-style: none none none none;
+	border-color: gray gray gray gray;
+	background-color: white;
+	-moz-border-radius: 0px 0px 0px 0px;
+}
+table.code td {
+	border-width: 5px 5px 5px 5px;
+	padding: 5px 5px 5px 5px;
+	border-style: none none none none;
+	border-color: gray gray gray gray;
+	background-color: #ffffe6;
+	-moz-border-radius: 0px 0px 0px 0px;
+}
Index: /DVD_images/update_DVD_images.py
===================================================================
--- /DVD_images/update_DVD_images.py	(revision 7205)
+++ /DVD_images/update_DVD_images.py	(revision 7205)
@@ -0,0 +1,453 @@
+#!/usr/bin/env python
+
+'''
+Program to update a DVD jurisdiction 'anuga' directory from the
+original source directory.
+
+usage: update.py <source>
+
+where <source> is one of:
+                  Hobart
+                  BatemansBay
+                  Gosford
+                  GoldCoast
+ie, the name of one of the DVD jurisdiction staging directories
+(case-insensitive).
+'''
+
+import os
+import sys
+import shutil
+import time
+
+
+# common base path to all data and project files
+main_path = '/nas/gemd/georisk_models/inundation'
+
+# structures holding data for each jurisdiction
+#   data_src_path  : sub-path to data directory
+#   proj_src_path  : sub-path to project files
+#   data_dst_path  : where to copy data files to
+#   proj_dst_path  : where to copy project files to
+#   copy_data_dirs : data directories to completely copy
+#   make_dst_dirs  : make these data directories (may be left empty)
+#   copy_data_files: individual data files to copy to <data_dst_path>
+#   copy_proj_files: individual project files to copy to <proj_dst_path>
+hobart_data = \
+{'jurisdiction':    'Hobart',		# jurisdiction name
+
+ # paths to various source directories
+ 'data_src_path':   'data/tasmania/hobart_tsunami_scenario_2009/anuga',
+ 'arcgis_src_path': 'data/tasmania/hobart_tsunami_scenario_2009/ArcGIS',
+ 'proj_src_path':   'sandpits/kvanputten/ANUGA/anuga_work/production/hobart_2009',
+
+ # paths to destination directories (under 'jurisdiction' root)
+ 'data_dst_path':   'data/tasmania/hobart_tsunami_scenario_2009/anuga',
+ 'proj_dst_path':   'project',
+ 'arcgis_dst_path': 'ArcGIS',
+
+ # copy or create whole directories
+ 'make_dst_dirs':   ['gauges', 'outputs', 'topographies/elevation_fix', 'meshes'],
+ 'copy_data_dirs':  ['boundaries', 'polygons'],
+
+ # copy 'data' files or directories
+ 'copy_data_files': ['gauges/schema.ini', 'gauges/tsunamipointsMGA.csv',
+                     'topographies/hobart_combined_elevation.pts',
+                     'topographies/hobart_combined_elevation.txt',
+                     'topographies/elevation_fix/topo_grid_notsw.pts',
+                     'topographies/elevation_fix/topo_grid_notsw.dem',
+                     'topographies/elevation_fix/topo_grid_notsw.asc',
+                     'topographies/elevation_fix/topo_grid_notsw.prj'],
+
+ # copy 'project' files or directories
+ 'copy_proj_files': ['build_elevation.py', 'build_urs_boundary.py', 'combine_gauges.py',
+                     'export_results_max.py', 'file_length.py', 'get_runup_v2.py',
+                     'get_timeseries.py', 'project.py', 'run_model.py', 'setup_model.py'],
+
+ # copy 'arcgis' files or directories
+ 'copy_arc_files':  []
+}
+
+batemans_bay_data = \
+{'jurisdiction':    'BatemansBay',	# jurisdiction name
+
+ # paths to various source directories
+ 'data_src_path':   'data/new_south_wales/batemans_bay_tsunami_scenario_2009/anuga',
+ 'arcgis_src_path': 'data/new_south_wales/batemans_bay_tsunami_scenario_2009/ArcGIS',
+ 'proj_src_path':   'sandpits/jgriffin/ANUGA/anuga_work/production/new_south_wales/batemans_bay',
+
+ # paths to destination directories (under 'jurisdiction' root)
+ 'data_dst_path':   'data/new_south_wales/batemans_bay_tsunami_scenario_2009/anuga',
+ 'proj_dst_path':   'project',
+ 'arcgis_dst_path': 'ArcGIS',
+
+ # copy or create whole directories
+ 'make_dst_dirs':   ['outputs', 'topographies', 'meshes'],
+ 'copy_data_dirs':  ['boundaries', 'polygons', 'gauges'],
+
+ # copy 'data' files or directories
+ 'copy_data_files': ['topographies/1a.asc', 'topographies/1b.asc', 'topographies/2b.asc',
+                     'topographies/2a_3.asc', 'topographies/3b.asc', 'topographies/3a.asc',
+                     'topographies/4a_2.asc', 'topographies/4b.asc', 'topographies/off1.asc',
+                     'topographies/off2.asc', 'topographies/off3.asc', 'topographies/bbhd.asc',
+                     'topographies/sd100031996_p.asc', 'topographies/sd100031996_p2.asc',
+                     'topographies/sd100031996_p3.asc', 'topographies/sd100031996_p4.asc',
+                     'topographies/1a.prj', 'topographies/1b.prj', 'topographies/2b.prj',
+                     'topographies/2a_3.prj', 'topographies/3b.prj', 'topographies/3a.prj',
+                     'topographies/4a_2.prj', 'topographies/4b.prj', 'topographies/off1.prj',
+                     'topographies/off2.prj', 'topographies/off3.prj', 'topographies/bbhd.prj',
+                     'topographies/sd100031996_p.prj', 'topographies/sd100031996_p2.prj',
+                     'topographies/sd100031996_p3.prj', 'topographies/sd100031996_p4.prj',
+                     'topographies/SD100031996_jgriffin_clip.csv', 'topographies/tomaga_offshore_AHD_MGA_1997.csv',
+                     'topographies/Batemans_BBHD_MGA_1995.csv', 'topographies/moruya_AHD_MGA_2000.csv',
+# these files are generated by build_elevation.py, but included as a courtesy (if space permits)
+                     'topographies/batemans_bay_combined_elevation.pts',
+                     'topographies/batemans_bay_combined_elevation.txt'],
+
+ # copy 'project' files or directories
+ #'copy_proj_files': ['project.py', 'run_model_250m.py', 'run_model.py', 'setup_model_250m.py',
+ #                    'setup_model.py', 'build_elevation_250m.py', 'build_elevation.py',
+ #                    'build_urs_boundary.py', 'export_results_max.py', 'extract_from_csv.py',
+ #                    'file_length.py', 'get_runup.py', ],
+ 'copy_proj_files': ['project.py', 'run_model_250m.py', 'setup_model_250m.py',
+                     'setup_model.py', 'build_elevation_250m.py', 'build_elevation.py',
+                     'build_urs_boundary.py', 'export_results_max.py', 'extract_from_csv.py',
+                     'file_length.py', 'get_runup.py', ],
+
+ # copy 'arcgis' files or directories
+ 'copy_arc_files':  []
+}
+
+gosford_data = \
+{'jurisdiction':    'Gosford',		# jurisdiction name
+
+ # paths to various source directories
+ 'data_src_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
+ 'arcgis_src_path': 'data/new_south_wales/gosford_tsunami_scenario_2009/ArcGIS',
+ 'proj_src_path':   'sandpits/jgriffin/ANUGA/anuga_work/production/new_south_wales/gosford',
+
+ # paths to destination directories (under 'jurisdiction' root)
+ 'data_dst_path':   'data/new_south_wales/gosford_tsunami_scenario_2009/anuga',
+ 'proj_dst_path':   'project',
+ 'arcgis_dst_path': 'ArcGIS',
+
+ # copy or create whole directories
+ 'make_dst_dirs':   ['outputs', 'topographies/original', 'polygons', 'gauges',
+                     'meshes'],
+ 'copy_data_dirs':  ['boundaries'],
+
+ # copy 'data' files or directories
+ 'copy_data_files': ['topographies/original/e151_s34_clip2.asc',
+                     'topographies/original/e151_s34_clip2.prj',
+                     'topographies/original/aus197_topo2raster_clip2.asc',
+                     'topographies/original/aus197_topo2raster_clip2.prj',
+                     'topographies/original/hydro_topo2raster_clip2.asc',
+                     'topographies/original/hydro_topo2raster_clip2.prj',
+                     'topographies/original/file_list.csv',
+                     'topographies/original/G3346294.txt',
+                     'topographies/original/G3346296.txt',
+                     'topographies/original/G3366284.txt',
+                     'topographies/original/G3366286.txt',
+                     'topographies/original/G3366288.txt',
+                     'topographies/original/G3366290.txt',
+                     'topographies/original/G3366294.txt',
+                     'topographies/original/G3366296.txt',
+                     'topographies/original/G3366298.txt',
+                     'topographies/original/G3386284.txt',
+                     'topographies/original/G3386286.txt',
+                     'topographies/original/G3386288.txt',
+                     'topographies/original/G3386290.txt',
+                     'topographies/original/G3386292.txt',
+                     'topographies/original/G3386294.txt',
+                     'topographies/original/G3386296.txt',
+                     'topographies/original/G3386298.txt',
+                     'topographies/original/G3386300.txt',
+                     'topographies/original/G3406284.txt',
+                     'topographies/original/G3406286.txt',
+                     'topographies/original/G3406288.txt',
+                     'topographies/original/G3406290.txt',
+                     'topographies/original/G3406292.txt',
+                     'topographies/original/G3406294.txt',
+                     'topographies/original/G3406296.txt',
+                     'topographies/original/G3406298.txt',
+                     'topographies/original/G3406300.txt',
+                     'topographies/original/G3426284.txt',
+                     'topographies/original/G3426286.txt',
+                     'topographies/original/G3426288.txt',
+                     'topographies/original/G3426290.txt',
+                     'topographies/original/G3426292.txt',
+                     'topographies/original/G3426294.txt',
+                     'topographies/original/G3426296.txt',
+                     'topographies/original/G3426298.txt',
+                     'topographies/original/G3426300.txt',
+                     'topographies/original/G3426302.txt',
+                     'topographies/original/G3426304.txt',
+                     'topographies/original/G3446284.txt',
+                     'topographies/original/G3446286.txt',
+                     'topographies/original/G3446288.txt',
+                     'topographies/original/G3446290.txt',
+                     'topographies/original/G3446292.txt',
+                     'topographies/original/G3446294.txt',
+                     'topographies/original/G3446296.txt',
+                     'topographies/original/G3446298.txt',
+                     'topographies/original/G3446300.txt',
+                     'topographies/original/G3446302.txt',
+                     'topographies/original/G3446304.txt',
+                     'topographies/original/G3446306.txt',
+                     'topographies/original/G3466286.txt',
+                     'topographies/original/G3466288.txt',
+                     'topographies/original/G3466290.txt',
+                     'topographies/original/G3466292.txt',
+                     'topographies/original/G3466294.txt',
+                     'topographies/original/G3466296.txt',
+                     'topographies/original/G3466298.txt',
+                     'topographies/original/G3466300.txt',
+                     'topographies/original/G3466302.txt',
+                     'topographies/original/G3466304.txt',
+                     'topographies/original/G3466306.txt',
+                     'topographies/original/G3486288.txt',
+                     'topographies/original/G3486290.txt',
+                     'topographies/original/G3486292.txt',
+                     'topographies/original/G3486294.txt',
+                     'topographies/original/G3486296.txt',
+                     'topographies/original/G3486298.txt',
+                     'topographies/original/G3486300.txt',
+                     'topographies/original/G3486302.txt',
+                     'topographies/original/G3486304.txt',
+                     'topographies/original/G3486306.txt',
+                     'topographies/original/G3506288.txt',
+                     'topographies/original/G3506290.txt',
+                     'topographies/original/G3506292.txt',
+                     'topographies/original/G3506294.txt',
+                     'topographies/original/G3506296.txt',
+                     'topographies/original/G3506298.txt',
+                     'topographies/original/G3506300.txt',
+                     'topographies/original/G3506302.txt',
+                     'topographies/original/G3506304.txt',
+                     'topographies/original/G3506306.txt',
+                     'topographies/original/G3526288.txt',
+                     'topographies/original/G3526290.txt',
+                     'topographies/original/G3526292.txt',
+                     'topographies/original/G3526294.txt',
+                     'topographies/original/G3526296.txt',
+                     'topographies/original/G3526298.txt',
+                     'topographies/original/G3526300.txt',
+                     'topographies/original/G3526302.txt',
+                     'topographies/original/G3526304.txt',
+                     'topographies/original/G3546290.txt',
+                     'topographies/original/G3546292.txt',
+                     'topographies/original/G3546294.txt',
+                     'topographies/original/G3546296.txt',
+                     'topographies/original/G3546298.txt',
+                     'topographies/original/G3546300.txt',
+                     'topographies/original/G3546302.txt',
+                     'topographies/original/G3546304.txt',
+                     'topographies/original/G3566296.txt',
+                     'topographies/original/G3566298.txt',
+                     'topographies/original/G3566300.txt',
+                     'topographies/original/G3566302.txt',
+                     'topographies/original/G3566304.txt',
+                     'topographies/original/G3586302.txt',
+                     'topographies/original/estuaries.txt',
+                     'topographies/original/ENT5C1S08_03_AHD_prepared.txt',
+                     'topographies/original/ENT5C1S09_03_AHD_prepared.txt',
+                     'topographies/original/ENT5C1S10_03_AHD_prepared.txt',
+                     'topographies/original/hydro_clip_neg.txt',
+                     'polygons/bounding_polygon.csv',
+                     'polygons/aoi_umina_large.csv',
+                     'polygons/aoi_terrigal.csv',
+                     'polygons/aos_umina_large.csv',
+                     'polygons/aos_terrigal.csv',
+                     'polygons/initial_conditions.csv',
+                     'polygons/images.csv',
+                     'gauges/gauges.csv'],
+
+ # copy 'project' files or directories
+ 'copy_proj_files': ['build_urs_boundary.py', 'export_results_max.py', 'file_length.py',
+                     'get_runup.py', 'prepare_data_AUS197.py', 'prepare_data_hydro.py',
+                     'project.py', 'run_model.py', 'build_elevation.py', 'extract_from_csv.py',
+                     'get_timeseries.py', 'prepare_data_ENT5CIS.py', 'prepare_data.py',
+                     'setup_model.py'],
+
+ # copy 'arcgis' files or directories
+ 'copy_arc_files':  []
+}
+
+gold_coast_data = \
+{'jurisdiction':    'GoldCoast',	# jurisdiction name
+
+ # paths to various source directories
+ 'data_src_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
+ 'arcgis_src_path': 'data/queensland/gold_coast_tsunami_scenario_2009/ArcGIS',
+ 'proj_src_path':   'sandpits/lfountain/anuga_work/production/gold_coast_2009',
+
+ # paths to destination directories (under 'jurisdiction' root)
+ 'data_dst_path':   'data/queensland/gold_coast_tsunami_scenario_2009/anuga',
+ 'proj_dst_path':   'project',
+ 'arcgis_dst_path': 'ArcGIS',
+
+ # copy or create whole directories
+ 'make_dst_dirs':   ['outputs', 'meshes', 'polygons', 'topographies', 'gauges'],
+ 'copy_data_dirs':  ['boundaries'],
+
+ # copy 'data' files or directories
+ 'copy_data_files': ['outputs/Event1_HAT', 'outputs/Event1_MSL',
+                     'outputs/Event2_HAT', 'outputs/Event2_MSL',
+                     'outputs/Event3_HAT', 'outputs/Event3_MSL',
+                     'polygons/bounding_polygon_sml.csv',
+                     'polygons/initial_conditions_sml.csv',
+                     'polygons/images.csv',
+                     'topographies/gold_coast_combined_elevation_250m.pts',
+                     'topographies/grid250m_all_pro.asc',
+                     'topographies/grid250m_all_pro.prj'],
+
+ # copy 'project' files or directories
+ 'copy_proj_files': ['build_elevation.py', 'export_results_max.py', 'file_length.py',
+                     'get_runup.py', 'project.py', 'run_model.py', 'setup_model.py',
+                     'build_urs_boundary.py', 'combine_gauges.py', 'get_timeseries.py',
+                     'run_multiple_events.py'
+                    ],
+
+ # copy 'arcgis' files or directories
+ 'copy_arc_files':  ['gold_coast.mxd']
+}
+
+# dictionary mapping lower-case jurisdiction name to jurisdiction data dictionary
+source_jurisdiction_path = {'hobart': hobart_data,
+                            'batemansbay': batemans_bay_data,
+                            'gosford': gosford_data,
+                            'goldcoast': gold_coast_data 
+                           }
+
+######
+# Routines to automate the script data above.
+######
+
+def log(msg=''):
+    print(msg)
+
+
+def dir_copy(src, dst):
+    cmd = 'cp -R %s %s' % (src, dst)
+    log('Doing: %s' % cmd)
+    fd = os.popen(cmd)
+    fd.close()
+
+def copy_file_or_dir(src, dst):
+    '''Copy a file or complete directory.'''
+
+    # could be a file or directory being copied
+    try:
+        shutil.copyfile(src, dst)
+    except IOError, e:
+        if 'Is a directory' in str(e):
+            shutil.copytree(src, dst)
+        else:
+            log('*' *72)
+            log('* %s' % str(e))
+            log('*' *72)
+
+def update_staging(jurisdiction):
+    # create a list of jurisdiction names
+    jurisdiction_names = []
+    for k in source_jurisdiction_path:
+        jurisdiction_names.append(source_jurisdiction_path[k]['jurisdiction'])
+
+    # get ready
+    j_dict = source_jurisdiction_path[jurisdiction]
+    j_name = j_dict['jurisdiction']
+    data_src_path = os.path.join(main_path, j_dict['data_src_path'])
+    data_dst_path = os.path.join(os.getcwd(), j_name, j_dict['data_dst_path'])
+    proj_src_path = os.path.join(main_path, j_dict['proj_src_path'])
+    proj_dst_path = os.path.join(os.getcwd(), j_name, j_dict['proj_dst_path'])
+    arcgis_src_path = os.path.join(main_path, j_dict['arcgis_src_path'])
+    arcgis_dst_path = os.path.join(os.getcwd(), j_name, j_dict['arcgis_dst_path'])
+
+    # create new output directory, delete old if there
+    if os.path.exists(j_name):
+        log('Deleting existing staging directory: %s' % j_name)
+        shutil.rmtree(j_name)
+    log('Creating staging directory: %s' % j_name)
+    os.makedirs(j_name)
+
+    # create required directories
+    for dir in j_dict['make_dst_dirs']:
+        new_dir = os.path.join(data_dst_path, dir)
+        log('Creating directory: %s' % dir)
+        os.makedirs(new_dir)
+
+    # copy required full directories
+    for copy_dir in j_dict['copy_data_dirs']:
+        src_dir = os.path.join(data_src_path, copy_dir)
+        dst_dir = os.path.join(data_dst_path, copy_dir)
+        log('Copying directory: %s' % copy_dir)
+        copy_file_or_dir(src_dir, dst_dir)
+
+    # copy required data files
+    for copy_file in j_dict['copy_data_files']:
+        src_file = os.path.join(data_src_path, copy_file)
+        new_file = os.path.join(data_dst_path, copy_file)
+        log('Copying: %s' % copy_file)
+        copy_file_or_dir(src_file, new_file)
+
+    # copy required project files
+    log('Creating directory: %s' % proj_dst_path)
+    os.makedirs(proj_dst_path)
+    for copy_file in j_dict['copy_proj_files']:
+        src_file = os.path.join(proj_src_path, copy_file)
+        new_file = os.path.join(proj_dst_path, copy_file)
+        log('Copying: %s' % copy_file)
+        copy_file_or_dir(src_file, new_file)
+
+    # copy required ArcGIS files
+    log('Creating directory: %s' % arcgis_dst_path)
+    os.makedirs(arcgis_dst_path)
+    for copy_file in j_dict['copy_arc_files']:
+        src_file = os.path.join(arcgis_src_path, copy_file)
+        new_file = os.path.join(arcgis_dst_path, copy_file)
+        log('Copying: %s' % copy_file)
+        copy_file_or_dir(src_file, new_file)
+
+    # now copy jurisdiction-specific DVD files
+    src_dir = 'extra_files/%s/*' % j_name
+    dst_dir = j_name
+    dir_copy(src_dir, dst_dir)
+
+    # copy the extra_files and special directories
+    src_dir = 'extra_files/browser_files'
+    dst_dir = j_name
+    dir_copy(src_dir, dst_dir)
+    src_dir = 'extra_files/documents'
+    dir_copy(src_dir, dst_dir)
+    src_file = 'extra_files/autorun.inf'
+    dir_copy(src_file, dst_dir)
+    src_dir = 'extra_files/.cache'
+    dir_copy(src_dir, dst_dir)
+
+    # get size of the staging directory
+    cmd = 'du -sh %s' % j_name
+    fd = os.popen(cmd, 'r')
+    res = fd.read()
+    fd.close()
+    (res, _) = res.split('\t', 1)
+    log('Staging directory %s has size %s' % (j_name, res))
+
+def usage():
+    print('usage: update.py <source>')
+    print('where <source> is one of the jurisdiction staging directories.')
+
+
+if len(sys.argv) != 2:
+    usage()
+    sys.exit(10)
+
+jurisdiction = sys.argv[1].lower()
+# remove any trailing '/' - from TAB completion
+if jurisdiction.endswith('/'):
+    jurisdiction = jurisdiction[:-1]
+
+start_time = time.time()
+update_staging(jurisdiction)
+stop_time = time.time()
+elapsed_time = stop_time - start_time
+log('Elapsed time is %.1fs' % elapsed_time)
