Skip to content

Commit 54b8c39

Browse files
authored
Consolidate GaussKronrod code and issue depwarn in >1D
1 parent c4235b7 commit 54b8c39

File tree

1 file changed

+6
-29
lines changed

1 file changed

+6
-29
lines changed

src/integral.jl

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,13 @@ function _integral(
4646
# Pass through to dim-specific workers in next section of this file
4747
N = Meshes.paramdim(geometry)
4848
if N == 1
49-
return _integral_gk_1d(f, geometry, rule; kwargs...)
49+
integrand(t) = f(geometry(t)) * differential(geometry, (t,), diff_method)
50+
return QuadGK.quadgk(integrand, zero(FP), one(FP); rule.kwargs...)[1]
5051
elseif N == 2
51-
return _integral_gk_2d(f, geometry, rule; kwargs...)
52+
Base.depwarn("Use `HAdaptiveCubature` instead of nested `GaussKronrod` rules.", :integral)
53+
integrand(u, v) = f(geometry2d(u, v)) * differential(geometry2d, (u, v), diff_method)
54+
∫₁(v) = QuadGK.quadgk(u -> integrand(u, v), zero(FP), one(FP); rule.kwargs...)[1]
55+
return QuadGK.quadgk(v -> ∫₁(v), zero(FP), one(FP); rule.kwargs...)[1]
5256
else
5357
_error_unsupported_combination("geometry with more than two parametric dimensions",
5458
"GaussKronrod")
@@ -105,30 +109,3 @@ function _integral(
105109
# Reapply units
106110
return value .* integrandunits
107111
end
108-
109-
################################################################################
110-
# Specialized GaussKronrod Methods
111-
################################################################################
112-
113-
function _integral_gk_1d(
114-
f,
115-
geometry,
116-
rule::GaussKronrod;
117-
FP::Type{T} = Float64,
118-
diff_method::DM = _default_method(geometry)
119-
) where {DM <: DifferentiationMethod, T <: AbstractFloat}
120-
integrand(t) = f(geometry(t)) * differential(geometry, (t,), diff_method)
121-
return QuadGK.quadgk(integrand, zero(FP), one(FP); rule.kwargs...)[1]
122-
end
123-
124-
function _integral_gk_2d(
125-
f,
126-
geometry2d,
127-
rule::GaussKronrod;
128-
FP::Type{T} = Float64,
129-
diff_method::DM = _default_method(geometry2d)
130-
) where {DM <: DifferentiationMethod, T <: AbstractFloat}
131-
integrand(u, v) = f(geometry2d(u, v)) * differential(geometry2d, (u, v), diff_method)
132-
∫₁(v) = QuadGK.quadgk(u -> integrand(u, v), zero(FP), one(FP); rule.kwargs...)[1]
133-
return QuadGK.quadgk(v -> ∫₁(v), zero(FP), one(FP); rule.kwargs...)[1]
134-
end

0 commit comments

Comments
 (0)