@@ -1076,4 +1076,44 @@ function repartition!(w::PVector,v::PVector,cache;reversed=false)
10761076 end
10771077end
10781078
1079+ function find_local_indices (node_to_mask:: PVector )
1080+ n_own_dofs = map (count,own_values (node_to_mask))
1081+ n_dofs = sum (n_own_dofs)
1082+ dof_partition = variable_partition (n_own_dofs,n_dofs)
1083+ node_partition = partition (axes (node_to_mask,1 ))
1084+ node_to_global_dof = pzeros (Int,node_partition)
1085+ function fill_own_dofs! (own_node_to_global_dof,own_node_to_boundary,dofs)
1086+ own_to_global_dof = own_to_global (dofs)
1087+ own_node_to_global_dof[own_node_to_boundary] = own_to_global_dof
1088+ end
1089+ map (fill_own_dofs!,own_values (node_to_global_dof),own_values (node_to_mask),dof_partition)
1090+ consistent! (node_to_global_dof) |> wait
1091+ function add_ghost_dofs (ghost_node_to_global_dof,nodes,dofs)
1092+ ghost_node_to_owner = ghost_to_owner (nodes)
1093+ free_ghost_nodes = findall (global_dof-> global_dof!= 0 ,ghost_node_to_global_dof)
1094+ owners = view (ghost_node_to_owner,free_ghost_nodes)
1095+ ghost_dofs = view (ghost_node_to_global_dof,free_ghost_nodes)
1096+ union_ghost (dofs,ghost_dofs,owners)
1097+ end
1098+ dof_partition = map (add_ghost_dofs,ghost_values (node_to_global_dof),node_partition,dof_partition)
1099+ neighbors = assembly_graph (node_partition)
1100+ assembly_neighbors (dof_partition;neighbors)
1101+ node_to_local_dof = pzeros (Int32,node_partition)
1102+ dof_to_local_node = pzeros (Int32,dof_partition)
1103+ function finalize! (local_node_to_global_dof,local_node_to_local_dof,local_dof_to_local_node,dofs)
1104+ global_to_local_dof = global_to_local (dofs)
1105+ n_local_nodes = length (local_node_to_global_dof)
1106+ for local_node in 1 : n_local_nodes
1107+ global_dof = local_node_to_global_dof[local_node]
1108+ if global_dof == 0
1109+ continue
1110+ end
1111+ local_dof = global_to_local_dof[global_dof]
1112+ local_node_to_local_dof[local_node] = local_dof
1113+ local_dof_to_local_node[local_dof] = local_node
1114+ end
1115+ end
1116+ map (finalize!,partition (node_to_global_dof),partition (node_to_local_dof),partition (dof_to_local_node),dof_partition)
1117+ dof_to_local_node, node_to_local_dof
1118+ end
10791119
0 commit comments