Skip to content

Commit c134f14

Browse files
committed
Re-implemented generate_coords without Float comparison ambiguities
1 parent 75efb3e commit c134f14

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

src/UniformlyRefinedForestOfOctreesDiscreteModels.jl

+15-22
Original file line numberDiff line numberDiff line change
@@ -552,38 +552,31 @@ function generate_coords(
552552
model_cell_coords :: Gridap.Arrays.Table{<:VectorValue{Dp,T}}
553553
) where {Ti,Dp,T}
554554
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)
558558
for (vertex,coord) in zip(topo_cell_ids.data,model_cell_coords.data)
559559
model_coords[vertex] = min(model_coords[vertex],coord)
560560
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]
569561

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))
573564
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]
577569
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
582573
end
583574
end
584575
end
585-
@assert current == n_vertices
576+
@debug "function generate_coords :: n_vertices=$n_vertices, n_corners=$n_corners."
586577

578+
resize!(model_coords,n_vertices)
579+
topo_coords = (n_vertices == n_corners) ? model_coords : model_coords[1:n_corners]
587580
return model_cell_ids, model_coords, topo_coords
588581
end
589582

0 commit comments

Comments
 (0)