Index: trunk/anuga_work/development/gareth/balanced_basic/swb2_domain.py
===================================================================
--- trunk/anuga_work/development/gareth/balanced_basic/swb2_domain.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/balanced_basic/swb2_domain.py	(revision 8396)
@@ -69,7 +69,11 @@
         self.forcing_terms.remove(gravity)
         print 'Using shallow_water_balanced2 solver in /balanced_basic/'
-
-
-
+        print 'I SUGGEST YOU DO NOT USE THIS ONE -- THE BALANCED DEV SOLVER SEEMS BETTER,'
+        print 'AND IS BETTER TESTED (as of 6/4/2012)'
+        print 'IT PRESENTLY LIVES IN anuga_work/development/gareth/experimental/balanced_dev'
+        print ' '
+        print 'The following error is intended to draw your attention to the message above'
+
+        assert 0==1
     #-----------------
     # Flux computation
Index: trunk/anuga_work/development/gareth/experimental/balanced_dev/__init__.py
===================================================================
--- trunk/anuga_work/development/gareth/experimental/balanced_dev/__init__.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/experimental/balanced_dev/__init__.py	(revision 8396)
@@ -325,5 +325,5 @@
 
     return domain
-    
+   
 import logging as log
 
Index: trunk/anuga_work/development/gareth/experimental/balanced_dev/swb2_boundary_conditions.py
===================================================================
--- trunk/anuga_work/development/gareth/experimental/balanced_dev/swb2_boundary_conditions.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/experimental/balanced_dev/swb2_boundary_conditions.py	(revision 8396)
@@ -1,38 +1,7 @@
 
 from anuga.abstract_2d_finite_volumes.generic_boundary_conditions\
-     import Boundary
+     import Boundary, File_boundary
 
 #from swb2_domain_ext import rotate
-
-class Transmissive_boundary(Boundary):
-    """Transmissive boundary returns same conserved quantities as
-    those present in its neighbour volume.
-
-    Underlying domain must be specified when boundary is instantiated
-    """
-
-    def __init__(self, domain = None):
-        Boundary.__init__(self)
-
-        if domain is None:
-            msg = 'Domain must be specified for transmissive boundary'
-            raise Exception, msg
-
-        self.domain = domain
-
-    def __repr__(self):
-        return 'Transmissive_boundary(%s)' %self.domain
-
-    def evaluate(self, vol_id, edge_id):
-        """Transmissive boundaries return the edge values
-        of the volume they serve.
-        """
-
-        if self.domain.get_centroid_transmissive_bc() :
-            q = self.domain.get_evolved_quantities(vol_id)
-        else:
-            q = self.domain.get_evolved_quantities(vol_id, edge = edge_id)
-        return q
-
 #####
 
@@ -153,4 +122,49 @@
 
         return q
+
+
+class  zero_mass_flux_zero_t_transmissive_n_momentum_boundary(Boundary):
+    """ Boundary which operates directly on the fluxes
+        Sets boundary values of h=neighbour_h, uh=neighbour_uh, vh=0.
+        and ensure that:
+        flux[0] = 0.0
+    """
+    def __init__(self, domain = None):
+        Boundary.__init__(self)
+
+        if domain is None:
+            msg = 'Domain must be specified for zero_mass_flux_zero_t_transmissive_n_momentum_boundary'
+            raise Exception, msg
+
+        self.domain = domain
+
+    def __repr__(self):
+        return 'zero_mass_flux_zero_t_transmissive_n_momentum_boundary(%s)' %self.domain
+
+    def evaluate(self, vol_id, edge_id):
+        """ Apply chosen values to q[1], q[2]
+        """
+
+        if self.domain.get_centroid_transmissive_bc() :
+            q = self.domain.get_evolved_quantities(vol_id)
+        else:
+            q = self.domain.get_evolved_quantities(vol_id, edge = edge_id)
+
+        normal = self.domain.normals[vol_id, 2*edge_id:2*edge_id+2]
+
+        r = rotate(q, normal, direction = 1)
+        #r[1] = -r[1]
+        tdamp=0.0
+        ndamp=1.0
+        r[1]=r[1]*ndamp
+        r[2]=r[2]*tdamp
+        q = rotate(r, normal, direction = -1)
+
+        # q[1]=0.
+        # q[2]=0.
+
+        return q
+
+
 ###
 def rotate(q,normal,direction=1):
@@ -170,3 +184,2 @@
 
     return out
-    
Index: trunk/anuga_work/development/gareth/tests/merimbula_steve/run_sw_merimbula.py
===================================================================
--- trunk/anuga_work/development/gareth/tests/merimbula_steve/run_sw_merimbula.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/tests/merimbula_steve/run_sw_merimbula.py	(revision 8396)
@@ -36,5 +36,5 @@
 
 from anuga import rectangular_cross
-from balanced_dev import create_domain_from_file
+#from balanced_dev import create_domain_from_file
 #from balanced_basic import create_domain_from_file
 #from anuga import create_domain_from_file
Index: trunk/anuga_work/development/gareth/tests/parabolic/parabolaplot.py
===================================================================
--- trunk/anuga_work/development/gareth/tests/parabolic/parabolaplot.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/tests/parabolic/parabolaplot.py	(revision 8396)
@@ -4,5 +4,5 @@
 # Import Modules
 #---------------
-import anuga
+#import anuga
 #import struct
 import numpy
Index: trunk/anuga_work/development/gareth/tests/urban_flow/ideal_urban.py
===================================================================
--- trunk/anuga_work/development/gareth/tests/urban_flow/ideal_urban.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/tests/urban_flow/ideal_urban.py	(revision 8396)
@@ -13,5 +13,5 @@
 
 from balanced_dev import *
-from balanced_dev import create_domain_from_regions as create_domain_from_regions
+#from balanced_dev import create_domain_from_regions as create_domain_from_regions
 #------------------------------------------------------------------------------
 # Useful parameters for controlling this case
Index: trunk/anuga_work/development/gareth/tests/util.py
===================================================================
--- trunk/anuga_work/development/gareth/tests/util.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/tests/util.py	(revision 8396)
@@ -13,5 +13,8 @@
                        transect (e.g. a channel cross-section) -- see example below
 
-
+    util.sort_sww_filenames -- match sww filenames by a wildcard, and order
+                               them according to their 'time'. This means that
+                               they can be stuck together using 'combine_outputs' correctly
+ 
 
     Here is an example ipython session which uses some of these functions:
@@ -24,4 +27,8 @@
     > pyplot.ion() # Interactive plotting
     > pyplot.scatter(xxx[1],p.vel[140,xxx[0]],color='red') # Plot along the transect
+
+    FIXME: TODO -- Convert to a single function 'get_output', which can either take a
+          single filename, a list of filenames, or a wildcard defining a number of
+          filenames, and ensure that in each case, the output will be as desired.
 
 """
@@ -80,5 +87,33 @@
                 p1.yvel, p1.vel, p1.minimum_allowed_height
 
-
+####################
+
+def sort_sww_filenames(sww_wildcard):
+    # Function to take a 'wildcard' sww filename, 
+    # and return a list of all filenames of this type,
+    # sorted by their time.
+    # This can then be used efficiently in 'combine_outputs'
+    # if you have many filenames starting with the same pattern
+    import glob
+    filenames=glob.glob(sww_wildcard)
+    
+    # Extract time from filenames
+    file_time=range(len(filenames)) # Predefine
+     
+    for i,filename in enumerate(filenames):
+        filesplit=filename.rsplit('_time_')
+        if(len(filesplit)>1):
+            file_time[i]=int(filesplit[1].split('_0.sww')[0])
+        else:
+            file_time[i]=0         
+    
+    name_and_time=zip(file_time,filenames)
+    name_and_time.sort() # Sort by file_time
+    
+    output_times, output_names = zip(*name_and_time)
+    
+    return list(output_names)
+
+##############
 
 class get_output:
Index: trunk/anuga_work/development/gareth/tests/wave/run_wave.py
===================================================================
--- trunk/anuga_work/development/gareth/tests/wave/run_wave.py	(revision 8385)
+++ trunk/anuga_work/development/gareth/tests/wave/run_wave.py	(revision 8396)
@@ -12,8 +12,8 @@
 import sys
 import anuga
-from anuga import Domain
+#from anuga import Domain
 
 from balanced_dev import *
-from balanced_dev import Domain as Domain
+#from balanced_dev import Domain as Domain
 
 from math import cos
@@ -81,4 +81,8 @@
 Br = anuga.Reflective_boundary(domain)      # Solid reflective wall
 Bt = anuga.Transmissive_boundary(domain)    # Continue all values on boundary
+Bz = swb2_boundary_conditions.zero_mass_flux_zero_momentum_boundary(domain) # Strong reflections
+Bz1 = swb2_boundary_conditions.zero_mass_flux_zero_t_transmissive_n_momentum_boundary(domain) # Strong reflections
+Bz2 = swb2_boundary_conditions.zero_mass_flux_zero_n_transmissive_t_momentum_boundary(domain) # Strong reflections
+Bs = anuga.Transmissive_stage_zero_momentum_boundary(domain) # Strong reflections
 Bd = anuga.Dirichlet_boundary([1,0.,0.]) # Constant boundary values
 amplitude = 1
@@ -97,4 +101,5 @@
 
 Bw2 = anuga.shallow_water.boundaries.Transmissive_n_momentum_zero_t_momentum_set_stage_boundary(domain, waveform)
+#Bw3 = swb2_boundary_conditions.Transmissive_momentum_nudge_stage_boundary(domain, waveform)
                     
 
