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