File: N:\mfix\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           use constant, only: l_scale0
368     ! Gas phase volume fraction, pressure, temperature, species.
369           use ic, only: IC_EP_g, IC_P_g, IC_T_g, IC_X_g
370     ! Gas phase velocity components.
371           use ic, only: IC_U_g, IC_V_g, IC_W_g
372     ! Radiation model parameters.
373           use ic, only: IC_GAMA_RG, IC_T_RG
374     ! K-Epsilon model parameters.
375           use ic, only: IC_K_TURB_G, IC_E_TURB_G
376     ! L-scale model parameters
377           use ic, only: IC_L_SCALE
378     ! IC for user-defined scalar equation.
379           use ic, only: IC_SCALAR
380     ! IC Type: UNDEFINED or PATCH.
381           use ic, only: IC_TYPE
382     
383     ! Flag. Solve Energy equations
384           use run, only: ENERGY_EQ
385     ! Flag. Solve Species equations
386           use run, only: SPECIES_EQ
387     ! Flag: Solve K-Epsilon; K-E parameters
388           use run, only: K_Epsilon
389     ! Specified constant gas density and viscosity.
390           use physprop, only: RO_G0, MU_G0
391     ! Specified average molecular weight
392           use physprop, only: MW_AVG
393     ! Number of gas phase species
394           use physprop, only: NMAX
395     ! Specified number of scalar equations.
396           use scalars, only: NSCALAR
397     ! Flag: Do not solve in specified direction.
398           use geometry, only: NO_I, NO_J, NO_K
399     
400     ! Global Parameters:
401     !---------------------------------------------------------------------//
402     ! Parameter constants
403           use param1, only: ZERO, ONE, UNDEFINED
404     
405     ! Use the error manager for posting error messages.
406     !---------------------------------------------------------------------//
407           use error_manager
408     
409           use toleranc
410     
411           implicit none
412     
413     ! Dummy Arguments:
414     !---------------------------------------------------------------------//
415           INTEGER, INTENT(IN) :: ICV
416     
417     ! Local Variables:
418     !---------------------------------------------------------------------//
419     ! Loop index
420           INTEGER :: N
421     ! Sum of mass fraction.
422           DOUBLE PRECISION :: SUM
423     ! Flag for regular IC regions
424           LOGICAL :: BASIC_IC
425     !......................................................................!
426     
427     ! Initialize the error manager.
428           CALL INIT_ERR_MSG("CHECK_IC_GAS_PHASE")
429     
430     ! Patch ICs skip various checks.
431           BASIC_IC = (IC_TYPE(ICV) /= 'PATCH')
432     
433     ! Check that gas phase velocity components are initialized.
434           IF(BASIC_IC) THEN
435              IF(IC_U_G(ICV) == UNDEFINED) THEN
436                 IF(NO_I) THEN
437                    IC_U_G(ICV) = ZERO
438                 ELSE
439                    WRITE(ERR_MSG, 1000) trim(iVar('IC_U_g',ICV))
440                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
441                 ENDIF
442              ENDIF
443     
444              IF(IC_V_G(ICV) == UNDEFINED) THEN
445                 IF(NO_J) THEN
446                    IC_V_G(ICV) = ZERO
447                 ELSE
448                    WRITE(ERR_MSG, 1000) trim(iVar('IC_V_g',ICV))
449                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
450                 ENDIF
451              ENDIF
452     
453              IF(IC_W_G(ICV) == UNDEFINED) THEN
454                 IF (NO_K) THEN
455                    IC_W_G(ICV) = ZERO
456                 ELSE
457                    WRITE(ERR_MSG, 1000) trim(iVar('IC_W_g',ICV))
458                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
459                ENDIF
460              ENDIF
461           ENDIF
462     
463     ! Check that gas phase void fraction is initialized. Patched ICs may
464     ! have an undefined volume fration. A second check is preformed on
465     ! the solids.
466           IF(IC_EP_G(ICV) == UNDEFINED .AND. BASIC_IC) THEN
467              WRITE(ERR_MSG, 1000) trim(iVar('IC_EP_g',ICV))
468              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
469           ENDIF
470     
471     ! Check that if the gas phase pressure is initialized and the gas is
472     ! compressible that the gas phase pressure is not zero or negative
473           IF(IC_P_G(ICV) /= UNDEFINED) THEN
474              IF(RO_G0==UNDEFINED .AND. IC_P_G(ICV)<=ZERO) THEN
475                 WRITE(ERR_MSG, 1100) trim(iVar('IC_P_g',ICV)),             &
476                    iVal(IC_P_G(ICV))
477                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
478              ENDIF
479           ENDIF
480     
481      1100 FORMAT('Error 1100: Pressure must be greater than 0.0 for ',     &
482              'compressible flow',/'Illegal value: ',A,' = ',A,/'Please ',  &
483              'correct the mfix.dat file.')
484     
485           IF(BASIC_IC) THEN
486              IF(ENERGY_EQ .OR. RO_G0==UNDEFINED .OR. MU_G0==UNDEFINED) THEN
487                 IF(IC_T_G(ICV)==UNDEFINED) THEN
488                    WRITE(ERR_MSG, 1000) trim(iVar('IC_T_g',ICV))
489                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
490                 ENDIF
491              ENDIF
492           ENDIF
493     
494     ! Gas phase radiation values.
495           IF (ENERGY_EQ) THEN
496              IF (IC_GAMA_RG(ICV) < ZERO) THEN
497                 WRITE(ERR_MSG, 1001) trim(iVar('IC_GAMA_Rg',ICV)),         &
498                    iVal(IC_GAMA_RG(ICV))
499                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
500              ELSEIF (IC_GAMA_RG(ICV) > ZERO) THEN
501                 IF (IC_T_RG(ICV) == UNDEFINED) THEN
502                    WRITE(ERR_MSG, 1000) iVar('IC_T_Rg',ICV)
503                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
504                 ENDIF
505              ENDIF
506           ENDIF
507     
508     
509     ! First: sum together defiend gas phase species mass fractions.
510           SUM = ZERO
511           DO N = 1, NMAX(0)
512              IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
513                 SUM = SUM + IC_X_G(ICV,N)
514              ELSEIF(BASIC_IC) THEN
515                 IC_X_G(ICV,N) = ZERO
516              ENDIF
517           ENDDO
518     
519     
520     ! Enforce that the species mass fractions must sum to one.
521           IF(.NOT.COMPARE(ONE,SUM)) THEN
522     
523     ! No error for ZERO sum PATCH IC data.
524              IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM))THEN
525     
526     ! Error for regular IC regions when solving species equations.
527              ELSEIF(SPECIES_EQ(0)) THEN
528                 WRITE(ERR_MSG, 1110) ICV
529                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
530     
531      1110 FORMAT('Error 1110: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
532              'gas phase',/'species equations are solved. Please correct ', &
533              'the mfix.dat file.')
534     
535     ! Error for slightly compressible flows with MW_AVG specified.
536              ELSEIF(RO_G0 == UNDEFINED .AND. MW_AVG == UNDEFINED) THEN
537                 WRITE(ERR_MSG, 1111) ICV
538                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
539     
540      1111 FORMAT('Error 1111: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
541              'gas phase',/'is compressible and MW_AVG is UNDEFINED.',/     &
542              'Please correct the mfix.dat file.')
543     
544              ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
545                 WRITE(ERR_MSG, 1112) ICV
546                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
547     
548      1112 FORMAT('Error 1112: IC_X_g(',I3,',:) do not sum to ONE or ZERO ',&
549              'and they',/'are not needed. Please correct the mfix.dat ',   &
550              'file.')
551     
552              ELSE
553                 IC_X_G(ICV,:) = ZERO
554                 IC_X_G(ICV,1) = ONE
555              ENDIF
556           ENDIF
557     
558     
559           DO N = 1, NScalar
560              IF(IC_Scalar(ICV,N) == UNDEFINED) IC_Scalar(ICV,N) = ZERO
561           ENDDO
562     
563     
564           IF(BASIC_IC) THEN
565              IF (L_SCALE0 == ZERO) THEN
566                 IF (IC_L_SCALE(ICV) /= UNDEFINED) THEN
567                    WRITE(ERR_MSG, 1113) ICV
568                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
569      1113 FORMAT('Error 1113: IC_L_SCALE(',I3,',:) is defined but L_SCALE0 ',&
570              'is equal',/,'to zero. A non-zero value must be specified to ',&
571              'activate this model.',/,'Please correct the mfix.dat file.')
572                 ENDIF
573              ELSEIF (L_SCALE0 < ZERO) THEN
574                 WRITE(ERR_MSG, 1001) 'L_SCALE0', iVal(L_scale0)
575                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
576              ELSE   ! l_scale0 is defined at not zero
577                 IF (IC_L_SCALE(ICV) < ZERO) THEN
578                    WRITE(ERR_MSG, 1001) iVar('IC_L_SCALE',ICV), &
579                       iVal(IC_L_SCALE(ICV))
580                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
581                 ENDIF
582              ENDIF
583           ENDIF
584     
585     
586           IF(K_Epsilon .AND. BASIC_IC) THEN
587              IF (IC_K_Turb_G(ICV) == UNDEFINED) THEN
588                 WRITE(ERR_MSG, 1000) iVar('IC_K_Turb_G',ICV)
589                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
590              ENDIF
591              IF (IC_E_Turb_G(ICV) == UNDEFINED) THEN
592                 WRITE(ERR_MSG, 1000) iVar('IC_E_Turb_G',ICV)
593                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
594              ENDIF
595           ENDIF
596     
597           CALL FINL_ERR_MSG
598     
599           RETURN
600     
601      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
602              'correct the mfix.dat file.')
603     
604      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/   &
605              'Please correct the mfix.dat file.')
606     
607           END SUBROUTINE CHECK_IC_GAS_PHASE
608     
609     
610     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
611     !                                                                      !
612     !  Subroutine: CHECK_IC_SOLIDS_PHASES                                  !
613     !  Author: P. Nicoletti                               Date: 02-DEC-91  !
614     !  Author: J.Musser                                   Date: 01-MAR-14  !
615     !                                                                      !
616     !  Purpose: Verify solids phase(s) input variables in IC region.       !
617     !                                                                      !
618     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
619           SUBROUTINE CHECK_IC_SOLIDS_PHASES(ICV)
620     
621     
622     ! Global Variables:
623     !---------------------------------------------------------------------//
624     ! Solids volume fraction, bulk density
625           use ic, only: IC_EP_s, IC_ROP_s
626     ! Solids velocity components.
627           use ic, only: IC_U_s, IC_V_s, IC_W_s
628     ! Solids temperature, mass fractions, granular energy
629           use ic, only: IC_T_s, IC_X_s, IC_THETA_M
630     ! Radiation model parameters.
631           use ic, only: IC_GAMA_RS, IC_T_RS
632     ! Gas phase volume fraction and temperature.
633           use ic, only: IC_EP_g, IC_T_g
634     ! IC Type: UNDEFINED or PATCH.
635           use ic, only: IC_TYPE
636     
637     ! Flag. Solve Energy equations
638           use run, only: ENERGY_EQ
639     ! Flag. Solve Species equations
640           use run, only: SPECIES_EQ
641     ! Flag. Solve Granular Energy PDE
642           use run, only: GRANULAR_ENERGY
643     ! Flag. Solve variable solids density
644           use run, only: SOLVE_ROs
645     ! Baseline solids mass fraction, index of intert
646           use physprop, only: X_S0, INERT_SPECIES
647     ! Specified constant solids density.
648           use physprop, only: RO_S0
649     ! Number of gas phase species
650           use physprop, only: NMAX
651     ! Number of TFM solids phases.
652           use physprop, only: SMAX
653     ! Number of DEM or PIC solids.
654           use discretelement, only: DES_MMAX
655     ! Flag: Do not solve in specified direction.
656           use geometry, only: NO_I, NO_J, NO_K
657     
658     ! Global Parameters:
659     !---------------------------------------------------------------------//
660     ! Maximum number of solids species.
661           use param, only: DIM_M
662     ! Parameter constants
663           use param1, only: ZERO, ONE, UNDEFINED
664     ! function to calculate solids density.
665           USE eos, ONLY: EOSS
666     
667     ! Use the error manager for posting error messages.
668     !---------------------------------------------------------------------//
669           use error_manager
670     
671           use toleranc
672     
673           IMPLICIT NONE
674     
675     ! Dummy Arguments:
676     !---------------------------------------------------------------------//
677     ! Index of IC region.
678           INTEGER, INTENT(IN) :: ICV
679     ! Loop/variable index
680           INTEGER :: M, N
681     ! Various sums.
682           DOUBLE PRECISION SUM, SUM_EP
683     ! Solids phase density in IC region.
684           DOUBLE PRECISION :: IC_ROs(1:DIM_M)
685     ! Index of inert species
686           INTEGER :: INERT
687     ! Flag to skip checks on indexed solid phase.
688           LOGICAL :: SKIP(1:DIM_M)
689     ! Total number of solids phases (TFM + DEM + MPPIC)
690           INTEGER :: MMAX_TOT
691     ! Flag for PATCH IC regions
692           LOGICAL :: BASIC_IC
693     !......................................................................!
694     
695     ! Initialize the error manager.
696           CALL INIT_ERR_MSG("CHECK_IC_SOLIDS_PHASES")
697     
698     ! Patch ICs skip various checks.
699           BASIC_IC = (IC_TYPE(ICV) /= 'PATCH')
700     
701     ! The total number of solids phases (all models).
702           MMAX_TOT = SMAX + DES_MMAX
703     
704     ! Calculate EP_s from EP_g if there is only one solids phase.
705           IF(MMAX_TOT == 1 .AND. IC_EP_S(ICV,1) == UNDEFINED) THEN
706              IF(IC_EP_g(ICV) /= UNDEFINED) IC_EP_S(ICV,1) = ONE-IC_EP_g(ICV)
707           ENDIF
708     
709     ! Bulk density or solids volume fraction must be explicitly defined
710     ! if there are more than one solids phase.
711           IF(MMAX_TOT > 1 .AND. .NOT.COMPARE(IC_EP_g(ICV),ONE)) THEN
712     ! IC_EP_g may be undefined for PATCH IC regions.
713              IF(IC_EP_g(ICV) /= UNDEFINED) THEN
714                 DO M = 1, MMAX_TOT
715                    IF(IC_ROP_S(ICV,M) == UNDEFINED .AND. &
716                       IC_EP_S(ICV,M) == UNDEFINED) THEN
717                       WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
718                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
719                    ENDIF
720                 ENDDO
721     
722     ! If IC_EP_G is undefined, then ROP_s and EP_s should be too.
723              ELSE
724                 DO M = 1, MMAX_TOT
725                    IF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
726                       IC_EP_S(ICV,M) /= UNDEFINED) THEN
727                       WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
728                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
729                    ENDIF
730                 ENDDO
731              ENDIF
732           ENDIF
733     
734      1400 FORMAT('Error 1400: Insufficient solids phase ',I2,' ',          &
735              'information for IC',/'region ',I3,'. ',A,' not specified.',/ &
736              'Please correct the mfix.dat file.')
737     
738     ! Determine which solids phases are present.
739           DO M = 1, MMAX_TOT
740              SKIP(M)=(IC_ROP_S(ICV,M)==UNDEFINED.OR.IC_ROP_S(ICV,M)==ZERO) &
741                 .AND.(IC_EP_S(ICV,M)==UNDEFINED .OR.IC_EP_S(ICV,M)==ZERO)
742           ENDDO
743     
744           IF(MMAX_TOT == 1 .AND. IC_EP_g(ICV)/=ONE) SKIP(1) = .FALSE.
745     
746           DO M=1, MMAX_TOT
747     
748     ! check that solids phase m velocity components are initialized
749              IF(BASIC_IC) THEN
750                 IF(IC_U_S(ICV,M) == UNDEFINED) THEN
751                    IF (SKIP(M) .OR. NO_I) THEN
752                       IC_U_S(ICV,M) = ZERO
753                    ELSE
754                       WRITE(ERR_MSG, 1000)trim(iVar('IC_U_s',ICV,M))
755                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
756                    ENDIF
757                 ENDIF
758     
759                 IF(IC_V_S(ICV,M) == UNDEFINED) THEN
760                    IF(SKIP(M) .OR. NO_J) THEN
761                       IC_V_S(ICV,M) = ZERO
762                    ELSE
763                       WRITE(ERR_MSG, 1000)trim(iVar('IC_V_s',ICV,M))
764                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
765                    ENDIF
766                 ENDIF
767     
768                 IF(IC_W_S(ICV,M) == UNDEFINED) THEN
769                    IF(SKIP(M) .OR. NO_K) THEN
770                       IC_W_S(ICV,M) = ZERO
771                    ELSE
772                       WRITE(ERR_MSG, 1000)trim(iVar('IC_W_s',ICV,M))
773                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
774                    ENDIF
775                 ENDIF
776     
777                 IF(ENERGY_EQ .AND. IC_T_S(ICV,M)==UNDEFINED) THEN
778                    IF(SKIP(M)) THEN
779                       IC_T_S(ICV,M) = IC_T_G(ICV)
780                    ELSE
781                       WRITE(ERR_MSG, 1000)trim(iVar('IC_T_s',ICV,M))
782                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
783                    ENDIF
784                 ENDIF
785     
786                 IF(GRANULAR_ENERGY .AND. IC_THETA_M(ICV,M)==UNDEFINED) THEN
787                    IF(SKIP(M)) THEN
788                       IC_THETA_M(ICV,M) = ZERO
789                    ELSE
790                       WRITE(ERR_MSG, 1000)trim(iVar('IC_Theta_M',ICV,M))
791                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
792                    ENDIF
793                ENDIF
794     
795                 IF(ENERGY_EQ) THEN
796                    IF(IC_GAMA_RS(ICV,M) < ZERO) THEN
797                       WRITE(ERR_MSG, 1001)trim(iVar('IC_GAMA_Rs',ICV,M)),  &
798                          iVal(IC_GAMA_RS(ICV,M))
799                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
800                    ELSEIF (IC_GAMA_RS(ICV,M) > ZERO) THEN
801                       IF(IC_T_RS(ICV,M) == UNDEFINED) THEN
802                          WRITE(ERR_MSG, 1001)trim(iVar('IC_T_Rs',ICV,M))
803                          CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
804                       ENDIF
805                    ENDIF
806                 ENDIF
807              ENDIF
808     
809     
810     ! First: sum together defiend species mass fractions.
811              SUM = ZERO
812              DO N = 1, NMAX(M)
813                 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
814                    SUM = SUM + IC_X_S(ICV,M,N)
815                 ELSEIF(BASIC_IC) THEN
816                    IC_X_S(ICV,M,N) = ZERO
817                 ENDIF
818              ENDDO
819     
820     ! Enforce that the species mass fractions must sum to one.
821              IF(.NOT.COMPARE(ONE,SUM)) THEN
822     
823     ! Summing to zero is not an error for PATCH IC regions.
824                 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM)) THEN
825     
826                 ELSEIF(SPECIES_EQ(M) .AND. .NOT.SKIP(M)) THEN
827                    WRITE(ERR_MSG, 1402) ICV, M
828                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
829     
830      1402 FORMAT('Error 1402: IC_X_s(',I3,',',I2,',:) do NOT sum to ONE ', &
831              'and the solids phase',/'species equations are solved. ',     &
832              'Please correct the mfix.dat file.')
833     
834                 ELSEIF(SOLVE_ROS(M) .AND. .NOT.SKIP(M)) THEN
835                    WRITE(ERR_MSG, 1403) ICV, M
836                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
837     
838      1403 FORMAT('Error 1403: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ',  &
839              'and the solids phase',/'density is calculated. Please ',     &
840              'correct the mfix.dat file.')
841     
842                 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
843                     WRITE(ERR_MSG, 1404) ICV
844                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
845     
846      1404 FORMAT('Error 1404: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ',  &
847              'or ZERO and',/'they are not needed. Please correct the ',    &
848              'mfix.dat file.')
849     
850                 ELSE
851                    IC_X_S(ICV,M,:) = ZERO
852                    IC_X_S(ICV,M,1) = ONE
853                 ENDIF
854              ENDIF
855     
856     ! Set the solids density for the IC region.
857              IF(SKIP(M)) THEN
858                 IC_ROs(M) = merge(RO_s0(M), RO_s0(M), SOLVE_ROs(M))
859     
860              ELSEIF(.NOT.SOLVE_ROs(M)) THEN
861                 IC_ROs(M) = RO_s0(M)
862     
863              ELSE
864     ! Verify that the species mass fraction for the inert material is not
865     ! zero in the IC region when the solids is present.
866                 INERT = INERT_SPECIES(M)
867                 IF(IC_X_S(ICV,M,INERT) == ZERO) THEN
868                    WRITE(ERR_MSG,1405) M, ICV
869                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
870                 ENDIF
871     
872      1405 FORMAT('Error 1405: No inert species for phase ',I2,' in IC ',   &
873              'region ',I3,'.',/'Unable to calculate solids phase density. ',&
874              'Please refer to the Readme',/' file for required variable ', &
875              'solids density  model input parameters and',/' make the ',   &
876              'necessary corrections to the data file.')
877     
878     ! Calculate the solids density.
879                 IC_ROs(M) = EOSS(RO_s0(M), X_s0(M,INERT),                  &
880                    IC_X_S(ICV,M,INERT))
881              ENDIF
882     
883           ENDDO   ! end loop over (m=1,smax)
884     
885     
886     ! Initialize the sum of the total volume fraction.
887           SUM_EP = IC_EP_G(ICV)
888     
889           DO M=1, MMAX_TOT
890     
891     ! Clear out both varaibles if this phase is skipped.
892              IF(BASIC_IC .AND. SKIP(M)) THEN
893                 IC_EP_S(ICV,M)  = ZERO
894                 IC_ROP_S(ICV,M) = ZERO
895     
896     ! Leave everything undefined for PATCH ICs that are not specifed.
897              ELSEIF(.NOT.BASIC_IC .AND. (IC_ROP_S(ICV,M) == UNDEFINED      &
898                 .AND. IC_EP_S(ICV,M) == UNDEFINED)) THEN
899     
900     ! If both input parameters are defined. Make sure they are equivalent.
901              ELSEIF(IC_ROP_S(ICV,M) /= UNDEFINED .AND.                     &
902                 IC_EP_S(ICV,M) /= UNDEFINED) THEN
903     
904                 IF(.NOT.COMPARE(IC_EP_S(ICV,M)*IC_ROs(M),                  &
905                    IC_ROP_S(ICV,M))) THEN
906     
907     ! BASIC_IC regions require that the IC_ROP_s and IC_EP_s specifications
908     ! match although it is unlikely that anyone would specify both.
909                    IF(BASIC_IC) THEN
910     
911                       WRITE(ERR_MSG,1406) M, ICV
912                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
913     
914     1406 FORMAT('Error 1406: IC_EP_s and IC_ROP_s are inconsistent for ',&
915              'phase ',I2,/,'in IC region ', I3,'. Please correct the ',&
916              'mfix.dat file.')
917     
918     
919     ! PachedeIC regions defer to IC_EP_s if the values do not match. This
920     ! prevents a dead lock or the need to define both. This case is rather
921     ! common as a defined IC_EP_s is converted to IC_ROP_s. Therefore, if
922     ! a patch region is used more than once, these values may not match.
923                    ELSE
924     
925                       WRITE(ERR_MSG,1407) trim(iVar('IC_ROP_s',ICV,M)), &
926                          trim(iVAL(IC_ROP_S(ICV,M))), trim(iVar('IC_EP_s',&
927                          ICV,M)), trim(iVAL(IC_EP_S(ICV,M)))
928                       CALL FLUSH_ERR_MSG()
929     
930     1407 FORMAT('Warning 1407: IC_EP_s and IC_ROP_s are inconsistent:',    &
931              2(/3x,A,' = ',A),/'Deferring to IC_EP_s to overcome conflict.')
932     
933                       IC_ROP_S(ICV,M) = IC_EP_S(ICV,M)*IC_ROs(M)
934     
935                    ENDIF
936                 ENDIF
937     
938     
939     ! Compute IC_EP_s from IC_ROP_s
940              ELSEIF(IC_EP_S(ICV,M) == UNDEFINED)THEN
941                 IC_EP_S(ICV,M) = IC_ROP_S(ICV,M) / IC_ROs(M)
942     
943     ! Compute IC_ROP_s from IC_EP_s and IC_ROs
944              ELSEIF(IC_ROP_S(ICV,M) == UNDEFINED) THEN
945                 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M) * IC_ROs(M)
946     ! This is a sanity check.
947              ELSE
948     
949              ENDIF
950     ! Add this phase to the total volume fraction.
951              SUM_EP = SUM_EP + IC_EP_S(ICV,M)
952           ENDDO
953     
954     ! Verify that the volume fractions sum to one.
955           IF(BASIC_IC .AND. .NOT.COMPARE(SUM_EP,ONE)) THEN
956              WRITE(ERR_MSG,1410) ICV
957              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
958           ENDIF
959     
960      1410 FORMAT('Error 1410: Illegal initial condition region : ',I3,/    &
961              'Sum of volume fractions does NOT equal ONE. Please correct',/&
962              'the mfix.dat file.')
963     
964     
965           CALL FINL_ERR_MSG
966     
967           RETURN
968     
969     
970      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
971              'correct the mfix.dat file.')
972     
973      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/   &
974              'Please correct the mfix.dat file.')
975     
976      1002 FORMAT('Error 1002: Illegal data in initial condition region ', &
977              I3,/A,' defined for unknown solids phase ',I2,'.',/          &
978              'Please correct the mfix.dat file.')
979     
980           END SUBROUTINE CHECK_IC_SOLIDS_PHASES
981     
982     
983     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
984     !                                                                      !
985     ! Subroutine: CHECK_IC_OVERFLOW                                        !
986     ! Author: J.Musser                                    Date: 01-Mar-14  !
987     !                                                                      !
988     ! Purpose: Verify that no data was defined for unspecified IC.         !
989     !                                                                      !
990     !                                                                      !
991     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
992     
993           SUBROUTINE CHECK_IC_OVERFLOW(ICV)
994     
995     ! Global Variables:
996     !---------------------------------------------------------------------//
997     ! Gas phase volume fraction, pressure, temperature, species.
998           use ic, only: IC_EP_g, IC_T_g, IC_X_g
999     ! Gas phase velocity components.
1000           use ic, only: IC_U_g, IC_V_g, IC_W_g
1001     ! Radiation model parameters.
1002           use ic, only: IC_T_RG
1003     ! K-Epsilon model parameters.
1004           use ic, only: IC_K_TURB_G, IC_E_TURB_G
1005     ! IC for user-defined scalar equation.
1006           use ic, only: IC_SCALAR
1007     ! Solids volume fraction, bulk density
1008           use ic, only: IC_ROP_s
1009     ! Solids velocity components.
1010           use ic, only: IC_U_s, IC_V_s, IC_W_s
1011     ! Solids temperature, mass fractions, granular energy
1012           use ic, only: IC_T_s, IC_X_s
1013     ! Radiation model parameters.
1014           use ic, only: IC_T_RS
1015     ! IC Type: UNDEFINED or PATCH.
1016           use ic, only: IC_TYPE
1017     
1018     ! Global Parameters:
1019     !---------------------------------------------------------------------//
1020     ! Parameter constant
1021           use param1, only: UNDEFINED
1022     ! Maximum number of solids phases and user-defined scalars.
1023           use param, only: DIM_M, DIM_SCALAR
1024     ! Maximum number of gas and solids phase species
1025           use param, only: DIM_N_g, DIM_N_s
1026     
1027     ! Use the error manager for posting error messages.
1028     !---------------------------------------------------------------------//
1029           use error_manager
1030     
1031           implicit none
1032     
1033     ! Dummy Arguments:
1034     !---------------------------------------------------------------------//
1035     ! IC region index.
1036           INTEGER, INTENT(IN) :: ICV
1037     
1038     ! Local Variables:
1039     !---------------------------------------------------------------------//
1040     ! Loop counters
1041           INTEGER :: M, N
1042     !......................................................................!
1043     
1044           IF (IC_TYPE(ICV) == 'PATCH') RETURN
1045     
1046     ! Initialize the error manager.
1047           CALL INIT_ERR_MSG("CHECK_IC_OVERFLOW")
1048     
1049     ! GAS PHASE quantities
1050     ! -------------------------------------------->>>
1051           IF(IC_U_G(ICV) /= UNDEFINED) THEN
1052               WRITE(ERR_MSG, 1010) trim(iVar('IC_U_g',ICV))
1053               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1054           ELSEIF(IC_V_G(ICV) /= UNDEFINED) THEN
1055              WRITE(ERR_MSG, 1010) trim(iVar('IC_V_g',ICV))
1056              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1057           ELSEIF(IC_W_G(ICV) /= UNDEFINED) THEN
1058              WRITE(ERR_MSG, 1010) trim(iVar('IC_W_g',ICV))
1059              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1060           ELSEIF(IC_EP_G(ICV) /= UNDEFINED) THEN
1061              WRITE(ERR_MSG, 1010) trim(iVar('IC_EP_g',ICV))
1062              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1063           ELSEIF(IC_T_G(ICV) /= UNDEFINED) THEN
1064               WRITE(ERR_MSG, 1010) trim(iVar('IC_T_g',ICV))
1065               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1066           ELSEIF(IC_T_RG(ICV) /= UNDEFINED) THEN
1067               WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rg',ICV))
1068               CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1069           ELSEIF(IC_K_Turb_G(ICV) /= UNDEFINED) THEN
1070              WRITE(ERR_MSG, 1010) trim(iVar('IC_K_Turb_G',ICV))
1071              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1072           ELSEIF(IC_E_Turb_G(ICV) /= UNDEFINED) THEN
1073              WRITE(ERR_MSG, 1010) trim(iVar('IC_E_Turb_G',ICV))
1074              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1075           ENDIF
1076           DO N = 1, DIM_N_G
1077              IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
1078                 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_g',ICV))
1079                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1080              ENDIF
1081           ENDDO
1082           DO N = 1, DIM_SCALAR
1083              IF(IC_Scalar(ICV,N) /= UNDEFINED) THEN
1084                 WRITE(ERR_MSG, 1010) trim(iVar('IC_Scalar',ICV))
1085                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1086              ENDIF
1087           ENDDO
1088     ! --------------------------------------------<<<
1089     
1090     
1091     ! SOLIDS PHASE quantities
1092     ! -------------------------------------------->>>
1093           DO M=1, DIM_M
1094              IF(IC_ROP_S(ICV,M) /= UNDEFINED) THEN
1095                 WRITE(ERR_MSG, 1010) trim(iVar('IC_ROP_s',ICV,M))
1096                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1097              ELSEIF(IC_U_S(ICV,M) /= UNDEFINED) THEN
1098                 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_s',ICV,M))
1099                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1100              ELSEIF(IC_V_S(ICV,M) /= UNDEFINED) THEN
1101                 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_s',ICV,M))
1102                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1103              ELSEIF(IC_W_S(ICV,M) /= UNDEFINED) THEN
1104                 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_s',ICV,M))
1105                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1106              ELSEIF(IC_T_S(ICV,M) /= UNDEFINED) THEN
1107                 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_s',ICV,M))
1108                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1109              ELSEIF(IC_T_RS(ICV,M) /= UNDEFINED) THEN
1110                 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rs',ICV,M))
1111                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1112              ENDIF
1113              DO N = 1, DIM_N_S
1114                 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
1115                    WRITE(ERR_MSG, 1010) trim(iVar('IC_X_s',ICV,M))
1116                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1117                 ENDIF
1118              ENDDO
1119           ENDDO
1120     ! --------------------------------------------<<<
1121     
1122           CALL FINL_ERR_MSG
1123           RETURN
1124     
1125      1010 FORMAT('Error 1010: ',A,' specified in an undefined IC region')
1126     
1127           END SUBROUTINE CHECK_IC_OVERFLOW
1128