2D Grid examples

using Triangulate, ExtendableGrids, SimplexGridFactory

Rectangle

function rectangle()    X = collect(0:0.05:1)    Y = collect(0:0.05:1)    return simplexgrid(X, X)end

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)    return simplexgrid(X, X)end

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)    return gridend

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)    return subgrid(grid, [1])end

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])    rect!(grid, [4, 2], [5, 8]; region = 2, bregion = cur -> cur == 5 ? 0 : 8)    return subgrid(grid, [2])end

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)    return g, sg, sfend

CI callbacks for ExampleJuggler.jl

Unit tests

using Testfunction runtests()    @test isconsistent(rectangle())    @test isconsistent(rectangle_localref())    @test isconsistent(rectangle_multiregion())    @test isconsistent(rectangle_subgrid())    @test isconsistent(rect2d_bregion_function())    @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 isconsistent(g)    @test isconsistent(sg)    @test numbers_match(g, 187, 306, 66)    @test numbers_match(sg, 17, 16, 0)    @test issorted(view(sg[Coordinates], 1, :))    return nothingend

Plot generation

using GridVisualizefunction generateplots(picdir; Plotter = nothing)    if isdefined(Plotter, :Makie)        size = (300, 300)        Plotter.save(joinpath(picdir, "rectangle.png"), gridplot(rectangle(); Plotter, size))        Plotter.save(joinpath(picdir, "rectangle_localref.png"), gridplot(rectangle_localref(); Plotter, size))        Plotter.save(joinpath(picdir, "rectangle_multiregion.png"), gridplot(rectangle_multiregion(); Plotter, size))        Plotter.save(joinpath(picdir, "rectangle_subgrid.png"), gridplot(rectangle_subgrid(); Plotter, size))        Plotter.save(joinpath(picdir, "rect2d_bregion_function.png"), 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.png")        Plotter.save(fname, reveal(p))    end    return nothingend

This page was generated using Literate.jl.