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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: CHECK_INITIAL_CONDITIONS                                !
4     !  Author: P. Nicoletti                               Date: 02-DEC-91  !
5     !  Author: J.Musser                                   Date: 01-MAR-14  !
6     !                                                                      !
7     !  Purpose: check the initial conditions input section                 !
8     !     - check geometry of any specified IC region                      !
9     !     - check specification of physical quantities                     !
10     !                                                                      !
11     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
12           SUBROUTINE CHECK_INITIAL_CONDITIONS
13     
14     ! Global Variables:
15     !---------------------------------------------------------------------//
16     ! Flag: IC geometry was detected.
17           use ic, only: IC_DEFINED
18     ! Flag: DEM solids present.
19           use run, only: DEM_SOLIDS
20     ! Flag: New run or a restart.
21           use run, only: RUN_TYPE
22     ! Runtime flag specifying MPPIC solids
23           use run, only: PIC_SOLIDS
24     ! Flag: Adjusting runtime parameters
25           use run, only: REINITIALIZING
26     
27     ! Global Parameters:
28     !---------------------------------------------------------------------//
29     ! Maximum number of IC.
30           use param, only: DIMENSION_IC
31     
32     ! Use the error manager for posting error messages.
33     !---------------------------------------------------------------------//
34           use error_manager
35     
36           IMPLICIT NONE
37     
38     ! Local Variables:
39     !---------------------------------------------------------------------//
40     ! Loop counter for ICs
41           INTEGER :: ICV
42     !......................................................................!
43     
44     ! Initialize the error manager.
45           CALL INIT_ERR_MSG("CHECK_INITIAL_CONDITIONS")
46     
47     ! Determine which ICs are DEFINED
48           CALL CHECK_IC_GEOMETRY
49     
50     ! Loop over all IC arrays.
51           DO ICV=1, DIMENSION_IC
52     
53     ! Verify user input for defined defined IC.
54              IF(IC_DEFINED(ICV)) THEN
55     ! Gas phase checks.
56                 CALL CHECK_IC_GAS_PHASE(ICV)
57     ! Generic solids phase checks.
58                 CALL CHECK_IC_SOLIDS_PHASES(ICV)
59     
60     ! Verify that no data was defined for unspecified IC. ICs are only
61     ! defined for new runs, so these checks are restricted to new runs.
62              ELSEIF(RUN_TYPE == 'NEW' .AND. .NOT.REINITIALIZING) THEN
63                 CALL CHECK_IC_OVERFLOW(ICV)
64              ENDIF
65           ENDDO
66     
67     
68     
69     ! Check the initial conditions for the DEM and MPPIC models as well
70           IF(DEM_SOLIDS.OR.PIC_SOLIDS) &
71           CALL CHECK_IC_COMMON_DISCRETE
72           IF(DEM_SOLIDS) CALL CHECK_IC_DEM
73           IF(PIC_SOLIDS) CALL CHECK_IC_MPPIC
74     
75     ! Finalize the error manager.
76           CALL FINL_ERR_MSG
77     
78           RETURN
79           END SUBROUTINE CHECK_INITIAL_CONDITIONS
80     
81     
82     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
83     !                                                                      !
84     ! Subroutine: CHECK_IC_GEOMETRY                                        !
85     ! Author: J.Musser                                    Date: 01-Mar-14  !
86     !                                                                      !
87     ! Purpose: Provided a detailed error message when the sum of volume    !
88     !                                                                      !
89     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
90           SUBROUTINE CHECK_IC_GEOMETRY
91     
92     
93     ! Global Variables:
94     !---------------------------------------------------------------------//
95     ! Flag: IC contains geometric data and/or specified type
96           use ic, only: IC_DEFINED
97     ! Flag: IC type.
98           use ic, only: IC_TYPE
99     ! User specified: IC geometry
100           use ic, only: IC_X_e, IC_X_w, IC_I_e, IC_I_w
101           use ic, only: IC_Y_n, IC_Y_s, IC_J_n, IC_J_s
102           use ic, only: IC_Z_t, IC_Z_b, IC_K_t, IC_K_b
103     ! User specified: System geometry
104           use geometry, only: NO_I, IMAX, IMIN1, IMAX1, XLENGTH, DX, XMIN
105           use geometry, only: NO_J, JMAX, JMIN1, JMAX1, YLENGTH, DY
106           use geometry, only: NO_K, KMAX, KMIN1, KMAX1, ZLENGTH, DZ
107     ! Flag: New run or a restart.
108           use run, only: RUN_TYPE
109           use run, only: REINITIALIZING
110     
111     ! Global Parameters:
112     !---------------------------------------------------------------------//
113     ! The max number of ICs.
114           use param, only: DIMENSION_IC
115     ! Parameter constants
116           use param1, only: ZERO, UNDEFINED, UNDEFINED_I
117     
118     ! Use the error manager for posting error messages.
119     !---------------------------------------------------------------------//
120           use error_manager
121     
122     
123           implicit none
124     
125     
126     ! Local Variables:
127     !---------------------------------------------------------------------//
128     ! Loop/variable indices
129           INTEGER :: ICV
130     ! Local spatial indices.
131           INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
132     !......................................................................!
133     
134     
135     ! Initialize the error manager.
136           CALL INIT_ERR_MSG("CHECK_IC_GEOMETRY")
137     
138     ! Check geometry of any specified IC region
139           DO ICV = 1, DIMENSION_IC
140     
141              IC_DEFINED(ICV) = .FALSE.
142              IF (IC_X_W(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
143              IF (IC_X_E(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
144              IF (IC_Y_S(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
145              IF (IC_Y_N(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
146              IF (IC_Z_B(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
147              IF (IC_Z_T(ICV) /= UNDEFINED)   IC_DEFINED(ICV) = .TRUE.
148              IF (IC_I_W(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
149              IF (IC_I_E(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
150              IF (IC_J_S(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
151              IF (IC_J_N(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
152              IF (IC_K_B(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
153              IF (IC_K_T(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
154     
155     ! An IC is defined for restart runs only if it is a 'PATCH'.
156              IF(RUN_TYPE /= 'NEW' .AND. IC_TYPE(ICV) /= 'PATCH') &
157                 IC_DEFINED(ICV) = .FALSE.
158     
159     ! Ignore patched IC regions for new runs. It may be better to flag this as
160     ! and error to avoid user confusion.
161              IF(RUN_TYPE == 'NEW' .AND. IC_TYPE(ICV) == 'PATCH') &
162                 IC_DEFINED(ICV) = .FALSE.
163     
164     ! Enable only PATCH IC regions when initializing.
165              IF(REINITIALIZING) IC_DEFINED(ICV)=(IC_TYPE(ICV)=='PATCH')
166     
167              IF(.NOT.IC_DEFINED(ICV)) CYCLE
168     
169              IF (IC_X_W(ICV)==UNDEFINED .AND. IC_I_W(ICV)==UNDEFINED_I) THEN
170                 IF (NO_I) THEN
171                    IC_X_W(ICV) = ZERO
172                 ELSE
173                    WRITE(ERR_MSG, 1100) ICV, 'IC_X_w and IC_I_w'
174                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175                 ENDIF
176              ENDIF
177     
178              IF (IC_X_E(ICV)==UNDEFINED .AND. IC_I_E(ICV)==UNDEFINED_I) THEN
179                 IF (NO_I) THEN
180                    IC_X_E(ICV) = XLENGTH
181                 ELSE
182                    WRITE(ERR_MSG, 1100) ICV, 'IC_X_e and IC_I_e'
183                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
184                 ENDIF
185              ENDIF
186     
187              IF (IC_Y_S(ICV)==UNDEFINED .AND. IC_J_S(ICV)==UNDEFINED_I) THEN
188                 IF (NO_J) THEN
189                    IC_Y_S(ICV) = ZERO
190                 ELSE
191                    WRITE(ERR_MSG, 1100) ICV, 'IC_Y_s and IC_J_s'
192                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
193                 ENDIF
194              ENDIF
195     
196              IF (IC_Y_N(ICV)==UNDEFINED .AND. IC_J_N(ICV)==UNDEFINED_I) THEN
197                 IF (NO_J) THEN
198                    IC_Y_N(ICV) = YLENGTH
199                 ELSE
200                    WRITE(ERR_MSG, 1100) ICV, 'IC_Y_n and IC_J_n'
201                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
202                 ENDIF
203              ENDIF
204     
205              IF (IC_Z_B(ICV)==UNDEFINED .AND. IC_K_B(ICV)==UNDEFINED_I) THEN
206                 IF (NO_K) THEN
207                    IC_Z_B(ICV) = ZERO
208                 ELSE
209                    WRITE(ERR_MSG, 1100) ICV, 'IC_Z_b and IC_K_b'
210                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
211                 ENDIF
212              ENDIF
213     
214              IF (IC_Z_T(ICV)==UNDEFINED .AND. IC_K_T(ICV)==UNDEFINED_I) THEN
215                 IF (NO_K) THEN
216                    IC_Z_T(ICV) = ZLENGTH
217                 ELSE
218                    WRITE(ERR_MSG, 1100) ICV, 'IC_Z_t and IC_K_t'
219                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
220                 ENDIF
221              ENDIF
222     
223           ENDDO   ! end loop over (icv = 1,dimension_ic)
224     
225      1100 FORMAT('Error 1100: Initial condition region ',I3,' is ill-',    &
226              'defined.',/' > ',A,' are not specified.',/'Please correct ', &
227              'the mfix.dat file.')
228     
229     
230           DO ICV = 1, DIMENSION_IC
231     
232     ! Skip this check if the IC region is not specified.
233              IF(.NOT.IC_DEFINED(ICV)) CYCLE
234     
235              IF (IC_X_W(ICV)/=UNDEFINED .AND. IC_X_E(ICV)/=UNDEFINED) THEN
236                 IF (NO_I) THEN
237                    I_W = 1
238                    I_E = 1
239                 ELSE
240                    CALL CALC_CELL (XMIN, IC_X_W(ICV), DX, IMAX, I_W)
241                    I_W = I_W + 1
242                    CALL CALC_CELL (XMIN, IC_X_E(ICV), DX, IMAX, I_E)
243                 ENDIF
244                 IF (IC_I_W(ICV)/=UNDEFINED_I .OR. IC_I_E(ICV)/=UNDEFINED_I) THEN
245                    CALL LOCATION_CHECK (IC_I_W(ICV), I_W, ICV, 'IC - west')
246                    CALL LOCATION_CHECK (IC_I_E(ICV), I_E, ICV, 'IC - east')
247                 ELSE
248                    IC_I_W(ICV) = I_W
249                    IC_I_E(ICV) = I_E
250                 ENDIF
251              ENDIF
252     
253     ! Report problems with calculated bounds.
254              IF(IC_I_W(ICV) > IC_I_E(ICV)) THEN
255                  WRITE(ERR_MSG, 1101) ICV, 'IC_I_W > IC_I_E'
256                  write(*,*)' dump:',IC_I_W(ICV),IC_I_E(ICV)
257                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
258              ELSEIF(IC_I_W(ICV) < IMIN1) THEN
259                  WRITE(ERR_MSG, 1101) ICV, 'IC_I_W < IMIN1'
260                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
261              ELSEIF(IC_I_W(ICV) > IMAX1) THEN
262                  WRITE(ERR_MSG, 1101) ICV, 'IC_I_W > IMAX1'
263                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
264              ELSEIF(IC_I_E(ICV) < IMIN1) THEN
265                  WRITE(ERR_MSG, 1101) ICV, 'IC_I_E < IMIN1'
266                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
267              ELSEIF(IC_I_E(ICV) > IMAX1) THEN
268                  WRITE(ERR_MSG, 1101) ICV, 'IC_Z_t and IC_K_t'
269                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
270              ENDIF
271     
272              IF (IC_Y_S(ICV)/=UNDEFINED .AND. IC_Y_N(ICV)/=UNDEFINED) THEN
273                 IF (NO_J) THEN
274                    J_S = 1
275                    J_N = 1
276                 ELSE
277                    CALL CALC_CELL (ZERO, IC_Y_S(ICV), DY, JMAX, J_S)
278                    J_S = J_S + 1
279                    CALL CALC_CELL (ZERO, IC_Y_N(ICV), DY, JMAX, J_N)
280                 ENDIF
281                 IF (IC_J_S(ICV)/=UNDEFINED_I .OR. IC_J_N(ICV)/=UNDEFINED_I) THEN
282                    CALL LOCATION_CHECK (IC_J_S(ICV), J_S, ICV, 'IC - south')
283                    CALL LOCATION_CHECK (IC_J_N(ICV), J_N, ICV, 'IC - north')
284                 ELSE
285                    IC_J_S(ICV) = J_S
286                    IC_J_N(ICV) = J_N
287                 ENDIF
288              ENDIF
289     
290              IF(IC_J_S(ICV) > IC_J_N(ICV)) THEN
291                  WRITE(ERR_MSG, 1101) ICV, 'IC_J_S > IC_J_N'
292                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
293              ELSEIF(IC_J_S(ICV)<JMIN1) THEN
294                  WRITE(ERR_MSG, 1101) ICV, 'IC_J_S < JMIN1'
295                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
296              ELSEIF(IC_J_S(ICV)>JMAX1) THEN
297                  WRITE(ERR_MSG, 1101) ICV, 'IC_J_S >  JMAX1'
298                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
299              ELSEIF(IC_J_N(ICV)<JMIN1) THEN
300                  WRITE(ERR_MSG, 1101) ICV, 'IC_J_N < JMIN1'
301                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
302              ELSEIF(IC_J_N(ICV)>JMAX1) THEN
303                  WRITE(ERR_MSG, 1101) ICV, 'IC_J_N > JMAX1'
304                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
305              ENDIF
306     
307     
308              IF (IC_Z_B(ICV)/=UNDEFINED .AND. IC_Z_T(ICV)/=UNDEFINED) THEN
309                 IF (NO_K) THEN
310                    K_B = 1
311                    K_T = 1
312                 ELSE
313                    CALL CALC_CELL (ZERO, IC_Z_B(ICV), DZ, KMAX, K_B)
314                    K_B = K_B + 1
315                    CALL CALC_CELL (ZERO, IC_Z_T(ICV), DZ, KMAX, K_T)
316                 ENDIF
317                 IF (IC_K_B(ICV)/=UNDEFINED_I .OR. IC_K_T(ICV)/=UNDEFINED_I) THEN
318                    CALL LOCATION_CHECK (IC_K_B(ICV), K_B, ICV, 'IC - bottom')
319                    CALL LOCATION_CHECK (IC_K_T(ICV), K_T, ICV, 'IC - top')
320                 ELSE
321                    IC_K_B(ICV) = K_B
322                    IC_K_T(ICV) = K_T
323                 ENDIF
324              ENDIF
325     
326              IF(IC_K_B(ICV) > IC_K_T(ICV)) THEN
327                  WRITE(ERR_MSG, 1101) ICV, 'IC_K_B > IC_K_T'
328                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
329              ELSEIF(IC_K_B(ICV) < KMIN1) THEN
330                  WRITE(ERR_MSG, 1101) ICV, 'IC_K_B < KMIN1'
331                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
332              ELSEIF(IC_K_B(ICV) > KMAX1) THEN
333                  WRITE(ERR_MSG, 1101) ICV, 'IC_K_B > KMAX1'
334                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
335              ELSEIF(IC_K_T(ICV) < KMIN1) THEN
336                  WRITE(ERR_MSG, 1101) ICV, 'IC_K_T < KMIN1'
337                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
338              ELSEIF(IC_K_T(ICV) > KMAX1) THEN
339                  WRITE(ERR_MSG, 1101) ICV, 'IC_K_T > KMAX1'
340                  CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
341              ENDIF
342     
343     
344      1101 FORMAT('Error 1101: Initial condition region ',I2,' is ill-',    &
345              'defined.',/3x,A,/'Please correct the mfix.dat file.')
346     
347           ENDDO   ! end loop over (icv=1,dimension_ic)
348     
349           CALL FINL_ERR_MSG
350     
351           RETURN
352           END SUBROUTINE CHECK_IC_GEOMETRY
353     
354     
355     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
356     !                                                                      !
357     ! Subroutine: CHECK_IC_GAS_PHASE                                       !
358     ! Author: J.Musser                                    Date: 01-Mar-14  !
359     !                                                                      !
360     ! Purpose: Verify gas phase input variables in IC region.              !
361     !                                                                      !
362     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
363           SUBROUTINE CHECK_IC_GAS_PHASE(ICV)
364     
365     ! Global Variables:
366     !---------------------------------------------------------------------//
367     ! Gas phase volume fraction, pressure, temperature, species.
368           use ic, only: IC_EP_g, IC_P_g, IC_T_g, IC_X_g
369     ! Gas phase velocity components.
370           use ic, only: IC_U_g, IC_V_g, IC_W_g
371     ! Radiation model parameters.
372           use ic, only: IC_GAMA_RG, IC_T_RG
373     ! K-Epsilon model parameters.
374           use ic, only: IC_K_TURB_G, IC_E_TURB_G
375     ! IC for user-defined scalar equation.
376           use ic, only: IC_SCALAR
377     ! IC Type: UNDEFINED or PATCH.
378           use ic, only: IC_TYPE
379     
380     ! Flag. Solve Energy equations
381           use run, only: ENERGY_EQ
382     ! Flag. Solve Species equations
383           use run, only: SPECIES_EQ
384     ! Flag: Solve K-Epsilon; K-E parameters
385           use run, only: K_Epsilon
386     ! Specified constant gas density and viscosity.
387           use physprop, only: RO_G0, MU_G0
388     ! Specified average molecular weight
389           use physprop, only: MW_AVG
390     ! Number of gas phase species
391           use physprop, only: NMAX
392     ! Specified number of scalar equations.
393           use scalars, only: NSCALAR
394     ! Flag: Do not solve in specified direction.
395           use geometry, only: NO_I, NO_J, NO_K
396     
397     ! Global Parameters:
398     !---------------------------------------------------------------------//
399     ! Parameter constants
400           use param1, only: ZERO, ONE, UNDEFINED
401     
402     ! Use the error manager for posting error messages.
403     !---------------------------------------------------------------------//
404           use error_manager
405     
406           use toleranc
407     
408           implicit none
409     
410     ! Dummy Arguments:
411     !---------------------------------------------------------------------//
412           INTEGER, INTENT(IN) :: ICV
413     
414     ! Local Variables:
415     !---------------------------------------------------------------------//
416     ! Loop index
417           INTEGER :: N
418     ! Sum of mass fraction.
419           DOUBLE PRECISION :: SUM
420     ! Flag for regular IC regions
421           LOGICAL :: BASIC_IC
422     !......................................................................!
423     
424     ! Initialize the error manager.
425           CALL INIT_ERR_MSG("CHECK_IC_GAS_PHASE")
426     
427     ! Patch ICs skip various checks.
428           BASIC_IC = (IC_TYPE(ICV) /= 'PATCH')
429     
430     ! Check that gas phase velocity components are initialized.
431           IF(BASIC_IC) THEN
432              IF(IC_U_G(ICV) == UNDEFINED) THEN
433                 IF(NO_I) THEN
434                    IC_U_G(ICV) = ZERO
435                 ELSE
436                    WRITE(ERR_MSG, 1000) trim(iVar('IC_U_g',ICV))
437                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
438                 ENDIF
439              ENDIF
440     
441              IF(IC_V_G(ICV) == UNDEFINED) THEN
442                 IF(NO_J) THEN
443                    IC_V_G(ICV) = ZERO
444                 ELSE
445                    WRITE(ERR_MSG, 1000) trim(iVar('IC_V_g',ICV))
446                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
447                 ENDIF
448              ENDIF
449     
450              IF(IC_W_G(ICV) == UNDEFINED) THEN
451                 IF (NO_K) THEN
452                    IC_W_G(ICV) = ZERO
453                 ELSE
454                    WRITE(ERR_MSG, 1000) trim(iVar('IC_W_g',ICV))
455                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
456                ENDIF
457              ENDIF
458           ENDIF
459     
460     ! Check that gas phase void fraction is initialized. Patched ICs may
461     ! have an undefined volume fration. A second check is preformed on
462     ! the solids.
463           IF(IC_EP_G(ICV) == UNDEFINED .AND. BASIC_IC) THEN
464              WRITE(ERR_MSG, 1000) trim(iVar('IC_EP_g',ICV))
465              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
466           ENDIF
467     
468     ! Check that if the gas phase pressure is initialized and the gas is
469     ! compressible that the gas phase pressure is not zero or negative
470           IF(IC_P_G(ICV) /= UNDEFINED) THEN
471              IF(RO_G0==UNDEFINED .AND. IC_P_G(ICV)<=ZERO) THEN
472                 WRITE(ERR_MSG, 1100) trim(iVar('IC_P_g',ICV)),             &
473                    iVal(IC_P_G(ICV))
474                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
475              ENDIF
476           ENDIF
477     
478      1100 FORMAT('Error 1100: Pressure must be greater than 0.0 for ',     &
479              'compressible flow',/'Illegal value: ',A,' = ',A,/'Please ',  &
480              'correct the mfix.dat file.')
481     
482           IF(BASIC_IC) THEN
483              IF(ENERGY_EQ .OR. RO_G0==UNDEFINED .OR. MU_G0==UNDEFINED) THEN
484                 IF(IC_T_G(ICV)==UNDEFINED) THEN
485                    WRITE(ERR_MSG, 1000) trim(iVar('IC_T_g',ICV))
486                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
487                 ENDIF
488              ENDIF
489           ENDIF
490     
491     ! Gas phase radiation values.
492           IF (ENERGY_EQ) THEN
493              IF (IC_GAMA_RG(ICV) < ZERO) THEN
494                 WRITE(ERR_MSG, 1001) trim(iVar('IC_GAMA_Rg',ICV)),         &
495                    iVal(IC_GAMA_RG(ICV))
496                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
497              ELSEIF (IC_GAMA_RG(ICV) > ZERO) THEN
498                 IF (IC_T_RG(ICV) == UNDEFINED) THEN
499                    WRITE(ERR_MSG, 1000) iVar('IC_T_Rg',ICV)
500                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
501                 ENDIF
502              ENDIF
503           ENDIF
504     
505     
506     ! First: sum together defiend gas phase species mass fractions.
507           SUM = ZERO
508           DO N = 1, NMAX(0)
509              IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
510                 SUM = SUM + IC_X_G(ICV,N)
511              ELSEIF(BASIC_IC) THEN
512                 IC_X_G(ICV,N) = ZERO
513              ENDIF
514           ENDDO
515     
516     
517     ! Enforce that the species mass fractions must sum to one.
518           IF(.NOT.COMPARE(ONE,SUM)) THEN
519     
520     ! No error for ZERO sum PATCH IC data.
521              IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM))THEN
522     
523     ! Error for regular IC regions when solving species equations.
524              ELSEIF(SPECIES_EQ(0)) THEN
525                 WRITE(ERR_MSG, 1110) ICV
526                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
527     
528      1110 FORMAT('Error 1110: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
529              'gas phase',/'species equations are solved. Please correct ', &
530              'the mfix.dat file.')
531     
532     ! Error for slightly compressible flows with MW_AVG specified.
533              ELSEIF(RO_G0 == UNDEFINED .AND. MW_AVG == UNDEFINED) THEN
534                 WRITE(ERR_MSG, 1111) ICV
535                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
536     
537      1111 FORMAT('Error 1111: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
538              'gas phase',/'is compressible and MW_AVG is UNDEFINED.',/     &
539              'Please correct the mfix.dat the mfix.dat file.')
540     
541              ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
542                 WRITE(ERR_MSG, 1112) ICV
543                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
544     
545      1112 FORMAT('Error 1112: IC_X_g(',I3,',:) do not sum to ONE or ZERO ',&
546              'and they',/'are not needed. Please correct the mfix.dat ',   &
547              'the mfix.dat file.')
548     
549              ELSE
550                 IC_X_G(ICV,:) = ZERO
551                 IC_X_G(ICV,1) = ONE
552              ENDIF
553           ENDIF
554     
555     
556           DO N = 1, NScalar
557              IF(IC_Scalar(ICV,N) == UNDEFINED) IC_Scalar(ICV,N) = ZERO
558           ENDDO
559     
560     
561           IF(K_Epsilon .AND. BASIC_IC) THEN
562              IF (IC_K_Turb_G(ICV) == UNDEFINED) THEN
563                 WRITE(ERR_MSG, 1000) iVar('IC_K_Turb_G',ICV)
564                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
565              ENDIF
566              IF (IC_E_Turb_G(ICV) == UNDEFINED) THEN
567                 WRITE(ERR_MSG, 1000) iVar('IC_E_Turb_G',ICV)
568                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
569              ENDIF
570           ENDIF
571     
572           CALL FINL_ERR_MSG
573     
574           RETURN
575     
576      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
577              'correct the mfix.dat file.')
578     
579      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/   &
580              'Please correct the mfix.dat file.')
581     
582           END SUBROUTINE CHECK_IC_GAS_PHASE
583     
584     
585     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
586     !                                                                      !
587     !  Subroutine: CHECK_IC_SOLIDS_PHASES                                  !
588     !  Author: P. Nicoletti                               Date: 02-DEC-91  !
589     !  Author: J.Musser                                   Date: 01-MAR-14  !
590     !                                                                      !
591     !  Purpose: Verify solids phase(s) input variables in IC region.       !
592     !                                                                      !
593     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
594           SUBROUTINE CHECK_IC_SOLIDS_PHASES(ICV)
595     
596     
597     ! Global Variables:
598     !---------------------------------------------------------------------//
599     ! Solids volume fraction, bulk density
600           use ic, only: IC_EP_s, IC_ROP_s
601     ! Solids velocity components.
602           use ic, only: IC_U_s, IC_V_s, IC_W_s
603     ! Solids temperature, mass fractions, granular energy
604           use ic, only: IC_T_s, IC_X_s, IC_THETA_M
605     ! Radiation model parameters.
606           use ic, only: IC_GAMA_RS, IC_T_RS
607     ! Gas phase volume fraction and temperature.
608           use ic, only: IC_EP_g, IC_T_g
609     ! IC Type: UNDEFINED or PATCH.
610           use ic, only: IC_TYPE
611     
612     ! Flag. Solve Energy equations
613           use run, only: ENERGY_EQ
614     ! Flag. Solve Species equations
615           use run, only: SPECIES_EQ
616     ! Flag. Solve Granular Energy PDE
617           use run, only: GRANULAR_ENERGY
618     ! Flag. Solve variable solids density
619           use run, only: SOLVE_ROs
620     ! Baseline solids density, baseline mass fraction, index of intert
621           use physprop, only: BASE_ROs, X_S0, INERT_SPECIES
622     ! Specified constant solids density.
623           use physprop, only: RO_S0
624     ! Number of gas phase species
625           use physprop, only: NMAX
626     ! Number of TFM solids phases.
627           use physprop, only: SMAX
628     ! Number of DEM or PIC solids.
629           use discretelement, only: DES_MMAX
630     ! Flag: Do not solve in specified direction.
631           use geometry, only: NO_I, NO_J, NO_K
632     
633     ! Global Parameters:
634     !---------------------------------------------------------------------//
635     ! Maximum number of solids species.
636           use param, only: DIM_M
637     ! Parameter constants
638           use param1, only: ZERO, ONE, UNDEFINED
639     ! function to calculate solids density.
640           USE eos, ONLY: EOSS
641     
642     ! Use the error manager for posting error messages.
643     !---------------------------------------------------------------------//
644           use error_manager
645     
646           use toleranc
647     
648           IMPLICIT NONE
649     
650     ! Dummy Arguments:
651     !---------------------------------------------------------------------//
652     ! Index of IC region.
653           INTEGER, INTENT(IN) :: ICV
654     ! Loop/variable index
655           INTEGER :: M, N
656     ! Various sums.
657           DOUBLE PRECISION SUM, SUM_EP
658     ! Solids phase density in IC region.
659           DOUBLE PRECISION :: IC_ROs(1:DIM_M)
660     ! Index of inert species
661           INTEGER :: INERT
662     ! Flag to skip checks on indexed solid phase.
663           LOGICAL :: SKIP(1:DIM_M)
664     ! Total number of solids phases (TFM + DEM + MPPIC)
665           INTEGER :: MMAX_TOT
666     ! Flag for PATCH IC regions
667           LOGICAL :: BASIC_IC
668     !......................................................................!
669     
670     ! Initialize the error manager.
671           CALL INIT_ERR_MSG("CHECK_IC_SOLIDS_PHASES")
672     
673     ! Patch ICs skip various checks.
674           BASIC_IC = (IC_TYPE(ICV) /= 'PATCH')
675     
676     ! The total number of solids phases (all models).
677           MMAX_TOT = SMAX + DES_MMAX
678     
679     ! Calculate EP_s from EP_g if there is only one solids phase.
680           IF(MMAX_TOT == 1 .AND. IC_EP_S(ICV,1) == UNDEFINED) THEN
681              IF(IC_EP_g(ICV) /= UNDEFINED) IC_EP_S(ICV,1) = ONE-IC_EP_g(ICV)
682           ENDIF
683     
684     ! Bulk density or solids volume fraction must be explicitly defined
685     ! if there are more than one solids phase.
686           IF(MMAX_TOT > 1 .AND. .NOT.COMPARE(IC_EP_g(ICV),ONE)) THEN
687     ! IC_EP_g may be undefined for PATCH IC regions.
688              IF(IC_EP_g(ICV) /= UNDEFINED) THEN
689                 DO M = 1, MMAX_TOT
690                    IF(IC_ROP_S(ICV,M) == UNDEFINED .AND. &
691                       IC_EP_S(ICV,M) == UNDEFINED) THEN
692                       WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
693                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
694                    ENDIF
695                 ENDDO
696     
697     ! If IC_EP_G is undefined, then ROP_s and EP_s should be too.
698              ELSE
699                 DO M = 1, MMAX_TOT
700                    IF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
701                       IC_EP_S(ICV,M) /= UNDEFINED) THEN
702                       WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
703                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
704                    ENDIF
705                 ENDDO
706              ENDIF
707           ENDIF
708     
709      1400 FORMAT('Error 1400: Insufficient solids phase ',I2,' ',          &
710              'information for IC',/'region ',I3,'. ',A,' not specified.',/ &
711              'Please correct the mfix.dat file.')
712     
713     ! Determine which solids phases are present.
714           DO M = 1, MMAX_TOT
715              SKIP(M)=(IC_ROP_S(ICV,M)==UNDEFINED.OR.IC_ROP_S(ICV,M)==ZERO) &
716                 .AND.(IC_EP_S(ICV,M)==UNDEFINED .OR.IC_EP_S(ICV,M)==ZERO)
717           ENDDO
718     
719           IF(MMAX_TOT == 1 .AND. IC_EP_g(ICV)/=ONE) SKIP(1) = .FALSE.
720     
721           DO M=1, MMAX_TOT
722     
723     ! check that solids phase m velocity components are initialized
724              IF(BASIC_IC) THEN
725                 IF(IC_U_S(ICV,M) == UNDEFINED) THEN
726                    IF (SKIP(M) .OR. NO_I) THEN
727                       IC_U_S(ICV,M) = ZERO
728                    ELSE
729                       WRITE(ERR_MSG, 1000)trim(iVar('IC_U_s',ICV,M))
730                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
731                    ENDIF
732                 ENDIF
733     
734                 IF(IC_V_S(ICV,M) == UNDEFINED) THEN
735                    IF(SKIP(M) .OR. NO_J) THEN
736                       IC_V_S(ICV,M) = ZERO
737                    ELSE
738                       WRITE(ERR_MSG, 1000)trim(iVar('IC_V_s',ICV,M))
739                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
740                    ENDIF
741                 ENDIF
742     
743                 IF(IC_W_S(ICV,M) == UNDEFINED) THEN
744                    IF(SKIP(M) .OR. NO_K) THEN
745                       IC_W_S(ICV,M) = ZERO
746                    ELSE
747                       WRITE(ERR_MSG, 1000)trim(iVar('IC_W_s',ICV,M))
748                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
749                    ENDIF
750                 ENDIF
751     
752                 IF(ENERGY_EQ .AND. IC_T_S(ICV,M)==UNDEFINED) THEN
753                    IF(SKIP(M)) THEN
754                       IC_T_S(ICV,M) = IC_T_G(ICV)
755                    ELSE
756                       WRITE(ERR_MSG, 1000)trim(iVar('IC_T_s',ICV,M))
757                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
758                    ENDIF
759                 ENDIF
760     
761                 IF(GRANULAR_ENERGY .AND. IC_THETA_M(ICV,M)==UNDEFINED) THEN
762                    IF(SKIP(M)) THEN
763                       IC_THETA_M(ICV,M) = ZERO
764                    ELSE
765                       WRITE(ERR_MSG, 1000)trim(iVar('IC_Theta_M',ICV,M))
766                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
767                    ENDIF
768                ENDIF
769     
770                 IF(ENERGY_EQ) THEN
771                    IF(IC_GAMA_RS(ICV,M) < ZERO) THEN
772                       WRITE(ERR_MSG, 1001)trim(iVar('IC_GAMA_Rs',ICV,M)),  &
773                          iVal(IC_GAMA_RS(ICV,M))
774                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
775                    ELSEIF (IC_GAMA_RS(ICV,M) > ZERO) THEN
776                       IF(IC_T_RS(ICV,M) == UNDEFINED) THEN
777                          WRITE(ERR_MSG, 1001)trim(iVar('IC_T_Rs',ICV,M))
778                          CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
779                       ENDIF
780                    ENDIF
781                 ENDIF
782              ENDIF
783     
784     
785     ! First: sum together defiend species mass fractions.
786              SUM = ZERO
787              DO N = 1, NMAX(M)
788                 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
789                    SUM = SUM + IC_X_S(ICV,M,N)
790                 ELSEIF(BASIC_IC) THEN
791                    IC_X_S(ICV,M,N) = ZERO
792                 ENDIF
793              ENDDO
794     
795     ! Enforce that the species mass fractions must sum to one.
796              IF(.NOT.COMPARE(ONE,SUM)) THEN
797     
798     ! Summing to zero is not an error for PATCH IC regions.
799                 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM)) THEN
800     
801                 ELSEIF(SPECIES_EQ(M) .AND. .NOT.SKIP(M)) THEN
802                    WRITE(ERR_MSG, 1402) ICV, M
803                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
804     
805      1402 FORMAT('Error 1402: IC_X_s(',I3,',',I2,',:) do NOT sum to ONE ', &
806              'and the solids phase',/'species equations are solved. ',     &
807              'Please correct the mfix.dat file.')
808     
809                 ELSEIF(SOLVE_ROS(M) .AND. .NOT.SKIP(M)) THEN
810                    WRITE(ERR_MSG, 1403) ICV, M
811                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
812     
813      1403 FORMAT('Error 1403: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ',  &
814              'and the solids phase',/'density is calculated. Please ',     &
815              'correct the mfix.dat file.')
816     
817                 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
818                     WRITE(ERR_MSG, 1404) ICV
819                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
820     
821      1404 FORMAT('Error 1404: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ',  &
822              'or ZERO and',/'they are not needed. Please correct the ',    &
823              'mfix.dat file.')
824     
825                 ELSE
826                    IC_X_S(ICV,M,:) = ZERO
827                    IC_X_S(ICV,M,1) = ONE
828                 ENDIF
829              ENDIF
830     
831     ! Set the solids density for the IC region.
832              IF(SKIP(M)) THEN
833                 IC_ROs(M) = merge(BASE_ROs(M), RO_s0(M), SOLVE_ROs(M))
834     
835              ELSEIF(.NOT.SOLVE_ROs(M)) THEN
836                 IC_ROs(M) = RO_s0(M)
837     
838              ELSE
839     ! Verify that the species mass fraction for the inert material is not
840     ! zero in the IC region when the solids is present.
841                 INERT = INERT_SPECIES(M)
842                 IF(IC_X_S(ICV,M,INERT) == ZERO) THEN
843                    WRITE(ERR_MSG,1405) M, ICV
844                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
845                 ENDIF
846     
847      1405 FORMAT('Error 1405: No inert species for phase ',I2,' in IC ',   &
848              'region ',I3,'.',/'Unable to calculate solids phase density. ',&
849              'Please refer to the Readme',/' file for required variable ', &
850              'solids density  model input parameters and',/' make the ',   &
851              'necessary corrections to the data file.')
852     
853     ! Calculate the solids density.
854                 IC_ROs(M) = EOSS(BASE_ROs(M), X_s0(M,INERT),               &
855                    IC_X_S(ICV,M,INERT))
856              ENDIF
857     
858           ENDDO   ! end loop over (m=1,smax)
859     
860     
861     ! Initialize the sum of the total volume fraction.
862           SUM_EP = IC_EP_G(ICV)
863     
864           DO M=1, MMAX_TOT
865     
866     ! Clear out both varaibles if this phase is skipped.
867              IF(BASIC_IC .AND. SKIP(M)) THEN
868                 IC_EP_S(ICV,M)  = ZERO
869                 IC_ROP_S(ICV,M) = ZERO
870     
871     ! Leave everything undefined for PATCH ICs that are not specifed.
872              ELSEIF(.NOT.BASIC_IC .AND. (IC_ROP_S(ICV,M) == UNDEFINED      &
873                 .AND. IC_EP_S(ICV,M) == UNDEFINED)) THEN
874     
875     ! If both input parameters are defined. Make sure they are equivalent.
876              ELSEIF(IC_ROP_S(ICV,M) /= UNDEFINED .AND.                     &
877                 IC_EP_S(ICV,M) /= UNDEFINED) THEN
878     
879                 IF(.NOT.COMPARE(IC_EP_S(ICV,M)*IC_ROs(M),                  &
880                    IC_ROP_S(ICV,M))) THEN
881     
882     ! BASIC_IC regions require that the IC_ROP_s and IC_EP_s specifications
883     ! match although it is unlikely that anyone would specify both.
884                    IF(BASIC_IC) THEN
885     
886                       WRITE(ERR_MSG,1406) M, ICV
887                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
888     
889     1406 FORMAT('Error 1406: IC_EP_s and IC_ROP_s are inconsistent for ',&
890              'phase ',I2,/,'in IC region ', I3,'. Please correct the ',&
891              'mfix.dat file.')
892     
893     
894     ! PachedeIC regions defer to IC_EP_s if the values do not match. This
895     ! prevents a dead lock or the need to define both. This case is rather
896     ! common as a defined IC_EP_s is converted to IC_ROP_s. Therefore, if
897     ! a patch region is used more than once, these values may not match.
898                    ELSE
899     
900                       WRITE(ERR_MSG,1407) trim(iVar('IC_ROP_s',ICV,M)), &
901                          trim(iVAL(IC_ROP_S(ICV,M))), trim(iVar('IC_EP_s',&
902                          ICV,M)), trim(iVAL(IC_EP_S(ICV,M)))
903                       CALL FLUSH_ERR_MSG()
904     
905     1407 FORMAT('Warning 1407: IC_EP_s and IC_ROP_s are inconsistent:',    &
906              2(/3x,A,' = ',A),/'Deferring to IC_EP_s to overcome conflict.')
907     
908                       IC_ROP_S(ICV,M) = IC_EP_S(ICV,M)*IC_ROs(M)
909     
910                    ENDIF
911                 ENDIF
912     
913     
914     ! Compute IC_EP_s from IC_ROP_s
915              ELSEIF(IC_EP_S(ICV,M) == UNDEFINED)THEN
916                 IC_EP_S(ICV,M) = IC_ROP_S(ICV,M) / IC_ROs(M)
917     
918     ! Compute IC_ROP_s from IC_EP_s and IC_ROs
919              ELSEIF(IC_ROP_S(ICV,M) == UNDEFINED) THEN
920                 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M) * IC_ROs(M)
921     ! This is a sanity check.
922              ELSE
923     
924              ENDIF
925     ! Add this phase to the total volume fraction.
926              SUM_EP = SUM_EP + IC_EP_S(ICV,M)
927           ENDDO
928     
929     ! Verify that the volume fractions sum to one.
930           IF(BASIC_IC .AND. .NOT.COMPARE(SUM_EP,ONE)) THEN
931              WRITE(ERR_MSG,1410) ICV
932              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
933           ENDIF
934     
935      1410 FORMAT('Error 1410: Illegal initial condition region : ',I3,/    &
936              'Sum of volume fractions does NOT equal ONE. Please correct',/&
937              'the mfix.dat file.')
938     
939     
940           CALL FINL_ERR_MSG
941     
942           RETURN
943     
944     
945      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
946              'correct the mfix.dat file.')
947     
948      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/   &
949              'Please correct the mfix.dat file.')
950     
951      1002 FORMAT('Error 1002: Illegal data in initial condition region ', &
952              I3,/A,' defined for unknown solids phase ',I2,'.',/          &
953              'Please correct the mfix.dat file.')
954     
955           END SUBROUTINE CHECK_IC_SOLIDS_PHASES
956     
957     
958     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
959     !                                                                      !
960     ! Subroutine: CHECK_IC_OVERFLOW                                        !
961     ! Author: J.Musser                                    Date: 01-Mar-14  !
962     !                                                                      !
963     ! Purpose: Verify that no data was defined for unspecified IC.         !
964     !                                                                      !
965     !                                                                      !
966     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
967     
968           SUBROUTINE CHECK_IC_OVERFLOW(ICV)
969     
970     ! Global Variables:
971     !---------------------------------------------------------------------//
972     ! Gas phase volume fraction, pressure, temperature, species.
973           use ic, only: IC_EP_g, IC_T_g, IC_X_g
974     ! Gas phase velocity components.
975           use ic, only: IC_U_g, IC_V_g, IC_W_g
976     ! Radiation model parameters.
977           use ic, only: IC_T_RG
978     ! K-Epsilon model parameters.
979           use ic, only: IC_K_TURB_G, IC_E_TURB_G
980     ! IC for user-defined scalar equation.
981           use ic, only: IC_SCALAR
982     ! Solids volume fraction, bulk density
983           use ic, only: IC_ROP_s
984     ! Solids velocity components.
985           use ic, only: IC_U_s, IC_V_s, IC_W_s
986     ! Solids temperature, mass fractions, granular energy
987           use ic, only: IC_T_s, IC_X_s
988     ! Radiation model parameters.
989           use ic, only: IC_T_RS
990     ! IC Type: UNDEFINED or PATCH.
991           use ic, only: IC_TYPE
992     
993     ! Global Parameters:
994     !---------------------------------------------------------------------//
995     ! Parameter constant
996           use param1, only: UNDEFINED
997     ! Maximum number of solids phases and user-defined scalars.
998           use param, only: DIM_M, DIM_SCALAR
999     ! Maximum number of gas and solids phase species
1000           use param, only: DIM_N_g, DIM_N_s
1001     
1002     ! Use the error manager for posting error messages.
1003     !---------------------------------------------------------------------//
1004           use error_manager
1005     
1006           implicit none
1007     
1008     ! Dummy Arguments:
1009     !---------------------------------------------------------------------//
1010     ! IC region index.
1011           INTEGER, INTENT(IN) :: ICV
1012     
1013     ! Local Variables:
1014     !---------------------------------------------------------------------//
1015     ! Loop counters
1016           INTEGER :: M, N
1017     !......................................................................!
1018     
1019           IF (IC_TYPE(ICV) == 'PATCH') RETURN
1020     
1021     ! Initialize the error manager.
1022           CALL INIT_ERR_MSG("CHECK_IC_OVERFLOW")
1023     
1024     ! GAS PHASE quantities
1025     ! -------------------------------------------->>>
1026           IF(IC_U_G(ICV) /= UNDEFINED) THEN
1027               WRITE(ERR_MSG, 1010) trim(iVar('IC_U_g',ICV))
1028               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1029           ELSEIF(IC_V_G(ICV) /= UNDEFINED) THEN
1030              WRITE(ERR_MSG, 1010) trim(iVar('IC_V_g',ICV))
1031              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1032           ELSEIF(IC_W_G(ICV) /= UNDEFINED) THEN
1033              WRITE(ERR_MSG, 1010) trim(iVar('IC_W_g',ICV))
1034              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1035           ELSEIF(IC_EP_G(ICV) /= UNDEFINED) THEN
1036              WRITE(ERR_MSG, 1010) trim(iVar('IC_EP_g',ICV))
1037              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1038           ELSEIF(IC_T_G(ICV) /= UNDEFINED) THEN
1039               WRITE(ERR_MSG, 1010) trim(iVar('IC_T_g',ICV))
1040               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1041           ELSEIF(IC_T_RG(ICV) /= UNDEFINED) THEN
1042               WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rg',ICV))
1043               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1044           ELSEIF(IC_K_Turb_G(ICV) /= UNDEFINED) THEN
1045              WRITE(ERR_MSG, 1010) trim(iVar('IC_K_Turb_G',ICV))
1046              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1047           ELSEIF(IC_E_Turb_G(ICV) /= UNDEFINED) THEN
1048              WRITE(ERR_MSG, 1010) trim(iVar('IC_E_Turb_G',ICV))
1049              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1050           ENDIF
1051           DO N = 1, DIM_N_G
1052              IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
1053                 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_g',ICV))
1054                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1055              ENDIF
1056           ENDDO
1057           DO N = 1, DIM_SCALAR
1058              IF(IC_Scalar(ICV,N) /= UNDEFINED) THEN
1059                 WRITE(ERR_MSG, 1010) trim(iVar('IC_Scalar',ICV))
1060                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1061              ENDIF
1062           ENDDO
1063     ! --------------------------------------------<<<
1064     
1065     
1066     ! SOLIDS PHASE quantities
1067     ! -------------------------------------------->>>
1068           DO M=1, DIM_M
1069              IF(IC_ROP_S(ICV,M) /= UNDEFINED) THEN
1070                 WRITE(ERR_MSG, 1010) trim(iVar('IC_ROP_s',ICV,M))
1071                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1072              ELSEIF(IC_U_S(ICV,M) /= UNDEFINED) THEN
1073                 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_s',ICV,M))
1074                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1075              ELSEIF(IC_V_S(ICV,M) /= UNDEFINED) THEN
1076                 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_s',ICV,M))
1077                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1078              ELSEIF(IC_W_S(ICV,M) /= UNDEFINED) THEN
1079                 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_s',ICV,M))
1080                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1081              ELSEIF(IC_T_S(ICV,M) /= UNDEFINED) THEN
1082                 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_s',ICV,M))
1083                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1084              ELSEIF(IC_T_RS(ICV,M) /= UNDEFINED) THEN
1085                 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rs',ICV,M))
1086                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1087              ENDIF
1088              DO N = 1, DIM_N_S
1089                 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
1090                    WRITE(ERR_MSG, 1010) trim(iVar('IC_X_s',ICV,M))
1091                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1092                 ENDIF
1093              ENDDO
1094           ENDDO
1095     ! --------------------------------------------<<<
1096     
1097           CALL FINL_ERR_MSG
1098           RETURN
1099     
1100      1010 FORMAT('Error 1010: ',A,' specified in an undefined IC region')
1101     
1102           END SUBROUTINE CHECK_IC_OVERFLOW
1103