Skip to content

Commit c6a975d

Browse files
committed
add dydtreactor! for multidomain simulations
1 parent c1206b9 commit c6a975d

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

src/Reactor.jl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,56 @@ export addreactionratecontributions!
177177
calcdomainderivatives!(domain,dydt,interfaces;t=t,T=T,P=P,Us=Us,Hs=Hs,V=V,C=C,ns=ns,N=N,Cvave=Cvave)
178178
return dydt
179179
end
180+
@inline function dydtreactor!(dydt::RC,y::U,t::Z,domains::Q,interfaces::B;p::RV=DiffEqBase.NullParameters(),sensitivity::Bool=true) where {RC,RV,B<:AbstractArray,Z<:Real,U,J<:Integer,Q<:Tuple}
181+
cstot = zeros(typeof(y).parameters[1],length(y))
182+
dydt .= 0.0
183+
domain = domains[1]
184+
ns,cs,T,P,V,C,N,mu,kfs,krevs,Hs,Us,Gs,diffs,Cvave = calcthermo(domain,y,t,p)
185+
vns = Array{Any,1}(undef,length(domains))
186+
vns[1] = ns
187+
vcs = Array{Any,1}(undef,length(domains))
188+
vcs[1] = cs
189+
cstot[domain.indexes[1]:domain.indexes[2]] = cs
190+
vT = Array{Any,1}(undef,length(domains))
191+
vT[1] = T
192+
vP = Array{Any,1}(undef,length(domains))
193+
vP[1] = P
194+
vV = Array{Any,1}(undef,length(domains))
195+
vV[1] = V
196+
vC = Array{Any,1}(undef,length(domains))
197+
vC[1] = C
198+
vN = Array{Any,1}(undef,length(domains))
199+
vN[1] = N
200+
vmu = Array{Any,1}(undef,length(domains))
201+
vmu[1] = mu
202+
vkfs = Array{Any,1}(undef,length(domains))
203+
vkfs[1] = kfs
204+
vkrevs = Array{Any,1}(undef,length(domains))
205+
vkrevs[1] = krevs
206+
vHs = Array{Any,1}(undef,length(domains))
207+
vHs[1] = Hs
208+
vUs = Array{Any,1}(undef,length(domains))
209+
vUs[1] = Us
210+
vGs = Array{Any,1}(undef,length(domains))
211+
vGs[1] = Gs
212+
vdiffs = Array{Any,1}(undef,length(domains))
213+
vdiffs[1] = diffs
214+
vCvave = Array{Any,1}(undef,length(domains))
215+
vCvave[1] = Cvave
216+
addreactionratecontributions!(dydt,domain.rxnarray,cstot,kfs,krevs)
217+
@views dydt[domain.indexes[1]:domain.indexes[2]] .*= V
218+
for (i,domain) in enumerate(@views domains[2:end])
219+
k = i + 1
220+
vns[k],vcs[k],vT[k],vP[k],vV[k],vC[k],vN[k],vmu[k],vkfs[k],vkrevs[k],vHs[k],vUs[k],vGs[k],vdiffs[k],vCvave[k] = calcthermo(domain,y,t,p)
221+
cstot[domain.indexes[1]:domain.indexes[2]] .= vcs[k]
222+
addreactionratecontributions!(dydt,domain.rxnarray,cstot,vkfs[k],vkrevs[k])
223+
@views dydt[domain.indexes[1]:domain.indexes[2]] .*= vV[k]
224+
end
225+
for (i,domain) in enumerate(domains)
226+
calcdomainderivatives!(domain,dydt,interfaces;t=t,T=vT[i],P=vP[i],Us=vUs[i],Hs=vHs[i],V=vV[i],C=vC[i],ns=vns[i],N=vN[i],Cvave=vCvave[i])
227+
end
228+
return dydt
229+
end
180230
export dydtreactor!
181231

182232
function jacobianyforwarddiff!(J::Q,y::U,p::W,t::Z,domain::V,interfaces::Q3,colorvec::Q2=nothing) where {Q3<:AbstractArray,Q2,Q<:AbstractArray,U<:AbstractArray,W,Z<:Real,V<:AbstractDomain}

0 commit comments

Comments
 (0)