File: N:\mfix\model\check_data_20.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Subroutine: CHECK_DATA_20                                           C
4     !  Purpose:                                                            C
5     !     - check whether field variables are initialized in all cells     C
6     !     - check whether the sum of void and volume fractions is 1.0      C
7     !       in all fluid and mass inflow cells                             C
8     !     - check whether mu_gmax is specified if k_epsilon or l_scale     C
9     !                                                                      C
10     !  Author: M. Syamlal                                 Date: 30-JAN-92  C
11     !  Reviewer: P. Nicoletti, W. Rogers, S. Venkatesan   Date: 31-JAN-92  C
12     !                                                                      C
13     !  Revision Number:                                                    C
14     !  Purpose:                                                            C
15     !  Author:                                            Date: dd-mmm-yy  C
16     !  Reviewer:                                          Date: dd-mmm-yy  C
17     !                                                                      C
18     !  Literature/Document References:                                     C
19     !                                                                      C
20     !  Variables referenced:                                               C
21     !  Variables modified:                                                 C
22     !  Local variables:                                                    C
23     !                                                                      C
24     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
25     
26           SUBROUTINE CHECK_DATA_20
27     
28     !-----------------------------------------------
29     ! Modules
30     !-----------------------------------------------
31           USE param
32           USE param1
33           USE toleranc
34           USE fldvar
35           USE run
36           USE geometry
37           USE constant
38           USE physprop
39           USE indices
40           USE funits
41           USE visc_g
42           USE rxns
43           USE scalars
44           USE compar
45           USE sendrecv
46           USE discretelement
47           USE mfix_pic
48           USE functions
49     
50           use mpi_utility
51           use error_manager
52     
53           IMPLICIT NONE
54     
55     !-----------------------------------------------
56     ! Local variables
57     !-----------------------------------------------
58     ! Indices
59           INTEGER :: I, J, K, IJK, IMJK, IJMK, IJKM
60     ! Solids phase
61           INTEGER :: M
62     ! Species index
63           INTEGER :: NN
64     ! Logical variable to set, if there is an error
65           LOGICAL :: ABORT
66     ! Whether L_scale is nonzero
67           LOGICAL :: NONZERO
68     ! 1.0 - sum of all volume fractions
69           DOUBLE PRECISION DIF
70     !-----------------------------------------------
71     
72           CALL INIT_ERR_MSG("CHECK_DATA_20")
73     
74           call send_recv(p_g,2)
75           call send_recv(ep_g,2)
76           call send_recv(w_s,2)
77           call send_recv(w_g,2)
78           call send_recv(u_s,2)
79           call send_recv(u_g,2)
80           call send_recv(v_s,2)
81           call send_recv(v_g,2)
82           call send_recv(ro_s,2)
83           call send_recv(rop_s,2)
84           call send_recv( P_STAR, 2 )
85           call send_recv( ROP_G, 2 )
86           call send_recv( RO_G, 2 )
87           call send_recv( T_G, 2 )
88           call send_recv( T_S, 2 )
89           call send_recv( X_G, 2 )
90           call send_recv( X_S, 2 )
91           IF(GRANULAR_ENERGY) call send_recv( THETA_m, 2 )
92     
93           ABORT = .FALSE.
94     
95     ! Check whether all field variables are initialized in all fluid cells
96     ! and flow boundary cells
97     ! ---------------------------------------------------------------->>>
98           DO K = kstart2, kend2
99           DO J = jstart2, jend2
100           DO I = istart2, iend2
101              IJK = FUNIJK(I,J,K)
102              IF (.NOT.WALL_AT(IJK)) THEN
103     
104                 IMJK = IM_OF(IJK)
105                 IJMK = JM_OF(IJK)
106                 IJKM = KM_OF(IJK)
107     
108     ! check gas phase fields
109                 IF(EP_G(IJK) == UNDEFINED) &
110                    CALL REPORT_ERROR(ABORT, I, J, K, 'EP_G')
111                 IF(P_G(IJK) == UNDEFINED) &
112                    CALL REPORT_ERROR(ABORT, I, J, K, 'P_G')
113                 IF(P_STAR(IJK) == UNDEFINED) &
114                    CALL REPORT_ERROR(ABORT, I, J, K, 'P_STAR')
115                 IF(RO_G(IJK) == UNDEFINED) &
116                    CALL REPORT_ERROR(ABORT, I, J, K, 'RO_G')
117                 IF(ROP_G(IJK) == UNDEFINED) &
118                    CALL REPORT_ERROR(ABORT, I, J, K, 'ROP_G')
119     
120                 IF(U_G(IJK) == UNDEFINED) &
121                    CALL REPORT_ERROR(ABORT, I, J, K, 'U_G')
122                 IF(V_G(IJK) == UNDEFINED) &
123                    CALL REPORT_ERROR(ABORT, I, J, K, 'V_G')
124                 IF(W_G(IJK) == UNDEFINED) &
125                    CALL REPORT_ERROR(ABORT, I, J, K, 'W_G')
126     
127                 IF(U_G(IMJK) == UNDEFINED) &
128                    CALL REPORT_ERROR(ABORT, I-1, J, K, 'U_G')
129                 IF(V_G(IJMK) == UNDEFINED) &
130                    CALL REPORT_ERROR(ABORT, I, J-1, K, 'V_G')
131                 IF(W_G(IJKM) == UNDEFINED) &
132                    CALL REPORT_ERROR(ABORT, I, J, K-1, 'W_G')
133     
134                 IF(T_G(IJK) == UNDEFINED) THEN
135                    IF(ENERGY_EQ .OR. RO_G0==UNDEFINED .OR. &
136                       MU_G0==UNDEFINED) &
137                       CALL REPORT_ERROR(ABORT, I, J, K, 'T_G')
138                 ENDIF
139     
140                 IF(SPECIES_EQ(0) .OR. RO_G0==UNDEFINED .AND. &
141                    MW_AVG==UNDEFINED) THEN
142                    DO NN = 1, NMAX(0)
143                       IF(X_G(IJK,NN) == UNDEFINED) &
144                          CALL REPORT_ERROR(ABORT, I, J, K, 'X_G',NN)
145                    ENDDO
146                 ENDIF
147     
148                 DO NN = 1, NScalar
149                   IF(Scalar(IJK,NN) == UNDEFINED) &
150                      CALL REPORT_ERROR(ABORT, I, J, K, 'SCALAR',NN)
151                 ENDDO
152     
153     ! check solids phase fields. these quantities are specified via the
154     ! subroutines set_ic and set_bc0/set_bc1 that employ the initial and
155     ! boundary conditions set in the mfix.dat.
156                 DO M = 1, SMAX
157     
158                   IF (RO_S(IJK,M) == UNDEFINED) &
159                      CALL REPORT_ERROR(ABORT, I, J, K, 'RO_S',M)
160     
161                   IF (ROP_S(IJK,M) == UNDEFINED) &
162                      CALL REPORT_ERROR(ABORT, I, J, K, 'ROP_S',M)
163     
164                   IF (U_S(IJK,M)==UNDEFINED .AND. I/=IMAX2) &
165                      CALL REPORT_ERROR(ABORT, I, J, K, 'U_S',M)
166                   IF (V_S(IJK,M)==UNDEFINED .AND. J/=JMAX2) &
167                      CALL REPORT_ERROR(ABORT, I, J, K, 'V_S',M)
168                   IF (W_S(IJK,M)==UNDEFINED .AND. K/=KMAX2) &
169                      CALL REPORT_ERROR(ABORT, I, J, K, 'W_S',M)
170     
171                   IF (U_S(IMJK,M) == UNDEFINED) &
172                      CALL REPORT_ERROR(ABORT, I, J, K, 'U_S',M)
173                   IF (V_S(IJMK,M) == UNDEFINED) &
174                      CALL REPORT_ERROR(ABORT, I, J, K, 'V_S',M)
175                   IF (W_S(IJKM,M) == UNDEFINED) &
176                      CALL REPORT_ERROR(ABORT, I, J, K, 'W_S',M)
177     
178                   IF (T_S(IJK,M) == UNDEFINED) THEN
179                      IF (ENERGY_EQ) &
180                         CALL REPORT_ERROR(ABORT, I, J, K, 'T_S',M)
181                   ENDIF
182     
183                   IF (SPECIES_EQ(M)) THEN
184                      DO NN = 1, NMAX(M)
185                         IF(X_S(IJK,M,NN) == UNDEFINED) &
186                            CALL REPORT_ERROR(ABORT, I, J, K, 'X_S', M, NN)
187                      ENDDO
188                   ENDIF
189                ENDDO   ! end do m=1,smax
190     
191              ENDIF  ! IF (.NOT.WALL_AT(IJK)) THEN
192           ENDDO  ! end do I = istart2, iend2
193           ENDDO  ! end do J = jstart2, jend2
194           ENDDO  ! end do K = kstart2, kend2
195     
196     
197           CALL GLOBAL_ALL_OR(ABORT)
198           IF(ABORT) THEN
199              WRITE(ERR_MSG, 2000)
200              CALL FLUSH_ERR_MSG(HEADER=.FALSE., ABORT=.TRUE.)
201              CALL FINL_ERR_MSG
202              RETURN
203           ENDIF
204     
205     
206     ! Additional check for fluid or mass inflow cells
207     ! --------------------------------------------------------------------//
208           NONZERO = .FALSE.
209     
210           DO K = kstart2, kend2
211           DO J = jstart2, jend2
212           DO I = istart2, iend2
213              IJK = FUNIJK(I,J,K)
214     
215              IF (FLAG(IJK)==1 .OR. FLAG(IJK)==20) THEN
216     
217     ! Check whether L_scale is non-zero anywhere
218                 IF (L_SCALE(IJK) /= ZERO) NONZERO = .TRUE.
219     
220     ! Ep_g must have a value > 0 and < 1
221                 IF(EP_G(IJK) < SMALL_NUMBER .OR. EP_G(IJK) > ONE) &
222                    CALL REPORT_UNPHYSICAL(ABORT, I, J, K, 'EP_G', EP_G(IJK))
223     
224     ! Check the sum of volume fractions. This is skipped for DES as the
225     ! solids volume fractions may not yet be calculated.
226                 IF(.NOT.DISCRETE_ELEMENT .AND. SMAX>0) THEN
227                    DIF = ONE - EP_G(IJK)
228                    DIF = DIF - SUM(ROP_S(IJK,:MMAX)/RO_S(IJK,:MMAX))
229                    IF (ABS(DIF) > SMALL_NUMBER) CALL REPORT_UNPHYSICAL( &
230                       ABORT, I, J, K, 'Volume Fraction SUM', 1.0-DIF)
231                 ENDIF
232              ENDIF   ! IF (FLAG(IJK)==1 .OR. FLAG(IJK)==20) THEN
233           ENDDO   ! I = istart2, iend2
234           ENDDO   ! J = jstart2, jend2
235           ENDDO   ! K = kstart2, kend2
236     
237     
238           CALL GLOBAL_ALL_OR(ABORT)
239           IF(ABORT) THEN
240              WRITE(ERR_MSG, 2000)
241              CALL FLUSH_ERR_MSG(HEADER=.FALSE., ABORT=.TRUE.)
242              CALL FINL_ERR_MSG
243              RETURN
244           ENDIF
245     
246     !  Check whether MU_gmax is specified
247           CALL GLOBAL_ALL_OR(NONZERO)
248           IF (NONZERO .AND. MU_GMAX==UNDEFINED) THEN
249              WRITE(ERR_MSG, 1300)
250              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
251              CALL FINL_ERR_MSG
252           ENDIF
253     
254      1300 FORMAT('Error 1300: Message: Turbulent length scale is nonzero.',&
255              /'Specify MU_gmax in the mfix.dat file.')
256     
257           CALL FINL_ERR_MSG
258           RETURN
259     
260      2000 FORMAT('Please correct the mfix.dat file.')
261     
262     
263     
264           CONTAINS
265     
266     
267           SUBROUTINE REPORT_ERROR(ABORT, pI, pJ, pK, VAR, LC1, LC2)
268     
269           LOGICAL, INTENT(INOUT) :: ABORT
270           INTEGER, INTENT(IN) :: pI, pJ, pK
271           CHARACTER(LEN=*), INTENT(IN) :: VAR
272           INTEGER, INTENT(IN), OPTIONAL :: LC1, LC2
273           CHARACTER(LEN=32) :: VAR_FULL
274     
275           VAR_FULL=''
276           IF(PRESENT(LC2)) THEN
277              VAR_FULL = iVAR(VAR,LC1,LC2)
278           ELSEIF(PRESENT(LC1)) THEN
279              VAR_FULL = iVAR(VAR,LC1)
280           ELSE
281              VAR_FULL = VAR
282           ENDIF
283     
284           IF(.NOT.ABORT) THEN
285              WRITE(ERR_MSG,1000)
286              CALL FLUSH_ERR_MSG(FOOTER=.FALSE.)
287              ABORT = .TRUE.
288           ENDIF
289     
290      1000 FORMAT('Error 1000: The following field variables are undefined')
291     
292     
293           WRITE(ERR_MSG, 1010) I, J, K, trim(VAR_FULL)
294           CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
295     
296      1010 FORMAT(1X,'I = ',I6,' J = ',I6,' K = ',I6,5X,A)
297     
298     
299     
300           END SUBROUTINE REPORT_ERROR
301     
302           SUBROUTINE REPORT_UNPHYSICAL(ABORT, pI, pJ, pK, VAR, VALUE)
303     
304           LOGICAL, INTENT(INOUT) :: ABORT
305           INTEGER, INTENT(IN) :: pI, pJ, pK
306           CHARACTER(LEN=*), INTENT(IN) :: VAR
307           DOUBLE PRECISION, INTENT(IN) :: VALUE
308     
309           IF(.NOT.ABORT) THEN
310              WRITE(ERR_MSG,1100)
311              CALL FLUSH_ERR_MSG(FOOTER=.FALSE.)
312              ABORT = .TRUE.
313           ENDIF
314     
315      1100 FORMAT('Error 1100: The following field variables are ',&
316              'out of range')
317     
318           WRITE(ERR_MSG, 1110) I, J, K, trim(VAR), VALUE
319           CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
320     
321      1110 FORMAT(1X,'I = ',I6,' J = ',I6,' K = ',I6,2X,A,'Value:',g11.4)
322     
323     
324           END SUBROUTINE REPORT_UNPHYSICAL
325     
326     
327           END SUBROUTINE CHECK_DATA_20
328