Skip to content

Commit

Permalink
Use ExampleJuggler (#35)
Browse files Browse the repository at this point in the history
* moved tests to examplejuggler

* move documentation to examplejuggler
  • Loading branch information
j-fu authored Nov 23, 2023
1 parent db7713f commit 915a910
Show file tree
Hide file tree
Showing 11 changed files with 208 additions and 241 deletions.
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

0 comments on commit 915a910

Please sign in to comment.