@@ -552,38 +552,31 @@ function generate_coords(
552
552
model_cell_coords :: Gridap.Arrays.Table{<:VectorValue{Dp,T}}
553
553
) where {Ti,Dp,T}
554
554
n_corners = maximum (topo_cell_ids. data;init= 0 )
555
- n_vertices = length ( unique (model_cell_coords . data))
556
-
557
- model_coords = fill (VectorValue (fill (T (Inf ),Dp)),n_vertices )
555
+
556
+ n_vertices_max = length (model_cell_coords . data)
557
+ model_coords = fill (VectorValue (fill (T (Inf ),Dp)),n_vertices_max )
558
558
for (vertex,coord) in zip (topo_cell_ids. data,model_cell_coords. data)
559
559
model_coords[vertex] = min (model_coords[vertex],coord)
560
560
end
561
-
562
- # A) Non-periodic case: geometry == topology
563
- if n_corners == n_vertices
564
- return topo_cell_ids, model_coords, model_coords
565
- end
566
-
567
- # B) Periodic case: geometry != topology
568
- topo_coords = model_coords[1 : n_corners]
569
561
570
- current = n_corners
571
- model_cell_ids = copy (topo_cell_ids)
572
- new_nodes = Dict {VectorValue{Dp,T},Ti} ()
562
+ n_vertices = n_corners
563
+ model_cell_ids = Gridap. Arrays. Table (copy (topo_cell_ids. data),copy (topo_cell_ids. ptrs))
573
564
for (k,(vertex,coord)) in enumerate (zip (topo_cell_ids. data,model_cell_coords. data))
574
- if coord != topo_coords[vertex]
575
- if haskey (new_nodes,coord)
576
- model_cell_ids. data[k] = new_nodes[coord]
565
+ if norm (coord- model_coords[vertex]) > eps (T)
566
+ pos = findfirst (x -> norm (x- coord) < eps (T), model_coords[n_corners+ 1 : n_vertices])
567
+ if ! isnothing (pos)
568
+ model_cell_ids. data[k] = model_coords[n_corners+ pos]
577
569
else
578
- current += 1
579
- model_coords[current] = coord
580
- new_nodes[coord] = current
581
- model_cell_ids. data[k] = current
570
+ n_vertices += 1
571
+ model_coords[n_vertices] = coord
572
+ model_cell_ids. data[k] = n_vertices
582
573
end
583
574
end
584
575
end
585
- @assert current == n_vertices
576
+ @debug " function generate_coords :: n_vertices= $n_vertices , n_corners= $n_corners . "
586
577
578
+ resize! (model_coords,n_vertices)
579
+ topo_coords = (n_vertices == n_corners) ? model_coords : model_coords[1 : n_corners]
587
580
return model_cell_ids, model_coords, topo_coords
588
581
end
589
582
0 commit comments