File: RELATIVE:/../../../mfix.git/model/check_data/check_solids_continuum.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: CHECK_CONTINUUM_SOLIDS                                  !
4     !  Purpose: Check kinetic the run control namelist section             !
5     !                                                                      !
6     !  Author: P. Nicoletti                               Date: 27-NOV-91  !
7     !                                                                      !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE CHECK_SOLIDS_CONTINUUM
10     
11     ! Global Variables:
12     !---------------------------------------------------------------------//
13           USE constant
14           USE run
15           USE physprop
16     
17     ! Global Parameters:
18     !---------------------------------------------------------------------//
19           USE param1, only: zero, one, undefined, undefined_i
20     
21     ! Global Module procedures:
22     !---------------------------------------------------------------------//
23           use error_manager
24     
25           IMPLICIT NONE
26     
27     ! Local Variables:
28     !---------------------------------------------------------------------//
29           INTEGER :: LC, M
30           DOUBLE PRECISION :: lsin_phi
31     ! counters for number of phases with defined/undefined mu_s0
32           INTEGER :: def_mus0, undef_mus0
33     !......................................................................!
34     
35     
36     ! initialization of various dependent constants
37           SIN_PHI = UNDEFINED   ! friction
38           SIN2_PHI = UNDEFINED   ! schaeffer
39           F_PHI = UNDEFINED    ! commented schaeffer section
40           TAN_PHI_W = UNDEFINED   ! friction or jenkins
41     
42     ! Initialize the error manager.
43           CALL INIT_ERR_MSG("CHECK_SOLIDS_CONTINUUM")
44     
45     ! Check EP_star. This is used to populate ep_star_array which is what
46     ! should be used elsewhere in the code. (see set_constprop)
47           IF(EP_STAR == UNDEFINED) THEN
48              WRITE(ERR_MSG,1000) 'EP_STAR'
49              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
50           ELSEIF(EP_STAR < ZERO .OR. EP_STAR > ONE) THEN
51              WRITE(ERR_MSG, 1001)'EP_STAR', iVal(EP_STAR)
52              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
53           ENDIF
54     
55     ! CHECK DIF_s0
56           IF (DIF_S0 < ZERO) THEN
57              WRITE(ERR_MSG, 1001) 'DIF_s0', DIF_s0
58              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
59           ENDIF
60     
61     ! CHECK MU_s0
62           def_mus0 = 0
63           DO M = 1, SMAX
64              IF (MU_s0(M) /= UNDEFINED) THEN
65                 def_mus0 = def_mus0 + 1
66                 IF(MU_s0(M) < ZERO) THEN
67                    WRITE(ERR_MSG, 1001) trim(iVar('Mu_s0',M)), &
68                       iVal(Mu_s0(M))
69                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
70                 ENDIF
71              ENDIF
72           ENDDO
73           undef_mus0 = smax - def_mus0
74     
75           DO M = SMAX+1, DIM_M
76              IF(MU_s0(M) /= UNDEFINED)THEN
77                 WRITE(ERR_MSG,1002) trim(iVar('Mu_s0',M))
78                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
79              ENDIF
80           ENDDO
81     
82     ! Solids phase with constant solids viscosity is employed
83     !---------------------------------------------------------------------//
84           IF (def_mus0 > 0) THEN
85              IF(GRANULAR_ENERGY) THEN
86     ! calculation of many of the solids phase transport coefficients
87     ! needed by the granular energy equation will be skipped in the
88     ! calc_mu_s if mu_s0 is defined. so make sure that the granular
89     ! energy eqn is not evaluated when the solids viscosity is set to
90     ! a constant.
91     ! Also do not allow a mixed case of constant viscosity and pde
92     ! granular energy. To permit such would require going through the
93     ! KT sections of the code and ensuring that the solids phase with
94     ! granular energy doesn't interact or depend on a phase with a
95     ! constant viscosity.
96                 WRITE(ERR_MSG,1100)
97                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
98              ENDIF
99     
100     ! needed by default solids-solids drag model
101              IF (SMAX >=2) THEN
102                 IF (C_E == UNDEFINED) THEN
103                    WRITE(ERR_MSG,1101)
104                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
105                 ELSEIF (C_F == UNDEFINED) THEN
106                    WRITE(ERR_MSG,1102)
107                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
108                 ENDIF
109              ENDIF
110           ENDIF
111     
112     
113     ! PDE granular energy. Check kinetic theory specifications.
114     !---------------------------------------------------------------------//
115           IF (GRANULAR_ENERGY) THEN
116              IF(def_mus0 >0) THEN
117                 WRITE(ERR_MSG,1100)
118                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
119              ENDIF
120              CALL CHECK_KT_TYPE
121           ENDIF
122     
123     ! Algebraic granular energy equation
124     !---------------------------------------------------------------------//
125           IF (.NOT.GRANULAR_ENERGY .AND. undef_mus0 > 0) THEN
126              IF (C_E == UNDEFINED) THEN
127                 WRITE(ERR_MSG,1101)
128                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
129              ENDIF
130     ! needed by default solids-solids drag model. SMAX may be 1 for
131     ! hybrid simulations and C_F is still needed.
132              IF (SMAX >=2 .OR. DEM_SOLIDS) THEN
133                 IF (C_F == UNDEFINED) THEN
134                    WRITE(ERR_MSG,1102)
135                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
136                 ENDIF
137              ENDIF
138           ENDIF
139      1100 FORMAT('Error 1100: Constant viscosity is specified but', /&
140              'GRANULAR_ENERGY=.TRUE. Please correct the mfix.dat file')
141      1101 FORMAT('Error 1101: Coefficient of restitution (C_E) not ',      &
142              'specified.',/'Please correct the mfix.dat file.')
143      1102 FORMAT('Error 1102: Coefficient of friction (C_F) not ',         &
144              'specified.',/'Please correct the mfix.dat file.')
145     
146     
147     
148     ! If frictional stress modeling check various dependent/conflicting
149     ! settings
150     
151     ! plastic/frictional stress model
152           IF (FRICTION) THEN
153              IF(SCHAEFFER) THEN
154                 WRITE(ERR_MSG, 1200)
155                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
156     ! Check that the granular energy PDE is solved.
157              ELSEIF (.NOT.GRANULAR_ENERGY) THEN
158                 WRITE(ERR_MSG,1201)
159                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
160     ! Check the value specified for SAVAGE.
161              ELSEIF(SAVAGE>2 .OR. SAVAGE<0) THEN
162                 WRITE(ERR_MSG, 1001)'SAVAGE', iVal(SAVAGE)
163                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
164     ! Verify that stress blending is not turned on.
165              ELSEIF(BLENDING_STRESS) THEN
166                 WRITE(ERR_MSG, 1202)
167                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
168              ELSEIF(PHI == UNDEFINED) THEN
169                 WRITE(ERR_MSG, 1203)
170                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
171     ! used by friction bc
172              ELSEIF(PHI_W == UNDEFINED) THEN
173                 WRITE(ERR_MSG, 1204)
174                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175              ENDIF
176     ! PHI & PHI_W are given in degrees but calculated in radian within
177     ! the fortran codes
178              SIN_PHI = SIN(PHI*PI/180.D0)
179              TAN_PHI_W = TAN(PHI_W*PI/180.D0)
180           ENDIF
181      1201 FORMAT('Error 1201: The FRICTION solids stress model requires ', &
182              /,'GRANULAR_ENERGY=.TRUE. Please correct the mfix.dat file.')
183      1202 FORMAT('Error 1202: Cannot use BLENDING_STRESS with FRICTION ',&
184              /,'Please correct the mfix.dat file.')
185      1204 FORMAT('Error 1204: Angle of particle-wall friction (PHI_W) not',&
186              ' specified.',/'Please correct the mfix.dat file.')
187     
188     
189     ! plastic/frictional stress model
190           IF(SCHAEFFER) THEN
191              IF(FRICTION) THEN
192                 WRITE(ERR_MSG, 1200)
193                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
194              ELSEIF (PHI == UNDEFINED) THEN
195                 WRITE(ERR_MSG, 1203)
196                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
197              ENDIF
198     ! PHI is given in degrees but calculated in radian within
199     ! the fortran codes
200              lsin_phi = sin(phi*PI/180.d0)
201              SIN2_PHI = lSIN_PHI*lSIN_PHI
202              F_PHI = (3.0D0 - 2.0D0*SIN2_PHI)/3.0D0    ! employed in commented
203           ENDIF
204      1200 FORMAT('Error 1200: FRICTION and SCHAEFFER models cannot be ',&
205              'used',/'together. Please correct the mfix.dat file')
206      1203 FORMAT('Error 1203: Angle of internal friction (PHI) not ',      &
207              'specified.',/'Please correct the mfix.dat file.')
208     
209     
210           IF(YU_STANDISH .AND. FEDORS_LANDEL) THEN
211              WRITE(ERR_MSG, 1300)
212              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
213           ELSEIF(YU_STANDISH) THEN
214     ! Yu_Standish correlation checks
215              IF(SMAX < 2) THEN
216                 WRITE(ERR_MSG, 1301)
217                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
218              ENDIF
219           ELSEIF(FEDORS_LANDEL) THEN
220     ! Fedors_Landel correlation checks.
221              IF(SMAX /= 2) THEN
222                 WRITE(ERR_MSG, 1302)
223                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
224              ENDIF
225           ENDIF
226      1300 FORMAT('Error 1300: FEDORS_LANDEL and YU_STANDISH correlations ',&
227              'cannot be',/'used at the same time. Please correct the ',    &
228              'mfix.dat file.')
229      1301 FORMAT('Error 1301: YU_STANDISH correlation is for polydisperse',&
230              ' mixtures',/'(MMAX >= 2). Please correct the mfix.dat file.')
231      1302 FORMAT('Error 1302: FEDORS_LANDEL correlation is for binary ',   &
232              'mixtures (MMAX=2).',/'Please correct the mfix.dat file.')
233     
234     
235     ! Set the flags for blending stresses.
236           IF(BLENDING_STRESS) THEN
237     ! Turn off the default if SIGM_BLEND is set.
238              IF(SIGM_BLEND)  TANH_BLEND = .FALSE.
239           ELSE
240              TANH_BLEND  = .FALSE.
241              SIGM_BLEND  = .FALSE.
242           ENDIF
243     
244     
245           IF(MODEL_B) THEN
246              DO LC = 1, MMAX
247                 IF(.NOT.CLOSE_PACKED(LC)) THEN
248                    WRITE(ERR_MSG, 1400) LC
249                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
250                 ENDIF
251              ENDDO
252           ENDIF
253      1400 FORMAT('Error 1400: Solids phase ',I2,' is not CLOSE_PACKED.',/, &
254              'All solids phases must be CLOSE_PACKED with MODEL_B=.TURE.',/ &
255              'Please correct the mfix.dat file.')
256     
257     
258     ! Check that phase number where added mass applies is properly defined.
259           IF (ADDED_MASS) THEN
260              IF(M_AM == UNDEFINED_I)THEN
261                 WRITE(ERR_MSG, 1500)
262                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
263              ELSEIF(M_AM == 0 .OR. M_AM > MMAX) THEN
264                 WRITE(ERR_MSG,1501)
265                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
266      1500 FORMAT('Error 1500: Must specify a disperse phase, M_AM, where ',&
267              'the',/'virtual mass applies (ADDED_MASS).',/'Please correct',&
268              ' the mfix.dat file.')
269      1501 FORMAT('Error 1501: M_AM is out of range. [1,MMAX]',/'Please ',  &
270              'correct the mfix.dat file.')
271              ENDIF
272           ENDIF
273     
274     
275     ! Check name of radial distribution function
276           SELECT CASE(trim(adjustl(RDF_TYPE)))
277     
278           CASE ('LEBOWITZ')
279              RDF_TYPE_ENUM = LEBOWITZ
280     
281           CASE ('MODIFIED_LEBOWITZ')
282              RDF_TYPE_ENUM = MODIFIED_LEBOWITZ
283     
284           CASE ('MANSOORI')
285              RDF_TYPE_ENUM = MANSOORI
286     
287           CASE ('MODIFIED_MANSOORI')
288              RDF_TYPE_ENUM = MODIFIED_MANSOORI
289     
290           CASE DEFAULT
291                 WRITE(ERR_MSG, 1600)
292                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
293            END SELECT
294     
295      1600 FORMAT('Error 1600: Unknown RDF_TYPE',/'Please ',  &
296              'correct the mfix.dat file.')
297     
298     ! If the default (LEBOWITZ) is not set for a monodisperse case, then
299     ! flag the error and exit. Otherwise, change it to CARNAHAN-STARLING.
300           IF(MMAX == 1) THEN
301              IF(RDF_TYPE_ENUM /= LEBOWITZ) THEN
302                 WRITE(ERR_MSG, 1601) trim(adjustl(RDF_TYPE))
303                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
304     
305      1601 FORMAT('Error 1601: The RDF_TYPE should NOT be specified when ',&
306              'MMAX = 1',/'because Carnahan-Starling is the only available',&
307              ' radial distribution',/'function for monodisperse systems. ',&
308              'Please correct the mfix.dat file.')
309     
310              ELSE
311                 RDF_TYPE_ENUM = CARNAHAN_STARLING
312              ENDIF
313           ENDIF
314     
315      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
316                 'correct the mfix.dat file.')
317      1001 FORMAT('Error 1001: Illegal or unphysical input: ',A,' = ',A,/   &
318              'Please correct the mfix.dat file.')
319      1002 FORMAT('Error 1002: Illegal input: ',A,' specified out of ',&
320              'range.', /,'Please correct the mfix.dat file.')
321     
322     
323           CALL FINL_ERR_MSG
324     
325     
326           RETURN
327           END SUBROUTINE CHECK_SOLIDS_CONTINUUM
328     
329     
330     
331     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
332     !                                                                      !
333     !  Subroutine: CHECK_KT_TYPE                                           !
334     !  Purpose: Check kinetic theory input specifications. These checks    !
335     !  are almost all related to the KT_TYPE keyword.                      !
336     !  Notes: To enter this routine granular_energy must be true           !
337     !                                                                      !
338     !  Author: J.Musser                                   Date: 04-FEB-14  !
339     !                                                                      !
340     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
341           SUBROUTINE CHECK_KT_TYPE
342     
343     
344     ! Global Variables:
345     !---------------------------------------------------------------------//
346           USE constant
347           USE run
348           USE physprop
349     
350     ! Global Parameters:
351     !---------------------------------------------------------------------//
352           USE param1, only: half, one, undefined
353     
354     ! Global Module procedures:
355     !---------------------------------------------------------------------//
356           use error_manager
357     
358           IMPLICIT NONE
359     
360     ! Local Variables:
361     !---------------------------------------------------------------------//
362     ! loop counters
363           INTEGER :: I, J
364     
365     !......................................................................!
366     
367     
368     ! Initialize the error manager.
369           CALL INIT_ERR_MSG("CHECK_KT_TYPE")
370     
371     ! These are some checks to satisfy legacy input:
372           IF (AHMADI .AND. SIMONIN) THEN
373              WRITE(ERR_MSG, 9001)
374              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
375           ELSEIF(AHMADI) THEN
376              IF(KT_TYPE(1:6) /= 'AHMADI' .AND.                        &
377                 KT_TYPE(1:8) /= 'LUN_1984')THEN
378                 WRITE(ERR_MSG,9002)trim(KT_TYPE)
379                 CALL FLUSH_ERR_MSG(ABORT = .TRUE.)
380              ELSE
381                 KT_TYPE='AHMADI'
382              ENDIF
383           ELSEIF(SIMONIN) THEN
384              IF(KT_TYPE(1:7) /= 'SIMONIN' .AND.                       &
385                 KT_TYPE(1:8) /= 'LUN_1984')THEN
386                 WRITE(ERR_MSG,9003)trim(KT_TYPE)
387                 CALL FLUSH_ERR_MSG(ABORT = .TRUE.)
388              ELSE
389                 KT_TYPE='SIMONIN'
390              ENDIF
391           ENDIF
392      9001 FORMAT('Error 9001: Cannot specify AHMADI and SIMONIN together.',&
393              /'Please correct the mfix.dat file.')
394      9002 FORMAT('Error 9002: Cannot specify AHMADI and KT_TYPE = ',A,'.', &
395              /'Please correct the mfix.dat file.')
396      9003 FORMAT('Error 9003: Cannot specify SIMONIN and KT_TYPE = ',A,'.',&
397              /'Please correct the mfix.dat file.')
398     
399     
400     
401     ! Check for valid options for kinetic theory models (KT_TYPE)
402           SELECT CASE(trim(adjustl(KT_TYPE)))
403     
404     !``````````````````````````````````````````````````````````````````````
405           CASE ('IA_NONEP')
406              KT_TYPE_ENUM = IA_2005
407              IF (C_E == UNDEFINED) THEN
408                 WRITE(ERR_MSG,1003)
409                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
410              ENDIF
411     
412     
413     !``````````````````````````````````````````````````````````````````````
414           CASE ('GD_99')
415              KT_TYPE_ENUM = GD_1999
416              IF (C_E == UNDEFINED) THEN
417                 WRITE(ERR_MSG,1003)
418                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
419              ELSEIF(SMAX > 1) THEN
420                 WRITE(ERR_MSG,1002) TRIM(KT_TYPE)
421                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
422              ENDIF
423     
424     
425     !``````````````````````````````````````````````````````````````````````
426           CASE ('GTSH')
427              KT_TYPE_ENUM = GTSH_2012
428              IF (C_E == UNDEFINED) THEN
429                 WRITE(ERR_MSG,1002)
430                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
431              ELSEIF(SMAX > 1) THEN
432                 WRITE(ERR_MSG,1002) TRIM(KT_TYPE)
433                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
434              ENDIF
435     
436     
437     !``````````````````````````````````````````````````````````````````````
438           CASE ('GHD')
439              KT_TYPE_ENUM = GHD_2007
440     ! This variable is only used for GHD at this point...
441     ! Define restitution coefficient matrix
442              DO I = 1, SMAX
443                 DO J = 1, SMAX
444                    IF(r_p(I,J) == UNDEFINED) THEN
445                       IF(C_E == UNDEFINED) THEN
446                          WRITE(ERR_MSG,1003)
447                          CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
448                       ELSE
449                          r_p(I,J) = C_e
450                       ENDIF
451                    ENDIF
452     ! just need to define r_p(1,2) and r_p(2,1) will be set.
453                    r_p(J,I) = r_p(I,J)
454                 ENDDO
455              ENDDO
456     
457              IF(DRAG_TYPE_ENUM /= WEN_YU .AND. DRAG_TYPE_ENUM /= HYS) THEN
458                 WRITE(ERR_MSG, 1030)
459                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
460              ELSEIF(ADDED_MASS) THEN
461                 WRITE(ERR_MSG,1031)
462                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
463              ELSEIF(SMAX > 2) THEN  ! not sure this is still true!
464                 WRITE(ERR_MSG, 1032)
465                 CALL FLUSH_ERR_MSG
466              ENDIF
467     
468     ! Automatically set SPECIES_EQ(MMAX) = .FALSE. to avoid potential
469     ! checks/loops over the mmax species type eqn which has no meaning
470              SPECIES_EQ(MMAX) = .FALSE.
471              NMAX_s(MMAX) = 1
472     
473     ! currently set to avoid an overflow error in write_res0
474     ! legacy variable?
475              NMAX(MMAX) = 1
476     
477      1030 FORMAT('Error 1030: KT_TYPE = "GHD" is restricted to DRAG_TYPE', &
478              'values of WEN_YU and HYS.',/'Please correct the mfix.dat ',  &
479              'file.')
480      1031 FORMAT('Error 1031: ADDED_MASS force cannot be applied with ',   &
481              'GHD theory that',/'solves for mixture equations.',/'Please', &
482              'correct the mifx.dat file.')
483      1032 FORMAT('Warning 1032: GHD theory may not be valid for more ',    &
484              'than two solids phases',/'it requires further development.')
485     
486     
487     !``````````````````````````````````````````````````````````````````````
488           CASE ('AHMADI')
489              KT_TYPE_ENUM = AHMADI_1995
490              AHMADI = .TRUE.
491              IF(.NOT.K_EPSILON) THEN
492                 WRITE(ERR_MSG,1040) 'K_EPSILON = .TRUE.'
493                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
494              ELSEIF (C_E == UNDEFINED) THEN
495                 WRITE(ERR_MSG,1003)
496                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
497              ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
498                 WRITE(ERR_MSG, 1004)
499                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
500              ENDIF
501      1040 FORMAT('Error 1040: KT_TYPE = "AHMADI" requires ',A,/       &
502              'Please correct the mfix.dat file.')
503     
504     
505     !``````````````````````````````````````````````````````````````````````
506           CASE ('SIMONIN')
507              KT_TYPE_ENUM = SIMONIN_1996
508              SIMONIN = .TRUE.
509              IF(.NOT.K_EPSILON) THEN
510                 WRITE(ERR_MSG,1050) 'K_EPSILON = .TRUE.'
511                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
512              ELSEIF (C_E == UNDEFINED) THEN
513                 WRITE(ERR_MSG,1003)
514                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
515              ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
516                 WRITE(ERR_MSG, 1004)
517                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
518              ENDIF
519      1050 FORMAT('Error 1050: KT_TYPE = "SIMONIN" requires ',A,/      &
520              'Please correct the mfix.dat file.')
521     
522     
523     ! Lun is the default implementation.
524     !``````````````````````````````````````````````````````````````````````
525           CASE ('LUN_1984')
526              KT_TYPE_ENUM = LUN_1984
527     ! this version of the restitution coefficient is needed by most KT_TYPE
528     ! models. it is also needed in default solids-solids drag model
529              IF (C_E == UNDEFINED) THEN
530                 WRITE(ERR_MSG,1003)
531                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
532              ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
533                 WRITE(ERR_MSG, 1004)
534                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
535              ENDIF
536     
537     
538           CASE DEFAULT
539              WRITE(ERR_MSG,1001) trim(adjustl(KT_TYPE))
540              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
541      1001 FORMAT('Error 1001: Invalid or unknown KT_TYPE: ',A,/            &
542              'Please correct the mfix.dat file.')
543     
544           END SELECT
545     
546     ! eventually this should be made specific to lun/ahmadi/simonin
547     ! but because calc_gw_hw_cw in calc_u_friction is not consistent
548     ! it currently must be defined for all kt_types whenever friction
549     ! is invoked...
550           ETA = (ONE + C_E)*HALF
551     
552     
553      1002 FORMAT('Error 1002: KT_TYPE = ',A,' is for monodisperse',&
554              ' solids',/'(MMAX = 1). Please correct the mfix.dat file.')
555     
556      1003 FORMAT('Error 1003: Coefficient of restitution (C_E) not ',      &
557              'specified.',/'Please correct the mfix.dat file.')
558     
559      1004 FORMAT('Error 1004: Coefficient of friction (C_F) not ',         &
560              'specified.',/'Please correct the mfix.dat file.')
561     
562     
563           RETURN
564           END SUBROUTINE CHECK_KT_TYPE
565