Skip to content

Commit

Permalink
ENH: hoist vectorfield construction out of hot loop. can't trust Juli…
Browse files Browse the repository at this point in the history
…a's constant prop.
  • Loading branch information
jpfairbanks committed Jul 1, 2024
1 parent 1d0024e commit fb52920
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions ext/AlgebraicDynamicsAlgebraicPetriExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,24 @@ const OpenNet = Union{OpenPetriNet,OpenLabelledPetriNet,OpenLabelledReactionNet}

# vecfields need to be initialized differently depending on type of net
function dynamics(pn::OpenPetriNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(zeros(T,ns), u, p, t)
f! = vectorfield(apex(pn))
storage = zeros(T,ns)
vf(u, p, t) = begin f!(storage, u, p, t); return storage end
end

function dynamics(pn::OpenLabelledPetriNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns))), u, p, t)
f! = vectorfield(apex(pn))
storage = LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns)))
vf(u, p, t) = begin f!(storage, u, p, t); return storage end
return vf
end

function dynamics(pn::OpenLabelledReactionNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns))), u, rates(apex(pn)), t)
f! = vectorfield(apex(pn))
storage = LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns)))
rt = rates(apex(pn))
vf(u, p, t) = begin f!(storage, u, rt, t); return storage end
return vf
end

function ContinuousResourceSharer{T}(pn::OpenNet) where T
Expand Down

0 comments on commit fb52920

Please sign in to comment.