File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_solids_common_discrete.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  SUBROUTINE: CHECK_SOLIDS_COMMON_DISCRETE                            !
4     !  Author: J.Musser                                   Date: 02-FEB-14  !
5     !                                                                      !
6     !  Purpose:                                                            !
7     !                                                                      !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE
10     
11     
12     ! Global Variables:
13     !---------------------------------------------------------------------//
14     ! Runtime Flag: Invoke gas/solids coupled simulation.
15           USE discretelement, only: DES_CONTINUUM_COUPLED
16     ! Runtime Flag: Generate initial particle configuation.
17           USE discretelement, only: GENER_PART_CONFIG
18     ! Runtime Flag: Invoke MPPIC model.
19           USE mfix_pic, only: MPPIC
20     ! Runtime Flag: Store DES_*_OLD arrays.
21           USE discretelement, only: DO_OLD
22     ! Runtime Flag: Invoke TFM/DEM hybrid model.
23           USE discretelement, only: DES_CONTINUUM_HYBRID
24     ! Runtime Flag: Solve energy equations
25           USE run, only: ENERGY_EQ
26     ! Runtime Flag: One or more species equations are solved.
27           use run, only: ANY_SPECIES_EQ
28     ! Number of DEM solids phases.
29           USE discretelement, only: DES_MMAX
30     ! DEM solid phase diameters and densities.
31           USE discretelement, only: DES_D_p0, DES_RO_s
32     ! TFM solids phase diameters and densities. (DEM default)
33           USE physprop, only: D_p0, RO_s0
34     
35     ! User specified integration method.
36           USE discretelement, only: DES_INTG_METHOD
37           USE discretelement, only: INTG_ADAMS_BASHFORTH
38           USE discretelement, only: INTG_EULER
39     ! User specified neighbor search method.
40           USE discretelement, only: DES_NEIGHBOR_SEARCH
41     ! User specified data out format (VTP, TecPlot)
42           USE discretelement, only: DES_OUTPUT_TYPE
43     ! Max/Min particle radi
44           USE discretelement, only: MAX_RADIUS, MIN_RADIUS
45     ! Runtime Flag: Periodic boundaries
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     ! Flag: Solve variable solids density.
51           use run, only: SOLVE_ROs
52     ! Calculated baseline variable solids density.
53           use physprop, only: BASE_ROs
54     
55     ! Flag: Solve variable solids density.
56           USE run, only: SOLVE_ROs
57     ! Calculated baseline variable solids density.
58           USE physprop, only: BASE_ROs
59     
60     
61     ! Number of ranks.
62           use run, only: SOLIDS_MODEL
63     
64     ! Subroutine access.
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     ! Global Parameters:
80     !---------------------------------------------------------------------//
81     !      use param1, only: UNDEFINED_I
82     
83     ! Use the error manager for posting error messages.
84     !---------------------------------------------------------------------//
85           use error_manager
86     
87           implicit none
88     
89     ! Local Variables:
90     !---------------------------------------------------------------------//
91     ! Loop index.
92           INTEGER :: M, lM  ! Solids phase Index
93     
94     ! Initialize the error manager.
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     ! The accounts for an offset between the DEM and TFM phase indices
108              IF(SOLIDS_MODEL(lM) == 'TFM') CYCLE
109              M = M+1
110     
111     ! Copy of the input keyword values into discrete solids arrays. We may be
112     ! able to remove the DES_ specific variables moving forward.
113              DES_D_p0(M) = D_p0(lM)
114              DES_RO_s(M) = merge(BASE_ROs(lM), RO_s0(lM), SOLVE_ROs(lM))
115     ! Determine the maximum particle size in the system (MAX_RADIUS), which
116     ! in turn is used for various tasks
117              MAX_RADIUS = 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     ! Set close_packed to true to prevent possible issues stemming from the
123     ! pressure correction equation.  Specifically, if closed_packed is false
124     ! then a mixture pressure correction equation is invoked and this is not
125     ! correctly setup for DEM.  To do so would require ensuring that
126     ! 1) the solids phase continuum quantities used in these equations are
127     !    correctly set based on their DEM counterparts and
128     ! 2) the pressure correction coefficients for such solids phases are
129     !    also calculated (currently these calculations are turned off
130     !    when using DEM)
131           CLOSE_PACKED((MMAX+1):DIM_M) = .TRUE.
132     
133     
134     ! Turn off the 'continuum' equations for discrete solids if the user
135     ! specified them.  We could make use of these flags.
136           MOMENTUM_X_EQ((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     ! Derive periodicity from cyclic boundary flags.
141           DES_PERIODIC_WALLS_X = 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     ! Overrite for restart cases.
150           IF(TRIM(RUN_TYPE) .NE. 'NEW') GENER_PART_CONFIG = .FALSE.
151     
152     ! Check for valid neighbor search option.
153           SELECT CASE(DES_NEIGHBOR_SEARCH)
154           CASE (1) ! N-Square
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) ! Grid based
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     ! Check the output file format
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     ! Check for valid integration method
188           SELECT CASE(trim(DES_INTG_METHOD))
189           CASE ('EULER')
190              INTG_EULER = .TRUE.
191              INTG_ADAMS_BASHFORTH = .FALSE.
192              !DES_INTG_METHOD_ENUM = 1
193           CASE ('ADAMS_BASHFORTH')
194              INTG_EULER = .FALSE.
195              INTG_ADAMS_BASHFORTH = .TRUE.
196              !DES_INTG_METHOD_ENUM = 2
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     ! Check interpolation input.
209           CALL CHECK_SOLIDS_COMMON_DISCRETE_INTERP
210     
211     ! Set flags for energy equations
212           IF(ENERGY_EQ) CALL CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
213     
214     ! Check thermodynamic properties of discrete solids.
215           IF(ANY_SPECIES_EQ) &
216              CALL CHECK_SOLIDS_COMMON_DISCRETE_THERMO
217     
218     ! Check geometry constrains.
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
230     !                                                                      !
231     !  SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY                      !
232     !  Author: J.Musser                                   Date: 02-FEB-14  !
233     !                                                                      !
234     !  Purpose: Check input parameters for solving discrete solids phase   !
235     !  energy equations.  Only DEM simulations (neither hybrid nor MPPIC)  !
236     !  can invoke particle-particle heat transfer. Therefore, checks for   !
237     !  those functions are reseved for later.                              !
238     !                                                                      !
239     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
240           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
241     
242     
243     ! Global Variables:
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 ! Convection
261           use des_thermo, only: CALC_COND_DES ! Conduction
262           use des_thermo, only: CALC_RADT_DES ! Radiation
263     
264           use discretelement, only: DES_CONTINUUM_COUPLED
265     
266           use run, only: SOLIDS_MODEL
267     ! User input for DES interpolation scheme.
268           use particle_filter, only: DES_INTERP_SCHEME
269     ! Enumerated interpolation scheme for faster access
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     ! Flag to explicitly couple source terms and DES
274           use discretelement, only: DES_EXPLICITLY_COUPLED
275     
276     ! Global Parameters:
277     !---------------------------------------------------------------------//
278           use param1, only: ZERO, UNDEFINED
279     
280     
281     ! Use the error manager for posting error messages.
282     !---------------------------------------------------------------------//
283           use error_manager
284     
285     
286           IMPLICIT NONE
287     
288     
289     ! Local Variables:
290     !---------------------------------------------------------------------//
291     ! Loop counter
292           INTEGER :: M
293     
294     !......................................................................!
295     
296     
297     ! Initialize the error manager.
298           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_ENERGY")
299     
300     
301     ! Set runtime flags for which modes of heat transfer to calculate.
302           CALC_CONV_DES = DES_CONTINUUM_COUPLED
303           DO M = SMAX+1, SMAX+DES_MMAX
304     ! Only interested in discrete solids.
305              IF(SOLIDS_MODEL(M) == 'TFM') CYCLE
306     ! Flag to calculate radiation.
307              IF(DES_Em(M) > ZERO) CALC_RADT_DES(M) = .TRUE.
308     ! Flag to calculate conduction.
309              CALC_COND_DES(M) = (K_s0(M) > ZERO .AND. K_s0(M) /= UNDEFINED)
310           ENDDO
311     
312     ! Gas/Solids convection:
313     !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
314     ! Verify the selected convective heat transfer coefficient model
315           SELECT CASE(TRIM(DES_CONV_CORR))
316     ! Ranz, W.E. and Marshall, W.R., "Frication and transfer coefficients
317     ! for single particles and packed beds,"  Chemical Engineering Science,
318     ! Vol. 48, No. 5, pp 247-253, 1952.
319           CASE ('RANZ_1952')
320              DES_CONV_CORR_ENUM = RANZ_1952
321     ! If the heat transfer coefficient correlation provided by the user does
322     ! not match one of the models outlined above, flag the error and exit.
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     ! Radiation Equation:
330     !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
331     ! Verify that a emmisivity value is specified for each solids pase
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     ! Set the value of the Stefan-Boltzman Constant based on the untis
340           IF(UNITS == 'SI')THEN
341              SB_CONST = 5.6704d0*(10.0d0**(-8)) ! W/((m^2).K^4)
342           ELSE
343              SB_CONST = 1.355282d0*(10.0d0**(-12)) ! cal/((cm^2).sec.K^4)
344           ENDIF
345     
346     
347     ! Notify that interpolation is not support for thermo variables
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
386     !                                                                      !
387     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_THERMO                     !
388     !  Author: J.Musser                                   Date: 17-Jun-10  !
389     !                                                                      !
390     !  Purpose:                                                            !
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     ! User input for DES interpolation scheme.
399           use particle_filter, only: DES_INTERP_SCHEME
400     ! Enumerated interpolation scheme for faster access
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     ! Initialize the error manager.
413           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_THERMO")
414     
415     ! Stiff chemistry solver is a TFM reaction model not for DES.
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     ! Notify that interpolation is not support for thermo variables
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
453     !                                                                      !
454     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY                   !
455     !  Author: J.Musser                                   Date: 11-DEC-13  !
456     !                                                                      !
457     !  Purpose: Check user input data                                      !
458     !                                                                      !
459     !  Comments: Geometry checks were moved here from CHECK_DES_DATA.      !
460     !                                                                      !
461     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
462           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY
463     
464     !-----------------------------------------------
465     ! Modules
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     ! Flag: Use DES E-L model
472           use discretelement, only: DISCRETE_ELEMENT
473           USE discretelement, only: DES_CONTINUUM_COUPLED
474           USE discretelement, only: MAX_RADIUS
475     ! Flag: Use Cartesian grid cut-cell implementation
476           USE cutcell, only: CARTESIAN_GRID
477     ! Flag: Use STL represenation in CG
478           USE cutcell, only: USE_STL
479     
480           use param1, only: UNDEFINED_I
481     
482           use error_manager
483     
484           IMPLICIT NONE
485     !-----------------------------------------------
486     ! Local Variables
487     !-----------------------------------------------
488           DOUBLE PRECISION :: MIN_DEPTH
489     
490     !......................................................................!
491     
492     
493     ! Initialize the error manager.
494           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY")
495     
496     
497     ! DEM/MPPIC is restriced to CARTESIAN coordinates.
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     ! Check dimension. This is redundant with check_data_03.
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     ! Check that the depth of the simulation exceeds the largest particle
520     ! to ensure correct calculation of volume fraction. This is important
521     ! for coupled simulations.
522              MIN_DEPTH = 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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
558     !                                                                      !
559     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_INTERP                     !
560     !  Author: J.Musser                                   Date: 25-Nov-14  !
561     !                                                                      !
562     !  Purpose:                                                            !
563     !                                                                      !
564     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
565           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_INTERP
566     
567     ! Runtime Flag: Utilize cutcell geometry.
568           use cutcell, only: CARTESIAN_GRID
569     ! Runtime Flag: Invoke gas/solids coupled simulation.
570           use discretelement, only: DES_CONTINUUM_COUPLED
571     ! Runtime Flag: Invoke MPPIC model.
572           USE mfix_pic, only: MPPIC
573     ! User input for DES interpolation scheme.
574           use particle_filter, only: DES_INTERP_SCHEME
575     ! Enumerated interpolation scheme for faster access
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     ! User specified filter width
582           use particle_filter, only: DES_INTERP_WIDTH
583     ! Flag: Diffuse DES field variables.
584           use particle_filter, only: DES_DIFFUSE_MEAN_FIELDS
585     ! Diffusion filter width
586           use particle_filter, only: DES_DIFFUSE_WIDTH
587     ! Flag: Interpolate continuum fields
588           use particle_filter, only: DES_INTERP_MEAN_FIELDS
589     ! Flag: Interplate variables for drag calculation.
590           use particle_filter, only: DES_INTERP_ON
591     ! Size of interpolation filter
592           use particle_filter, only: FILTER_SIZE
593     ! Runtime FLag: 3D simulation
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     ! Initialize the error manager.
609           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_INTERP")
610     
611     ! Set the runtime flag for diffusing mean fields
612           DES_DIFFUSE_MEAN_FIELDS = (DES_DIFFUSE_WIDTH /= UNDEFINED)
613     
614     ! Set the interpolation ENUM value.
615           SELECT CASE(trim(adjustl(DES_INTERP_SCHEME)))
616           CASE ('NONE')
617              DES_INTERP_SCHEME_ENUM = DES_INTERP_NONE
618     ! Cannot use interpolation when no scheme is selected.
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     ! Set the size of the interpolation filter.
695              FILTER_SIZE = 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