File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_odepack_stiff_chem.f
1
2
3
4
5
6
7
8
9 SUBROUTINE CHECK_ODEPACK_STIFF_CHEM
10
11
12
13
14 use funits, only: UNIT_LOG
15
16 use param, only: DIMENSION_3
17
18 use param1, only: ZERO
19
20 use param1, only: UNDEFINED
21
22 use physprop, only : RO_G0
23
24 use run, only: ENERGY_EQ
25
26 use run, only: SPECIES_EQ
27
28 use rxns, only: SUM_R_g
29
30 use rxns, only: SUM_R_s
31
32 use stiff_chem, only: STIFF_CHEMISTRY
33
34 use stiff_chem, only: notOwner
35
36
37
38 use compar
39 use geometry
40 use indices
41
42 use error_manager
43 use functions
44
45 implicit none
46
47
48
49 INTEGER :: I, J, K, IJK
50
51 CALL INIT_ERR_MSG('CHECK_ODEPACK_STIFF_CHEM')
52
53
54 IF(STIFF_CHEMISTRY) THEN
55
56
57 IF(.NOT.ENERGY_EQ) THEN
58 WRITE(ERR_MSG,1004)'ENERGY_EQ = .FALSE.'
59 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
60 ENDIF
61
62
63 IF(RO_G0 /= UNDEFINED) THEN
64 WRITE(ERR_MSG,1004)'RO_G0 /= UNDEFINED'
65 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
66 ENDIF
67
68 IF(.NOT.SPECIES_EQ(0)) THEN
69 WRITE(ERR_MSG,1004)'SPECIES_EQ(0) = .FALSE.'
70 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
71 ENDIF
72
73
74
75
76
77 ALLOCATE( notOwner(DIMENSION_3) ); notOwner = .TRUE.
78 do k=kstart, kend
79 do j=jstart, jend
80 do i=istart, iend
81 ijk = funijk(i,j,k)
82 notOwner(IJK) = .FALSE.
83 enddo
84 enddo
85 enddo
86
87
88 CALL ODEPACK_INIT
89
90
91
92 IF(allocated(SUM_R_g)) SUM_R_g = ZERO
93 IF(allocated(SUM_R_s)) SUM_R_s = ZERO
94
95 ENDIF
96
97 CALL FINL_ERR_MSG
98
99
100
101 1004 FORMAT('Error 1004: ', &
102 'Invalid parameters for stiff chemistry solver!',// &
103 ' The following criteria must be satisfied:',/ &
104 ' > Solving the energy equations.',/ &
105 ' > Compressible gas phase.',/ &
106 ' > Solving gas phase species equations.',// &
107 ' >>> Invalid Parameter: ',A,// &
108 'Check the user documentation and correct the mfix.dat file.')
109
110 RETURN
111 END SUBROUTINE CHECK_ODEPACK_STIFF_CHEM
112
113
114
115
116
117
118
119
120
121
122
123
124 SUBROUTINE ODEPACK_INIT
125
126
127
128 use physprop, only: MMAX
129 use physprop, only: NMAX
130
131 use run, only: SPECIES_EQ
132
133 use stiff_chem, only: NEQ_DIMN
134 use stiff_chem, only: ODE_DIMN_g
135 use stiff_chem, only: ODE_DIMN_all
136
137 use stiff_chem, only: ODE_ITOL
138 use stiff_chem, only: ODE_RTOL
139 use stiff_chem, only: ODE_ATOL
140
141 use stiff_chem, only: ODE_LRW
142 use stiff_chem, only: ODE_LIW
143 use stiff_chem, only: ODE_JT
144
145 use stiff_chem, only: STIFF_CHEM_MAX_STEPS
146
147 use stiff_chem_dbg, only: ALLOCATE_STIFF_CHEM_DBG
148 use stiff_chem_stats, only: ALLOCATE_STIFF_CHEM_STATS
149
150
151 use param1, only: UNDEFINED_I
152
153 implicit none
154
155
156
157
158 INTEGER :: LRN, LRS
159 INTEGER :: M, N_VAR
160
161 LOGICAL :: LIMIT_MAX_STEPS
162
163
164 = 2 + MMAX
165
166
167
168 = 2 + NMAX(0)
169
170 = ODE_DIMN_g + MMAX
171
172
173 = ODE_DIMN_g
174 DO M=1, MMAX
175
176 IF(SPECIES_EQ(M)) ODE_DIMN_all = ODE_DIMN_all + (1 + NMAX(M))
177 ENDDO
178
179
180 = 2
181
182
183 (1) = 1.0D-5
184
185
186 IF(.NOT.(allocated(ODE_ATOL))) allocate(ODE_ATOL(ODE_DIMN_all))
187 ODE_ATOL(:) = 1.0D-6
188
189
190 = 20 + 16*ODE_DIMN_all
191 LRS = 22 + 9*ODE_DIMN_all + (ODE_DIMN_all**2)
192 ODE_LRW = max(LRN, LRS)
193
194
195 = 20 + ODE_DIMN_all
196
197
198 = 2
199
200
201 IF(STIFF_CHEM_MAX_STEPS == UNDEFINED_I) THEN
202 STIFF_CHEM_MAX_STEPS = 500000
203 LIMIT_MAX_STEPS = .FALSE.
204 ELSE
205 LIMIT_MAX_STEPS = .TRUE.
206 ENDIF
207
208
209 CALL ALLOCATE_STIFF_CHEM_DBG(ODE_DIMN_all)
210 CALL ALLOCATE_STIFF_CHEM_STATS
211
212 return
213 END SUBROUTINE ODEPACK_INIT
214