File: N:\mfix\model\check_data\check_solids_common_discrete.f
1
2
3
4
5
6
7
8
9 SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE
10
11
12
13
14 USE discretelement, only: GENER_PART_CONFIG
15
16 USE discretelement, only: DO_OLD
17
18 USE discretelement, only: DES_MMAX
19
20 USE discretelement, only: DES_INTG_METHOD
21 USE discretelement, only: INTG_ADAMS_BASHFORTH
22 USE discretelement, only: INTG_EULER
23
24 USE discretelement, only: DES_NEIGHBOR_SEARCH
25
26 USE discretelement, only: DES_OUTPUT_TYPE
27
28 USE discretelement, only: MAX_RADIUS, MIN_RADIUS
29
30 USE discretelement, only: DES_PERIODIC_WALLS
31 USE discretelement, only: DES_PERIODIC_WALLS_X
32 USE discretelement, only: DES_PERIODIC_WALLS_Y
33 USE discretelement, only: DES_PERIODIC_WALLS_Z
34
35 use error_manager
36
37 USE mfix_pic, only: MPPIC
38 USE mpi_utility
39
40 use param1, only: undefined, undefined_c
41 use param, only: dim_m
42
43
44 USE physprop, only: MMAX, D_p0, RO_s0
45
46 USE physprop, only: CLOSE_PACKED
47
48 USE run, only: ENERGY_EQ
49
50 use run, only: ANY_SPECIES_EQ
51
52 use run, only: SOLVE_ROs
53 use run, only: SOLIDS_MODEL
54 USE run, only: MOMENTUM_X_EQ
55 USE run, only: MOMENTUM_Y_EQ
56 USE run, only: MOMENTUM_Z_EQ
57 use run, only: RUN_TYPE
58 implicit none
59
60
61
62 INTEGER :: M
63
64
65
66 CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE")
67
68
69
70 = -UNDEFINED
71 MIN_RADIUS = UNDEFINED
72
73
74 DO M = MMAX+1,DES_MMAX+MMAX
75 MAX_RADIUS = MAX(MAX_RADIUS, 0.5d0*D_P0(M))
76 MIN_RADIUS = MIN(MIN_RADIUS, 0.5d0*D_P0(M))
77 ENDDO
78
79
80
81
82
83
84
85
86
87
88 ((MMAX+1):DIM_M) = .TRUE.
89
90
91
92
93 ((MMAX+1):DIM_M) = .FALSE.
94 MOMENTUM_Y_EQ((MMAX+1):DIM_M) = .FALSE.
95 MOMENTUM_Z_EQ((MMAX+1):DIM_M) = .FALSE.
96
97
98 = CYCLIC_X .OR. CYCLIC_X_PD
99 DES_PERIODIC_WALLS_Y = CYCLIC_Y .OR. CYCLIC_Y_PD
100 DES_PERIODIC_WALLS_Z = CYCLIC_Z .OR. CYCLIC_Z_PD
101
102 DES_PERIODIC_WALLS = (DES_PERIODIC_WALLS_X .OR. &
103 DES_PERIODIC_WALLS_Y .OR. DES_PERIODIC_WALLS_Z)
104
105
106
107 IF(TRIM(RUN_TYPE) .NE. 'NEW') GENER_PART_CONFIG = .FALSE.
108
109
110 SELECT CASE(DES_NEIGHBOR_SEARCH)
111 CASE (1)
112 CASE (2)
113 WRITE(ERR_MSG,2001) 2, 'QUADTREE'
114 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
115 CASE (3)
116 WRITE(ERR_MSG,2001) 3, 'OCTREE'
117 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
118 CASE (4)
119 CASE DEFAULT
120 WRITE(ERR_MSG,2001) DES_NEIGHBOR_SEARCH,'UNKNOWN'
121 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
122
123 2001 FORMAT('Error 2001:Invalid DES_NEIGHBOR_SEARCH method: ',I2,1X, &
124 A,/'Please correct the mfix.dat file.')
125
126 END SELECT
127
128
129
130 IF(DES_OUTPUT_TYPE == UNDEFINED_C) DES_OUTPUT_TYPE = 'PARAVIEW'
131 SELECT CASE(trim(DES_OUTPUT_TYPE))
132 CASE ('PARAVIEW')
133 CASE ('TECPLOT')
134 CASE DEFAULT
135 WRITE(ERR_MSG,2010) trim(DES_OUTPUT_TYPE)
136 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
137
138 2010 FORMAT('Error 2010:Invalid DES_OUTPUT_TYPE: ',A,/'Please ', &
139 'correct the mfix.dat file.')
140
141 END SELECT
142
143
144
145 SELECT CASE(trim(DES_INTG_METHOD))
146 CASE ('EULER')
147 INTG_EULER = .TRUE.
148 INTG_ADAMS_BASHFORTH = .FALSE.
149
150 CASE ('ADAMS_BASHFORTH')
151 INTG_EULER = .FALSE.
152 INTG_ADAMS_BASHFORTH = .TRUE.
153
154 CASE DEFAULT
155 WRITE(ERR_MSG,2020) trim(DES_INTG_METHOD)
156 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157
158 2020 FORMAT('Error 2020:Invalid DES_INGT_METHOD: ',A,/'Please ', &
159 'correct the mfix.dat file.')
160
161 END SELECT
162
163 DO_OLD = INTG_ADAMS_BASHFORTH .OR. MPPIC
164
165
166 CALL CHECK_SOLIDS_COMMON_DISCRETE_INTERP
167
168
169 IF(ENERGY_EQ) CALL CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
170
171
172 IF(ANY_SPECIES_EQ) &
173 CALL CHECK_SOLIDS_COMMON_DISCRETE_THERMO
174
175
176 CALL CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY
177
178 CALL FINL_ERR_MSG
179
180
181 RETURN
182
183 END SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE
184
185
186
187
188
189
190
191
192
193
194
195
196
197 SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
198
199
200
201 use param1, only: ZERO, UNDEFINED
202 use des_thermo, only: DES_CONV_CORR
203 use des_thermo, only: DES_CONV_CORR_ENUM
204 use des_thermo, only: RANZ_1952
205 use des_thermo, only: SB_CONST
206 use des_thermo, only: DES_Em
207 use des_thermo, only: CALC_CONV_DES
208 use des_thermo, only: CALC_COND_DES
209 use des_thermo, only: CALC_RADT_DES
210
211 use discretelement, only: DES_EXPLICITLY_COUPLED
212 use discretelement, only: DES_MMAX
213 use discretelement, only: DES_CONTINUUM_COUPLED
214
215 use error_manager
216
217 use particle_filter, only: DES_INTERP_SCHEME
218
219 use particle_filter, only: DES_INTERP_SCHEME_ENUM
220 use particle_filter, only: DES_INTERP_NONE
221
222 use physprop, only: MMAX
223 use physprop, only: K_S0
224 use run, only: UNITS
225 use run, only: SOLIDS_MODEL
226
227 IMPLICIT NONE
228
229
230
231
232 INTEGER :: M
233
234
235
236
237
238 CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_ENERGY")
239
240
241
242 = DES_CONTINUUM_COUPLED
243 DO M = MMAX+1, MMAX+DES_MMAX
244
245 IF(DES_Em(M) > ZERO) CALC_RADT_DES(M) = .TRUE.
246
247 (M) = (K_s0(M) > ZERO .AND. K_s0(M) /= UNDEFINED)
248 ENDDO
249
250
251
252
253 SELECT CASE(TRIM(DES_CONV_CORR))
254
255
256
257 CASE ('RANZ_1952')
258 DES_CONV_CORR_ENUM = RANZ_1952
259
260
261 CASE DEFAULT
262 WRITE(ERR_MSG,1001)'DES_CONV_CORR', trim(DES_CONV_CORR)
263 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
264 END SELECT
265
266
267
268
269
270 DO M = MMAX+1, MMAX+DES_MMAX
271 IF(DES_Em(M) == UNDEFINED) THEN
272 WRITE(ERR_MSG,1000) trim(iVar('DES_Em',M))
273 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
274 ENDIF
275 ENDDO
276
277
278 IF(UNITS == 'SI')THEN
279 SB_CONST = 5.6704d0*(10.0d0**(-8))
280 ELSE
281 SB_CONST = 1.355282d0*(10.0d0**(-12))
282 ENDIF
283
284
285
286 SELECT CASE(DES_INTERP_SCHEME_ENUM)
287 CASE(DES_INTERP_NONE)
288 CASE DEFAULT
289 WRITE(ERR_MSG,2000) trim(adjustl(DES_INTERP_SCHEME))
290 CALL FLUSH_ERR_MSG()
291 END SELECT
292
293 2000 FORMAT('WARNING 2000: The selected interpolation scheme (',A, &
294 ') is not',/'supported by the DES energy equation implemen', &
295 'tation. All energy',/'equation variables will use the ', &
296 'centroid method for interphase',/'data exchange.')
297
298 IF(DES_EXPLICITLY_COUPLED)THEN
299 WRITE(ERR_MSG, 2100)
300 CALL FLUSH_ERR_MSG
301 ENDIF
302
303 2100 FORMAT('Error 2100: The DES Energy equation implementation ', &
304 'does not',/'currently support explicit coupling (DES_', &
305 'EXPLICITLY_COUPLED).',/'Please correct the mfix.dat file.')
306
307 CALL FINL_ERR_MSG
308
309
310 RETURN
311
312 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
313 'correct the mfix.dat file.')
314
315 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
316 'Please correct the mfix.dat file.')
317
318 END SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
319
320
321
322
323
324
325
326
327
328
329
330
331 SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_THERMO
332
333
334
335 use discretelement, only: DES_EXPLICITLY_COUPLED
336 use error_manager
337
338 use particle_filter, only: DES_INTERP_SCHEME
339
340 use particle_filter, only: DES_INTERP_SCHEME_ENUM
341 use particle_filter, only: DES_INTERP_NONE
342 use stiff_chem, only: STIFF_CHEMISTRY
343 IMPLICIT NONE
344
345
346
347
348
349 CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_THERMO")
350
351
352 IF(STIFF_CHEMISTRY) THEN
353 WRITE(ERR_MSG,9003)
354 CALL FLUSH_ERR_MSG(ABORT=.FALSE.)
355 ENDIF
356
357 9003 FORMAT('Error 9003: The stiff chemistry solver is not ', &
358 'available in DES',/'simulations. Please correct the input file.')
359
360
361 SELECT CASE(DES_INTERP_SCHEME_ENUM)
362 CASE(DES_INTERP_NONE)
363 CASE DEFAULT
364 WRITE(ERR_MSG,2000) trim(adjustl(DES_INTERP_SCHEME))
365 CALL FLUSH_ERR_MSG()
366 END SELECT
367
368 2000 FORMAT('WARNING 2000: The selected interpolation scheme (',A, &
369 ') is not',/'supported by the DES Species equation implemen', &
370 'tation. All energy',/'equation variables will use the ', &
371 'centroid method for interphase',/'data exchange.')
372
373 IF(DES_EXPLICITLY_COUPLED)THEN
374 WRITE(ERR_MSG, 2100)
375 CALL FLUSH_ERR_MSG
376 ENDIF
377
378 2100 FORMAT('Error 2100: The DES Species equation implementation ', &
379 'does not',/'currently support explicit coupling (DES_', &
380 'EXPLICITLY_COUPLED).',/'Please correct the mfix.dat file.')
381
382 CALL FINL_ERR_MSG
383
384 RETURN
385 END SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_THERMO
386
387
388
389
390
391
392
393
394
395
396
397
398 SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY
399
400
401
402
403 USE cutcell, only: CARTESIAN_GRID
404
405 USE cutcell, only: USE_STL
406
407 USE discretelement, only: DES_CONTINUUM_COUPLED
408 USE discretelement, only: MAX_RADIUS
409 use error_manager
410 USE geometry, only: COORDINATES
411 USE geometry, only: NO_I, NO_J
412 USE geometry, only: ZLENGTH
413 IMPLICIT NONE
414
415
416
417 DOUBLE PRECISION :: MIN_DEPTH
418
419
420
421
422
423 CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY")
424
425
426
427 IF(COORDINATES == 'CYLINDRICAL') THEN
428 WRITE (ERR_MSG, 1100)
429 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
430 ENDIF
431
432 1100 FORMAT('Error: 1100: DES and MPPIC models only support ', &
433 'CARTESIAN coordinates.')
434
435
436
437 IF(NO_I .OR. NO_J) THEN
438 WRITE(ERR_MSG, 1200)
439 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
440 ENDIF
441
442 1200 FORMAT('Error 1200: Illegal geometry for DEM/MPPIC. 2D ', &
443 'simulations are',/'restricted to the XY plane. Please ', &
444 'correct the mfix.dat file.')
445
446
447 IF(DES_CONTINUUM_COUPLED)THEN
448
449
450
451 = 2.0d0*MAX_RADIUS
452 IF(ZLENGTH < MIN_DEPTH)THEN
453 WRITE(ERR_MSG, 1300)
454 CALL FLUSH_ERR_MSG(ABORT=.FALSE.)
455 ENDIF
456 ENDIF
457
458 1300 FORMAT('Error 1300: The maximum particle diameter exceeds the ', &
459 'simulation',/'depth (ZLENGTH). Please correct the mfix.dat ',&
460 'file.')
461
462
463 IF(CARTESIAN_GRID .AND. .NOT.USE_STL) THEN
464 WRITE(ERR_MSG,1400)
465 CALL FLUSH_ERR_MSG(ABORT =.TRUE.)
466 ENDIF
467
468 1400 FORMAT('Error 1400: Cartesian grid and discrete models (DEM or ',&
469 'PIC) only',/'support STL wall representations. Quadrics ', &
470 'and polygons are not',/'supported.')
471
472
473 CALL FINL_ERR_MSG
474
475 RETURN
476
477 END SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY
478
479
480
481
482
483
484
485
486
487 SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_INTERP
488
489
490
491
492 use discretelement, only: DES_CONTINUUM_COUPLED
493 use error_manager
494
495 use geometry, only: DO_K
496
497 USE mfix_pic, only: MPPIC
498 use param1, only: UNDEFINED
499
500 use particle_filter, only: DES_INTERP_SCHEME
501
502 use particle_filter, only: DES_INTERP_SCHEME_ENUM
503 use particle_filter, only: DES_INTERP_NONE
504 use particle_filter, only: DES_INTERP_GARG
505 use particle_filter, only: DES_INTERP_DPVM
506 use particle_filter, only: DES_INTERP_GAUSS
507 use particle_filter, only: DES_INTERP_LHAT
508
509 use particle_filter, only: DES_INTERP_WIDTH
510
511 use particle_filter, only: DES_DIFFUSE_MEAN_FIELDS
512
513 use particle_filter, only: DES_DIFFUSE_WIDTH
514
515 use particle_filter, only: DES_INTERP_MEAN_FIELDS
516
517 use particle_filter, only: DES_INTERP_ON
518
519 use particle_filter, only: FILTER_SIZE
520 IMPLICIT NONE
521
522
523
524
525
526 CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_INTERP")
527
528
529 = (DES_DIFFUSE_WIDTH /= UNDEFINED)
530
531
532 SELECT CASE(trim(adjustl(DES_INTERP_SCHEME)))
533 CASE ('NONE')
534 DES_INTERP_SCHEME_ENUM = DES_INTERP_NONE
535
536 IF(DES_INTERP_ON)THEN
537 WRITE(ERR_MSG,2001) 'DES_INTERP_ON'
538 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
539 ELSEIF(DES_INTERP_MEAN_FIELDS)THEN
540 WRITE(ERR_MSG,2001) 'DES_INTERP_MEAN_FIELDS'
541 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
542
543 ELSEIF(DES_CONTINUUM_COUPLED) THEN
544 IF(MPPIC) THEN
545 WRITE(ERR_MSG,2002) 'MPPIC solids'
546 CALL FLUSH_ERR_MSG(ABORT=.FALSE.)
547 ELSEIF(MPPIC) THEN
548 WRITE(ERR_MSG,2002) 'Cartesian grid cut-cells'
549 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
550 ENDIF
551 ENDIF
552
553 CASE ('GARG_2012')
554 DES_INTERP_SCHEME_ENUM = DES_INTERP_GARG
555
556 CASE ('SQUARE_DPVM')
557 DES_INTERP_SCHEME_ENUM = DES_INTERP_DPVM
558
559 CASE ('GAUSS_DPVM')
560 DES_INTERP_SCHEME_ENUM = DES_INTERP_GAUSS
561
562 CASE ('LINEAR_HAT')
563 DES_INTERP_SCHEME_ENUM = DES_INTERP_LHAT
564
565 CASE DEFAULT
566 WRITE(ERR_MSG,2000) trim(adjustl(DES_INTERP_SCHEME))
567 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
568 END SELECT
569
570 2000 FORMAT('Error 2000: Invalid DES_INTERP_SCHEME: ',A,/'Please ', &
571 'correct the mfix.dat file.')
572
573 2001 FORMAT('Error 2001: No interpolation scheme specified when ',A,/ &
574 'is enabled. Please correct the mfix.dat file.')
575
576 2002 FORMAT('Error 2002: DES simulations utilizing ',A,' require',/ &
577 'interpolation (DES_INTERP_ON and DES_INTERP_MEANFIELDS). ',/ &
578 'Please correct the mfix.dat file.')
579
580
581 SELECT CASE(DES_INTERP_SCHEME_ENUM)
582
583 CASE(DES_INTERP_NONE)
584
585 IF(DES_INTERP_WIDTH /= UNDEFINED) THEN
586 WRITE(ERR_MSG,2100) trim(adjustl(DES_INTERP_SCHEME))
587 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
588 ENDIF
589
590 2100 FORMAT('Error 2100: The selected interpolation scheme (',A,') ', &
591 'does',/'not support an adjustable interpolation width.',/ &
592 'Please correct the input file.')
593
594
595 CASE(DES_INTERP_GARG)
596 DES_INTERP_MEAN_FIELDS= .TRUE.
597
598 IF(DES_INTERP_WIDTH /= UNDEFINED) THEN
599 WRITE(ERR_MSG,2100) trim(adjustl(DES_INTERP_SCHEME))
600 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
601 ENDIF
602
603 IF(DES_DIFFUSE_MEAN_FIELDS) THEN
604 WRITE(ERR_MSG,2110) trim(adjustl(DES_INTERP_SCHEME))
605 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
606 ENDIF
607
608 2110 FORMAT('Error 2110: The selected interpolation scheme (',A,') ', &
609 'does not',/'support diffusive filtering of mean field ', &
610 'quantities. Please correct',/'the input file.')
611
612 CASE(DES_INTERP_DPVM, DES_INTERP_GAUSS)
613
614
615 = merge(27, 9, DO_K)
616
617 IF(DES_INTERP_WIDTH == UNDEFINED) THEN
618 WRITE(ERR_MSG,2120) trim(adjustl(DES_INTERP_SCHEME))
619 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
620 ENDIF
621
622 2120 FORMAT('Error 2120: The selected interpolation scheme (',A,') ', &
623 'requires',/'a DES_INTERP_WIDTH. Please correct the ', &
624 'input file.')
625
626
627 CASE(DES_INTERP_LHAT)
628
629
630 = merge(27, 9, DO_K)
631
632 IF(DES_INTERP_WIDTH /= UNDEFINED) THEN
633 WRITE(ERR_MSG,2100) trim(adjustl(DES_INTERP_SCHEME))
634 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
635 ENDIF
636
637 END SELECT
638
639 CALL FINL_ERR_MSG
640
641 RETURN
642 END SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_INTERP
643