File: N:\mfix\model\read_namelist.f
1
2
3
4
5
6
7
8
9 SUBROUTINE READ_NAMELIST(READ_ACTION, FILENAME)
10
11 USE bc
12 USE cdist
13 USE compar
14 USE constant
15 USE cutcell
16 USE dashboard
17 USE des_bc
18 USE des_rxns
19 USE des_thermo
20 USE discretelement
21 USE error_manager
22 USE fldvar
23 USE funits
24 USE geometry
25 USE ic
26 USE indices
27 USE is
28 USE iterate, only: max_nit
29 USE leqsol
30 USE main, only: cmd_line_args, cmd_line_args_count
31 USE mfix_pic
32 USE output
33 USE parallel
34 USE param1, only: undefined
35 USE particle_filter
36 USE physprop
37 USE pic_bc
38 USE polygon
39 USE ps
40 USE qmom_kinetic_equation
41 USE quadric
42 USE residual
43 USE run
44 USE rxns
45 USE scalars
46 USE scales
47 USE stiff_chem
48 USE toleranc
49 USE ur_facs
50 USE usr
51 USE utilities
52 USE vtk
53 Use stl
54 use usr_prop, only: usr_fgs, usr_fss, usr_gama
55 use usr_prop, only: usr_rog, usr_cpg, usr_mug, usr_kg, usr_difg
56 use usr_prop, only: usr_ros, usr_cps, usr_mus, usr_ks, usr_difs
57 use usr_src, only: call_usr_source
58 IMPLICIT NONE
59
60
61
62
63 INTEGER, INTENT(IN) :: READ_ACTION
64
65
66 CHARACTER(LEN=*), INTENT(IN) :: FILENAME
67
68
69
70
71 INTEGER, PARAMETER :: MAXCOL = 80
72
73 CHARACTER(LEN=512) :: LINE_STRING
74
75 INTEGER :: LINE_LEN
76
77 INTEGER :: LINE_NO
78
79 DOUBLE PRECISION e
80
81 LOGICAL :: RXN_FLAG
82
83 LOGICAL :: READ_FLAG
84
85 LOGICAL :: lEXISTS
86
87 LOGICAL :: ERROR
88
89 CHARACTER(len=256) :: STRING
90 INTEGER :: IOS, II
91
92
93 LOGICAL :: READ_LOCKED, READ_FULL
94
95
96
97 INTEGER, PARAMETER :: READ_MFIX = 0
98 INTEGER, PARAMETER :: READ_POST = 1
99 INTEGER, PARAMETER :: READ_INIT = 2
100
101
102
103
104
105
106
107
108
109
110 = UNDEFINED
111 RXN_FLAG = .FALSE.
112 READ_FLAG = .TRUE.
113 NO_OF_RXNS = 0
114 LINE_NO = 0
115
116 SELECT CASE(READ_ACTION)
117 CASE(READ_MFIX)
118 READ_LOCKED = .TRUE.
119 READ_FULL = .TRUE.
120 CASE(READ_POST)
121 READ_LOCKED = .TRUE.
122 READ_FULL = .FALSE.
123 CASE(READ_INIT)
124 READ_LOCKED = .FALSE.
125 READ_FULL = .TRUE.
126 END SELECT
127
128
129
130 inquire(file=filename,exist=lEXISTS)
131 IF(.NOT.lEXISTS) THEN
132 IF(myPE == PE_IO) WRITE(*,1000)
133 CALL MFIX_EXIT(myPE)
134
135 1000 FORMAT(2/,1X,70('*')/' From: READ_NAMELIST',/' Error 1000: ', &
136 'The input data file, mfix.dat, is missing. Aborting.',/1x, &
137 70('*'),2/)
138
139 ELSE
140 OPEN(UNIT=UNIT_DAT, FILE=filename, STATUS='OLD', IOSTAT=IOS)
141 IF(IOS /= 0) THEN
142 IF(myPE == PE_IO) WRITE (*,1001)
143 CALL MFIX_EXIT(myPE)
144 ENDIF
145
146 1001 FORMAT(2/,1X,70('*')/' From: READ_NAMELIST',/' Error 1001: ', &
147 'Unable to open the mfix.dat file. Aborting.',/1x,70('*'),2/)
148 ENDIF
149
150
151
152 READ_LP: DO
153 READ (UNIT_DAT,"(A)",IOSTAT=IOS) LINE_STRING
154 IF(IOS < 0) EXIT READ_LP
155
156 LINE_NO = LINE_NO + 1
157
158 LINE_LEN = SEEK_COMMENT(LINE_STRING,LEN(LINE_STRING)) - 1
159 CALL REMOVE_COMMENT(LINE_STRING, LINE_LEN+1, LEN(LINE_STRING))
160
161 IF(LINE_LEN <= 0) CYCLE READ_LP
162 IF(BLANK_LINE(LINE_STRING)) CYCLE READ_LP
163
164 IF(LINE_TOO_BIG(LINE_STRING,LINE_LEN,MAXCOL) > 0) THEN
165 WRITE (*, 1100) trim(iVAL(LINE_NO)), trim(ival(MAXCOL)), &
166 LINE_STRING(1:MAXCOL)
167 CALL MFIX_EXIT(myPE)
168 ENDIF
169
170 1100 FORMAT(//1X,70('*')/1x,'From: READ_NAMELIST',/1x,'Error 1100: ', &
171 'Line ',A,' in mfix.dat has is too long. Input lines should', &
172 /1x,'not pass column ',A,'.',2/3x,A,2/1x,'Please correct ', &
173 'the mfix.dat file.',/1X,70('*'),2/)
174
175
176 IF(LINE_STRING(1:11) == 'THERMO DATA') EXIT READ_LP
177
178 CALL SET_KEYWORD(ERROR)
179 IF (ERROR) THEN
180
181
182 CALL DEPRECATED_OR_UNKNOWN(LINE_NO, LINE_STRING(1:LINE_LEN))
183 ENDIF
184
185 ENDDO READ_LP
186
187 DO II=1, CMD_LINE_ARGS_COUNT
188 LINE_STRING = CMD_LINE_ARGS(ii)
189 LINE_LEN = len(line_string)
190 CALL SET_KEYWORD(ERROR)
191 IF (ERROR) THEN
192 CALL DEPRECATED_OR_UNKNOWN(LINE_NO, LINE_STRING(1:LINE_LEN))
193 ENDIF
194 ENDDO
195
196 CLOSE(UNIT=UNIT_DAT)
197 IF (E /= UNDEFINED) C_E = E
198
199 RETURN
200
201 CONTAINS
202
203
204
205
206
207
208
209
210
211 SUBROUTINE SET_KEYWORD(ERROR)
212
213 IMPLICIT NONE
214
215 LOGICAL, INTENT(OUT) ::ERROR
216
217
218
219
220
221 INCLUDE 'run_control.inc'
222 INCLUDE 'physical_params.inc'
223 INCLUDE 'numerical_params.inc'
224 INCLUDE 'geometry.inc'
225 INCLUDE 'gas_phase.inc'
226 INCLUDE 'solids_phase.inc'
227 INCLUDE 'tfm_solids.inc'
228 INCLUDE 'initial_conditions.inc'
229 INCLUDE 'boundary_conditions.inc'
230 INCLUDE 'internal_surfaces.inc'
231 INCLUDE 'point_sources.inc'
232 INCLUDE 'output_control.inc'
233 INCLUDE 'usr_hooks.inc'
234 INCLUDE 'chem_equations.inc'
235 INCLUDE 'dmp_batch_control.inc'
236 INCLUDE 'desnamelist.inc'
237 INCLUDE 'cartesian_grid_namelist.inc'
238 INCLUDE 'qmomknamelist.inc'
239 INCLUDE 'legacy.inc'
240 INCLUDE 'usrnlst.inc'
241
242 ERROR = .FALSE.
243
244
245 if(index(LINE_STRING,'SPECIES_NAME') == 0 .AND. &
246 index(LINE_STRING,'species_name') == 0 .AND. &
247 index(LINE_STRING,'Species_Name') == 0 .AND. &
248 index(LINE_STRING,'SPECIES_g') == 0 .AND. &
249 index(LINE_STRING,'Species_g') == 0 .AND. &
250 index(LINE_STRING,'species_g') == 0 .AND. &
251 index(LINE_STRING,'SPECIES_s') == 0 .AND. &
252 index(LINE_STRING,'Species_s') == 0 .AND. &
253 index(LINE_STRING,'species_s') == 0) &
254 CALL MAKE_UPPER_CASE (LINE_STRING, LINE_LEN)
255
256 CALL REPLACE_TAB (LINE_STRING, LINE_LEN)
257 CALL REMOVE_PAR_BLANKS(LINE_STRING)
258
259
260 CALL PARSE_LINE (LINE_STRING, LINE_LEN, RXN_FLAG, READ_FLAG)
261
262
263
264 IF(.NOT.READ_FLAG) RETURN
265
266
267
268 IF(READ_LOCKED) THEN
269 STRING=''; STRING = '&RUN_CONTROL_LOCKED '//&
270 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
271 READ(STRING, NML=RUN_CONTROL_LOCKED, IOSTAT=IOS)
272 IF(IOS == 0) RETURN
273 ENDIF
274
275 STRING=''; STRING = '&RUN_CONTROL_UNLOCKED '//&
276 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
277 READ(STRING, NML=RUN_CONTROL_UNLOCKED, IOSTAT=IOS)
278 IF(IOS == 0) RETURN
279
280
281
282 IF(READ_LOCKED) THEN
283 STRING=''; STRING = '&PHYSICAL_PARAM_LOCKED '//&
284 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
285 READ(STRING, NML=PHYSICAL_PARAM_LOCKED, IOSTAT=IOS)
286 IF(IOS == 0) RETURN
287 ENDIF
288
289 STRING=''; STRING = '&PHYSICAL_PARAM_UNLOCKED '//&
290 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
291 READ(STRING, NML=PHYSICAL_PARAM_UNLOCKED, IOSTAT=IOS)
292 IF(IOS == 0) RETURN
293
294
295
296 IF(READ_LOCKED) THEN
297 STRING=''; STRING = '&NUMERICAL_PARAM_LOCKED '//&
298 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
299 READ(STRING, NML=NUMERICAL_PARAM_LOCKED, IOSTAT=IOS)
300 IF(IOS == 0) RETURN
301 ENDIF
302
303 STRING=''; STRING = '&NUMERICAL_PARAM_UNLOCKED '//&
304 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
305 READ(STRING, NML=NUMERICAL_PARAM_UNLOCKED, IOSTAT=IOS)
306 IF(IOS == 0) RETURN
307
308
309
310 IF(READ_LOCKED) THEN
311 STRING=''; STRING = '&GEOMETRY_LOCKED '//&
312 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
313 READ(STRING, NML=GEOMETRY_LOCKED, IOSTAT=IOS)
314 IF(IOS == 0) RETURN
315 ENDIF
316
317 STRING=''; STRING = '&GEOMETRY_UNLOCKED '//&
318 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
319 READ(STRING, NML=GEOMETRY_UNLOCKED, IOSTAT=IOS)
320 IF(IOS == 0) RETURN
321
322
323
324 IF(READ_LOCKED) THEN
325 STRING=''; STRING = '&GAS_PHASE_LOCKED '//&
326 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
327 READ(STRING, NML=GAS_PHASE_LOCKED, IOSTAT=IOS)
328 IF(IOS == 0) RETURN
329 ENDIF
330
331 STRING=''; STRING = '&GAS_PHASE_UNLOCKED '//&
332 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
333 READ(STRING, NML=GAS_PHASE_UNLOCKED, IOSTAT=IOS)
334 IF(IOS == 0) RETURN
335
336
337
338 IF(READ_LOCKED) THEN
339 STRING=''; STRING = '&SOLIDS_PHASE_LOCKED '//&
340 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
341 READ(STRING, NML=SOLIDS_PHASE_LOCKED, IOSTAT=IOS)
342 IF(IOS == 0) RETURN
343 ENDIF
344
345 STRING=''; STRING = '&SOLIDS_PHASE_UNLOCKED '//&
346 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
347 READ(STRING, NML=SOLIDS_PHASE_UNLOCKED, IOSTAT=IOS)
348 IF(IOS == 0) RETURN
349
350
351
352 =''; STRING = '&TFM_SOLIDS_UNLOCKED '//&
353 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
354 READ(STRING, NML=TFM_SOLIDS_UNLOCKED, IOSTAT=IOS)
355 IF(IOS == 0) RETURN
356
357
358
359 IF(READ_LOCKED) THEN
360 STRING=''; STRING = '&INITIAL_CONDITIONS_LOCKED '//&
361 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
362 READ(STRING, NML=INITIAL_CONDITIONS_LOCKED, IOSTAT=IOS)
363 IF(IOS == 0) RETURN
364 ENDIF
365
366 STRING=''; STRING = '&INITIAL_CONDITIONS_UNLOCKED '//&
367 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
368 READ(STRING, NML=INITIAL_CONDITIONS_UNLOCKED, IOSTAT=IOS)
369 IF(IOS == 0) RETURN
370
371
372
373 IF(READ_LOCKED) THEN
374 STRING=''; STRING = '&BOUNDARY_CONDITIONS_LOCKED '//&
375 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
376 READ(STRING, NML=BOUNDARY_CONDITIONS_LOCKED, IOSTAT=IOS)
377 IF(IOS == 0) RETURN
378 ENDIF
379
380 STRING=''; STRING = '&BOUNDARY_CONDITIONS_UNLOCKED '//&
381 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
382 READ(STRING, NML=BOUNDARY_CONDITIONS_UNLOCKED, IOSTAT=IOS)
383 IF(IOS == 0) RETURN
384
385
386
387 IF(READ_LOCKED) THEN
388 STRING=''; STRING = '&INTERNAL_SURFACES_LOCKED '//&
389 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
390 READ(STRING, NML=INTERNAL_SURFACES_LOCKED, IOSTAT=IOS)
391 IF(IOS == 0) RETURN
392 ENDIF
393
394 STRING=''; STRING = '&INTERNAL_SURFACES_UNLOCKED '//&
395 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
396 READ(STRING, NML=INTERNAL_SURFACES_UNLOCKED, IOSTAT=IOS)
397 IF(IOS == 0) RETURN
398
399
400
401 =''; STRING = '&POINT_SOURCES_UNLOCKED '//&
402 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
403 READ(STRING, NML=POINT_SOURCES_UNLOCKED, IOSTAT=IOS)
404 IF(IOS == 0) RETURN
405
406
407
408 IF(READ_LOCKED) THEN
409 STRING=''; STRING = '&OUTPUT_CONTROL_LOCKED '//&
410 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
411 READ(STRING, NML=OUTPUT_CONTROL_LOCKED, IOSTAT=IOS)
412 IF(IOS == 0) RETURN
413 ENDIF
414
415 STRING=''; STRING = '&OUTPUT_CONTROL_UNLOCKED '//&
416 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
417 READ(STRING, NML=OUTPUT_CONTROL_UNLOCKED, IOSTAT=IOS)
418 IF(IOS == 0) RETURN
419
420
421
422 =''; STRING = '&USER_HOOKS_UNLOCKED '//&
423 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
424 READ(STRING, NML=USER_HOOKS_UNLOCKED, IOSTAT=IOS)
425 IF(IOS == 0) RETURN
426
427
428
429 =''; STRING = '&CHEM_EQUATIONS_UNLOCKED '//&
430 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
431 READ(STRING, NML=CHEM_EQUATIONS_UNLOCKED, IOSTAT=IOS)
432 IF(IOS == 0) RETURN
433
434
435
436 IF(READ_LOCKED) THEN
437 STRING=''; STRING = '&DMP_BATCH_CONTROL_LOCKED '//&
438 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
439 READ(STRING, NML=DMP_BATCH_CONTROL_LOCKED, IOSTAT=IOS)
440 IF(IOS == 0) RETURN
441 ENDIF
442
443 STRING=''; STRING = '&DMP_BATCH_CONTROL_UNLOCKED '//&
444 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
445 READ(STRING, NML=DMP_BATCH_CONTROL_UNLOCKED, IOSTAT=IOS)
446 IF(IOS == 0) RETURN
447
448
449
450 IF(READ_LOCKED) THEN
451 STRING=''; STRING = '&LEGACY_LOCKED '//&
452 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
453 READ(STRING, NML=LEGACY_LOCKED, IOSTAT=IOS)
454 IF(IOS == 0) RETURN
455
456 ENDIF
457
458
459 IF(.NOT.READ_FULL) RETURN
460
461
462 IF(READ_LOCKED) THEN
463
464
465 =''; STRING = '&DES_INPUT_DATA '//&
466 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
467 READ(STRING, NML=DES_INPUT_DATA, IOSTAT=IOS)
468 IF(IOS == 0) RETURN
469
470
471
472 =''; STRING = '&USR_INPUT_DATA '//&
473 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
474 READ(STRING, NML=USR_INPUT_DATA, IOSTAT=IOS)
475 IF(IOS == 0) RETURN
476
477
478
479 =''; STRING = '&CARTESIAN_GRID_INPUT_DATA '//&
480 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
481 READ(STRING, NML=CARTESIAN_GRID_INPUT_DATA, IOSTAT=IOS)
482 IF(IOS == 0) RETURN
483
484
485
486 =''; STRING = '&QMOMK_INPUT_DATA '//&
487 trim(adjustl(LINE_STRING(1:LINE_LEN)))//'/'
488 READ(STRING, NML=QMOMK_INPUT_DATA, IOSTAT=IOS)
489 IF(IOS == 0) RETURN
490 ENDIF
491
492 IF(READ_LOCKED) ERROR = .TRUE.
493
494 RETURN
495 END SUBROUTINE SET_KEYWORD
496
497 END SUBROUTINE READ_NAMELIST
498