Skip to content

Commit

Permalink
Now, tags argument optional in Boundary/SkeletonTriangulation(model)
Browse files Browse the repository at this point in the history
  • Loading branch information
fverdugo committed Sep 12, 2019
1 parent 512ee75 commit e6424a3
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 6 deletions.
29 changes: 29 additions & 0 deletions src/Geometry/BoundaryGrids.jl
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,24 @@ function Triangulation(grid::BoundaryGrid)
BoundaryTriangulation(trian,grid.descriptor)
end

function BoundaryGrid(model::DiscreteModel)
d = celldim(model)
graph = GridGraph(model)
facet_to_cells = connections(graph,d-1,d)
nfacets = length(facet_to_cells)
mask = fill(false,nfacets)
_find_on_boundary!(mask,facet_to_cells)
BoundaryGrid(model,mask)
end

function _find_on_boundary!(mask,facet_to_cells)
for (facet,cells) in enumerate(facet_to_cells)
if length(cells) == 1
mask[facet] = true
end
end
end

function BoundaryGrid(model::DiscreteModel,tags,icell::Int=1)
_tags = _setup_tags(FaceLabels(model),tags)
BoundaryGrid(model,_tags,icell)
Expand All @@ -47,6 +65,12 @@ function BoundaryGrid(model::DiscreteModel,tags::Vector{Int},icell::Int=1)
nfacets = length(oldfacet_to_label)
oldfacet_to_mask = fill(false,nfacets)
_setup_mask!(oldfacet_to_mask,oldfacet_to_label,tag_to_labels,tags)
BoundaryGrid(model,oldfacet_to_mask,icell)
end

function BoundaryGrid(model::DiscreteModel,mask::AbstractVector{Bool},icell::Int=1)
d = celldim(model)
oldfacet_to_mask = mask
fgrid = Grid(model,d-1)
facet_to_oldfacet = findall(oldfacet_to_mask)
grid = GridPortion(fgrid,facet_to_oldfacet)
Expand All @@ -72,6 +96,11 @@ function BoundaryTriangulation(model::DiscreteModel,tags,icell::Int=1)
Triangulation(grid)
end

function BoundaryTriangulation(model::DiscreteModel)
grid = BoundaryGrid(model)
Triangulation(grid)
end

function _setup_mask!(facet_to_mask,facet_to_label,tag_to_labels,tags)
nfacets = length(facet_to_mask)
for facet in 1:nfacets
Expand Down
23 changes: 23 additions & 0 deletions src/Geometry/SkeletonGrids.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,24 @@ function Triangulation(grid::SkeletonGrid)
SkeletonTriangulation(trian,grid.descriptor1,grid.descriptor2)
end

function SkeletonGrid(model::DiscreteModel)
d = celldim(model)
graph = GridGraph(model)
facet_to_cells = connections(graph,d-1,d)
nfacets = length(facet_to_cells)
mask = fill(false,nfacets)
_find_on_skeleton!(mask,facet_to_cells)
SkeletonGrid(model,mask)
end

function _find_on_skeleton!(mask,facet_to_cells)
for (facet,cells) in enumerate(facet_to_cells)
if length(cells) == 2
mask[facet] = true
end
end
end

function SkeletonGrid(model::DiscreteModel, tags)
cell1 = 1
cell2 = 2
Expand All @@ -52,4 +70,9 @@ function SkeletonTriangulation(model::DiscreteModel,tags)
Triangulation(grid)
end

function SkeletonTriangulation(model::DiscreteModel)
grid = SkeletonGrid(model)
Triangulation(grid)
end

end # module
9 changes: 3 additions & 6 deletions test/FESpacesTests/DGFEOperatorsTests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ U = TrialFESpace(fespace)
trian = Triangulation(model)
quad = CellQuadrature(trian,order=2*order)

btrian = BoundaryTriangulation(model,"boundary")
btrian = BoundaryTriangulation(model)
bquad = CellQuadrature(btrian,order=2*order)
nb = NormalVector(btrian)

strian = SkeletonTriangulation(model,"interior") # TODO
strian = SkeletonTriangulation(model)
squad = CellQuadrature(strian,order=2*order)
ns = NormalVector(strian)

Expand All @@ -53,17 +53,14 @@ uh = solve(op)

e = u - uh

writevtk(trian,"trian",cellfields=["uh"=>uh,"e"=>e])
#writevtk(trian,"trian",cellfields=["uh"=>uh,"e"=>e])

l2(u) = inner(u,u)
h1(u) = a_Ω(u,u) + l2(u)

el2 = sqrt(sum( integrate(l2(e),trian,quad) ))
eh1 = sqrt(sum( integrate(h1(e),trian,quad) ))

@show el2
@show eh1

@test el2 < 1.e-8
@test eh1 < 1.e-8

Expand Down
3 changes: 3 additions & 0 deletions test/IntegrationTests/BoundaryTriangulationsTests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ btrian = BoundaryTriangulation(model,tags)
tags = ["physical_tag_23","physical_tag_24","physical_tag_25"]
btrian = BoundaryTriangulation(model,tags)

btrian = BoundaryTriangulation(model)


end # module
3 changes: 3 additions & 0 deletions test/IntegrationTests/SkeletonTriangulationsTests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,7 @@ strian = SkeletonTriangulation(trian,descr1,descr2)

test_triangulation(strian)

strian = SkeletonTriangulation(model)
#writevtk(strian,"strian")

end # module

0 comments on commit e6424a3

Please sign in to comment.