58 use rxns, only: reaction
72 INTEGER,
intent(in) :: lNEQ(
neq_dimn)
74 DOUBLE PRECISION,
intent(in) :: lTime
76 DOUBLE PRECISION,
dimension(ODE_DIMN_all),
intent(in) :: Y
78 DOUBLE PRECISION,
dimension(ODE_DIMN_all),
intent(out) :: YDOT
93 DOUBLE PRECISION :: lRate
96 DOUBLE PRECISION :: lRg(dimension_n_g)
99 DOUBLE PRECISION :: rRg(dimension_n_g)
101 DOUBLE PRECISION :: rHORg
103 DOUBLE PRECISION :: lHORg
111 DOUBLE PRECISION :: rHORs(dimension_m)
113 DOUBLE PRECISION :: lHORs(dimension_m)
115 DOUBLE PRECISION :: RxH(0:dimension_m, 0:dimension_m)
118 DOUBLE PRECISION :: sumlRg
120 DOUBLE PRECISION :: sumlRs(dimension_m)
123 DOUBLE PRECISION,
parameter :: speciesLimiter = 1.0d-7
126 LOGICAL,
external :: COMPARE
127 DOUBLE PRECISION,
external :: CALC_H
150 IF(reaction(h)%nSpecies == 0) cycle rxn_lp
159 DO ln = 1, reaction(h)%nSpecies
161 m = reaction(h)%Species(ln)%pMap
163 n = reaction(h)%Species(ln)%sMap
167 mxfr = reaction(h)%Species(ln)%mXfr
168 lrate = rates(h) * reaction(h)%Species(ln)%MWxStoich
172 IF(lrate <
zero)
THEN 174 IF(x_g(ijk,n) > specieslimiter)
THEN 175 rrg(n) = rrg(n) + lrate
177 IF(m /= mxfr) rxh(m,mxfr) = rxh(m,mxfr) + &
178 lrate * calc_h(t_g(ijk),0,n)
185 rrg(n) = rrg(n) + lrate
187 IF(m /= mxfr) rxh(m,mxfr) = rxh(m,mxfr) + &
188 lrate * calc_h(t_s(ijk,mxfr),0,n)
193 IF(lrate <
zero)
THEN 194 IF(x_s(ijk,m,n) > specieslimiter)
THEN 195 rrs(m,n) = rrs(m,n) + lrate
200 rxh(m,mxfr) = rxh(m,mxfr) + &
201 lrate * calc_h(t_s(ijk,m),m,n) * &
202 reaction(h)%Species(ln)%xXfr
204 rxh(mxfr,m) = rxh(mxfr,m) - &
205 lrate * calc_h(t_s(ijk,m),m,n) * &
206 reaction(h)%Species(ln)%xXfr
215 rrs(m,n) = rrs(m,n) + lrate
229 IF(reaction(h)%Calc_DH)
THEN 231 DO ln = 1, reaction(h)%nSpecies
233 m = reaction(h)%Species(ln)%pMap
235 n = reaction(h)%Species(ln)%sMap
237 lrate = rates(h) * reaction(h)%Species(ln)%MWxStoich
240 rhorg = rhorg + lrate * calc_h(t_g(ijk),0,n)
243 rhors(m) = rhors(m) + lrate * calc_h(t_s(ijk,m),m,n)
250 rxh(m,l) = - rxh(l,m)
259 rhorg = rhorg - rxh(l,m)
261 rhors(l) = rhors(l) - rxh(l,m)
268 IF(
units ==
'SI')
THEN 269 lhorg = lhorg + 4.183925d3*rhorg
271 lhors(m) = lhors(m) + 4.183925d3*rhors(m)
274 lhorg = lhorg + rhorg
276 lhors(m) = lhors(m) + rhors(m)
281 lhorg = lhorg + reaction(h)%HoR(0) * rates(h)
283 lhors(m) = lhors(m) + reaction(h)%HoR(m) * rates(h)
301 IF(lneq(2+m) == 1) sumlrs(m) = sum(lrs(m,:))
315 ydot(node) = -lhorg/(rop_g(ijk)*c_pg(ijk))
320 ydot(node) = (lrg(n) - x_g(ijk,n)*sumlrg)/(rop_g(ijk))
327 IF(
rop_s(ijk,m) > 1.0d-8)
THEN 328 ydot(node) = -lhors(m)/(
rop_s(ijk,m)*
c_ps(ijk,m))
337 IF(lneq(2+m) == 1)
THEN 339 ydot(node) = sumlrs(m)
343 ydot(node) = (lrs(m,n) - x_s(ijk,m,n)*sumlrs(m)) / &
double precision, dimension(:,:), allocatable c_ps
double precision, dimension(:), allocatable t_g
subroutine, public mapodetomfix(lnD, lNEQ, loD, lVars)
subroutine usr_rates(IJK, RATES)
double precision, dimension(:,:,:), allocatable x_s
double precision, dimension(:,:), allocatable t_s
double precision, dimension(:,:), allocatable x_g
integer, dimension(0:dim_m) nmax
subroutine stiff_chem_rrates(lNEQ, lTime, Y, YDOT)
double precision, dimension(:,:), allocatable rop_s
double precision, dimension(:), allocatable rop_g
double precision, parameter zero
double precision, dimension(:), allocatable c_pg