Changeset 8503 for trunk/anuga_core


Ignore:
Timestamp:
Aug 10, 2012, 5:47:11 PM (13 years ago)
Author:
steve
Message:

Added in hashtable calculation

Location:
trunk/anuga_core/source/anuga/abstract_2d_finite_volumes
Files:
1 added
4 edited

Legend:

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

    r8501 r8503  
    683683        if node is not None:
    684684            # Get index for this node
    685             first = num.sum(self.number_of_triangles_per_node[:node])
    686 
     685            #first = num.sum(self.number_of_triangles_per_node[:node])
     686
     687            first = self.node_index[node]
    687688            # Get number of triangles for this node
    688689            count = self.number_of_triangles_per_node[node]
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/generic_domain.py

    r8500 r8503  
    213213
    214214
     215
     216        N = len(self) #number_of_elements
     217        self.number_of_elements = N
     218
    215219        # Setup cell full flag
    216220        # =1 for full
    217221        # =0 for ghost
    218         N = len(self) #number_of_elements
    219         self.number_of_elements = N
    220222        self.tri_full_flag = num.ones(N, num.int)
     223       
    221224        for i in self.ghost_recv_dict.keys():
    222             for id in self.ghost_recv_dict[i][0]:
    223                 self.tri_full_flag[id] = 0
     225            id = self.ghost_recv_dict[i][0]
     226            self.tri_full_flag[id] = 0
    224227
    225228        self.number_of_full_triangles = int(num.sum(self.tri_full_flag))
    226229
    227         self.node_full_flag = num.zeros(self.number_of_nodes, num.int)
    228         L = self.mesh.get_triangles_and_vertices_per_node()
    229         for i in range(len(L)):
    230             tri_list = 0
    231             for pair in L[i]:
    232                 tri_list = max( tri_list, self.tri_full_flag[pair[0]] )
    233             self.node_full_flag[i] = tri_list
     230
     231        # Identify full nodes as thosethat intersect a full triangle.
     232
     233        Vol_ids  = self.vertex_value_indices/3
     234        W = num.repeat(self.tri_full_flag, 3)
     235
     236        self.node_full_flag = num.minimum(num.bincount(self.triangles.flatten(), weights = W).astype(num.int), 1)
    234237
    235238
    236239        #FIXME SR: The following line leads to a nasty segmentation fault!
    237240        #self.number_of_full_nodes = int(num.sum(self.node_full_flag))
     241
    238242        self.number_of_full_nodes = self.number_of_nodes
    239243
    240244
    241         # Test the assumption that all full triangles are store before
     245        # Test the assumption that all full triangles are stored before
    242246        # the ghost triangles.
    243247        if not num.allclose(self.tri_full_flag[:self.number_of_full_nodes], 1):
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/neighbour_mesh.py

    r8501 r8503  
    256256            b = self.triangles[i, 1]
    257257            c = self.triangles[i, 2]
    258             if neighbourdict.has_key((a,b)):
    259                     msg = "Edge 2 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[a,b][1],neighbourdict[a,b][0])
    260                     raise Exception(msg)
    261             if neighbourdict.has_key((b,c)):
    262                     msg = "Edge 0 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[b,c][1],neighbourdict[b,c][0])
    263                     raise Exception(msg)
    264             if neighbourdict.has_key((c,a)):
    265                     msg = "Edge 1 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[c,a][1],neighbourdict[c,a][0])
    266                     raise Exception(msg)
     258#            if neighbourdict.has_key((a,b)):
     259#                    msg = "Edge 2 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[a,b][1],neighbourdict[a,b][0])
     260#                    raise Exception(msg)
     261#            if neighbourdict.has_key((b,c)):
     262#                    msg = "Edge 0 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[b,c][1],neighbourdict[b,c][0])
     263#                    raise Exception(msg)
     264#            if neighbourdict.has_key((c,a)):
     265#                    msg = "Edge 1 of triangle %d is duplicating edge %d of triangle %d.\n" %(i,neighbourdict[c,a][1],neighbourdict[c,a][0])
     266#                    raise Exception(msg)
    267267
    268268            neighbourdict[a,b] = (i, 2) #(id, edge)
  • trunk/anuga_core/source/anuga/abstract_2d_finite_volumes/quantity.py

    r8486 r8503  
    321321        # may not be that important to optimise it?
    322322
    323         N = self.vertex_values.shape[0]
    324         for i in range(N):
    325             v0 = self.vertex_values[i, 0]
    326             v1 = self.vertex_values[i, 1]
    327             v2 = self.vertex_values[i, 2]
    328 
    329             self.centroid_values[i] = (v0 + v1 + v2)/3
     323#        N = self.vertex_values.shape[0]
     324#        for i in range(N):
     325#            v0 = self.vertex_values[i, 0]
     326#            v1 = self.vertex_values[i, 1]
     327#            v2 = self.vertex_values[i, 2]
     328#
     329#            self.centroid_values[i] = (v0 + v1 + v2)/3
     330
     331        v0 = self.vertex_values[:, 0]
     332        v1 = self.vertex_values[:, 1]
     333        v2 = self.vertex_values[:, 2]
     334
     335        self.centroid_values[:] = (v0 + v1 + v2)/3
    330336
    331337        self.interpolate_from_vertices_to_edges()
Note: See TracChangeset for help on using the changeset viewer.