Skip to content

Commit a410c4c

Browse files
committed
Added tests for polytopal coarsening
1 parent aad6e25 commit a410c4c

2 files changed

Lines changed: 48 additions & 4 deletions

File tree

src/Geometry.jl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ function Geometry.DiscreteModel(
457457
@assert size(cell_graph,1) == ncells
458458
@assert size(cell_graph,2) == ncells
459459

460-
lcell_to_cell, lcell_to_part, gid_to_part = map(parts) do part
460+
lcell_to_cell, lcell_to_part = map(parts) do part
461461
cell_to_mask = fill(false,ncells)
462462
icell_to_jcells_ptrs = cell_graph.colptr
463463
icell_to_jcells_data = cell_graph.rowval
@@ -473,9 +473,8 @@ function Geometry.DiscreteModel(
473473
end
474474
end
475475
lcell_to_cell = findall(cell_to_mask)
476-
lcell_to_part = zeros(Int32,length(lcell_to_cell))
477-
lcell_to_part .= cell_to_part[lcell_to_cell]
478-
lcell_to_cell, lcell_to_part, cell_to_part
476+
lcell_to_part = collect(Int32,view(cell_to_part,lcell_to_cell))
477+
lcell_to_cell, lcell_to_part
479478
end |> tuple_of_arrays
480479

481480
partition = map(parts,lcell_to_cell,lcell_to_part) do part, lcell_to_cell, lcell_to_part
@@ -509,6 +508,15 @@ function Geometry.UnstructuredDiscreteModel(model::GenericDistributedDiscreteMod
509508
)
510509
end
511510

511+
# PolytopalDiscreteModel
512+
513+
function Geometry.PolytopalDiscreteModel(model::GenericDistributedDiscreteModel)
514+
return GenericDistributedDiscreteModel(
515+
map(Geometry.PolytopalDiscreteModel,local_views(model)),
516+
get_cell_gids(model)
517+
)
518+
end
519+
512520
# Simplexify
513521

514522
function Geometry.simplexify(model::DistributedDiscreteModel;kwargs...)

test/PolytopalCoarseningTests.jl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module PolytopalCoarseningTests
2+
3+
using Gridap
4+
using GridapDistributed, PartitionedArrays
5+
6+
using Gridap.Adaptivity, Gridap.Geometry, Gridap.Arrays
7+
using Gridap.ReferenceFEs
8+
9+
function distributed_voronoi(ranks,np,nc,domain)
10+
serial_model = Geometry.voronoi(simplexify(CartesianDiscreteModel(domain,nc)))
11+
cell_to_rank = zeros(Int,num_cells(serial_model))
12+
for (r,cells) in enumerate(uniform_partition(1:prod(np),np,nc .+ 1))
13+
cell_to_rank[cells] .= r
14+
end
15+
return DiscreteModel(ranks,serial_model,cell_to_rank)
16+
end
17+
18+
np = (2,2)
19+
ranks = with_mpi() do distribute
20+
distribute(LinearIndices((prod(np),)))
21+
end
22+
23+
Dc = 2
24+
fmodel = distributed_voronoi(ranks,np,(8,8),(0,1,0,1))
25+
writevtk(fmodel,"tmp/fmodel")
26+
27+
fgids = partition(get_cell_gids(fmodel))
28+
patch_cells = map(fgids) do fids
29+
Table([collect(own_to_local(fids))])
30+
end
31+
ptopo = Geometry.PatchTopology(get_grid_topology(fmodel), patch_cells)
32+
33+
cmodel, glues = Adaptivity.coarsen(fmodel,ptopo; return_glue=true)
34+
writevtk(cmodel, "tmp/cmodel")
35+
36+
end # module

0 commit comments

Comments
 (0)