view src/Grids/multiblockgrids.jl @ 2024:3fb33f00dab2 feature/grids/multiblock_grids

Implement getindex
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 12 Mar 2025 11:15:36 +0100
parents 50e7090f5a95
children d35a4cb170ff
line wrap: on
line source


struct MultiBlockGrid{T,D,GT, CT} <: Grid{T,D}
    grids::GT
    connections::CT
end

function MultiBlockGrid(grids, connections)
    T = eltype(valtype(grids))
    D = ndims(valtype(grids))

    MultiBlockGrid{T,D,typeof(grids), typeof(connections)}(grids,connections)
end

grids(g::MultiBlockGrid) = g.grids
connections(g::MultiBlockGrid) = g.connections

Base.getindex(g::MultiBlockGrid, I...) = g.grids[I...]
# function boundary_identifiers end # Requires function from manifolds?
# function boundary_grid end # Should return a MultiBlockGrid with the right connections?

# function min_spacing end
# function refine end
# function coarsen end

# function boundary_indices end # Need to figure out the grid functions first?
# function eval_on end # Need to figure out the grid functions first?
# function Base.map end # Need to figure out the grid functions first?

# Plotting recipes


"""
    MultiBlockBoundary{N, BID} <: BoundaryIdentifier

A boundary identifier for a multiblock grids. `N` Specifies which grid and
`BID` which boundary on that grid.
"""
struct MultiBlockBoundary{N, BID} <: BoundaryIdentifier end
grid_id(::MultiBlockBoundary{N, BID}) where {N, BID} = N
boundary_id(::MultiBlockBoundary{N, BID}) where {N, BID} = BID()


function connection(k1, b1::BoundaryIdentifier, k2, b2::BoundaryIdentifier)
    return (
        MultiBlockBoundary{k1,typeof(b1)}(),
        MultiBlockBoundary{k2,typeof(b2)}(),
    )
end

connection(t::Tuple) = connection(t...)