File: RELATIVE:/../../../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()
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 :: N
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 = DISCRETE_ELEMENT .AND. (.NOT.DES_CONTINUUM_HYBRID)
172 lMMAX = merge(0, MMAX, noSolids)
173
174
175 DO IJK = ijkstart3, ijkend3
176 IF (FLUID_AT(IJK)) THEN
177
178 RATES(:) = ZERO
179
180
181 CALL USR_RATES(IJK, RATES)
182
183
184 RXN_LP: DO H = 1, NO_OF_RXNS
185
186
187 IF(Reaction(H)%nSpecies == 0) CYCLE RXN_LP
188 IF(COMPARE(RATES(H),ZERO)) CYCLE RXN_LP
189
190
191 = ZERO; r_ROXgc = ZERO; r_HoRg = ZERO
192 r_Rsp = ZERO; r_ROXsc = ZERO; r_HoRs = ZERO
193
194 r_RxH = ZERO
195
196
197
198 DO lN = 1, Reaction(H)%nSpecies
199
200 = Reaction(H)%Species(lN)%pMap
201
202 = Reaction(H)%Species(lN)%sMap
203
204
205
206 = Reaction(H)%Species(lN)%mXfr
207 lRate = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
208
209 IF(M == 0) THEN
210
211 IF(lRate < ZERO) THEN
212 IF(X_g(IJK,N) > speciesLimiter) THEN
213 r_ROXgc(N) = r_ROXgc(N) - lRate/X_g(IJK,N)
214
215 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
216 lRate * CALC_H(T_G(IJK),0,N)
217 ELSE
218
219 (H) = ZERO
220 CYCLE RXN_LP
221 ENDIF
222 ELSE
223
224 (N) = r_Rgp(N) + lRate
225
226 IF(M /= mXfr) r_RxH(M,mXfr) = r_RxH(M,mXfr) + &
227 lRate * CALC_H(T_s(IJK,mXfr),0,N)
228 ENDIF
229
230
231
232 ELSE
233
234 IF(lRate < ZERO) THEN
235 IF(X_s(IJK,M,N) > speciesLimiter) THEN
236 r_ROXsc(M,N) = r_ROXsc(M,N) - lRate/X_s(IJK,M,N)
237
238
239 IF(M /= mXfr) THEN
240 IF(M < mXfr) THEN
241 r_RxH(M,mXfr) = r_RxH(M,mXfr) + lRate * &
242 Reaction(H)%Species(lN)%xXfr * &
243 CALC_H(T_s(IJK,M),M,N)
244 ELSE
245 r_RxH(mXfr,M) = r_RxH(mXfr,M) - lRate * &
246 Reaction(H)%Species(lN)%xXfr * &
247 CALC_H(T_s(IJK,M),M,N)
248 ENDIF
249 ENDIF
250 ELSE
251
252 (H) = ZERO
253 CYCLE RXN_LP
254 ENDIF
255 ELSE
256
257 (M,N) = r_Rsp(M,N) + lRate
258 ENDIF
259 ENDIF
260 ENDDO
261
262
263
264
265
266
267
268
269
270 (IJK,:NMAX(0)) = R_gp(IJK,:NMAX(0)) + &
271 r_Rgp(:NMAX(0))
272
273 (IJK,:NMAX(0)) = ROX_gc(IJK,:NMAX(0)) + &
274 r_ROXgc(:NMAX(0))
275
276 DO M=1,lMMAX
277
278 (IJK,M,:NMAX(M)) = R_sp(IJK,M,:NMAX(M)) + &
279 r_Rsp(M,:NMAX(M))
280
281 (IJK,M,:NMAX(M)) = ROX_sc(IJK,M,:NMAX(M)) + &
282 r_ROXsc(M,:NMAX(M))
283 ENDDO
284
285
286
287
288 IF(ENERGY_EQ) THEN
289
290 IF(Reaction(H)%Calc_DH) THEN
291
292 DO lN = 1, Reaction(H)%nSpecies
293
294 = Reaction(H)%Species(lN)%pMap
295
296 = Reaction(H)%Species(lN)%sMap
297
298 = RATES(H) * Reaction(H)%Species(lN)%MWxStoich
299
300 IF(M == 0) THEN
301 r_HORg = r_HORg + CALC_H(T_g(IJK),0,N) * lRate
302
303 ELSE
304 r_HORs(M) = r_HORs(M) + CALC_H(T_s(IJK,M),M,N)*lRate
305 ENDIF
306 ENDDO
307
308
309 DO M=1, lMMAX
310 DO L=0, M-1
311 r_RxH(M,L) = - r_RxH(L,M)
312 ENDDO
313 ENDDO
314
315
316 DO L=0, lMMAX
317 DO M = 0, lMMAX
318 IF(L == M) CYCLE
319 IF(L == 0) THEN
320 r_HORg = r_HORg - r_RxH(L,M)
321 ELSE
322 r_HORs(L) = r_HORs(L) - r_RxH(L,M)
323 ENDIF
324 ENDDO
325 ENDDO
326
327 (IJK) = HOR_g(IJK) + l_2SI*r_HORg
328 DO M=1,lMMAX
329 HOR_s(IJK,M) = HOR_s(IJK,M) + l_2SI*r_HORs(M)
330 ENDDO
331 ELSE
332
333 (IJK) = HOR_g(IJK) + Reaction(H)%HoR(0) * RATES(H)
334 DO M=1, lMMAX
335 HOR_s(IJK,M) = HOR_s(IJK,M) + &
336 Reaction(H)%HoR(M) * RATES(H)
337 ENDDO
338 ENDIF
339 ENDIF
340
341
342
343 DO LM=1, (DIMENSION_LM+DIMENSION_M-1)
344 R_PHASE(IJK,LM) = R_PHASE(IJK,LM) + &
345 RATES(H) * Reaction(H)%rPHASE(LM)
346 ENDDO
347 ENDDO RXN_LP
348
349
350
351
352 IF(SPECIES_EQ(0)) THEN
353 SUM_R_G(IJK) = SUM( R_gp(IJK,:NMAX(0)) - &
354 ROX_gc(IJK,:NMAX(0))*X_g(IJK,:NMAX(0)))
355 ELSE
356 DO H=1, NO_OF_RXNS
357 IF(Reaction(H)%nPhases <= 0) CYCLE
358 DO M=1, lMMAX
359 LM = 1 + ((M-1)*M)/2
360 SUM_R_G(IJK) = SUM_R_G(IJK) + &
361 RATES(H) * Reaction(H)%rPHASE(LM)
362 ENDDO
363 ENDDO
364 ENDIF
365
366 DO M=1, lMMAX
367 IF(SPECIES_EQ(M)) THEN
368 SUM_R_S(IJK,M) = SUM( R_sp(IJK,M,:NMAX(M)) - &
369 RoX_sc(IJK,M,:NMAX(M))*X_s(IJK,M,:NMAX(M)))
370 ELSE
371 DO H=1, NO_OF_RXNS
372 IF(Reaction(H)%nPhases <= 0) CYCLE
373 DO L=0, M-1
374 LM = 1 + L + ((M-1)*M)/2
375 SUM_R_S(IJK,M) = SUM_R_S(IJK,M) - &
376 RATES(H) * Reaction(H)%rPHASE(LM)
377 ENDDO
378 DO L=M+1, lMMAX
379 LM = 1 + M + ((L-1)*L)/2
380 SUM_R_S(IJK,M) = SUM_R_S(IJK,M) + &
381 RATES(H) * Reaction(H)%rPHASE(LM)
382 ENDDO
383 ENDDO
384 ENDIF
385 ENDDO
386
387
388 ENDIF
389 END DO
390
391 RETURN
392
393 END SUBROUTINE RRATES0
394