File: /nfs/home/0/users/jenkins/mfix.git/model/chem/stiff_chem_maps_mod.f
1 MODULE STIFF_CHEM_MAPS
2
3 PRIVATE
4
5
6
7
8
9
10 PUBLIC :: mapMFIXtoODE, &
11 mapODEtoMFIX
12
13 contains
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 SUBROUTINE mapMFIXtoODE(lnD, lNEQ, loD, lVars)
29
30
31
32 use fldvar, only: ROP_g
33 use fldvar, only: ROP_s
34 use fldvar, only: T_g
35 use fldvar, only: T_s
36 use fldvar, only: X_g
37 use fldvar, only: X_s
38
39 use physprop, only: NMAX
40 use physprop, only: MMAX
41
42
43 implicit none
44
45
46
47
48
49 INTEGER, intent(in) :: lnD
50 INTEGER, intent(in) :: loD
51
52
53
54 INTEGER, intent(in) :: lNEQ(lnD)
55
56 DOUBLE PRECISION, intent(out) :: lVars(loD)
57
58
59
60
61
62 INTEGER :: IJK
63
64 INTEGER :: M
65 INTEGER :: N
66
67 INTEGER :: Node
68
69
70
71 = lNEQ(2)
72 lVars = 0.0d0
73 Node = 1
74
75
76 (Node) = ROP_G(IJK); Node = Node + 1
77
78 (Node) = T_G(IJK); Node = Node + 1
79
80 DO N=1,NMAX(0)
81 lVars(Node) = X_G(IJK,N); Node = Node + 1
82 ENDDO
83
84
85 DO M = 1, MMAX
86 lVars(Node) = T_S(IJK,M); Node = Node + 1
87 ENDDO
88
89 DO M = 1, MMAX
90 IF(lNEQ(2+M) == 1) THEN
91
92 (Node) = ROP_S(IJK,M); Node = Node + 1
93
94 DO N=1,NMAX(M)
95 lVars(Node) = X_S(IJK,M,N); Node = Node + 1
96 ENDDO
97 ENDIF
98 ENDDO
99
100 RETURN
101 END SUBROUTINE mapMFIXtoODE
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 SUBROUTINE mapODEtoMFIX(lnD, lNEQ, loD, lVars)
118
119
120
121
122 use fldvar, only : RO_g, RO_s
123
124 use fldvar, only : ROP_g, ROP_s
125
126 use fldvar, only : T_g, T_s
127
128 use fldvar, only : X_g, X_s
129
130 use physprop, only : MMAX
131
132 use physprop, only : NMAX
133
134 use constant, only : GAS_CONST
135
136 use fldvar, only : P_g
137
138 use fldvar, only : EP_g
139
140 use physprop, only : MW_g, MW_s
141
142 use physprop, only : MW_MIX_g
143
144 use physprop, only: BASE_ROs
145
146 use physprop, only: X_S0
147
148 use physprop, only: INERT_SPECIES
149
150 use compar, only : myPE, PE_IO
151
152 use run, only: SOLVE_ROs
153
154
155 USE eos, ONLY: EOSS
156
157
158
159 use param1, only : ONE
160 use param1, only : LARGE_NUMBER
161 use param1, only : SMALL_NUMBER
162
163
164 implicit none
165
166
167
168
169
170
171 INTEGER, intent(in) :: lnD
172 INTEGER, intent(in) :: lNEQ(lnD)
173
174
175 INTEGER, intent(in) :: loD
176 DOUBLE PRECISION, intent(in) :: lVars(loD)
177
178
179
180
181
182 INTEGER :: IJK
183 INTEGER :: L
184
185
186 INTEGER :: M
187 INTEGER :: N
188 INTEGER :: Node
189
190
191 INTEGER :: countNaN
192 LOGICAL :: writeMsg
193
194 IJK = lNEQ(2)
195
196
197
198
199 = 0
200 writeMsg = .FALSE.
201 NaN_lp: do l=1, loD
202 if(lVars(l).NE.lVars(l)) then
203 countNaN = countNan + 1
204 writeMsg = .TRUE.
205 endif
206 enddo NaN_lp
207
208 if(writeMsg) then
209 write(*,"(3x,'From MapODEtoMFIX: NaNs Found! :: ',3(3x,I4))") &
210 myPE, IJK, countNaN
211
212 if(countNaN < loD) then
213 do l=1, loD
214 if(lVars(l).NE.lVars(l)) &
215 write(*,"(5x,' NaN in Var ',I2)") l
216 enddo
217 endif
218 endif
219
220
221
222
223 = 1
224
225
226 (IJK) = lVars(Node); Node = Node + 1
227
228 (IJK) = lVars(Node); Node = Node + 1
229
230 DO N=1,NMAX(0)
231 X_G(IJK,N) = lVars(Node); Node = Node + 1
232 ENDDO
233
234
235 DO M = 1, MMAX
236 IF(ROP_s(IJK,M) > 1.0d-8) &
237 T_S(IJK,M) = lVars(Node); Node = Node + 1
238 ENDDO
239
240
241 DO M = 1, MMAX
242 IF(lNEQ(2+M) == 1) THEN
243
244 (IJK,M) = lVars(Node); Node = Node + 1
245
246 DO N=1,NMAX(M)
247 X_S(IJK,M,N) = lVars(Node); Node = Node + 1
248 ENDDO
249
250
251 IF(SOLVE_ROs(M)) RO_S(IJK,M) = EOSS(BASE_ROs(M), &
252 X_s0(M,INERT_SPECIES(M)), X_s(IJK,M,INERT_SPECIES(M)))
253 ENDIF
254 ENDDO
255
256
257
258 IF(sum(lNEQ(3:)) > 0) EP_G(IJK) = &
259 ONE - sum(ROP_S(IJK,1:MMAX)/RO_S(IJK,1:MMAX))
260
261
262
263
264 IF(EP_g(IJK) > small_number) THEN
265 RO_g(IJK) = ROP_g(IJK) / EP_g(IJK)
266 ELSE
267
268
269 (IJK) = LARGE_NUMBER
270 ENDIF
271
272
273 (IJK) = sum(X_G(IJK,1:NMAX(0))/MW_g(1:NMAX(0)))
274 MW_MIX_G(IJK) = ONE/MW_MIX_G(IJK)
275
276
277 (IJK) = (RO_G(IJK)*GAS_CONST*T_G(IJK))/MW_MIX_G(IJK)
278
279 RETURN
280 END SUBROUTINE mapODEtoMFIX
281
282 END MODULE STIFF_CHEM_MAPS
283