Skip to content

Commit

Permalink
Apply propagate inbounds to some SEM operators
Browse files Browse the repository at this point in the history
  • Loading branch information
charleskawczynski committed Jun 17, 2023
1 parent 7407988 commit 3eddfba
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 16 deletions.
28 changes: 24 additions & 4 deletions src/Operators/spectralelement.jl
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,12 @@ Divergence{()}(space) = Divergence{operator_axes(space)}()
operator_return_eltype(op::Divergence{I}, ::Type{S}) where {I, S} =
RecursiveApply.rmaptype(Geometry.divergence_result_type, S)

function apply_operator(op::Divergence{(1,)}, space, slabidx, arg)
Base.@propagate_inbounds function apply_operator(
op::Divergence{(1,)},
space,
slabidx,
arg,
)
FT = Spaces.undertype(space)
QS = Spaces.quadrature_style(space)
Nq = Quadratures.degrees_of_freedom(QS)
Expand Down Expand Up @@ -671,7 +676,12 @@ WeakDivergence{()}(space) = WeakDivergence{operator_axes(space)}()
operator_return_eltype(::WeakDivergence{I}, ::Type{S}) where {I, S} =
RecursiveApply.rmaptype(Geometry.divergence_result_type, S)

function apply_operator(op::WeakDivergence{(1,)}, space, slabidx, arg)
Base.@propagate_inbounds function apply_operator(
op::WeakDivergence{(1,)},
space,
slabidx,
arg,
)
FT = Spaces.undertype(space)
QS = Spaces.quadrature_style(space)
Nq = Quadratures.degrees_of_freedom(QS)
Expand Down Expand Up @@ -812,7 +822,12 @@ Gradient{()}(space) = Gradient{operator_axes(space)}()
operator_return_eltype(::Gradient{I}, ::Type{S}) where {I, S} =
RecursiveApply.rmaptype(T -> Geometry.gradient_result_type(Val(I), T), S)

function apply_operator(op::Gradient{(1,)}, space, slabidx, arg)
Base.@propagate_inbounds function apply_operator(
op::Gradient{(1,)},
space,
slabidx,
arg,
)
FT = Spaces.undertype(space)
QS = Spaces.quadrature_style(space)
Nq = Quadratures.degrees_of_freedom(QS)
Expand Down Expand Up @@ -935,7 +950,12 @@ WeakGradient{()}(space) = WeakGradient{operator_axes(space)}()
operator_return_eltype(::WeakGradient{I}, ::Type{S}) where {I, S} =
RecursiveApply.rmaptype(T -> Geometry.gradient_result_type(Val(I), T), S)

function apply_operator(op::WeakGradient{(1,)}, space, slabidx, arg)
Base.@propagate_inbounds function apply_operator(
op::WeakGradient{(1,)},
space,
slabidx,
arg,
)
FT = Spaces.undertype(space)
QS = Spaces.quadrature_style(space)
Nq = Quadratures.degrees_of_freedom(QS)
Expand Down
53 changes: 41 additions & 12 deletions src/Spaces/dss_transform.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,37 @@ Transformations only apply to vector quantities.
See [`Spaces.weighted_dss!`](@ref).
"""
dss_transform(arg, local_geometry, weight, i, j) =
Base.@propagate_inbounds dss_transform(arg, local_geometry, weight, i, j) =
dss_transform(arg[i, j], local_geometry[i, j], weight[i, j])
dss_transform(arg, local_geometry, weight::Nothing, i, j) =
dss_transform(arg[i, j], local_geometry[i, j], 1)
dss_transform(arg, local_geometry::Nothing, weight::Nothing, i, j) = arg[i, j]
Base.@propagate_inbounds dss_transform(
arg,
local_geometry,
weight::Nothing,
i,
j,
) = dss_transform(arg[i, j], local_geometry[i, j], 1)
Base.@propagate_inbounds dss_transform(
arg,
local_geometry::Nothing,
weight::Nothing,
i,
j,
) = arg[i, j]

dss_transform(arg, local_geometry, weight, i) =
Base.@propagate_inbounds dss_transform(arg, local_geometry, weight, i) =
dss_transform(arg[i], local_geometry[i], weight[i])
dss_transform(arg, local_geometry, weight::Nothing, i) =
dss_transform(arg[i], local_geometry[i], 1)
dss_transform(arg, local_geometry::Nothing, weight::Nothing, i) = arg[i]
Base.@propagate_inbounds dss_transform(
arg,
local_geometry,
weight::Nothing,
i,
) = dss_transform(arg[i], local_geometry[i], 1)
Base.@propagate_inbounds dss_transform(
arg,
local_geometry::Nothing,
weight::Nothing,
i,
) = arg[i]

@inline function dss_transform(
arg::Tuple{},
Expand Down Expand Up @@ -128,12 +148,21 @@ Transform `targ[I...]` back to a value of type `T` after performing direct stiff
See [`Spaces.weighted_dss!`](@ref).
"""
dss_untransform(::Type{T}, targ, local_geometry, i, j) where {T} =
dss_untransform(T, targ, local_geometry[i, j])
Base.@propagate_inbounds dss_untransform(
::Type{T},
targ,
local_geometry,
i,
j,
) where {T} = dss_untransform(T, targ, local_geometry[i, j])
dss_untransform(::Type{T}, targ, local_geometry::Nothing, i, j) where {T} =
dss_untransform(T, targ, local_geometry)
dss_untransform(::Type{T}, targ, local_geometry, i) where {T} =
dss_untransform(T, targ, local_geometry[i])
Base.@propagate_inbounds dss_untransform(
::Type{T},
targ,
local_geometry,
i,
) where {T} = dss_untransform(T, targ, local_geometry[i])
dss_untransform(::Type{T}, targ, local_geometry::Nothing, i) where {T} =
dss_untransform(T, targ, local_geometry)
@inline function dss_untransform(
Expand Down

0 comments on commit 3eddfba

Please sign in to comment.