Skip to content

Commit 951998b

Browse files
Merge pull request #195 from SciML/bgc/hydraulic_update
Hydraulic IsothermalCompressible Updates
2 parents cf81042 + 252a7aa commit 951998b

File tree

5 files changed

+182
-136
lines changed

5 files changed

+182
-136
lines changed

src/Blocks/sources.jl

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,20 @@ end
455455
struct Parameter{T <: Real}
456456
data::Vector{T}
457457
ref::T
458+
circular_buffer::Bool
459+
end
460+
461+
Parameter(data::Vector{T}, ref::T) where {T <: Real} = Parameter(data, ref, true)
462+
Parameter(x::Parameter) = x
463+
function Parameter(x::T; tofloat = true) where {T <: Real}
464+
if tofloat
465+
x = float(x)
466+
P = typeof(x)
467+
else
468+
P = T
469+
end
470+
471+
return Parameter(P[], x)
458472
end
459473

460474
function Base.isequal(x::Parameter, y::Parameter)
@@ -501,18 +515,6 @@ function Base.show(io::IO, m::MIME"text/plain", p::Parameter)
501515
end
502516
end
503517

504-
Parameter(x::Parameter) = x
505-
function Parameter(x::T; tofloat = true) where {T <: Real}
506-
if tofloat
507-
x = float(x)
508-
P = typeof(x)
509-
else
510-
P = T
511-
end
512-
513-
return Parameter(P[], x)
514-
end
515-
516518
function get_sampled_data(t, memory::Parameter{T}) where {T}
517519
if t < 0
518520
t = zero(t)
@@ -536,9 +538,15 @@ function get_sampled_data(t, memory::Parameter{T}) where {T}
536538
return x1
537539
else
538540
n = length(memory.data)
539-
if i2 > n
540-
i2 = n
541-
i1 = i2 - 1
541+
542+
if memory.circular_buffer
543+
i1 = (i1 - 1) % n + 1
544+
i2 = (i2 - 1) % n + 1
545+
else
546+
if i2 > n
547+
i2 = n
548+
i1 = i2 - 1
549+
end
542550
end
543551

544552
t2 = (i2 - 1) * memory.ref
@@ -566,12 +574,6 @@ function Symbolics.derivative(::typeof(get_sampled_data), args::NTuple{2, Any},
566574
first_order_backwards_difference(t, memory)
567575
end
568576

569-
SampledData(T::Type; name) = SampledData(T[], zero(T); name)
570-
SampledData(dt::T) where {T <: Real} = SampledData(T[], dt; name)
571-
function SampledData(data::Vector{T}, dt::T; name) where {T <: Real}
572-
SampledData(; name, buffer = Parameter(data, dt))
573-
end
574-
575577
"""
576578
SampledData(; name, buffer)
577579
@@ -599,6 +601,16 @@ data input component.
599601
end
600602
@deprecate Input SampledData
601603

604+
function SampledData(T::Type, circular_buffer = true; name)
605+
SampledData(T[], zero(T), circular_buffer; name)
606+
end
607+
function SampledData(dt::T, circular_buffer = true) where {T <: Real}
608+
SampledData(T[], dt, circular_buffer; name)
609+
end
610+
function SampledData(data::Vector{T}, dt::T, circular_buffer = true; name) where {T <: Real}
611+
SampledData(; name, buffer = Parameter(data, dt, circular_buffer))
612+
end
613+
602614
Base.convert(::Type{T}, x::Parameter{T}) where {T <: Real} = x.ref
603615

604616
# Beta Code for potential AE Hack ----------------------

0 commit comments

Comments
 (0)