Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use ExampleJuggler #35

Merged
merged 2 commits into from
Nov 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "ExtendableGrids"
uuid = "cfc395e8-590f-11e8-1f13-43a2532b2fa8"
authors = ["Juergen Fuhrmann <[email protected]>, Christian Merdon <[email protected]>"]
version = "1.1.0"
version = "1.2.0"

[deps]
AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
Expand Down
3 changes: 2 additions & 1 deletion docs/Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[deps]
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
ExampleJuggler = "3bbe58f8-ed81-4c4e-a134-03e85fcf4a1a"
ExtendableGrids = "cfc395e8-590f-11e8-1f13-43a2532b2fa8"
Gmsh = "705231aa-382f-11e9-3f0c-b7cb4346fdeb"
GridVisualize = "5eed8a63-0fb0-45eb-886d-8d5a387d12b8"
Expand All @@ -10,4 +11,4 @@ Triangulate = "f7e6ffb2-c36d-4f8f-a77e-16e897189344"

[compat]
Documenter = "1"
julia = "1.9"
julia = "1.9"
29 changes: 6 additions & 23 deletions docs/make.jl
Original file line number Diff line number Diff line change
@@ -1,29 +1,12 @@
ENV["MPLBACKEND"] = "agg"
using Documenter, ExtendableGrids, Literate, GridVisualize, SimplexGridFactory, Gmsh
import CairoMakie, Triangulate

using Documenter, ExtendableGrids, ExampleJuggler, Gmsh
import CairoMakie
CairoMakie.activate!(; type = "svg", visible = false)

example_md_dir = joinpath(@__DIR__, "src", "examples")

examples1d = joinpath(@__DIR__, "..", "examples", "examples1d.jl")
include(examples1d)
examples2d = joinpath(@__DIR__, "..", "examples", "examples2d.jl")
include(examples2d)
examples3d = joinpath(@__DIR__, "..", "examples", "examples3d.jl")
include(examples3d)

include("makeplots.jl")
ExampleJuggler.verbose!(true)

function mkdocs()
Literate.markdown(examples1d, example_md_dir; documenter = false, info = false)
Literate.markdown(examples2d, example_md_dir; documenter = false, info = false)
Literate.markdown(examples3d, example_md_dir; documenter = false, info = false)

generated_examples = joinpath.("examples", filter(x -> endswith(x, ".md"), readdir(example_md_dir)))

makeplots(example_md_dir; Plotter = CairoMakie)

cleanexamples()
generated_examples = @docscripts(joinpath(@__DIR__, "..", "examples"), ["examples1d.jl", "examples2d.jl", "examples3d.jl"],
Plotter=CairoMakie)
makedocs(; sitename = "ExtendableGrids.jl",
modules = [ExtendableGrids, Base.get_extension(ExtendableGrids, :ExtendableGridsGmshExt)],
clean = false,
Expand Down
38 changes: 0 additions & 38 deletions docs/makeplots.jl

This file was deleted.

60 changes: 40 additions & 20 deletions examples/examples1d.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,45 +5,65 @@ using ExtendableGrids
# ## Interval from vector
#
function interval_from_vector()
X=collect(0:0.05:1)
grid=simplexgrid(X)
X = collect(0:0.05:1)
grid = simplexgrid(X)
end
# ![](interval_from_vector.svg)

#
# ##Interval with local refinement
# ## Interval with local refinement
#
function interval_localref()

XLeft=geomspace(0.0,0.5,0.1, 0.01)
XRight=geomspace(0.5,1.0,0.01,0.1)
X=glue(XLeft, XRight)
grid=simplexgrid(X)
XLeft = geomspace(0.0, 0.5, 0.1, 0.01)
XRight = geomspace(0.5, 1.0, 0.01, 0.1)
X = glue(XLeft, XRight)
grid = simplexgrid(X)
end
# ![](interval_localref.svg)


#
# ## Interval with multiple regions
#
function interval_multiregion()

X=collect(0:0.05:1)
grid=simplexgrid(X)
cellmask!(grid,[0.0],[0.5],3)
bfacemask!(grid,[0.5], [0.5],4)
X = collect(0:0.05:1)
grid = simplexgrid(X)
cellmask!(grid, [0.0], [0.5], 3)
bfacemask!(grid, [0.5], [0.5], 4)
grid
end
# ![](interval_multiregion.svg)
#
# ## Multiple regions and subgrid
#
function interval_subgrid()
X=collect(0:0.01:1)
grid=simplexgrid(X)
bfacemask!(grid,[0.5],[0.5],3)
cellmask!(grid,[0.0],[0.25],2)
cellmask!(grid,[0.20],[0.5],3)
subgrid(grid,[2,3])
X = collect(0:0.01:1)
grid = simplexgrid(X)
bfacemask!(grid, [0.5], [0.5], 3)
cellmask!(grid, [0.0], [0.25], 2)
cellmask!(grid, [0.20], [0.5], 3)
subgrid(grid, [2, 3])
end
# ![](interval_subgrid.svg)
# ## CI callbacks
# Unit tests
using Test

function runtests()
@test numbers_match(interval_from_vector(), 21, 20, 2)
@test numbers_match(interval_localref(), 27, 26, 2)
@test numbers_match(interval_multiregion(), 21, 20, 3)
@test numbers_match(interval_subgrid(), 51, 50, 2)
end

# Plot generation
using GridVisualize
function generateplots(picdir; Plotter = nothing)
if isdefined(Plotter, :Makie)
size = (500, 200)
legend = :rt
Plotter.save(joinpath(picdir, "interval_from_vector.svg"), gridplot(interval_from_vector(); Plotter, size, legend))
Plotter.save(joinpath(picdir, "interval_localref.svg"), gridplot(interval_localref(); Plotter, size, legend))
Plotter.save(joinpath(picdir, "interval_multiregion.svg"), gridplot(interval_multiregion(); Plotter, size, legend))
Plotter.save(joinpath(picdir, "interval_subgrid.svg"), gridplot(interval_subgrid(); Plotter, size, legend))
end
end
151 changes: 89 additions & 62 deletions examples/examples2d.jl
Original file line number Diff line number Diff line change
@@ -1,104 +1,131 @@
# 2D Grid examples
# ===============
#
using Triangulate, ExtendableGrids, SimplexGridFactory

# ## Rectangle
function rectangle()
X=collect(0:0.05:1)
Y=collect(0:0.05:1)
simplexgrid(X,X)
X = collect(0:0.05:1)
Y = collect(0:0.05:1)
simplexgrid(X, X)
end
# ![](rectangle.svg)
#
# ## Rectangle with local refinement
#
function rectangle_localref()
hmin=0.01
hmax=0.1
XLeft=geomspace(0.0,0.5,hmax,hmin)
XRight=geomspace(0.5,1.0,hmin,hmax)
X=glue(XLeft, XRight)
simplexgrid(X,X)
hmin = 0.01
hmax = 0.1
XLeft = geomspace(0.0, 0.5, hmax, hmin)
XRight = geomspace(0.5, 1.0, hmin, hmax)
X = glue(XLeft, XRight)
simplexgrid(X, X)
end
# ![](rectangle_localref.svg)


#
# ## Rectangle with multiple regions
#
function rectangle_multiregion()
X=collect(0:0.05:1)
Y=collect(0:0.05:1)
grid=simplexgrid(X,Y)
cellmask!(grid,[0.0,0.0],[1.0,0.5],3)
bfacemask!(grid,[0.0,0.0],[0.0,0.5],5)
bfacemask!(grid,[1.0,0.0],[1.0,0.5],6)
bfacemask!(grid,[0.0,0.5],[1.0,0.5],7)
X = collect(0:0.05:1)
Y = collect(0:0.05:1)
grid = simplexgrid(X, Y)
cellmask!(grid, [0.0, 0.0], [1.0, 0.5], 3)
bfacemask!(grid, [0.0, 0.0], [0.0, 0.5], 5)
bfacemask!(grid, [1.0, 0.0], [1.0, 0.5], 6)
bfacemask!(grid, [0.0, 0.5], [1.0, 0.5], 7)
end
# ![](rectangle_multiregion.svg)



#
# ## Subgrid from rectangle
#
function rectangle_subgrid()
X=collect(0:0.05:1)
Y=collect(0:0.05:1)
grid=simplexgrid(X,Y)
rect!(grid,[0.25,0.25],[0.75,0.75];region=2, bregion=5)
subgrid(grid,[1])
X = collect(0:0.05:1)
Y = collect(0:0.05:1)
grid = simplexgrid(X, Y)
rect!(grid, [0.25, 0.25], [0.75, 0.75]; region = 2, bregion = 5)
subgrid(grid, [1])
end
# ![](rectangle_subgrid.svg)


#
# ## Rect2d with bregion function
#
# Here, we use function as bregion parameter - this allows to
# have no bfaces at the interface between the two rects.
function rect2d_bregion_function()
X=collect(0:0.5:10)
Y=collect(0:0.5:10)
grid=simplexgrid(X,Y)
rect!(grid,[5,4],[9,6];region=2, bregions=[5,5,5,5])
X = collect(0:0.5:10)
Y = collect(0:0.5:10)
grid = simplexgrid(X, Y)
rect!(grid, [5, 4], [9, 6]; region = 2, bregions = [5, 5, 5, 5])

rect!(grid, [4, 2], [5, 8]; region = 2, bregion = cur -> cur == 5 ? 0 : 8)

rect!(grid,[4,2],[5,8];region=2, bregion= cur-> cur == 5 ? 0 : 8 )

subgrid(grid,[2])

subgrid(grid, [2])
end
# ![](rect2d_bregion_function.svg)




function sorted_subgrid(; maxvolume=0.01)

builder=SimplexGridBuilder(Generator=Triangulate)

p1=point!(builder,0,0)
p2=point!(builder,1,0)
p3=point!(builder,1,2)
p4=point!(builder,0,1)
p5=point!(builder,-1,2)

facetregion!(builder,1)
facet!(builder,p1,p2)
facetregion!(builder,2)
facet!(builder,p2,p3)
facetregion!(builder,3)
facet!(builder,p3,p4)
facetregion!(builder,4)
facet!(builder,p4,p5)
facetregion!(builder,5)
facet!(builder,p5,p1)

g=simplexgrid(builder;maxvolume)
sg=subgrid(g,[2],boundary=true,transform=(a,b)->a[1]=b[2])
f=map( (x,y)->sin(3x)*cos(3y),g)
sf=view(f,sg)
g,sg,sf
function sorted_subgrid(; maxvolume = 0.01)
builder = SimplexGridBuilder(; Generator = Triangulate)

p1 = point!(builder, 0, 0)
p2 = point!(builder, 1, 0)
p3 = point!(builder, 1, 2)
p4 = point!(builder, 0, 1)
p5 = point!(builder, -1, 2)

facetregion!(builder, 1)
facet!(builder, p1, p2)
facetregion!(builder, 2)
facet!(builder, p2, p3)
facetregion!(builder, 3)
facet!(builder, p3, p4)
facetregion!(builder, 4)
facet!(builder, p4, p5)
facetregion!(builder, 5)
facet!(builder, p5, p1)

g = simplexgrid(builder; maxvolume)
sg = subgrid(g, [2]; boundary = true, transform = (a, b) -> a[1] = b[2])
f = map((x, y) -> sin(3x) * cos(3y), g)
sf = view(f, sg)
g, sg, sf
end
# ![](sorted_subgrid.svg)
# ## CI callbacks
# Unit tests
using Test
function runtests()
@test numbers_match(rectangle(), 441, 800, 80)
@test numbers_match(rectangle_localref(), 729, 1352, 104)
@test numbers_match(rectangle_multiregion(), 441, 800, 100)
@test numbers_match(rectangle_subgrid(), 360, 600, 120)
@test numbers_match(rect2d_bregion_function(), 79, 112, 44)

g, sg, sf = sorted_subgrid()
@test numbers_match(g, 187, 306, 66)
@test numbers_match(sg, 17, 16, 0)
@test issorted(view(sg[Coordinates], 1, :))
end

# Plot generation
using GridVisualize
function generateplots(picdir; Plotter = nothing)
if isdefined(Plotter, :Makie)
size = (300, 300)
Plotter.save(joinpath(picdir, "rectangle.svg"), gridplot(rectangle(); Plotter, size))
Plotter.save(joinpath(picdir, "rectangle_localref.svg"), gridplot(rectangle_localref(); Plotter, size))
Plotter.save(joinpath(picdir, "rectangle_multiregion.svg"), gridplot(rectangle_multiregion(); Plotter, size))
Plotter.save(joinpath(picdir, "rectangle_subgrid.svg"), gridplot(rectangle_subgrid(); Plotter, size))
Plotter.save(joinpath(picdir, "rect2d_bregion_function.svg"), gridplot(rect2d_bregion_function(); Plotter, size))

g, sg, sf = sorted_subgrid()
p = GridVisualizer(; Plotter, layout = (1, 3), size = (800, 300))
gridplot!(p[1, 1], g)
gridplot!(p[1, 2], sg)
scalarplot!(p[1, 3], sg, sf)
fname = joinpath(picdir, "sorted_subgrid.svg")
Plotter.save(fname, reveal(p))
end
end
Loading
Loading