Mercurial > repos > public > sbplib_julia
view test/Grids/multiblockgrids_test.jl @ 2028:06f4b2ab43e8 feature/grids/multiblock_grids
Implement boundary_grid
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Fri, 11 Apr 2025 15:58:17 +0200 |
| parents | 0f27ddff6f92 |
| children |
line wrap: on
line source
using Diffinitive.Grids using StaticArrays function multiblockgrid1d() g₁ = equidistant_grid(0,1,5) g₂ = equidistant_grid(1,2,5) g₃ = equidistant_grid(2,3,5) C = connection.([ (1, UpperBoundary(), 2, LowerBoundary()), (2, UpperBoundary(), 3, LowerBoundary()), ]) return [g₁,g₂,g₃], C end function multiblockgrid2d() g₁₁ = equidistant_grid((0,0),(1,1),5,5) g₁₂ = equidistant_grid((0,1),(1,2),5,5) g₂₁ = equidistant_grid((1,0),(2,1),11,11) g₂₂ = equidistant_grid((1,1),(2,2),5,5) C = map(((i1,d1,b1,i2,d2,b2),)->connection(i1,CartesianBoundary{d1,b1}(), i2, CartesianBoundary{d2,b2}()),[ (1, 1, UpperBoundary, 2, 1, LowerBoundary), (3, 1, UpperBoundary, 4, 1, LowerBoundary), (1, 2, UpperBoundary, 3, 2, LowerBoundary), (2, 2, UpperBoundary, 4, 2, LowerBoundary), ]) return [g₁₁, g₁₂, g₂₁, g₂₂], C end function multiblockgrid_matrix() g₁₁ = equidistant_grid((0,0),(1,1),5,5) g₁₂ = equidistant_grid((0,1),(1,2),5,5) g₂₁ = equidistant_grid((1,0),(2,1),11,11) g₂₂ = equidistant_grid((1,1),(2,2),5,5) C = map(((i1,d1,b1,i2,d2,b2),)->connection(CartesianIndex(i1),CartesianBoundary{d1,b1}(), CartesianIndex(i2), CartesianBoundary{d2,b2}()),[ ((1,1), 1, UpperBoundary, (1,2), 1, LowerBoundary), ((2,1), 1, UpperBoundary, (2,2), 1, LowerBoundary), ((1,1), 2, UpperBoundary, (1,2), 2, LowerBoundary), ((2,1), 2, UpperBoundary, (2,2), 2, LowerBoundary), ]) return [g₁₁ g₁₂; g₂₁ g₂₂], C end function multiblockgrid_dict() g₁ = equidistant_grid(0,1,5) g₂ = equidistant_grid(0,1,5) C = [connection(:a, UpperBoundary(), :b, LowerBoundary())] return Dict(:a=>g₁, :b=>g₂), C end @testset "MultiBlockGrid" begin @test MultiBlockGrid <: Grid @testset "Constructors" begin grids, connections = multiblockgrid1d() @test MultiBlockGrid(grids, connections) isa Grid{Float64,1} grids, connections = multiblockgrid1d() @test MultiBlockGrid(grids, connections) isa MultiBlockGrid{Float64,1} grids, connections = multiblockgrid2d() @test MultiBlockGrid(grids, connections) isa MultiBlockGrid{SVector{2,Float64},2} grids, connections = multiblockgrid_matrix() @test MultiBlockGrid(grids, connections) isa MultiBlockGrid{SVector{2,Float64},2} grids, connections = multiblockgrid_dict() @test MultiBlockGrid(grids, connections) isa MultiBlockGrid{Float64,1} end @testset "Accessors" begin @testset "grids" begin gs, cs = multiblockgrid1d() @test grids(MultiBlockGrid(gs, cs)) == gs gs, cs = multiblockgrid2d() @test grids(MultiBlockGrid(gs, cs)) == gs gs, cs = multiblockgrid_matrix() @test grids(MultiBlockGrid(gs, cs)) == gs gs, cs = multiblockgrid_dict() @test grids(MultiBlockGrid(gs, cs)) == gs end @testset "connections" begin gs, cs = multiblockgrid1d() @test connections(MultiBlockGrid(gs, cs)) == cs gs, cs = multiblockgrid2d() @test connections(MultiBlockGrid(gs, cs)) == cs gs, cs = multiblockgrid_matrix() @test connections(MultiBlockGrid(gs, cs)) == cs gs, cs = multiblockgrid_dict() @test connections(MultiBlockGrid(gs, cs)) == cs end end @testset "Base.getindex" begin gs, cs = multiblockgrid1d() @test MultiBlockGrid(gs, cs)[2] == gs[2] gs, cs = multiblockgrid2d() @test MultiBlockGrid(gs, cs)[3] == gs[3] gs, cs = multiblockgrid_matrix() @test MultiBlockGrid(gs, cs)[1,2] == gs[1,2] gs, cs = multiblockgrid_dict() @test MultiBlockGrid(gs, cs)[:a] == gs[:a] end @testset "boundary_identifiers" begin @test_broken false end @testset "boundary_grid" begin g1 = MultiBlockGrid(multiblockgrid1d()...) @test boundary_grid(g1, MultiBlockBoundary{1,LowerBoundary}()) == ZeroDimGrid(0.) @test boundary_grid(g1, MultiBlockBoundary{3,UpperBoundary}()) == ZeroDimGrid(3.) g2 = MultiBlockGrid(multiblockgrid2d()...) b1lb = MultiBlockBoundary{1,CartesianBoundary{1,LowerBoundary}}() @test boundary_grid(g2, b1lb) == TensorGrid(ZeroDimGrid(0.),equidistant_grid(0,1,5)) gm = MultiBlockGrid(multiblockgrid_matrix()...) b21lb = MultiBlockBoundary{CartesianIndex(2,1),CartesianBoundary{2,LowerBoundary}}() @test boundary_grid(gm, b21lb) == TensorGrid(equidistant_grid(1,2,11),ZeroDimGrid(0.)) end @testset "min_spacing" begin gs, cs = multiblockgrid2d() @test min_spacing(MultiBlockGrid(gs,cs)) isa Float64 @test min_spacing(MultiBlockGrid(gs,cs)) == 0.1 end @testset "refine" begin gs, cs = multiblockgrid2d() @test refine(MultiBlockGrid(gs,cs),2) isa MultiBlockGrid rg = refine(MultiBlockGrid(gs,cs),2) @test connections(rg) == cs @test grids(rg) == [ equidistant_grid((0,0),(1,1),9,9), equidistant_grid((0,1),(1,2),9,9), equidistant_grid((1,0),(2,1),21,21), equidistant_grid((1,1),(2,2),9,9), ] end @testset "coarsen" begin gs, cs = multiblockgrid2d() @test coarsen(MultiBlockGrid(gs,cs),2) isa MultiBlockGrid cg = coarsen(MultiBlockGrid(gs,cs),2) @test connections(cg) == cs @test grids(cg) == [ equidistant_grid((0,0),(1,1),3,3), equidistant_grid((0,1),(1,2),3,3), equidistant_grid((1,0),(2,1),6,6), equidistant_grid((1,1),(2,2),3,3), ] end @testset "boundary_indices" begin @test_broken false end @testset "eval_on" begin @test_broken false end @testset "Base.map" begin @test_broken false end end @testset "MultiBlockBoundary" begin @test MultiBlockBoundary{1,UpperBoundary}() isa BoundaryIdentifier @test grid_id(MultiBlockBoundary{1,UpperBoundary}()) == 1 @test boundary_id(MultiBlockBoundary{1,UpperBoundary}()) == UpperBoundary() end @testset "connection" begin @test connection(1, UpperBoundary(), 2, LowerBoundary()) == (MultiBlockBoundary{1,UpperBoundary}(), MultiBlockBoundary{2,LowerBoundary}()) @test connection(:a, UpperBoundary(), :b, LowerBoundary()) == (MultiBlockBoundary{:a,UpperBoundary}(), MultiBlockBoundary{:b,LowerBoundary}()) @test connection((1, UpperBoundary(), 2, LowerBoundary())) == (MultiBlockBoundary{1,UpperBoundary}(), MultiBlockBoundary{2,LowerBoundary}()) @test_throws Exception connection(1, UpperBoundary, 2, LowerBoundary()) @test_throws Exception connection(1, UpperBoundary(), 2, LowerBoundary) end
