76 use rxns, only: reaction
100 use discretelement
, only: discrete_element
102 use discretelement
, only: des_continuum_hybrid
127 DOUBLE PRECISION RATES(no_of_rxns)
129 DOUBLE PRECISION lRate
132 DOUBLE PRECISION :: r_Rgp(dimension_n_g)
133 DOUBLE PRECISION :: r_ROXgc(dimension_n_g)
139 DOUBLE PRECISION :: r_RxH(0:mmax, 0:mmax)
141 DOUBLE PRECISION :: r_HoRg, r_HoRs(1:mmax)
143 DOUBLE PRECISION :: l_2SI
147 DOUBLE PRECISION :: speciesLimiter
152 DOUBLE PRECISION,
EXTERNAL :: CALC_H
168 l_2si = merge(4.183925d3, one,
units(1:2) ==
'SI')
172 nosolids = discrete_element .AND. (.NOT.des_continuum_hybrid)
173 lmmax = merge(0, mmax, nosolids)
177 IF (fluid_at(ijk))
THEN 185 rxn_lp:
DO h = 1, no_of_rxns
188 IF(reaction(h)%nSpecies == 0) cycle rxn_lp
199 DO ln = 1, reaction(h)%nSpecies
201 m = reaction(h)%Species(ln)%pMap
203 nn = reaction(h)%Species(ln)%sMap
207 mxfr = reaction(h)%Species(ln)%mXfr
208 lrate = rates(h) * reaction(h)%Species(ln)%MWxStoich
212 IF(lrate <
zero)
THEN 213 IF(x_g(ijk,nn) > specieslimiter)
THEN 214 r_roxgc(nn) = r_roxgc(nn) - lrate/x_g(ijk,nn)
216 IF(m /= mxfr) r_rxh(m,mxfr) = r_rxh(m,mxfr) + &
217 lrate * calc_h(t_g(ijk),0,nn)
225 r_rgp(nn) = r_rgp(nn) + lrate
227 IF(m /= mxfr) r_rxh(m,mxfr) = r_rxh(m,mxfr) + &
228 lrate * calc_h(
t_s(ijk,mxfr),0,nn)
235 IF(lrate <
zero)
THEN 236 IF(x_s(ijk,m,nn) > specieslimiter)
THEN 237 r_roxsc(m,nn) = r_roxsc(m,nn) - lrate/x_s(ijk,m,nn)
242 r_rxh(m,mxfr) = r_rxh(m,mxfr) + lrate * &
243 reaction(h)%Species(ln)%xXfr * &
244 calc_h(
t_s(ijk,m),m,nn)
246 r_rxh(mxfr,m) = r_rxh(mxfr,m) - lrate * &
247 reaction(h)%Species(ln)%xXfr * &
248 calc_h(
t_s(ijk,m),m,nn)
258 r_rsp(m,nn) = r_rsp(m,nn) + lrate
271 r_gp(ijk,:
nmax(0)) = r_gp(ijk,:
nmax(0)) + &
274 rox_gc(ijk,:
nmax(0)) = rox_gc(ijk,:
nmax(0)) + &
279 r_sp(ijk,m,:
nmax(m)) = r_sp(ijk,m,:
nmax(m)) + &
282 rox_sc(ijk,m,:
nmax(m)) = rox_sc(ijk,m,:
nmax(m)) + &
291 IF(reaction(h)%Calc_DH)
THEN 293 DO ln = 1, reaction(h)%nSpecies
295 m = reaction(h)%Species(ln)%pMap
297 nn = reaction(h)%Species(ln)%sMap
299 lrate = rates(h) * reaction(h)%Species(ln)%MWxStoich
302 r_horg = r_horg + calc_h(t_g(ijk),0,nn) * lrate
305 r_hors(m) = r_hors(m) + calc_h(
t_s(ijk,m),m,nn)*lrate
312 r_rxh(m,l) = - r_rxh(l,m)
321 r_horg = r_horg - r_rxh(l,m)
323 r_hors(l) = r_hors(l) - r_rxh(l,m)
328 hor_g(ijk) = hor_g(ijk) + l_2si*r_horg
334 hor_g(ijk) = hor_g(ijk) + reaction(h)%HoR(0) * rates(h)
337 reaction(h)%HoR(m) * rates(h)
344 DO lm=1, (dimension_lm+dimension_m-1)
345 r_phase(ijk,lm) = r_phase(ijk,lm) + &
346 rates(h) * reaction(h)%rPHASE(lm)
353 IF(species_eq(0))
THEN 354 sum_r_g(ijk) = sum( r_gp(ijk,:
nmax(0)) - &
355 rox_gc(ijk,:
nmax(0))*x_g(ijk,:
nmax(0)))
358 IF(reaction(h)%nPhases <= 0) cycle
361 sum_r_g(ijk) = sum_r_g(ijk) + &
362 rates(h) * reaction(h)%rPHASE(lm)
368 IF(species_eq(m))
THEN 369 sum_r_s(ijk,m) = sum( r_sp(ijk,m,:
nmax(m)) - &
370 rox_sc(ijk,m,:
nmax(m))*x_s(ijk,m,:
nmax(m)))
373 IF(reaction(h)%nPhases <= 0) cycle
375 lm = 1 + l + ((m-1)*m)/2
376 sum_r_s(ijk,m) = sum_r_s(ijk,m) - &
377 rates(h) * reaction(h)%rPHASE(lm)
380 lm = 1 + m + ((l-1)*l)/2
381 sum_r_s(ijk,m) = sum_r_s(ijk,m) + &
382 rates(h) * reaction(h)%rPHASE(lm)
logical function compare(V1, V2)
logical, dimension(0:dim_m) species_eq
double precision, dimension(:), allocatable t_g
double precision, dimension(:), allocatable sum_r_g
double precision, dimension(:,:), allocatable sum_r_s
subroutine usr_rates(IJK, RATES)
double precision, dimension(:,:,:), allocatable rox_sc
double precision, dimension(:,:,:), allocatable x_s
double precision, dimension(:,:), allocatable t_s
double precision, dimension(:,:), allocatable x_g
double precision, dimension(:,:,:), allocatable r_sp
double precision, dimension(:,:), allocatable r_phase
double precision, dimension(:,:), allocatable rox_gc
integer, dimension(0:dim_m) nmax
double precision, parameter zero_x_gs
double precision, parameter zero
double precision, dimension(:,:), allocatable r_gp
double precision, dimension(:), allocatable hor_g
double precision, dimension(:,:), allocatable hor_s