Skip to content

Commit dc3a1b2

Browse files
committed
add ForwardDiff jacobians for multi-domain systems
1 parent cf0b484 commit dc3a1b2

1 file changed

Lines changed: 19 additions & 0 deletions

File tree

src/Reactor.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,16 @@ function jacobianyforwarddiff(y::U,p::W,t::Z,domain::V,interfaces::Q3,colorvec::
246246
end
247247
export jacobianyforwarddiff
248248

249+
function jacobianyforwarddiff!(J::Q,y::U,p::W,t::Z,domains::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:Tuple}
250+
f(dy::X,y::Array{T,1}) where {T<:Real,X} = dydtreactor!(dy,y,t,domains,interfaces;p=p,sensitivity=false)
251+
ForwardDiff.jacobian!(J,f,zeros(size(y)),y)
252+
end
253+
254+
function jacobianyforwarddiff(y::U,p::W,t::Z,domains::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:Tuple}
255+
J = zeros(length(y),length(y))
256+
jacobianyforwarddiff!(J,y,p,t,domains,interfaces,colorvec)
257+
return J
258+
end
249259
# function jacobiany!(J::Q,y::U,p::W,t::Z,domain::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2<:AbstractArray,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:AbstractDomain}
250260
# f(y::Array{T,1}) where {T<:Real} = dydtreactor!(y,t,domain,interfaces;p=p,sensitivity=false)
251261
# forwarddiff_color_jacobian!(J,f,y,colorvec=colorvec)
@@ -263,6 +273,15 @@ function jacobianp!(J::Q,y::U,p::W,t::Z,domain::V,interfaces::Q3,colorvec::Q2=no
263273
dy = zeros(length(y))
264274
ForwardDiff.jacobian!(J,f,dy,p)
265275
end
276+
277+
function jacobianp!(J::Q,y::U,p::W,t::Z,domains::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:Tuple}
278+
function f(dy::X,p::Array{T,1}) where {X,T<:Real}
279+
dydtreactor!(dy,y,t,domains,interfaces;p=p,sensitivity=false)
280+
end
281+
dy = zeros(length(y))
282+
ForwardDiff.jacobian!(J,f,dy,p)
283+
end
284+
266285
# function jacobianp!(J::Q,y::U,p::W,t::Z,domain::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2<:AbstractArray,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:AbstractDomain}
267286
# f(p::Array{T,1}) where {T<:Real} = dydtreactor!(y,domain.t[1],domain,interfaces;p=p,sensitivity=false)
268287
# forwarddiff_color_jacobian!(J,f,p,colorvec=colorvec)

0 commit comments

Comments
 (0)