Changeset 8200


Ignore:
Timestamp:
Aug 23, 2011, 11:07:29 PM (14 years ago)
Author:
steve
Message:

Pulled the number_of_full_nodes and triangle out of generic_mesh up into generic_domain. These "numbers" are now calculated from ghost_recv and full_send data

Location:
trunk/anuga_core/source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/general_mesh.py

    r8105 r8200  
    6464                 triangles,
    6565                 geo_reference=None,
    66                  number_of_full_nodes=None,
    67                  number_of_full_triangles=None,
    6866                 verbose=False):
    6967        """Build triangular 2d mesh from nodes and triangle information
     
    8280
    8381
    84         number_of_full_nodes and number_of_full_triangles relate to
    85         parallelism when each mesh has an extra layer of ghost points and
    86         ghost triangles attached to the end of the two arrays.
    87         In this case it is usefull to specify the number of real (called full)
    88         nodes and triangles. If omitted they will default to all.
    89 
    9082        """
    9183
     
    10092        self.number_of_nodes = self.nodes.shape[0]
    10193
    102         if number_of_full_nodes is None:
    103             self.number_of_full_nodes = self.number_of_nodes
    104         else:
    105             assert int(number_of_full_nodes)
    106             self.number_of_full_nodes = number_of_full_nodes
    107 
    108         if number_of_full_triangles is None:
    109             self.number_of_full_triangles = self.number_of_triangles
    110         else:
    111             assert int(number_of_full_triangles)
    112             self.number_of_full_triangles = number_of_full_triangles
    11394
    11495        # FIXME: this stores a geo_reference, but when coords are returned
     
    270251        """
    271252
    272         N = self.number_of_full_nodes
     253        N = self.number_of_nodes
    273254        V = self.nodes[:N,:]
    274255        if absolute is True:
     
    461442        """
    462443
    463         M = self.number_of_full_triangles
    464444
    465445        if indices is None:
     
    512492        Return list of triangle_ids, vertex_ids for specified node.
    513493        If node in None or absent, this information will be returned
    514         for all (full) nodes in a list L where L[v] is the triangle
     494        for all nodes in a list L where L[v] is the triangle
    515495        list for node v.
    516496        """
     
    537517            # If need be, we can speed this up by
    538518            # working directly with the inverted triangle structure
    539             for i in range(self.number_of_full_nodes):
     519            for i in range(self.number_of_nodes):
    540520                L = self.get_triangles_and_vertices_per_node(node=i)
    541521                triangle_list.append(L)
     
    600580
    601581        # Count number of triangles per node
    602         number_of_triangles_per_node = num.zeros(self.number_of_full_nodes,
     582        number_of_triangles_per_node = num.zeros(self.number_of_nodes,
    603583                                                 num.int)       #array default#
    604584        for volume_id, triangle in enumerate(self.get_triangles()):
     
    611591
    612592        # Register (triangle, vertex) indices for each node
    613         vertexlist = [None] * self.number_of_full_nodes
    614         for volume_id in range(self.number_of_full_triangles):
     593        vertexlist = [None] * self.number_of_nodes
     594        for volume_id in range(self.number_of_triangles):
    615595            a = self.triangles[volume_id, 0]
    616596            b = self.triangles[volume_id, 1]
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/generic_domain.py

    r8167 r8200  
    6868        """
    6969
    70         number_of_full_nodes=None
    71         number_of_full_triangles=None
     70        #number_of_full_nodes=None
     71        #number_of_full_triangles=None
    7272       
    7373        # Determine whether source is a mesh filename or coordinates
     
    9191                         geo_reference=geo_reference,
    9292                         use_inscribed_circle=use_inscribed_circle,
    93                          number_of_full_nodes=number_of_full_nodes,
    94                          number_of_full_triangles=number_of_full_triangles,
    9593                         verbose=verbose)
    9694
     
    112110
    113111        self.number_of_boundaries = self.mesh.number_of_boundaries
    114         self.number_of_full_nodes = self.mesh.number_of_full_nodes
    115         self.number_of_full_triangles = self.mesh.number_of_full_triangles
    116112        self.number_of_triangles_per_node = \
    117113                                    self.mesh.number_of_triangles_per_node
     
    119115        self.vertex_value_indices = self.mesh.vertex_value_indices
    120116        self.number_of_triangles = self.mesh.number_of_triangles
    121 
     117        self.number_of_nodes = self.mesh.number_of_nodes
     118       
    122119        self.geo_reference = self.mesh.geo_reference
    123120
     
    163160        self.fractional_step_operators = []
    164161
     162        #---------------------------------------
     163        # Ghost and Full Triangles and Nodes
     164        #---------------------------------------
     165        self.number_of_full_nodes = self.mesh.number_of_nodes
     166        self.number_of_full_triangles = self.number_of_triangles
     167
     168
     169
     170
     171
     172
     173       
    165174        # Setup the ghost cell communication
    166175        if full_send_dict is None:
     
    203212                self.tri_full_flag[id] = 0
    204213
     214        self.number_of_full_triangles = num.sum(self.tri_full_flag)
     215
     216        self.node_full_flag = num.ones(self.number_of_nodes, num.int)
     217
     218        L = self.mesh.get_triangles_and_vertices_per_node()
     219
     220        for i in range(len(L)):
     221            tri_list = 0
     222            for pair in L[i]:
     223                tri_list = max( tri_list, self.tri_full_flag[pair[0]] )
     224            self.node_full_flag[i] = tri_list
     225
     226
     227        self.number_of_full_nodes = num.sum(self.node_full_flag)
     228
    205229        # Test the assumption that all full triangles are store before
    206230        # the ghost triangles.
    207         if not num.allclose(self.tri_full_flag[:self.number_of_full_nodes], 1):
     231        if not num.allclose(self.tri_full_flag[:self.number_of_full_triangles], 1):
    208232            if self.numproc>1:
    209233                log.critical('WARNING: Not all full triangles are store before '
    210234                             'ghost triangles')
     235
     236        if not num.allclose(self.node_full_flag[:self.number_of_full_nodes], 1):
     237            if self.numproc>1:
     238                log.critical('WARNING: Not all full nodes are store before '
     239                             'ghost nodes')
     240
     241
    211242
    212243        # Defaults
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/neighbour_mesh.py

    r8164 r8200  
    7272                 tagged_elements=None,
    7373                 geo_reference=None,
    74                  number_of_full_nodes=None,
    75                  number_of_full_triangles=None,
    7674                 use_inscribed_circle=False,
    7775                 verbose=False):
     
    8684
    8785        General_mesh.__init__(self, coordinates, triangles,
    88                               number_of_full_nodes=\
    89                               number_of_full_nodes,
    90                               number_of_full_triangles=\
    91                               number_of_full_triangles,
    9286                              geo_reference=geo_reference,
    9387                              verbose=verbose)
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/test_domain.py

    r7780 r8200  
    840840
    841841
    842         assert num.allclose(ghost_recv_dict[0][0], [24, 25, 26, 27,  0,  1,  2,  3])
    843         assert num.allclose(full_send_dict[0][0] , [ 4,  5,  6,  7, 20, 21, 22, 23])
     842        assert num.allclose(domain.ghost_recv_dict[0][0], [24, 25, 26, 27,  0,  1,  2,  3])
     843        assert num.allclose(domain.full_send_dict[0][0] , [ 4,  5,  6,  7, 20, 21, 22, 23])
    844844
    845845        def xylocation(x,y):
     
    882882                                                   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0])
    883883
     884        assert num.allclose(domain.node_full_flag, [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     885                                                   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0])
     886
     887
     888        assert num.allclose(domain.number_of_full_nodes, 18)
     889       
     890        assert num.allclose(domain.number_of_full_triangles, 20)
     891
    884892        #Test that points are arranged in a counter clock wise order
    885893        domain.check_integrity()
  • trunk/anuga_core/source/anuga_parallel/parallel_shallow_water.py

    r8115 r8200  
    2626                 full_send_dict=None,
    2727                 ghost_recv_dict=None,
    28                  number_of_full_nodes=None,
    29                  number_of_full_triangles=None,
     28#                 number_of_full_nodes=None,
     29#                 number_of_full_triangles=None,
    3030                 geo_reference=None): #jj added this
    3131
     
    3838                        processor=pypar.rank(),
    3939                        numproc=pypar.size(),
    40                         number_of_full_nodes=number_of_full_nodes,
    41                         number_of_full_triangles=number_of_full_triangles,
     40#                        number_of_full_nodes=number_of_full_nodes,
     41#                        number_of_full_triangles=number_of_full_triangles,
    4242                        geo_reference=geo_reference) #jj added this
    4343
Note: See TracChangeset for help on using the changeset viewer.