Skip to content

Commit 447a863

Browse files
committed
Add helper function getsensspcsrxns that extracts spcs & rxns related to target spc
1 parent 9cb488b commit 447a863

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

src/Domain.jl

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2305,3 +2305,73 @@ function getreactionindices(ig::Q) where {Q<:AbstractPhase}
23052305
return arr
23062306
end
23072307
export 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

Comments
 (0)