@@ -2305,3 +2305,73 @@ function getreactionindices(ig::Q) where {Q<:AbstractPhase}
23052305 return arr
23062306end
23072307export getreactionindices
2308+
2309+ @inline function getsensspcsrxns (domain:: D ,ind:: Int64 ) where {D<: AbstractDomain }
2310+ sensspcinds = Array {Int64,1} ()
2311+ sensrxninds = Array {Int64,1} ()
2312+ for rxnind in 1 : size (domain. rxnarray)[2 ]
2313+ if ind in @inbounds @view domain. rxnarray[:,rxnind]
2314+ for spcind in @inbounds @view domain. rxnarray[:,rxnind]
2315+ if ! (spcind in sensspcinds) && (spcind != = 0 )
2316+ push! (sensspcinds,spcind)
2317+ end
2318+ end
2319+ push! (sensrxninds,rxnind)
2320+ end
2321+ end
2322+
2323+ sensrxns = Array {ElementaryReaction,1} (undef,length (sensrxninds))
2324+ sensspcs = Array {Species,1} (undef,length (sensspcinds))
2325+ sensspcnames = Array {String,1} (undef,length (sensspcinds))
2326+ senstooriginspcind = Array {Int64,1} (undef,length (sensspcinds))
2327+ senstooriginrxnind = Array {Int64,1} (undef,length (sensrxninds))
2328+ for (i,spcind) in enumerate (sensspcinds)
2329+ spc = domain. phase. species[spcind]
2330+ sensspcnames[i] = spc. name
2331+ @inbounds sensspcs[i] = Species (
2332+ name= spc. name,
2333+ index= i,
2334+ inchi= spc. inchi,
2335+ smiles= spc. smiles,
2336+ thermo= spc. thermo,
2337+ atomnums= spc. atomnums,
2338+ bondnum= spc. bondnum,
2339+ diffusion= spc. diffusion,
2340+ radius= spc. radius,
2341+ radicalelectrons= spc. radicalelectrons,
2342+ )
2343+ @inbounds senstooriginspcind[i] = spcind
2344+ end
2345+
2346+ for (i, rxnind) in enumerate (sensrxninds)
2347+ rxn = domain. phase. reactions[rxnind]
2348+ reactants = Array {Species,1} ()
2349+ reactantinds = Array {Int64,1} ()
2350+ @simd for reactant in rxn. reactants
2351+ ind = findfirst (isequal (reactant. name),sensspcnames)
2352+ @inbounds push! (reactants,sensspcs[ind])
2353+ push! (reactantinds,ind)
2354+ end
2355+ products = Array {Species,1} ()
2356+ productinds = Array {Int64,1} ()
2357+ @simd for product in rxn. products
2358+ ind = findfirst (isequal (product. name),sensspcnames)
2359+ @inbounds push! (products,sensspcs[ind])
2360+ push! (productinds,ind)
2361+ end
2362+
2363+ @inbounds sensrxns[i] = ElementaryReaction (
2364+ index= i,
2365+ reactants= SVector (reactants... ),
2366+ reactantinds= SVector (reactantinds... ),
2367+ products= SVector (products... ),
2368+ productinds= SVector (productinds... ),
2369+ kinetics= rxn. kinetics,
2370+ radicalchange= rxn. radicalchange,
2371+ pairs= rxn. pairs
2372+ )
2373+ @inbounds senstooriginrxnind[i] = rxnind
2374+ end
2375+
2376+ return sensspcs,sensrxns,sensspcnames,senstooriginspcind,senstooriginrxnind
2377+ end
0 commit comments