From b6d08ab5cfba5aa5cbd78d2b4fe7e94b345e1f1c Mon Sep 17 00:00:00 2001 From: Shivam Gupta <sgupta72@illinois.edu> Date: Tue, 5 Jan 2016 11:19:25 +0530 Subject: [PATCH] Work in progress --- meshmode/mesh/refinement.py | 75 +++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/meshmode/mesh/refinement.py b/meshmode/mesh/refinement.py index 359e3889..e6e41b48 100644 --- a/meshmode/mesh/refinement.py +++ b/meshmode/mesh/refinement.py @@ -355,7 +355,7 @@ class Refiner(object): iel_base+iel_grp) for k in first_element_index: if k == 0: - new_hanging_vertex_element[vertex.left_vertex].remove( + new_hanging_vertex_element[vertex.left_vertex].append( iel_base+iel_grp) else: new_hanging_vertex_element[vertex.left_vertex.append( @@ -367,10 +367,10 @@ class Refiner(object): iel_base+iel_grp) for k in first_element_index: if k == 0: - new_hanging_vertex_element[vertex.right_vertex.remove( + new_hanging_vertex_element[vertex.right_vertex].append( iel_base+iel_grp) else: - new_hanging_vertex_element[vertex.left_vertex.append( + new_hanging_vertex_element[vertex.right_vertex].append( iel_base+grp.nelements+k-1) else: queue.append(vertex.left) @@ -395,11 +395,11 @@ class Refiner(object): iel_base+iel_grp) for k in second_element_index: if k == 0: - new_hanging_vertex_element[vertex.left_vertex].remove( + new_hanging_vertex_element[vertex.left_vertex].append( iel_base+iel_grp) else: new_hanging_vertex_element[vertex.left_vertex.append( - iel_base+grp.nelements+k-1) + iel_base+grp.nelements+k-2) if new_hanging_vertex_element[vertex.right_vertex] and \ new_hanging_vertex_element[vertex.right_vertex].count( iel_base+iel_grp): @@ -407,15 +407,20 @@ class Refiner(object): iel_base+iel_grp) for k in second_element_index: if k == 0: - new_hanging_vertex_element[vertex.right_vertex.remove( + new_hanging_vertex_element[vertex.right_vertex.append( iel_base+iel_grp) else: - new_hanging_vertex_element[vertex.left_vertex.append( + new_hanging_vertex_element[vertex.right_vertex.append( iel_base+grp.nelements+k-1) else: queue.append(vertex.left) queue.append(vertex.right) + #update connectivity of edges in the center + unique_vertex_pairs = [ + (i,j) for i in range(len(midpoint_vertices)) for j in range(i+1, + len(midpoint_vertices))] + midpoint_index = 0 for i, j in unique_vertex_pairs: min_index = min(midpoint_vertices[i], midpoint_vertices[j]) max_index = max(midpoint_vertices[i], midpoint_vertices[j]) @@ -432,15 +437,55 @@ class Refiner(object): element_indices.append(k_index) cur_node = self.pair_map[vertex_pair] - cur_node.adjacent_elements.remove(iel_base+iel_grp) - for k in element_indices: - if k == 0: - cur_node.adjacent_elements.append(iel_base+iel_grp) + queue = [cur_node] + while queue: + vertex = queue.pop(0) + #if leaf node + if vertex.left is None and vertex.right is None: + node_elements = vertex.adjacent_elements + node_elements.remove(iel_base+iel_grp) + for k in element_indices: + if k == 0: + node_elements.append(iel_base+iel_grp) + else: + node_elements.append(iel_base+grp.nelements+k-1) + if new_hanging_vertex_element[vertex.left_vertex] and \ + new_hanging_vertex_element[vertex.left_vertex].count( + iel_base+iel_grp): + new_hanging_vertex_element[vertex.left_vertex].remove( + iel_base+iel_grp) + for k in element_indices: + if k == 0: + new_hanging_vertex_element[vertex.left_vertex].append( + iel_base+iel_grp) + else: + new_hanging_vertex_element[vertex.left_vertex.append( + iel_base+grp.nelements+k-1) + if new_hanging_vertex_element[vertex.right_vertex] and \ + new_hanging_vertex_element[vertex.right_vertex].count( + iel_base+iel_grp): + new_hanging_vertex_element[vertex.right_vertex].remove( + iel_base+iel_grp) + for k in second_element_index: + if k == 0: + new_hanging_vertex_element[vertex.right_vertex.append( + iel_base+iel_grp) + else: + new_hanging_vertex_element[vertex.right_vertex.append( + iel_base+grp.nelements+k-1) else: - cur_node.adjacent_elements.append(iel_base+grp.nelements - + k - 1) - - + queue.append(vertex.left) + queue.append(vertex.right) + #generate new rays + for i in six.moves.range(len(midpoint_vertices)): + for j in six.moves.range(i+1, len(midpoint_vertices)): + min_index = min(midpoint_vertices[i], midpoint_vertices[j]) + max_index = max(midpoint_vertices[i], midpoint_vertices[j]) + vertex_pair = (min_index, max_index) + if vertex_pair in self.pair_map: + continue + elements = [] + common_elements = list( def print_rays(self, ind): import six -- GitLab