File: N:\mfix\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     ! Modules
12     !---------------------------------------------------------------------//
13     ! Runtime Flag: Generate initial particle configuration.
14           USE discretelement, only: GENER_PART_CONFIG
15     ! Runtime Flag: Store DES_*_OLD arrays.
16           USE discretelement, only: DO_OLD
17     ! Number of DEM solids phases.
18           USE discretelement, only: DES_MMAX
19     ! User specified integration method.
20           USE discretelement, only: DES_INTG_METHOD
21           USE discretelement, only: INTG_ADAMS_BASHFORTH
22           USE discretelement, only: INTG_EULER
23     ! User specified neighbor search method.
24           USE discretelement, only: DES_NEIGHBOR_SEARCH
25     ! User specified data out format (VTP, TecPlot)
26           USE discretelement, only: DES_OUTPUT_TYPE
27     ! Max/Min particle radii
28           USE discretelement, only: MAX_RADIUS, MIN_RADIUS
29     ! Runtime Flag: Periodic boundaries
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     ! Use the error manager for posting error messages.
35           use error_manager
36     ! Runtime Flag: Invoke MPPIC model.
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     ! number of continuous solids phases and
43     ! solids 'phase' diameters and densities
44           USE physprop, only: MMAX, D_p0, RO_s0
45     ! Calculated baseline variable solids density.
46           USE physprop, only: CLOSE_PACKED
47     ! Runtime Flag: Solve energy equations
48           USE run, only: ENERGY_EQ
49     ! Runtime Flag: One or more species equations are solved.
50           use run, only: ANY_SPECIES_EQ
51     ! Flag: Solve variable solids density.
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     ! Local Variables
61     !---------------------------------------------------------------------//
62           INTEGER :: M 
63     !......................................................................!
64     
65     ! Initialize the error manager.
66           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE")
67     
68     ! Determine the maximum particle size in the system (MAX_RADIUS), which
69     ! in turn is used for various tasks
70           MAX_RADIUS = -UNDEFINED
71           MIN_RADIUS =  UNDEFINED
72     ! For number of continuous solids phases (use MMAX rather than SMAX to
73     ! accomodate GHD particularity)
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     ! Set close_packed to true to prevent possible issues stemming from the
80     ! pressure correction equation.  Specifically, if closed_packed is false
81     ! then a mixture pressure correction equation is invoked and this is not
82     ! correctly setup for DEM.  To do so would require ensuring that
83     ! 1) the solids phase continuum quantities used in these equations are
84     !    correctly set based on their DEM counterparts and
85     ! 2) the pressure correction coefficients for such solids phases are
86     !    also calculated (currently these calculations are turned off
87     !    when using DEM)
88           CLOSE_PACKED((MMAX+1):DIM_M) = .TRUE.
89     
90     
91     ! Turn off the 'continuum' equations for discrete solids if the user
92     ! specified them.  We could make use of these flags.
93           MOMENTUM_X_EQ((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     ! Derive periodicity from cyclic boundary flags.
98           DES_PERIODIC_WALLS_X = 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     ! Overwrite for restart cases.
107           IF(TRIM(RUN_TYPE) .NE. 'NEW') GENER_PART_CONFIG = .FALSE.
108     
109     ! Check for valid neighbor search option.
110           SELECT CASE(DES_NEIGHBOR_SEARCH)
111           CASE (1) ! N-Square
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) ! Grid based
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     ! Check the output file format
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     ! Check for valid integration method
145           SELECT CASE(trim(DES_INTG_METHOD))
146           CASE ('EULER')
147              INTG_EULER = .TRUE.
148              INTG_ADAMS_BASHFORTH = .FALSE.
149              !DES_INTG_METHOD_ENUM = 1
150           CASE ('ADAMS_BASHFORTH')
151              INTG_EULER = .FALSE.
152              INTG_ADAMS_BASHFORTH = .TRUE.
153              !DES_INTG_METHOD_ENUM = 2
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     ! Check interpolation input.
166           CALL CHECK_SOLIDS_COMMON_DISCRETE_INTERP
167     
168     ! Set flags for energy equations
169           IF(ENERGY_EQ) CALL CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
170     
171     ! Check thermodynamic properties of discrete solids.
172           IF(ANY_SPECIES_EQ) &
173              CALL CHECK_SOLIDS_COMMON_DISCRETE_THERMO
174     
175     ! Check geometry constrains.
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
187     !                                                                      !
188     !  SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY                      !
189     !  Author: J.Musser                                   Date: 02-FEB-14  !
190     !                                                                      !
191     !  Purpose: Check input parameters for solving discrete solids phase   !
192     !  energy equations.  Only DEM simulations (neither hybrid nor MPPIC)  !
193     !  can invoke particle-particle heat transfer. Therefore, checks for   !
194     !  those functions are reseved for later.                              !
195     !                                                                      !
196     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
197           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_ENERGY
198     
199     ! Modules
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 ! Convection
208           use des_thermo, only: CALC_COND_DES ! Conduction
209           use des_thermo, only: CALC_RADT_DES ! Radiation
210     ! Flag to explicitly couple source terms and DES
211           use discretelement, only: DES_EXPLICITLY_COUPLED
212           use discretelement, only: DES_MMAX
213           use discretelement, only: DES_CONTINUUM_COUPLED
214     ! Use the error manager for posting error messages.
215           use error_manager
216     ! User input for DES interpolation scheme.
217           use particle_filter, only: DES_INTERP_SCHEME
218     ! Enumerated interpolation scheme for faster access
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     ! Local Variables:
230     !---------------------------------------------------------------------//
231     ! Loop counter
232           INTEGER :: M
233     
234     !......................................................................!
235     
236     
237     ! Initialize the error manager.
238           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_ENERGY")
239     
240     
241     ! Set runtime flags for which modes of heat transfer to calculate.
242           CALC_CONV_DES = DES_CONTINUUM_COUPLED
243           DO M = MMAX+1, MMAX+DES_MMAX
244     ! Flag to calculate radiation.
245              IF(DES_Em(M) > ZERO) CALC_RADT_DES(M) = .TRUE.
246     ! Flag to calculate conduction.
247              CALC_COND_DES(M) = (K_s0(M) > ZERO .AND. K_s0(M) /= UNDEFINED)
248           ENDDO
249     
250     ! Gas/Solids convection:
251     !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
252     ! Verify the selected convective heat transfer coefficient model
253           SELECT CASE(TRIM(DES_CONV_CORR))
254     ! Ranz, W.E. and Marshall, W.R., "Friction and transfer coefficients
255     ! for single particles and packed beds,"  Chemical Engineering Science,
256     ! Vol. 48, No. 5, pp 247-253, 1952.
257           CASE ('RANZ_1952')
258              DES_CONV_CORR_ENUM = RANZ_1952
259     ! If the heat transfer coefficient correlation provided by the user does
260     ! not match one of the models outlined above, flag the error and exit.
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     ! Radiation Equation:
268     !'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
269     ! Verify that a emmisivity value is specified for each solids phase
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     ! Set the value of the Stefan-Boltzman Constant based on the units
278           IF(UNITS == 'SI')THEN
279              SB_CONST = 5.6704d0*(10.0d0**(-8)) ! W/((m^2).K^4)
280           ELSE
281              SB_CONST = 1.355282d0*(10.0d0**(-12)) ! cal/((cm^2).sec.K^4)
282           ENDIF
283     
284     
285     ! Notify that interpolation is not support for thermo variables
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!(ABORT=.TRUE.)
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
324     !                                                                      !
325     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_THERMO                     !
326     !  Author: J.Musser                                   Date: 17-Jun-10  !
327     !                                                                      !
328     !  Purpose:                                                            !
329     !                                                                      !
330     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
331           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_THERMO
332     
333     ! Modules
334     !---------------------------------------------------------------------//
335           use discretelement, only: DES_EXPLICITLY_COUPLED
336           use error_manager
337     ! User input for DES interpolation scheme.
338           use particle_filter, only: DES_INTERP_SCHEME
339     ! Enumerated interpolation scheme for faster access
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     ! Initialize the error manager.
349           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_THERMO")
350     
351     ! Stiff chemistry solver is a TFM reaction model not for DES.
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     ! Notify that interpolation is not support for thermo variables
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!(ABORT=.TRUE.)
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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
389     !                                                                      !
390     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY                   !
391     !  Author: J.Musser                                   Date: 11-DEC-13  !
392     !                                                                      !
393     !  Purpose: Check user input data                                      !
394     !                                                                      !
395     !  Comments: Geometry checks were moved here from CHECK_DES_DATA.      !
396     !                                                                      !
397     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
398           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY
399     
400     ! Modules
401     !---------------------------------------------------------------------//
402     ! Flag: Use Cartesian grid cut-cell implementation
403           USE cutcell, only: CARTESIAN_GRID
404     ! Flag: Use STL representation in CG
405           USE cutcell, only: USE_STL
406     ! Flag: Use DES E-L model
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     ! Local Variables
416     !---------------------------------------------------------------------//
417           DOUBLE PRECISION :: MIN_DEPTH
418     
419     !......................................................................!
420     
421     
422     ! Initialize the error manager.
423           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_GEOMETRY")
424     
425     
426     ! DEM/MPPIC is restricted to CARTESIAN coordinates.
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     ! Check dimension. This is redundant with check_data_03.
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     ! Check that the depth of the simulation exceeds the largest particle
449     ! to ensure correct calculation of volume fraction. This is important
450     ! for coupled simulations.
451              MIN_DEPTH = 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     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
480     !                                                                      !
481     !  Subroutine: CHECK_SOLIDS_COMMON_DISCRETE_INTERP                     !
482     !  Author: J.Musser                                   Date: 25-Nov-14  !
483     !                                                                      !
484     !  Purpose:                                                            !
485     !                                                                      !
486     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
487           SUBROUTINE CHECK_SOLIDS_COMMON_DISCRETE_INTERP
488     
489     ! Modules
490     !---------------------------------------------------------------------//
491     ! Runtime Flag: Invoke gas/solids coupled simulation.
492           use discretelement, only: DES_CONTINUUM_COUPLED
493           use error_manager
494     ! Runtime FLag: 3D simulation
495           use geometry, only: DO_K
496     ! Runtime Flag: Invoke MPPIC model.
497           USE mfix_pic, only: MPPIC
498           use param1, only: UNDEFINED
499     ! User input for DES interpolation scheme.
500           use particle_filter, only: DES_INTERP_SCHEME
501     ! Enumerated interpolation scheme for faster access
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     ! User specified filter width
509           use particle_filter, only: DES_INTERP_WIDTH
510     ! Flag: Diffuse DES field variables.
511           use particle_filter, only: DES_DIFFUSE_MEAN_FIELDS
512     ! Diffusion filter width
513           use particle_filter, only: DES_DIFFUSE_WIDTH
514     ! Flag: Interpolate continuum fields
515           use particle_filter, only: DES_INTERP_MEAN_FIELDS
516     ! Flag: Interplate variables for drag calculation.
517           use particle_filter, only: DES_INTERP_ON
518     ! Size of interpolation filter
519           use particle_filter, only: FILTER_SIZE
520           IMPLICIT NONE
521     
522     !......................................................................!
523     
524     
525     ! Initialize the error manager.
526           CALL INIT_ERR_MSG("CHECK_SOLIDS_COMMON_DISCRETE_INTERP")
527     
528     ! Set the runtime flag for diffusing mean fields
529           DES_DIFFUSE_MEAN_FIELDS = (DES_DIFFUSE_WIDTH /= UNDEFINED)
530     
531     ! Set the interpolation ENUM value.
532           SELECT CASE(trim(adjustl(DES_INTERP_SCHEME)))
533           CASE ('NONE')
534              DES_INTERP_SCHEME_ENUM = DES_INTERP_NONE
535     ! Cannot use interpolation when no scheme is selected.
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     ! Set the size of the interpolation filter.
615              FILTER_SIZE = 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     ! Set the size of the interpolation filter.
630              FILTER_SIZE = 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