diff --git a/src/Operators/common.jl b/src/Operators/common.jl index b86123e97b..31e3c2af1a 100644 --- a/src/Operators/common.jl +++ b/src/Operators/common.jl @@ -71,11 +71,11 @@ end struct PlaceholderSpace <: Spaces.AbstractSpace end struct CenterPlaceholderSpace <: Spaces.AbstractSpace end struct FacePlaceholderSpace <: Spaces.AbstractSpace end +struct LevelPlaceholderSpace <: Spaces.AbstractSpace end - +placeholder_space(current_space, parent_space) = current_space placeholder_space(current_space::T, parent_space::T) where {T} = PlaceholderSpace() -placeholder_space(current_space, parent_space) = current_space placeholder_space( current_space::Spaces.CenterFiniteDifferenceSpace, parent_space::Spaces.FaceFiniteDifferenceSpace, @@ -92,7 +92,15 @@ placeholder_space( current_space::Spaces.FaceExtrudedFiniteDifferenceSpace, parent_space::Spaces.CenterExtrudedFiniteDifferenceSpace, ) = FacePlaceholderSpace() +placeholder_space( + current_space::Spaces.AbstractSpectralElementSpace, + parent_space::Spaces.AbstractSpace, +) = + Spaces.issubspace(current_space, parent_space) ? LevelPlaceholderSpace() : + current_space +@inline reconstruct_placeholder_space(current_space, parent_space) = + current_space @inline reconstruct_placeholder_space(::PlaceholderSpace, parent_space) = parent_space @inline reconstruct_placeholder_space( @@ -111,9 +119,8 @@ placeholder_space( ::FacePlaceholderSpace, parent_space::Spaces.CenterExtrudedFiniteDifferenceSpace, ) = Spaces.FaceExtrudedFiniteDifferenceSpace(parent_space) -@inline reconstruct_placeholder_space(current_space, parent_space) = - current_space - +@inline reconstruct_placeholder_space(::LevelPlaceholderSpace, parent_space) = + Spaces.level(parent_space, left_idx(parent_space)) # extract any level strip_space(obj, parent_space) = obj