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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     ! Subroutine: CHECK_BC_WALLS                                           !
4     ! Author: J.Musser                                    Date: 01-Mar-14  !
5     !                                                                      !
6     ! Purpose: Driver routine to call checks for WALL BCs.                 !
7     !                                                                      !
8     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
9           SUBROUTINE CHECK_BC_WALLS(M_TOT, SKIP, BCV)
10     
11     
12     ! Global Variables:
13     !---------------------------------------------------------------------//
14     ! Flag: Identifies solids model (TFM,DEM,PIC)
15           use run, only: SOLIDS_MODEL
16     ! Flag: Solve granular energy PDE
17           use run, only: GRANULAR_ENERGY
18     ! Flag: Use Jenkins small small frication BC
19           use run, only: JENKINS
20     ! Flag: Use revised phihp for JJ BC.
21           use bc, only: BC_JJ_PS
22     ! User-input: solids kinetic-theory model.
23           use run, only: KT_TYPE_ENUM, GHD_2007
24     
25     ! Global Parameters:
26     !---------------------------------------------------------------------//
27     ! Maximum number of solids phases
28           use param, only: DIM_M
29     ! Parameter constant.
30           use param1, only: UNDEFINED_I
31     
32     ! Use the error manager for posting error messages.
33     !---------------------------------------------------------------------//
34           use error_manager
35     
36           IMPLICIT NONE
37     
38     ! Dummy Arguments.
39     !---------------------------------------------------------------------//
40     ! Index of BC being checked.
41           INTEGER, INTENT(in) :: BCV
42     ! Total number of solids phases.
43           INTEGER, INTENT(in) :: M_TOT
44     ! Flag. Solids not present at this BC (used for flow BCs).
45           LOGICAL, INTENT(in) :: SKIP(DIM_M)
46     
47     ! Local Variables:
48     !---------------------------------------------------------------------//
49     ! Loop/counter variable.
50           INTEGER :: M
51     ! Local total number of solids phases
52           INTEGER :: MTOT_L
53     !......................................................................!
54     
55     
56     ! Initialize the error manager.
57           CALL INIT_ERR_MSG("CHECK_BC_WALLS")
58     
59     ! Input checks for gas phase.
60           CALL CHECK_BC_WALLS_GAS(BCV)
61     
62           MTOT_L = merge( M_TOT+1, M_TOT, KT_TYPE_ENUM == GHD_2007)
63     
64     ! Input checks for solid phases.
65           DO M=1, MTOT_L
66              SELECT CASE(SOLIDS_MODEL(M))
67              CASE ('TFM'); CALL CHECK_BC_WALLS_TFM(BCV, M)
68              CASE ('DEM'); CALL CHECK_BC_WALLS_DISCRETE(BCV, M)
69              CASE ('PIC'); CALL CHECK_BC_WALLS_DISCRETE(BCV, M)
70              END SELECT
71           ENDDO
72     
73     ! Input checks for user-defined scalar equations.
74           CALL CHECK_BC_WALLS_SCALAR_EQ(BCV)
75     
76           CALL FINL_ERR_MSG
77     
78           RETURN
79           END SUBROUTINE CHECK_BC_WALLS
80     
81     
82     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
83     !                                                                      !
84     ! Subroutine: CHECK_BC_WALLS_GAS                                       !
85     ! Author: J.Musser                                    Date: 01-Mar-14  !
86     !                                                                      !
87     ! Purpose: Check user-input for gas phase WALL BC parameters.          !
88     !                                                                      !
89     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
90           SUBROUTINE CHECK_BC_WALLS_GAS(BCV)
91     
92     ! Global Variables:
93     !---------------------------------------------------------------------//
94     ! User-input: type of BC
95           use bc, only: BC_TYPE
96     ! User-Input: gas velocity at wall BCs.
97           use bc, only: BC_UW_G, BC_VW_G, BC_WW_G
98     ! User-Input: gas energy eq BCs.
99           use bc, only: BC_HW_T_G, BC_TW_G, BC_C_T_G
100     ! User-Input: gas species eq BCs.
101           use bc, only: BC_HW_X_G, BC_XW_G, BC_C_X_G
102     ! Total number of speices in each phase.
103           use physprop, only: NMAX
104     ! Flag: Solve energy equations.
105           use run, only: ENERGY_EQ
106     ! Flag: Solve species equations.
107           use run, only: SPECIES_EQ
108     ! Flag: Solve K-th direction (3D)
109           use geometry, only: DO_K
110     
111     ! Global Parameters:
112     !---------------------------------------------------------------------//
113     ! Parameter constants.
114           use param1, only: ZERO, UNDEFINED
115     
116     ! Use the error manager for posting error messages.
117     !---------------------------------------------------------------------//
118           use error_manager
119     
120           IMPLICIT NONE
121     
122     ! Dummy Arguments.
123     !---------------------------------------------------------------------//
124           INTEGER, INTENT(in) :: BCV
125     
126           INTEGER :: N
127     !......................................................................!
128     
129     
130     ! Initialize the error manger.
131           CALL INIT_ERR_MSG("CHECK_BC_WALLS_GAS")
132     
133     ! The wall velocities are not needed for no-slip or free-slip
134           IF(BC_TYPE(BCV) == 'PAR_SLIP_WALL') THEN
135              IF(BC_UW_G(BCV) == UNDEFINED) THEN
136                 WRITE(ERR_MSG,1000) trim(iVar('BC_Uw_g',BCV))
137                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
138              ELSEIF(BC_VW_G(BCV) == UNDEFINED) THEN
139                 WRITE(ERR_MSG,1000) trim(iVar('BC_Vw_g',BCV))
140                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
141              ELSEIF(BC_WW_G(BCV) == UNDEFINED) THEN
142                 IF(DO_K)THEN
143                    WRITE(ERR_MSG,1000) trim(iVar('BC_Ww_g',BCV))
144                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
145                 ELSE
146                    BC_WW_G(BCV) = ZERO
147                 ENDIF
148              ENDIF
149           ENDIF
150     
151     ! Check energy equation input.
152           IF(ENERGY_EQ) THEN
153              IF(BC_HW_T_G(BCV) < ZERO) THEN
154                 WRITE(ERR_MSG,1001) trim(iVar('BC_HW_T_g',BCV)),           &
155                    trim(iVal(BC_HW_T_G(BCV)))
156                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157              ENDIF
158              IF(BC_HW_T_G(BCV)/=ZERO .AND.                                 &
159                 BC_TW_G(BCV)==UNDEFINED) THEN
160                 WRITE(ERR_MSG,1000) trim(iVar('BC_Tw_g',BCV))
161                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
162              ENDIF
163              IF(BC_HW_T_G(BCV)/=UNDEFINED .AND.                            &
164                 BC_C_T_G(BCV)==UNDEFINED) THEN
165                 WRITE(ERR_MSG,1000) trim(iVar('BC_C_T_g',BCV))
166                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
167              ENDIF
168           ENDIF
169     
170     
171     ! Check species equation input.
172           IF(SPECIES_EQ(0)) THEN
173              DO N=1, NMAX(0)
174                 IF(BC_HW_X_G(BCV,N) < ZERO) THEN
175                    WRITE(ERR_MSG,1001) trim(iVar('BC_HW_X_g',BCV,N)),      &
176                       trim(iVal(BC_HW_X_G(BCV,N)))
177                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
178                 ENDIF
179                 IF(BC_HW_X_G(BCV,N)/=ZERO .AND.                            &
180                    BC_XW_G(BCV,N)==UNDEFINED) THEN
181                    WRITE(ERR_MSG,1000) trim(iVar('BC_Xw_g',BCV,N))
182                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
183                 ENDIF
184                 IF(BC_HW_X_G(BCV,N)/=UNDEFINED .AND.                       &
185                    BC_C_X_G(BCV,N)==UNDEFINED) THEN
186                    WRITE(ERR_MSG,1000) trim(iVar('BC_C_X_g',BCV,N))
187                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
188                 ENDIF
189              ENDDO
190           ENDIF
191     
192     
193     ! Clear the error manager.
194           CALL FINL_ERR_MSG
195     
196           RETURN
197     
198      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
199                 'correct the mfix.dat file.')
200     
201      1001 FORMAT('Error 1001: Illegal or unphysical input: ',A,' = ',A,/   &
202              'Please correct the mfix.dat file.')
203     
204           END SUBROUTINE CHECK_BC_WALLS_GAS
205     
206     
207     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
208     !                                                                      !
209     ! Subroutine: CHECK_BC_WALLS_TFM                                       !
210     ! Author: J.Musser                                    Date: 01-Mar-14  !
211     !                                                                      !
212     ! Purpose: Check user-input for TFM solids WALL BC parameters.         !
213     !                                                                      !
214     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
215           SUBROUTINE CHECK_BC_WALLS_TFM(BCV,M)
216     
217     
218     ! Global Variables:
219     !---------------------------------------------------------------------//
220     ! User-input: type of BC
221           use bc, only: BC_TYPE
222     ! User-Input: solids velocity at wall BCs.
223           use bc, only: BC_UW_s, BC_VW_s, BC_WW_s
224     ! User-Input: solids energy eq BCs.
225           use bc, only: BC_HW_T_s, BC_TW_s, BC_C_T_s
226     ! User-Input: solids species eq BCs.
227           use bc, only: BC_HW_X_s, BC_XW_s, BC_C_X_s
228     ! User-Input: granular energy eq BCs.
229           use bc, only: BC_HW_THETA_M, BC_ThetaW_M, BC_C_Theta_M
230     ! Total number of solids phases
231           use physprop, only: MMAX
232     ! Total number of speices in each phase.
233           use physprop, only: NMAX
234     ! Flag: Solve energy equations.
235           use run, only: ENERGY_EQ
236     ! Flag: Solve species equations.
237           use run, only: SPECIES_EQ
238     ! Flag: Solve Granular energy PDE
239           use run, only: GRANULAR_ENERGY
240     ! User-input: solids kinetic-theory model.
241           use run, only: KT_TYPE_ENUM, GHD_2007
242     ! Flag: Use johnson and jackson bc
243           use bc, only: BC_JJ_PS
244     ! Flag: use revised phip for JJ BC.
245           use run, only: bc_jj_m, phip_out_jj
246     ! Flag: use jenkins small friction bc
247           use run, only: jenkins
248     ! User input: particle wall restitution coefficient and
249     ! angle of internal friction at walls (degrees)
250           use constant, only: e_w, phi_w
251     ! Used by jenkins or revised phip bcs
252           use constant, only: tan_phi_w
253     ! Used by revised phip for jj bc
254           use constant, only: k4phi, phip0
255     ! User-Input: number of reactionrates
256     !      use rxns, only: nrr
257     ! Flag: Solve K-th direction (3D)
258           use geometry, only: DO_K
259     ! Flag: use cartesian grid
260           use cutcell, only: cartesian_grid
261     
262     ! Global Parameters:
263     !---------------------------------------------------------------------//
264     ! Parameter constants.
265           use param1, only: ONE, ZERO, UNDEFINED, UNDEFINED_I
266     ! parameter values
267           use constant, only: pi
268     
269           use rxns
270     ! Use the error manager for posting error messages.
271     !---------------------------------------------------------------------//
272           use error_manager
273           use funits, only: unit_log
274           IMPLICIT NONE
275     
276     ! Dummy Arguments.
277     !---------------------------------------------------------------------//
278     ! Index of BC being checked.
279           INTEGER, INTENT(in) :: BCV
280     ! Index of solids phase.
281           INTEGER, INTENT(in) :: M
282     
283     ! Local Variables:
284     !---------------------------------------------------------------------//
285     ! Loop/variable counter.
286           INTEGER :: N
287     ! Flag to check momentum eq input.
288           LOGICAL :: CHECK_MOMENTUM
289     ! Flag to check scalar eq input.
290           LOGICAL :: CHECK_SCALARS
291     !......................................................................!
292     
293     
294     ! Initialize the error manager.
295           CALL INIT_ERR_MSG("CHECK_BC_WALLS_TFM")
296     
297     ! Toggle the momentum and scalar input variable checks.
298           SELECT CASE(KT_TYPE_ENUM)
299           CASE (GHD_2007)
300              CHECK_MOMENTUM = (M == MMAX)
301              CHECK_SCALARS  = (M /= MMAX)
302           CASE DEFAULT
303              CHECK_MOMENTUM = .TRUE.
304              CHECK_SCALARS  = .TRUE.
305           END SELECT
306     
307     ! Set the default specification of Johnson-Jackson BC
308           IF(BC_JJ_PS(BCV) == UNDEFINED_I)                                 &
309              BC_JJ_PS(BCV) = merge(1,0,GRANULAR_ENERGY)
310     
311     ! specifying bc_jj_ps=1 without granular_energy would cause problem in
312     ! the momentum bc routines
313           IF(.NOT.GRANULAR_ENERGY .AND. BC_JJ_PS(BCV) == 1) THEN
314              WRITE(ERR_MSG, 1101)
315              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
316           ENDIF
317      1101 FORMAT('Error 1101: Invoking BC_JJ_PS requires GRANULAR_ENERGY', &
318              '=.TRUE.',/ 'Please correct the mfix.dat file.')
319     
320     ! The wall velocities are not needed for no-slip or free-slip
321     ! Wall velocities are needed if johnson-jackson bc model is used
322           IF(CHECK_MOMENTUM) THEN
323              IF(BC_TYPE(BCV) == 'PAR_SLIP_WALL' .OR. &
324                 BC_JJ_PS(BCV) /= ZERO) THEN
325                 IF(BC_UW_S(BCV,M) == UNDEFINED) THEN
326                    WRITE(ERR_MSG,1000) trim(iVar('BC_Uw_s',BCV,M))
327                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
328                 ELSEIF(BC_VW_S(BCV,M) == UNDEFINED) THEN
329                    WRITE(ERR_MSG,1000) trim(iVar('BC_Vw_s',BCV,M))
330                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
331                 ELSEIF(BC_WW_S(BCV,M) == UNDEFINED) THEN
332                    IF(DO_K)THEN
333                       WRITE(ERR_MSG,1000) trim(iVar('BC_Ww_s',BCV,M))
334                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
335                    ELSE
336                       BC_WW_S(BCV,M) = ZERO
337                    ENDIF
338                 ENDIF
339              ENDIF
340     
341              IF(GRANULAR_ENERGY .AND. BC_JJ_PS(BCV)==0) THEN
342                 IF(BC_HW_THETA_M(BCV,M) < ZERO) THEN
343                    WRITE(ERR_MSG,1001) trim(iVar('BC_HW_Theta_M',BCV,M)),  &
344                       trim(iVal(BC_HW_Theta_M(BCV,M)))
345                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
346                 ENDIF
347                 IF(BC_HW_THETA_M(BCV,M)/=ZERO .AND.                        &
348                    BC_THETAW_M(BCV,M)==UNDEFINED) THEN
349                    WRITE(ERR_MSG,1000) trim(iVar('BC_ThetaW_M',BCV,M))
350                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
351                 ENDIF
352                 IF(BC_HW_THETA_M(BCV,M)/=UNDEFINED .AND.                   &
353                    BC_C_THETA_M(BCV,M)==UNDEFINED) THEN
354                    WRITE(ERR_MSG,1000) trim(iVar('BC_C_THETA_M',BCV,M))
355                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
356                 ENDIF
357              ENDIF
358           ELSE
359           ENDIF
360     
361           IF(CHECK_SCALARS)THEN
362              IF(ENERGY_EQ) THEN
363                 IF(BC_HW_T_S(BCV,M) < ZERO) THEN
364                    WRITE(ERR_MSG,1001) trim(iVar('BC_HW_T_s',BCV,M)),      &
365                       trim(iVal(BC_HW_T_S(BCV,M)))
366                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
367                 ENDIF
368                 IF(BC_HW_T_S(BCV,M)/=ZERO .AND.                            &
369                    BC_TW_S(BCV,M)==UNDEFINED) THEN
370                    WRITE(ERR_MSG,1000) trim(iVar('BC_Tw_s',BCV,M))
371                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
372                 ENDIF
373                 IF(BC_HW_T_S(BCV,M)/=UNDEFINED .AND.                       &
374                    BC_C_T_S(BCV,M)==UNDEFINED) THEN
375                    WRITE(ERR_MSG,1000) trim(iVar('BC_C_T_s',BCV,M))
376                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
377                 ENDIF
378              ENDIF
379     
380              IF(SPECIES_EQ(M)) THEN
381                 DO N=1, NMAX(M)
382                    IF(BC_HW_X_S(BCV,M,N) < ZERO) THEN
383                       WRITE(ERR_MSG,1001) trim(iVar('BC_HW_X_s',BCV,M,N)), &
384                          trim(iVal(BC_HW_X_S(BCV,M,N)))
385                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
386                    ENDIF
387                    IF(BC_HW_X_S(BCV,M,N)/=ZERO .AND.                       &
388                       BC_XW_S(BCV,M,N)==UNDEFINED) THEN
389                       WRITE(ERR_MSG,1000) trim(iVar('BC_Xw_s',BCV,M,N))
390                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
391                    ENDIF
392                    IF(BC_HW_X_S(BCV,M,N)/=UNDEFINED .AND.                  &
393                       BC_C_X_S(BCV,M,N)==UNDEFINED) THEN
394                       WRITE(ERR_MSG,1000) trim(iVar('BC_C_X_s',BCV,M,N))
395                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
396                    ENDIF
397                 ENDDO
398              ENDIF ! Species Equation
399           ELSE
400           ENDIF ! Check Scalars
401     
402     
403     ! might make sense to move these checks out of this routine
404     ! but placed here for now
405           IF(GRANULAR_ENERGY .AND. BC_JJ_PS(BCV) == 1) THEN
406     
407              IF(KT_TYPE_ENUM == GHD_2007) THEN
408                 WRITE(ERR_MSG, 1201)
409                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
410              ENDIF
411     
412              IF(CARTESIAN_GRID) THEN
413     ! the user should really be warned this is not implemented as
414     ! opposed to running with it
415                 WRITE(ERR_MSG, 1202)
416                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
417              ENDIF
418     
419     ! small frictional boundary condition model
420              IF(JENKINS) THEN
421                 IF (BC_JJ_M) THEN
422                    WRITE(ERR_MSG, 1203)
423                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
424                 ELSEIF (PHI_W == UNDEFINED) THEN
425                    WRITE(ERR_MSG, 1204)
426                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
427                 ELSEIF (E_W > ONE .OR. E_W < ZERO) THEN
428                    WRITE(ERR_MSG, 1001) 'E_W', E_W
429                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
430                 ENDIF
431     ! PHI_W is given in degrees but calculated in radian within
432     ! the fortran codes
433                 TAN_PHI_W = TAN(PHI_W*PI/180.D0)
434              ENDIF
435     
436     ! k4phi, phip0 for variable specularity coefficient
437              k4phi = undefined
438              IF(BC_JJ_M) THEN
439                 IF (JENKINS) THEN
440                    WRITE(ERR_MSG, 1203)
441                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
442                 ELSEIF (PHI_W == UNDEFINED) THEN
443                    WRITE(ERR_MSG, 1204)
444                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
445                 ELSEIF (E_W > ONE .OR. E_W < ZERO) THEN
446                    WRITE(ERR_MSG, 1001) 'E_W', E_W
447                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
448                 ENDIF
449     ! PHI_W is given in degrees but calculated in radian within
450     ! the fortran codes
451                 TAN_PHI_W = TAN(PHI_W*PI/180.D0)
452     
453                 k4phi = 7.d0/2.d0*tan_phi_w*(1.d0+e_w)
454                 IF (phip0 .eq. UNDEFINED) THEN
455                    phip0 = -0.0012596340709032689 + &
456                             0.10645510095633175*k4phi - &
457                             0.04281476447854031*k4phi**2 + &
458                             0.009759402181229842*k4phi**3 - &
459                             0.0012508257938705263*k4phi**4 + &
460                             0.00008369829630479206*k4phi**5 - &
461                             0.000002269550565981776*k4phi**6
462     ! if k4phi is less than 0.2, the analytical expression for phi is used
463     ! to estimate the phi at r->0
464                    IF (k4phi .le. 0.2d0) THEN
465                       phip0=0.09094568176225006*k4phi
466                    ENDIF
467                    WRITE (UNIT_LOG, 1207) phip0
468                 ENDIF
469                 IF (phip0 < 0) THEN
470                    WRITE(ERR_MSG, 1208)
471                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
472                 ENDIF
473     
474                 IF (PHIP_OUT_JJ) THEN
475                    IF(nRR < 1) THEN
476                       WRITE(ERR_MSG, 1209)
477                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
478                    ENDIF
479                    WRITE (UNIT_LOG, 1210) phip0
480                 ENDIF
481              ENDIF
482           ENDIF   ! if granular_energy and bc_jj_ps = 1
483     
484     
485           CALL FINL_ERR_MSG
486     
487           RETURN
488     
489      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
490                 'correct the mfix.dat file.')
491     
492      1001 FORMAT('Error 1001: Illegal or unphysical input: ',A,' = ',A,/   &
493              'Please correct the mfix.dat file.')
494     
495      1201 FORMAT('Error 1201: KT_TYPE = "GHD" cannot be used with ',&
496              ' BC_JJ_PS',/'Please correct the mfix.dat file.')
497     
498      1202 FORMAT('Error 1202: CARTESIAN_GRID cannot be used with ',&
499              ' BC_JJ_PS',/'Please correct the mfix.dat file.')
500     
501      1203 FORMAT('Error 1203: JENKINS and BC_JJ_M cannot be used at the',&
502              ' same time',/'Please correct the mfix.dat file.')
503      1204 FORMAT('Error 1204: Angle of particle-wall friction (PHI_W) not',&
504              ' specified.',/'Please correct the mfix.dat file.')
505     
506      1208 FORMAT('Error 1208: phip0 less than zero.')
507      1209 FORMAT('Error 1209: nRR should be at least 1 for storing ',&
508                  'specularity.')
509     
510      1207 FORMAT(/1X,70('*')//' From: CHECK_BC_WALLS_TFM',/' Message: ',&
511              'No input for phip0 available, working expression is used.',/ &
512              'phip0=',G12.5,/1X,70('*')/)
513      1210 FORMAT(/1X,70('*')//' From: CHECK_BC_WALLS_TFM',/' Message: ',&
514              'Specularity will be stored as the first element of ', &
515              'ReactionRates',/1X,'array in WALL CELLS. Please avoid ', &
516              'overwriting it when reacting flow',/1X,' is simulated.', &
517              /1X,70('*')/)
518     
519           END SUBROUTINE CHECK_BC_WALLS_TFM
520     
521     
522     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
523     !                                                                      !
524     ! Subroutine: CHECK_BC_WALLS_DISCRETE                                  !
525     ! Author: J.Musser                                    Date: 01-Mar-14  !
526     !                                                                      !
527     ! Purpose: Check user-input for DEM/PIC solids WALL BC parameters.     !
528     !                                                                      !
529     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
530           SUBROUTINE CHECK_BC_WALLS_DISCRETE(BCV,M)
531     
532     
533     ! Global Variables:
534     !---------------------------------------------------------------------//
535     ! User-input: type of BC
536           use bc, only: BC_TYPE
537     ! User-Input: solids velocity at wall BCs.
538           use bc, only: BC_UW_s, BC_VW_s, BC_WW_s
539     ! User-Input: solids energy eq BCs.
540           use bc, only: BC_HW_T_s, BC_TW_s, BC_C_T_s
541     ! User-Input: solids species eq BCs.
542           use bc, only: BC_HW_X_s, BC_XW_s, BC_C_X_s
543     ! Total number of solids phases
544           use physprop, only: MMAX
545     ! Total number of speices in each phase.
546           use physprop, only: NMAX
547     ! Flag: Solve energy equations.
548           use run, only: ENERGY_EQ
549     ! Flag: Solve species equations.
550           use run, only: SPECIES_EQ
551     
552     ! Global Parameters:
553     !---------------------------------------------------------------------//
554     ! Maximum number of possible species.
555           use param, only: DIM_N_S
556     ! Parameter constants.
557           use param1, only: ZERO, UNDEFINED
558     
559     ! Use the error manager for posting error messages.
560     !---------------------------------------------------------------------//
561           use error_manager
562     
563           IMPLICIT NONE
564     
565     ! Dummy Arguments.
566     !---------------------------------------------------------------------//
567     ! Index of BC getting checked.
568           INTEGER, INTENT(in) :: BCV
569     ! Index of solid phase getting checked.
570           INTEGER, INTENT(in) :: M
571     
572     ! Local Variables:
573     !---------------------------------------------------------------------//
574     ! Loop/variable counter.
575           INTEGER :: N
576     !......................................................................!
577     
578     
579     ! Initialize the error manager.
580           CALL INIT_ERR_MSG("CHECK_BC_WALLS_DISCRETE")
581     
582     ! DEM and PIC are restricted to adibatic walls.
583           IF(BC_HW_T_S(BCV,M) /= UNDEFINED) THEN
584              WRITE(ERR_MSG,1100) trim(iVar('BC_HW_T_s',BCV,M))
585              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
586           ELSEIF(BC_TW_S(BCV,M) /= UNDEFINED) THEN
587              WRITE(ERR_MSG,1100) trim(iVar('BC_Tw_s',BCV,M))
588              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
589           ELSEIF(BC_C_T_S(BCV,M) /= UNDEFINED) THEN
590              WRITE(ERR_MSG,1100) trim(iVar('BC_C_T_s',BCV,M))
591              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
592           ENDIF
593     
594      1100 FORMAT('Error 1100: ',A,' should not specified for DEM/PIC',/    &
595              'simulations as they are currently limited to adiabatic BCs.',&
596              /'Please correct the mfix.dat file.')
597     
598     
599     ! The following checks verify that TFM solids parameters are not
600     ! specified for discrete solids.
601     
602     
603     ! The wall velocities are not needed DEM/PIC solids
604           IF(BC_UW_S(BCV,M) /= UNDEFINED) THEN
605              WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_Uw_s',BCV,M))
606              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
607           ELSEIF(BC_VW_S(BCV,M) /= UNDEFINED) THEN
608              WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_Vw_s',BCV,M))
609              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
610           ELSEIF(BC_WW_S(BCV,M) /= UNDEFINED) THEN
611              WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_Ww_s',BCV,M))
612              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
613           ENDIF
614     
615     ! DEM cannot have a species flux at the walls.
616           DO N=1, DIM_N_s
617              IF(BC_HW_X_S(BCV,M,N) /= UNDEFINED) THEN
618                 WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_HW_X_s',BCV,M,N))
619                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
620              ELSEIF(BC_XW_S(BCV,M,N) /= UNDEFINED) THEN
621                 WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_Xw_s',BCV,M,N))
622                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
623              ELSEIF(BC_C_X_S(BCV,M,N) /= UNDEFINED) THEN
624                 WRITE(ERR_MSG,1101) BCV, trim(iVar('BC_C_X_s',BCV,M,N))
625                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
626              ENDIF
627           ENDDO
628     
629      1101 FORMAT('Error 1101: Illegal input for boundary condition: ',I3,/ &
630              A,' should not be specified for DEM/PIC simulations.',/       &
631              'Please correct the mfix.dat file.')
632     
633           CALL FINL_ERR_MSG
634     
635           RETURN
636     
637           END SUBROUTINE CHECK_BC_WALLS_DISCRETE
638     
639     
640     
641     
642     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
643     !                                                                      !
644     ! Subroutine: CHECK_BC_WALLS_SCALAR_EQ                                 !
645     ! Author: J.Musser                                    Date: 01-Mar-14  !
646     !                                                                      !
647     ! Purpose: Check user-input for generic scalar eq WALL BC parameters.  !
648     !                                                                      !
649     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
650           SUBROUTINE CHECK_BC_WALLS_SCALAR_EQ(BCV)
651     
652     
653     ! Global Variables:
654     !---------------------------------------------------------------------//
655     ! User-input: number of generic scalar equations to solve.
656           use scalars, only: NSCALAR
657     ! User-Input: generic scalar eq at wall BCs.
658           use bc, only: BC_HW_SCALAR, BC_SCALARw, BC_C_SCALAR
659     
660     ! Global Parameters:
661     !---------------------------------------------------------------------//
662     ! Parameter constants
663           use param1, only: ZERO, UNDEFINED
664     
665     ! Use the error manager for posting error messages.
666     !---------------------------------------------------------------------//
667           use error_manager
668     
669           IMPLICIT NONE
670     
671     ! Dummy Arguments.
672     !---------------------------------------------------------------------//
673     ! Index of BC getting checked.
674           INTEGER, INTENT(in) :: BCV
675     
676     ! Local Variables:
677     !---------------------------------------------------------------------//
678     ! Loop/counter variable.
679           INTEGER :: N
680     !......................................................................!
681     
682     
683     ! Initialize the error manager.
684           CALL INIT_ERR_MSG("CHECK_BC_WALLS_SCALAR_EQ")
685     
686           DO N=1, NSCALAR
687              IF(BC_HW_Scalar(BCV,N) < ZERO) THEN
688                 WRITE(ERR_MSG,1001) trim(iVar('BC_HW_SCALAR',BCV,N)),      &
689                    trim(iVal(BC_HW_Scalar(BCV,N)))
690                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
691              ENDIF
692              IF(BC_HW_SCALAR(BCV,N) /= ZERO .AND.                          &
693                 BC_SCALARw(BCV,N) == UNDEFINED) THEN
694                 WRITE(ERR_MSG,1000) trim(iVar('BC_SCALARw',BCV,N))
695                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
696              ENDIF
697              IF(BC_HW_SCALAR(BCV,N) /= UNDEFINED .AND.                     &
698                 BC_C_Scalar(BCV,N) == UNDEFINED) THEN
699                 WRITE(ERR_MSG,1000) trim(iVar('BC_C_SCALAR',BCV,N))
700              ENDIF
701           ENDDO
702     
703           CALL FINL_ERR_MSG
704     
705           RETURN
706     
707      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
708                 'correct the mfix.dat file.')
709     
710      1001 FORMAT('Error 1001: Illegal or unphysical input: ',A,' = ',A,/   &
711              'Please correct the mfix.dat file.')
712     
713           END SUBROUTINE CHECK_BC_WALLS_SCALAR_EQ
714