@@ -461,11 +461,11 @@ based alternative algorithm is slower, but avoids this concern.
461
461
"""
462
462
function getadjointsensitivities (bsol:: Q ,target:: String ,solver:: W ;sensalg:: W2 = InterpolatingAdjoint (autojacvec= ReverseDiffVJP (false )),
463
463
abstol:: Float64 = 1e-6 ,reltol:: Float64 = 1e-3 ,normalize= true ,kwargs... ) where {Q,W,W2}
464
- @assert target in bsol. names || target in [" T" ," V" ," P" ]
464
+ @assert target in bsol. names || target in [" T" ," V" ," P" , " mass " ]
465
465
466
466
pethane = 160
467
467
468
- if target in [" T" ," V" ," P" ]
468
+ if target in [" T" ," V" ," P" , " mass " ]
469
469
if haskey (bsol. domain. thermovariabledict, target)
470
470
ind = bsol. domain. thermovariabledict[target]
471
471
else
@@ -537,23 +537,23 @@ function getadjointsensitivities(bsol::Q,target::String,solver::W;sensalg::W2=In
537
537
dgdprevdiff (out, y, p, t) = ReverseDiff. gradient! (out, p -> g (y, p, t), p)
538
538
539
539
if length (bsol. domain. p)<= pethane
540
- if target in [" T" ," V" ," P" ] || ! isempty (bsol. interfaces)
540
+ if target in [" T" ," V" ," P" , " mass " ] || ! isempty (bsol. interfaces)
541
541
du0,dpadj = adjoint_sensitivities (bsol. sol,solver,g,nothing ,(dgdu,dgdp);sensealg= sensalg,abstol= abstol,reltol= reltol,kwargs... )
542
542
else
543
543
du0,dpadj = adjoint_sensitivities (bsol. sol,solver,sensg,nothing ,(dsensgdu,dsensgdp);sensealg= sensalg,abstol= abstol,reltol= reltol,kwargs... )
544
544
end
545
545
else
546
- if target in [" T" ," V" ," P" ] || ! isempty (bsol. interfaces)
546
+ if target in [" T" ," V" ," P" , " mass " ] || ! isempty (bsol. interfaces)
547
547
du0,dpadj = adjoint_sensitivities (bsol. sol,solver,g,nothing ,(dgdurevdiff,dgdprevdiff);sensealg= sensalg,abstol= abstol,reltol= reltol,kwargs... )
548
548
else
549
549
du0,dpadj = adjoint_sensitivities (bsol. sol,solver,sensg,nothing ,(dsensgdurevdiff,dsensgdprevdiff);sensealg= sensalg,abstol= abstol,reltol= reltol,kwargs... )
550
550
end
551
551
end
552
552
if normalize
553
553
dpadj[length (bsol. domain. phase. species)+ 1 : end ] .*= bsol. domain. p[length (bsol. domain. phase. species)+ 1 : end ]
554
- if ! (target in [" T" ," V" ," P" ]) && isempty (bsol. interfaces)
554
+ if ! (target in [" T" ," V" ," P" , " mass " ]) && isempty (bsol. interfaces)
555
555
dpadj ./= bsol. sol (bsol. sol. t[end ])[senstooriginspcind[ind]]
556
- elseif ! (target in [" T" ," V" ," P" ]) && ! isempty (bsol. interfaces)
556
+ elseif ! (target in [" T" ," V" ," P" , " mass " ]) && ! isempty (bsol. interfaces)
557
557
dpadj ./= bsol. sol (bsol. sol. t[end ])[ind]
558
558
end
559
559
end
562
562
563
563
function getadjointsensitivities (syssim:: Q ,bsol:: W3 ,target:: String ,solver:: W ;sensalg:: W2 = InterpolatingAdjoint (autojacvec= ReverseDiffVJP (false )),
564
564
abstol:: Float64 = 1e-6 ,reltol:: Float64 = 1e-3 ,normalize= true ,kwargs... ) where {Q,W,W2,W3}
565
- @assert target in bsol. names || target in [" T" ," V" ," P" ]
566
- if target in [" T" ," V" ," P" ]
565
+ @assert target in bsol. names || target in [" T" ," V" ," P" , " mass " ]
566
+ if target in [" T" ," V" ," P" , " mass " ]
567
567
if haskey (bsol. domain. thermovariabledict, target)
568
568
ind = bsol. domain. thermovariabledict[target]
569
569
else
@@ -596,7 +596,7 @@ function getadjointsensitivities(syssim::Q,bsol::W3,target::String,solver::W;sen
596
596
for domain in domains
597
597
dpadj[domain. parameterindexes[1 ]+ length (domain. phase. species): domain. parameterindexes[2 ]] .*= syssim. p[domain. parameterindexes[1 ]+ length (domain. phase. species): domain. parameterindexes[2 ]]
598
598
end
599
- if ! (target in [" T" ," V" ," P" ])
599
+ if ! (target in [" T" ," V" ," P" , " mass " ])
600
600
dpadj ./= bsol. sol (bsol. sol. t[end ])[ind]
601
601
end
602
602
end
0 commit comments