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