Skip to content

Commit 8e03c10

Browse files
committed
Add other missing parts of DiffEqBase
1 parent 4a0f7de commit 8e03c10

File tree

2 files changed

+15
-28
lines changed

2 files changed

+15
-28
lines changed

ext/DynamicQuantitiesDiffEqBaseExt.jl

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,22 @@
11
module DynamicQuantitiesDiffEqBaseExt
22

3-
using DynamicQuantities: UnionAbstractQuantity, ustrip
3+
using DynamicQuantities:
4+
UnionAbstractQuantity, ustrip, QuantityArray
45

56
import DiffEqBase
67

78
DiffEqBase.value(x::UnionAbstractQuantity) = ustrip(x)
8-
DiffEqBase.recursive_length(u::UnionAbstractQuantity) = length(u)
9-
DiffEqBase.recursive_length(u::QuantityArray) = length(u)
10-
11-
# @inline function DiffEqBase.UNITLESS_ABS2(x::UnionAbstractQuantity)
12-
# abs(DiffEqBase.value(x))
13-
# end
14-
# function DiffEqBase.abs2_and_sum(x::DynamicQuantities.Quantity, y::Float64)
15-
# reduce(Base.add_sum, DiffEqBase.value(x), init = zero(real(DiffEqBase.value(x)))) +
16-
# reduce(Base.add_sum, y, init = zero(real(DiffEqBase.value(eltype(y)))))
17-
# end
18-
19-
# Base.sign(x::DynamicQuantities.Quantity) = Base.sign(DiffEqBase.value(x))
20-
21-
# function DiffEqBase.prob2dtmin(prob; use_end_time = true)
22-
# DiffEqBase.prob2dtmin(prob.tspan, oneunit(first(prob.tspan)), use_end_time)
23-
# end
24-
25-
# DiffEqBase.NAN_CHECK(x::DynamicQuantities.Quantity) = isnan(x)
26-
# Base.zero(x::Array{T}) where {T<:DynamicQuantities.Quantity} = zero.(x)
27-
28-
# @inline function DiffEqBase.calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm, t)
29-
# @. DiffEqBase.calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm, t)
30-
# end
31-
32-
# f(u, p, t) = u / t;
33-
# problem = ODEProblem(f, [1.0u"km/s"], (0.0u"s", 1.0u"s"));
34-
# sol = solve(problem, Tsit5(), dt = 0.1u"s")
9+
DiffEqBase.recursive_length(u::UnionAbstractQuantity) = recursive_length(ustrip(u))
10+
DiffEqBase.recursive_length(u::QuantityArray) = recursive_length(ustrip(u))
11+
12+
@inline function DiffEqBase.UNITLESS_ABS2(x::UnionAbstractQuantity)
13+
abs2(ustrip(x))
14+
end
15+
function DiffEqBase.abs2_and_sum(x::UnionAbstractQuantity, y)
16+
reduce(Base.add_sum, ustrip(x), init = zero(real(DiffEqBase.value(x)))) +
17+
reduce(Base.add_sum, y, init = zero(real(DiffEqBase.value(eltype(y)))))
18+
end
19+
20+
DiffEqBase.NAN_CHECK(x::UnionAbstractQuantity) = NAN_CHECK(ustrip(x))
3521

3622
end

src/utils.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ Base.zero(q::Q) where {Q<:UnionAbstractQuantity} = new_quantity(Q, zero(ustrip(q
183183
Base.zero(::AbstractDimensions) = error("There is no such thing as an additive identity for a `AbstractDimensions` object, as + is only defined for `UnionAbstractQuantity`.")
184184
Base.zero(::Type{<:UnionAbstractQuantity}) = error("Cannot create an additive identity for a `UnionAbstractQuantity` type, as the dimensions are unknown. Please use `zero(::UnionAbstractQuantity)` instead.")
185185
Base.zero(::Type{<:AbstractDimensions}) = error("There is no such thing as an additive identity for a `AbstractDimensions` type, as + is only defined for `UnionAbstractQuantity`.")
186+
Base.zero(x::Array{Q}) where {Q<:UnionAbstractQuantity} = zero.(x)
186187

187188
# Dimensionful 1 (oneunit)
188189
Base.oneunit(q::Q) where {Q<:UnionAbstractQuantity} = new_quantity(Q, oneunit(ustrip(q)), dimension(q))

0 commit comments

Comments
 (0)