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