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