Index: /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/general_mesh.py
===================================================================
--- /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/general_mesh.py	(revision 8199)
+++ /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/general_mesh.py	(revision 8200)
@@ -64,6 +64,4 @@
                  triangles,
                  geo_reference=None,
-                 number_of_full_nodes=None,
-                 number_of_full_triangles=None,
                  verbose=False):
         """Build triangular 2d mesh from nodes and triangle information
@@ -82,10 +80,4 @@
 
 
-        number_of_full_nodes and number_of_full_triangles relate to
-        parallelism when each mesh has an extra layer of ghost points and
-        ghost triangles attached to the end of the two arrays.
-        In this case it is usefull to specify the number of real (called full)
-        nodes and triangles. If omitted they will default to all.
-
         """
 
@@ -100,15 +92,4 @@
         self.number_of_nodes = self.nodes.shape[0]
 
-        if number_of_full_nodes is None:
-            self.number_of_full_nodes = self.number_of_nodes
-        else:
-            assert int(number_of_full_nodes)
-            self.number_of_full_nodes = number_of_full_nodes
-
-        if number_of_full_triangles is None:
-            self.number_of_full_triangles = self.number_of_triangles
-        else:
-            assert int(number_of_full_triangles)
-            self.number_of_full_triangles = number_of_full_triangles
 
         # FIXME: this stores a geo_reference, but when coords are returned
@@ -270,5 +251,5 @@
         """
 
-        N = self.number_of_full_nodes
+        N = self.number_of_nodes
         V = self.nodes[:N,:]
         if absolute is True:
@@ -461,5 +442,4 @@
         """
 
-        M = self.number_of_full_triangles
 
         if indices is None:
@@ -512,5 +492,5 @@
         Return list of triangle_ids, vertex_ids for specified node.
         If node in None or absent, this information will be returned
-        for all (full) nodes in a list L where L[v] is the triangle
+        for all nodes in a list L where L[v] is the triangle
         list for node v.
         """
@@ -537,5 +517,5 @@
             # If need be, we can speed this up by
             # working directly with the inverted triangle structure
-            for i in range(self.number_of_full_nodes):
+            for i in range(self.number_of_nodes):
                 L = self.get_triangles_and_vertices_per_node(node=i)
                 triangle_list.append(L)
@@ -600,5 +580,5 @@
 
         # Count number of triangles per node
-        number_of_triangles_per_node = num.zeros(self.number_of_full_nodes,
+        number_of_triangles_per_node = num.zeros(self.number_of_nodes,
                                                  num.int)       #array default#
         for volume_id, triangle in enumerate(self.get_triangles()):
@@ -611,6 +591,6 @@
 
         # Register (triangle, vertex) indices for each node
-        vertexlist = [None] * self.number_of_full_nodes
-        for volume_id in range(self.number_of_full_triangles):
+        vertexlist = [None] * self.number_of_nodes
+        for volume_id in range(self.number_of_triangles):
             a = self.triangles[volume_id, 0]
             b = self.triangles[volume_id, 1]
Index: /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/generic_domain.py
===================================================================
--- /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/generic_domain.py	(revision 8199)
+++ /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/generic_domain.py	(revision 8200)
@@ -68,6 +68,6 @@
         """
 
-        number_of_full_nodes=None
-        number_of_full_triangles=None
+        #number_of_full_nodes=None
+        #number_of_full_triangles=None
         
         # Determine whether source is a mesh filename or coordinates
@@ -91,6 +91,4 @@
                          geo_reference=geo_reference,
                          use_inscribed_circle=use_inscribed_circle,
-                         number_of_full_nodes=number_of_full_nodes,
-                         number_of_full_triangles=number_of_full_triangles,
                          verbose=verbose)
 
@@ -112,6 +110,4 @@
 
         self.number_of_boundaries = self.mesh.number_of_boundaries
-        self.number_of_full_nodes = self.mesh.number_of_full_nodes
-        self.number_of_full_triangles = self.mesh.number_of_full_triangles
         self.number_of_triangles_per_node = \
                                     self.mesh.number_of_triangles_per_node
@@ -119,5 +115,6 @@
         self.vertex_value_indices = self.mesh.vertex_value_indices
         self.number_of_triangles = self.mesh.number_of_triangles
-
+        self.number_of_nodes = self.mesh.number_of_nodes
+        
         self.geo_reference = self.mesh.geo_reference
 
@@ -163,4 +160,16 @@
         self.fractional_step_operators = []
 
+        #---------------------------------------
+        # Ghost and Full Triangles and Nodes
+        #---------------------------------------
+        self.number_of_full_nodes = self.mesh.number_of_nodes
+        self.number_of_full_triangles = self.number_of_triangles
+
+
+
+
+
+
+        
         # Setup the ghost cell communication
         if full_send_dict is None:
@@ -203,10 +212,32 @@
                 self.tri_full_flag[id] = 0
 
+        self.number_of_full_triangles = num.sum(self.tri_full_flag)
+
+        self.node_full_flag = num.ones(self.number_of_nodes, num.int)
+
+        L = self.mesh.get_triangles_and_vertices_per_node()
+
+        for i in range(len(L)):
+            tri_list = 0
+            for pair in L[i]:
+                tri_list = max( tri_list, self.tri_full_flag[pair[0]] )
+            self.node_full_flag[i] = tri_list
+
+
+        self.number_of_full_nodes = num.sum(self.node_full_flag)
+
         # Test the assumption that all full triangles are store before
         # the ghost triangles.
-        if not num.allclose(self.tri_full_flag[:self.number_of_full_nodes], 1):
+        if not num.allclose(self.tri_full_flag[:self.number_of_full_triangles], 1):
             if self.numproc>1:
                 log.critical('WARNING: Not all full triangles are store before '
                              'ghost triangles')
+
+        if not num.allclose(self.node_full_flag[:self.number_of_full_nodes], 1):
+            if self.numproc>1:
+                log.critical('WARNING: Not all full nodes are store before '
+                             'ghost nodes')
+
+
 
         # Defaults
Index: /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/neighbour_mesh.py
===================================================================
--- /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/neighbour_mesh.py	(revision 8199)
+++ /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/neighbour_mesh.py	(revision 8200)
@@ -72,6 +72,4 @@
                  tagged_elements=None,
                  geo_reference=None,
-                 number_of_full_nodes=None,
-                 number_of_full_triangles=None,
                  use_inscribed_circle=False,
                  verbose=False):
@@ -86,8 +84,4 @@
 
         General_mesh.__init__(self, coordinates, triangles,
-                              number_of_full_nodes=\
-                              number_of_full_nodes,
-                              number_of_full_triangles=\
-                              number_of_full_triangles,
                               geo_reference=geo_reference,
                               verbose=verbose)
Index: /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/test_domain.py
===================================================================
--- /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/test_domain.py	(revision 8199)
+++ /trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/test_domain.py	(revision 8200)
@@ -840,6 +840,6 @@
 
 
-        assert num.allclose(ghost_recv_dict[0][0], [24, 25, 26, 27,  0,  1,  2,  3])
-        assert num.allclose(full_send_dict[0][0] , [ 4,  5,  6,  7, 20, 21, 22, 23])
+        assert num.allclose(domain.ghost_recv_dict[0][0], [24, 25, 26, 27,  0,  1,  2,  3])
+        assert num.allclose(domain.full_send_dict[0][0] , [ 4,  5,  6,  7, 20, 21, 22, 23])
 
         def xylocation(x,y):
@@ -882,4 +882,12 @@
                                                    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0])
 
+        assert num.allclose(domain.node_full_flag, [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                                   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0])
+
+
+        assert num.allclose(domain.number_of_full_nodes, 18)
+        
+        assert num.allclose(domain.number_of_full_triangles, 20)
+
         #Test that points are arranged in a counter clock wise order
         domain.check_integrity()
Index: /trunk/anuga_core/source/anuga_parallel/parallel_shallow_water.py
===================================================================
--- /trunk/anuga_core/source/anuga_parallel/parallel_shallow_water.py	(revision 8199)
+++ /trunk/anuga_core/source/anuga_parallel/parallel_shallow_water.py	(revision 8200)
@@ -26,6 +26,6 @@
                  full_send_dict=None,
                  ghost_recv_dict=None,
-                 number_of_full_nodes=None,
-                 number_of_full_triangles=None,
+#                 number_of_full_nodes=None,
+#                 number_of_full_triangles=None,
                  geo_reference=None): #jj added this
 
@@ -38,6 +38,6 @@
                         processor=pypar.rank(),
                         numproc=pypar.size(),
-                        number_of_full_nodes=number_of_full_nodes,
-                        number_of_full_triangles=number_of_full_triangles,
+#                        number_of_full_nodes=number_of_full_nodes,
+#                        number_of_full_triangles=number_of_full_triangles,
                         geo_reference=geo_reference) #jj added this
 
