File: N:\mfix\model\rrates0.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 SUBROUTINE RRATES0()
29
30
31
32
33
34 use compar
35 use indices
36 use geometry
37
38
39
40
41 use fldvar, only: X_g
42
43 use fldvar, only: T_g
44
45 use rxns, only: R_gp
46
47 use rxns, only: RoX_gc
48
49 use rxns, only: SUM_R_g
50
51 use energy, only: HOR_g
52
53
54
55
56 use fldvar, only: X_s
57
58 use fldvar, only: T_s
59
60 use rxns, only: R_sp
61
62 use rxns, only: RoX_sc
63
64 use rxns, only: SUM_R_s
65
66 use energy, only: HOR_s
67
68
69
70
71
72 use rxns, only: NO_OF_RXNS
73
74 use rxns, only: R_phase
75
76 use rxns, only: Reaction
77
78
79
80
81
82 use param, only: DIMENSION_M
83
84 use param, only: DIMENSION_N_g
85
86 use param, only: DIMENSION_N_s
87 use param1, only: dimension_lm
88 use param1, only: zero
89
90 use run, only: ENERGY_EQ
91
92 use run, only: SPECIES_EQ
93
94 use run, only: UNITS
95
96 use physprop, only: MMAX
97
98 use physprop, only: NMAX
99
100 use discretelement, only: DISCRETE_ELEMENT
101
102 use discretelement, only: DES_CONTINUUM_HYBRID
103
104 use toleranc
105 use functions
106
107 implicit none
108
109
110
111
112 INTEGER :: IJK
113 INTEGER :: H
114 INTEGER :: L, M
115 INTEGER :: NN
116 INTEGER :: lN
117 INTEGER :: lM
118 INTEGER :: mXfr
119
120
121
122
123 INTEGER :: lMMAX
124 LOGICAL :: noSolids
125
126
127 DOUBLE PRECISION RATES(NO_OF_RXNS)
128
129 DOUBLE PRECISION lRate
130
131
132 DOUBLE PRECISION :: r_Rgp(DIMENSION_N_g)
133 DOUBLE PRECISION :: r_ROXgc(DIMENSION_N_g)
134
135 DOUBLE PRECISION :: r_Rsp(DIMENSION_M, DIMENSION_N_s)
136 DOUBLE PRECISION :: r_ROXsc(DIMENSION_M, DIMENSION_N_s)
137
138
139 DOUBLE PRECISION :: r_RxH(0:MMAX, 0:MMAX)
140
141 DOUBLE PRECISION :: r_HoRg, r_HoRs(1:MMAX)
142
143 DOUBLE PRECISION :: l_2SI
144
145
146
147 DOUBLE PRECISION :: speciesLimiter
148
149
150
151
152 DOUBLE PRECISION, EXTERNAL :: CALC_H
153
154
155
156
157 = ZERO; R_SP = ZERO
158 ROX_GC = ZERO; ROX_SC = ZERO
159 SUM_R_G = ZERO; SUM_R_S = ZERO
160 HOR_G = ZERO; HOR_S = ZERO
161
162 R_PHASE = ZERO
163
164
165 = ZERO_X_gs
166
167
168 = merge(4.183925d3, ONE, UNITS(1:2) == 'SI')
169
170
171
172 = DISCRETE_ELEMENT .AND. (.NOT.DES_CONTINUUM_HYBRID)
173 lMMAX = merge(0, MMAX, noSolids)
174
175
176 DO IJK = ijkstart3, ijkend3
177 IF (FLUID_AT(IJK)) THEN
178
179 RATES(:) = ZERO
180
181
182 CALL USR_RATES(IJK, RATES)
183
184
185 RXN_LP: DO H = 1, NO_OF_RXNS
186
187
188 IF(Reaction(H)%nSpecies == 0) CYCLE RXN_LP
189 IF(COMPARE(RATES(H),ZERO)) CYCLE RXN_LP
190
191
192 = ZERO; r_ROXgc = ZERO; r_HoRg = ZERO
193 r_Rsp = ZERO; r_ROXsc = ZERO; r_HoRs = ZERO
194
195 r_RxH = ZERO
196
197
198
199 DO lN = 1, Reaction(H)%nSpecies
200
201 = Reaction(H)%Species(lN)%pMap
202
203 = Reaction(H)%Species(lN)%sMap
204
205
206
207 = Reaction(H)%Species(lN)%mXfr
208 lRate = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
209
210 IF(M == 0) THEN
211
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)
215
216 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
217 lRate * CALC_H(T_G(IJK),0,NN)
218 ELSE
219
220 (H) = ZERO
221 CYCLE RXN_LP
222 ENDIF
223 ELSE
224
225 (NN) = r_Rgp(NN) + lRate
226
227 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
228 lRate * CALC_H(T_s(IJK,mXfr),0,NN)
229 ENDIF
230
231
232
233 ELSE
234
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)
238
239
240 IF(M /= mXfr) THEN
241 IF(M < mXfr) THEN
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)
245 ELSE
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)
249 ENDIF
250 ENDIF
251 ELSE
252
253 (H) = ZERO
254 CYCLE RXN_LP
255 ENDIF
256 ELSE
257
258 (M,NN) = r_Rsp(M,NN) + lRate
259 ENDIF
260 ENDIF
261 ENDDO
262
263
264
265
266
267
268
269
270
271 (IJK,:NMAX(0)) = R_gp(IJK,:NMAX(0)) + &
272 r_Rgp(:NMAX(0))
273
274 (IJK,:NMAX(0)) = ROX_gc(IJK,:NMAX(0)) + &
275 r_ROXgc(:NMAX(0))
276
277 DO M=1,lMMAX
278
279 (IJK,M,:NMAX(M)) = R_sp(IJK,M,:NMAX(M)) + &
280 r_Rsp(M,:NMAX(M))
281
282 (IJK,M,:NMAX(M)) = ROX_sc(IJK,M,:NMAX(M)) + &
283 r_ROXsc(M,:NMAX(M))
284 ENDDO
285
286
287
288
289 IF(ENERGY_EQ) THEN
290
291 IF(Reaction(H)%Calc_DH) THEN
292
293 DO lN = 1, Reaction(H)%nSpecies
294
295 = Reaction(H)%Species(lN)%pMap
296
297 = Reaction(H)%Species(lN)%sMap
298
299 = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
300
301 IF(M == 0) THEN
302 r_HORg = r_HORg + CALC_H(T_g(IJK),0,NN) * lRate
303
304 ELSE
305 r_HORs(M) = r_HORs(M) + CALC_H(T_s(IJK,M),M,NN)*lRate
306 ENDIF
307 ENDDO
308
309
310 DO M=1, lMMAX
311 DO L=0, M-1
312 r_RxH(M,L) = - r_RxH(L,M)
313 ENDDO
314 ENDDO
315
316
317 DO L=0, lMMAX
318 DO M = 0, lMMAX
319 IF(L == M) CYCLE
320 IF(L == 0) THEN
321 r_HORg = r_HORg - r_RxH(L,M)
322 ELSE
323 r_HORs(L) = r_HORs(L) - r_RxH(L,M)
324 ENDIF
325 ENDDO
326 ENDDO
327
328 (IJK) = HOR_g(IJK) + l_2SI*r_HORg
329 DO M=1,lMMAX
330 HOR_s(IJK,M) = HOR_s(IJK,M) + l_2SI*r_HORs(M)
331 ENDDO
332 ELSE
333
334 (IJK) = HOR_g(IJK) + Reaction(H)%HoR(0) * RATES(H)
335 DO M=1, lMMAX
336 HOR_s(IJK,M) = HOR_s(IJK,M) + &
337 Reaction(H)%HoR(M) * RATES(H)
338 ENDDO
339 ENDIF
340 ENDIF
341
342
343
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)
347 ENDDO
348 ENDDO RXN_LP
349
350
351
352
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)))
356 ELSE
357 DO H=1, NO_OF_RXNS
358 IF(Reaction(H)%nPhases <= 0) CYCLE
359 DO M=1, lMMAX
360 LM = 1 + ((M-1)*M)/2
361 SUM_R_G(IJK) = SUM_R_G(IJK) + &
362 RATES(H) * Reaction(H)%rPHASE(LM)
363 ENDDO
364 ENDDO
365 ENDIF
366
367 DO M=1, lMMAX
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)))
371 ELSE
372 DO H=1, NO_OF_RXNS
373 IF(Reaction(H)%nPhases <= 0) CYCLE
374 DO L=0, M-1
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)
378 ENDDO
379 DO L=M+1, lMMAX
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)
383 ENDDO
384 ENDDO
385 ENDIF
386 ENDDO
387
388
389 ENDIF
390 END DO
391
392 RETURN
393
394 END SUBROUTINE RRATES0
395