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