File: /nfs/home/0/users/jenkins/mfix.git/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(IER)
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
88 use run, only: ENERGY_EQ
89
90 use run, only: SPECIES_EQ
91
92 use run, only: UNITS
93
94 use physprop, only: MMAX
95
96 use physprop, only: NMAX
97
98 use discretelement, only: DISCRETE_ELEMENT
99
100 use discretelement, only: DES_CONTINUUM_HYBRID
101
102 use toleranc
103 use functions
104
105 implicit none
106
107
108
109
110 INTEGER :: IER
111
112
113
114
115
116 INTEGER :: IJK
117 INTEGER :: H
118 INTEGER :: L, M
119 INTEGER :: N
120 INTEGER :: lN
121 INTEGER :: lM
122 INTEGER :: mXfr
123
124
125
126
127 INTEGER :: lMMAX
128 LOGICAL :: noSolids
129
130
131 DOUBLE PRECISION RATES(NO_OF_RXNS)
132
133 DOUBLE PRECISION lRate
134
135
136 DOUBLE PRECISION :: r_Rgp(DIMENSION_N_g)
137 DOUBLE PRECISION :: r_ROXgc(DIMENSION_N_g)
138
139 DOUBLE PRECISION :: r_Rsp(DIMENSION_M, DIMENSION_N_s)
140 DOUBLE PRECISION :: r_ROXsc(DIMENSION_M, DIMENSION_N_s)
141
142
143 DOUBLE PRECISION :: r_RxH(0:MMAX, 0:MMAX)
144
145 DOUBLE PRECISION :: r_HoRg, r_HoRs(1:MMAX)
146
147 DOUBLE PRECISION :: l_2SI
148
149
150
151 DOUBLE PRECISION :: speciesLimiter
152
153
154
155
156 DOUBLE PRECISION, EXTERNAL :: CALC_H
157
158
159
160
161 = ZERO; R_SP = ZERO
162 ROX_GC = ZERO; ROX_SC = ZERO
163 SUM_R_G = ZERO; SUM_R_S = ZERO
164 HOR_G = ZERO; HOR_S = ZERO
165
166 R_PHASE = ZERO
167
168
169 = ZERO_X_gs
170
171
172 = merge(4.183925d3, ONE, UNITS(1:2) == 'SI')
173
174
175 = DISCRETE_ELEMENT .AND. (.NOT.DES_CONTINUUM_HYBRID)
176 lMMAX = merge(0, MMAX, noSolids)
177
178
179 DO IJK = ijkstart3, ijkend3
180 IF (FLUID_AT(IJK)) THEN
181
182 RATES(:) = ZERO
183
184
185 CALL USR_RATES(IJK, RATES)
186
187
188 RXN_LP: DO H = 1, NO_OF_RXNS
189
190
191 IF(Reaction(H)%nSpecies == 0) CYCLE RXN_LP
192 IF(COMPARE(RATES(H),ZERO)) CYCLE RXN_LP
193
194
195 = ZERO; r_ROXgc = ZERO; r_HoRg = ZERO
196 r_Rsp = ZERO; r_ROXsc = ZERO; r_HoRs = ZERO
197
198 r_RxH = ZERO
199
200
201
202 DO lN = 1, Reaction(H)%nSpecies
203
204 = Reaction(H)%Species(lN)%pMap
205
206 = Reaction(H)%Species(lN)%sMap
207
208
209
210 = Reaction(H)%Species(lN)%mXfr
211 lRate = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
212
213 IF(M == 0) THEN
214
215 IF(lRate < ZERO) THEN
216 IF(X_g(IJK,N) > speciesLimiter) THEN
217 r_ROXgc(N) = r_ROXgc(N) - lRate/X_g(IJK,N)
218
219 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
220 lRate * CALC_H(T_G(IJK),0,N)
221 ELSE
222
223 (H) = ZERO
224 CYCLE RXN_LP
225 ENDIF
226 ELSE
227
228 (N) = r_Rgp(N) + lRate
229
230 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
231 lRate * CALC_H(T_s(IJK,mXfr),0,N)
232 ENDIF
233
234
235
236 ELSE
237
238 IF(lRate < ZERO) THEN
239 IF(X_s(IJK,M,N) > speciesLimiter) THEN
240 r_ROXsc(M,N) = r_ROXsc(M,N) - lRate/X_s(IJK,M,N)
241
242
243 IF(M /= mXfr) THEN
244 IF(M < mXfr) THEN
245 r_RxH(M,mXfr) = r_RxH(M,mXfr) + lRate * &
246 Reaction(H)%Species(lN)%xXfr * &
247 CALC_H(T_s(IJK,M),M,N)
248 ELSE
249 r_RxH(mXfr,M) = r_RxH(mXfr,M) - lRate * &
250 Reaction(H)%Species(lN)%xXfr * &
251 CALC_H(T_s(IJK,M),M,N)
252 ENDIF
253 ENDIF
254 ELSE
255
256 (H) = ZERO
257 CYCLE RXN_LP
258 ENDIF
259 ELSE
260
261 (M,N) = r_Rsp(M,N) + lRate
262 ENDIF
263 ENDIF
264 ENDDO
265
266
267
268
269
270
271
272
273
274 (IJK,:NMAX(0)) = R_gp(IJK,:NMAX(0)) + &
275 r_Rgp(:NMAX(0))
276
277 (IJK,:NMAX(0)) = ROX_gc(IJK,:NMAX(0)) + &
278 r_ROXgc(:NMAX(0))
279
280 DO M=1,lMMAX
281
282 (IJK,M,:NMAX(M)) = R_sp(IJK,M,:NMAX(M)) + &
283 r_Rsp(M,:NMAX(M))
284
285 (IJK,M,:NMAX(M)) = ROX_sc(IJK,M,:NMAX(M)) + &
286 r_ROXsc(M,:NMAX(M))
287 ENDDO
288
289
290
291
292 IF(ENERGY_EQ) THEN
293
294 IF(Reaction(H)%Calc_DH) THEN
295
296 DO lN = 1, Reaction(H)%nSpecies
297
298 = Reaction(H)%Species(lN)%pMap
299
300 = Reaction(H)%Species(lN)%sMap
301
302 = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
303
304 IF(M == 0) THEN
305 r_HORg = r_HORg + CALC_H(T_g(IJK),0,N) * lRate
306
307 ELSE
308 r_HORs(M) = r_HORs(M) + CALC_H(T_s(IJK,M),M,N)*lRate
309 ENDIF
310 ENDDO
311
312
313 DO M=1, lMMAX
314 DO L=0, M-1
315 r_RxH(M,L) = - r_RxH(L,M)
316 ENDDO
317 ENDDO
318
319
320 DO L=0, lMMAX
321 DO M = 0, lMMAX
322 IF(L == M) CYCLE
323 IF(L == 0) THEN
324 r_HORg = r_HORg - r_RxH(L,M)
325 ELSE
326 r_HORs(L) = r_HORs(L) - r_RxH(L,M)
327 ENDIF
328 ENDDO
329 ENDDO
330
331 (IJK) = HOR_g(IJK) + l_2SI*r_HORg
332 DO M=1,lMMAX
333 HOR_s(IJK,M) = HOR_s(IJK,M) + l_2SI*r_HORs(M)
334 ENDDO
335 ELSE
336
337 (IJK) = HOR_g(IJK) + Reaction(H)%HoR(0) * RATES(H)
338 DO M=1, lMMAX
339 HOR_s(IJK,M) = HOR_s(IJK,M) + &
340 Reaction(H)%HoR(M) * RATES(H)
341 ENDDO
342 ENDIF
343 ENDIF
344
345
346
347 DO LM=1, (DIMENSION_LM+DIMENSION_M-1)
348 R_PHASE(IJK,LM) = R_PHASE(IJK,LM) + &
349 RATES(H) * Reaction(H)%rPHASE(LM)
350 ENDDO
351 ENDDO RXN_LP
352
353
354
355
356 IF(SPECIES_EQ(0)) THEN
357 SUM_R_G(IJK) = SUM( R_gp(IJK,:NMAX(0)) - &
358 ROX_gc(IJK,:NMAX(0))*X_g(IJK,:NMAX(0)))
359 ELSE
360 DO H=1, NO_OF_RXNS
361 IF(Reaction(H)%nPhases <= 0) CYCLE
362 DO M=1, lMMAX
363 LM = 1 + ((M-1)*M)/2
364 SUM_R_G(IJK) = SUM_R_G(IJK) + &
365 RATES(H) * Reaction(H)%rPHASE(LM)
366 ENDDO
367 ENDDO
368 ENDIF
369
370 DO M=1, lMMAX
371 IF(SPECIES_EQ(M)) THEN
372 SUM_R_S(IJK,M) = SUM( R_sp(IJK,M,:NMAX(M)) - &
373 RoX_sc(IJK,M,:NMAX(M))*X_s(IJK,M,:NMAX(M)))
374 ELSE
375 DO H=1, NO_OF_RXNS
376 IF(Reaction(H)%nPhases <= 0) CYCLE
377 DO L=0, M-1
378 LM = 1 + L + ((M-1)*M)/2
379 SUM_R_S(IJK,M) = SUM_R_S(IJK,M) - &
380 RATES(H) * Reaction(H)%rPHASE(LM)
381 ENDDO
382 DO L=M+1, lMMAX
383 LM = 1 + M + ((L-1)*L)/2
384 SUM_R_S(IJK,M) = SUM_R_S(IJK,M) + &
385 RATES(H) * Reaction(H)%rPHASE(LM)
386 ENDDO
387 ENDDO
388 ENDIF
389 ENDDO
390
391
392 ENDIF
393 END DO
394
395 RETURN
396
397 END SUBROUTINE RRATES0
398