File: /nfs/home/0/users/jenkins/mfix.git/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           IMPLICIT NONE
50     !-----------------------------------------------
51     ! Local variables
52     !-----------------------------------------------
53     ! Indices
54           INTEGER :: I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP, &
55                      IJKW, IJKE, IJKS, IJKN, IJKB, IJKT, &
56                      IM, JM, KM
57     ! Solids phase
58           INTEGER :: M
59     ! Species index
60           INTEGER :: N
61     ! Logical variable to set, if there is an error
62           LOGICAL :: ABORT
63     ! Whether L_scale is nonzero
64           LOGICAL :: NONZERO
65     ! 1.0 - sum of all volume fractions
66           DOUBLE PRECISION DIF
67     !-----------------------------------------------
68     
69           call send_recv(p_g,2)
70           call send_recv(ep_g,2)
71           call send_recv(w_s,2)
72           call send_recv(w_g,2)
73           call send_recv(u_s,2)
74           call send_recv(u_g,2)
75           call send_recv(v_s,2)
76           call send_recv(v_g,2)
77           call send_recv(ro_s,2)
78           call send_recv(rop_s,2)
79           call send_recv( P_STAR, 2 )
80           call send_recv( ROP_G, 2 )
81           IF(GRANULAR_ENERGY) call send_recv( THETA_m, 2 )
82           call send_recv( RO_G, 2 )
83           call send_recv( T_G, 2 )
84           call send_recv( T_S, 2 )
85           call send_recv( X_G, 2 )
86           call send_recv( X_S, 2 )
87     
88           CALL START_LOG
89           ABORT = .FALSE.
90           NONZERO = .FALSE.
91     
92     ! Check whether all field variables are initialized in all fluid cells
93     ! and flow boundary cells
94     ! ---------------------------------------------------------------->>>
95           DO K = kstart2, kend2
96              DO J = jstart2, jend2
97                 DO I = istart2, iend2
98                    IJK = FUNIJK(I,J,K)
99                    IF (.NOT.WALL_AT(IJK)) THEN
100                       CALL SET_INDEX1 (IJK, I, J, K, IMJK, IPJK, IJMK, &
101                          IJPK, IJKM, IJKP, IJKW, IJKE, IJKS, IJKN, IJKB, &
102                          IJKT, IM, JM, KM)
103     
104     ! check gas phase fields
105                       IF (EP_G(IJK) == UNDEFINED) THEN
106                          IF (.NOT.ABORT) THEN
107                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
108                             ABORT = .TRUE.
109                          ENDIF
110                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'EP_g'
111                       ENDIF
112                       IF (P_G(IJK) == UNDEFINED) THEN
113                          IF (.NOT.ABORT) THEN
114                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
115                             ABORT = .TRUE.
116                          ENDIF
117                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'P_g'
118                       ENDIF
119                       IF (P_STAR(IJK) == UNDEFINED) THEN
120                          IF (.NOT.ABORT) THEN
121                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
122                             ABORT = .TRUE.
123                          ENDIF
124                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'P_star'
125                       ENDIF
126                       IF (RO_G(IJK) == UNDEFINED) THEN
127                          IF (.NOT.ABORT) THEN
128                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
129                             ABORT = .TRUE.
130                          ENDIF
131                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'RO_g'
132                       ENDIF
133                       IF (ROP_G(IJK) == UNDEFINED) THEN
134                          IF (.NOT.ABORT) THEN
135                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
136                             ABORT = .TRUE.
137                          ENDIF
138                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'ROP_g'
139                       ENDIF
140                       IF (T_G(IJK) == UNDEFINED) THEN
141                          IF (ENERGY_EQ .OR. RO_G0==UNDEFINED .OR.&
142                              MU_G0==UNDEFINED) THEN
143                             IF (.NOT.ABORT) THEN
144                                IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
145                                ABORT = .TRUE.
146                             ENDIF
147                             IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'T_g'
148                          ENDIF
149                       ENDIF
150                       IF (U_G(IMJK) == UNDEFINED) THEN
151                          IF (.NOT.ABORT) THEN
152                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
153                             ABORT = .TRUE.
154                          ENDIF
155                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I-1, J, K, 'U_g'
156                       ENDIF
157                       IF (U_G(IJK)==UNDEFINED .AND. I/=IMAX2) THEN
158                          IF (.NOT.ABORT) THEN
159                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
160                             ABORT = .TRUE.
161                          ENDIF
162                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'U_g'
163                       ENDIF
164                       IF (V_G(IJMK) == UNDEFINED) THEN
165                          IF (.NOT.ABORT) THEN
166                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
167                             ABORT = .TRUE.
168                          ENDIF
169                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J-1, K, 'V_g'
170                       ENDIF
171                       IF (V_G(IJK)==UNDEFINED .AND. J/=JMAX2) THEN
172                          IF (.NOT.ABORT) THEN
173                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
174                             ABORT = .TRUE.
175                          ENDIF
176                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'V_g'
177                       ENDIF
178     
179                       IF (W_G(IJKM) == UNDEFINED) THEN
180                          IF (.NOT.ABORT) THEN
181                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
182                             ABORT = .TRUE.
183                          ENDIF
184                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K-1, 'W_g'
185                       ENDIF
186                       IF (W_G(IJK)==UNDEFINED .AND. K/=KMAX2) THEN
187                          IF (.NOT.ABORT) THEN
188                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
189                             ABORT = .TRUE.
190                          ENDIF
191                          IF(DMP_LOG)WRITE (UNIT_LOG, 1010) I, J, K, 'W_g'
192                       ENDIF
193                       IF (SPECIES_EQ(0) .OR. RO_G0==UNDEFINED .AND.&
194                           MW_AVG==UNDEFINED) THEN
195                          DO N = 1, NMAX(0)
196                             IF (X_G(IJK,N) == UNDEFINED) THEN
197                                IF (.NOT.ABORT) THEN
198                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
199                                   ABORT = .TRUE.
200                                ENDIF
201                                IF(DMP_LOG)WRITE (UNIT_LOG, 1012) &
202                                   I, J, K, N, 'X_g'
203                             ENDIF
204                          ENDDO
205                       ENDIF
206     
207                       DO N = 1, NScalar
208                         IF (Scalar(IJK,N) == UNDEFINED) THEN
209                           IF (.NOT.ABORT) THEN
210                             IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
211                             ABORT = .TRUE.
212                           ENDIF
213                           IF(DMP_LOG)WRITE (UNIT_LOG, 1012) &
214                              I, J, K, N, 'Scalar'
215                         ENDIF
216                       ENDDO
217     
218     ! check solids phase fields. these quantities are specified via the
219     ! subroutines set_ic and set_bc0/set_bc1 that employ the initial and
220     ! boundary conditions set in the mfix.dat.
221                       IF (.NOT.DISCRETE_ELEMENT .OR. DES_CONTINUUM_HYBRID) THEN
222     ! dont need the values at the ghost walls for setting pressure outflow
223     ! BC's for MPPIC. so not checking this for MPPIC
224                          DO M = 1, SMAX
225     
226                             IF (RO_S(IJK,M) == UNDEFINED) THEN
227                                IF (.NOT.ABORT) THEN
228                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
229                                   ABORT = .TRUE.
230                                ENDIF
231                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
232                                   I, J, K, M, 'RO_s'
233                             ENDIF
234                             IF (ROP_S(IJK,M) == UNDEFINED) THEN
235                                IF (.NOT.ABORT) THEN
236                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
237                                   ABORT = .TRUE.
238                                ENDIF
239                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
240                                   I, J, K, M, 'ROP_s'
241                             ENDIF
242                             IF (T_S(IJK,M) == UNDEFINED) THEN
243                                IF (ENERGY_EQ) THEN
244                                   IF (.NOT.ABORT) THEN
245                                      IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
246                                      ABORT = .TRUE.
247                                   ENDIF
248                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
249                                      I, J, K, M, 'T_s'
250                                ENDIF
251                             ENDIF
252                             IF (U_S(IMJK,M) == UNDEFINED) THEN
253                                IF (.NOT.ABORT) THEN
254                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
255                                   ABORT = .TRUE.
256                                ENDIF
257                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
258                                   I-1, J, K, M, 'U_s'
259                             ENDIF
260                             IF (U_S(IJK,M)==UNDEFINED .AND. I/=IMAX2) THEN
261                                IF (.NOT.ABORT) THEN
262                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
263                                   ABORT = .TRUE.
264                                ENDIF
265                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
266                                   I, J, K, M, 'U_s'
267                             ENDIF
268                             IF (V_S(IJMK,M) == UNDEFINED) THEN
269                                IF (.NOT.ABORT) THEN
270                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
271                                   ABORT = .TRUE.
272                                ENDIF
273                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
274                                   I, J-1, K, M, 'V_s'
275                             ENDIF
276                             IF (V_S(IJK,M)==UNDEFINED .AND. J/=JMAX2) THEN
277                                IF (.NOT.ABORT) THEN
278                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
279                                   ABORT = .TRUE.
280                                ENDIF
281                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
282                                   I, J, K, M, 'V_s'
283                             ENDIF
284                             IF (W_S(IJKM,M) == UNDEFINED) THEN
285                                IF (.NOT.ABORT) THEN
286                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
287                                   ABORT = .TRUE.
288                                ENDIF
289                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
290                                   I, J, K - 1, M, 'W_s'
291                             ENDIF
292                             IF (W_S(IJK,M)==UNDEFINED .AND. K/=KMAX2) THEN
293                                IF (.NOT.ABORT) THEN
294                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
295                                   ABORT = .TRUE.
296                                ENDIF
297                                IF(DMP_LOG)WRITE (UNIT_LOG, 1011) &
298                                   I, J, K, M, 'W_s'
299                             ENDIF
300                             IF (SPECIES_EQ(M)) THEN
301                                DO N = 1, NMAX(M)
302                                   IF (X_S(IJK,M,N) == UNDEFINED) THEN
303                                      IF (.NOT.ABORT) THEN
304                                         IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
305                                         ABORT = .TRUE.
306                                      ENDIF
307                                      IF(DMP_LOG)WRITE (UNIT_LOG, 1013) &
308                                         I, J, K, M, N, 'X_s'
309                                   ENDIF
310                                ENDDO
311                             ENDIF
312                          ENDDO   ! end do m=1,smax
313                       ENDIF      ! if (.not.discrete_element .or.
314                                  !     des_continuum_hybrid)
315     
316                    ENDIF   ! IF (.NOT.WALL_AT(IJK)) THEN
317                 ENDDO   ! end do I = istart2, iend2
318              ENDDO    ! end do J =j start2, jend2
319           ENDDO   ! end do K = kstart2, kend2
320     
321     ! end check whether all field variables are initialized in all fluid
322     ! cells and flow boundary cells
323     ! ----------------------------------------------------------------<<<
324     
325           IF (ABORT) THEN
326              IF(DMP_LOG)WRITE (UNIT_LOG, 1300)
327              CALL MFIX_EXIT(myPE)
328           ENDIF
329     
330     
331     ! Additional check for fluid or mass inflow cells
332     ! ---------------------------------------------------------------->>>
333           DO K = kstart2, kend2
334              DO J = jstart2, jend2
335                 DO I = istart2, iend2
336                    IJK = FUNIJK(I,J,K)
337     
338                    IF (FLAG(IJK)==1 .OR. FLAG(IJK)==20) THEN
339     
340     ! Check whether L_scale is non-zero anywhere
341                       IF (L_SCALE(IJK) /= ZERO) NONZERO = .TRUE.
342     
343     ! check the sum of volume fractions.
344     ! this seems redundant with the existing checks in check_data_06 for
345     ! fluid cells (flag=1) and with check_data_07 for MI cells (flag=20).
346                       IF (.NOT.DISCRETE_ELEMENT) THEN
347                          DIF = ONE - EP_G(IJK)
348                          IF (SMAX > 0) THEN
349                             DIF = DIF - SUM(ROP_S(IJK,:MMAX)/RO_S(IJK,:MMAX))
350                             IF (ABS(DIF) > SMALL_NUMBER) THEN
351                                IF (.NOT.ABORT) THEN
352                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1050)
353                                   ABORT = .TRUE.
354                                ENDIF
355                                IF(DMP_LOG)WRITE (UNIT_LOG, 1100) &
356                                   I, J, K, (1.- dif)
357                             ENDIF
358     
359     ! ep_g must have a value > 0 for all models, (sof)
360                             IF (EP_G(IJK) < SMALL_NUMBER) THEN
361                                IF (.NOT.ABORT) THEN
362                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1070)
363                                   ABORT = .TRUE.
364                                ENDIF
365                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1150) I, J, K
366                             ENDIF
367     
368     ! ep_g cannot exceed unity for all models
369                             IF (EP_G(IJK) > ONE) THEN
370                                IF (.NOT.ABORT) THEN
371                                   IF(DMP_LOG)WRITE (UNIT_LOG, 1080)
372                                   ABORT = .TRUE.
373                                ENDIF
374                                IF(DMP_LOG)WRITE (UNIT_LOG, 1150) I, J, K
375                             ENDIF
376                          ENDIF ! for SMAX > 0
377     
378                       ELSE   ! else if discrete_element
379     
380     ! for discrete element simulations any solids bulk density is not yet
381     ! assigned. that is, the particle configuration is not known until the
382     ! discrete element portion of the simulation is invoked. (so if
383     ! run_type==new it will not be specified). so checking that the sum of
384     ! void and volume fractions equal 1 is not meaningful yet. this holds
385     ! true for the hybrid model.
386     
387     ! ep_g must have a value > 0 and < 1
388                          IF (EP_G(IJK) < ZERO .OR. EP_G(IJK) > ONE) THEN
389                             IF (.NOT.ABORT) THEN
390                                IF(DMP_LOG)WRITE (UNIT_LOG, 1075)
391                                ABORT = .TRUE.
392                             ENDIF
393                             IF(DMP_LOG)WRITE (UNIT_LOG, 1150) I, J, K
394                          ENDIF
395                       ENDIF ! end if/else (.not.discrete_element)
396     
397                    ENDIF   ! IF (FLAG(IJK)==1 .OR. FLAG(IJK)==20) THEN
398                 ENDDO   ! I = istart2, iend2
399              ENDDO    ! J =j start2, jend2
400           ENDDO   ! K = kstart2, kend2
401     ! end additional checks for fluid or mass inflow cells
402     ! ----------------------------------------------------------------<<<
403     
404     
405           IF (ABORT) THEN
406              IF(DMP_LOG)WRITE (UNIT_LOG, 1300)
407              CALL MFIX_EXIT (myPE)
408           ENDIF
409     
410     !  Check whether MU_gmax is specified
411           IF (NONZERO .AND. MU_GMAX==UNDEFINED) THEN
412              IF(DMP_LOG)WRITE (UNIT_LOG, 1350)
413              CALL MFIX_EXIT(myPE)
414           ENDIF
415     
416     !  Check whether MU_gmax is specified for turbulence (sof)
417           IF (K_Epsilon .AND. MU_GMAX==UNDEFINED) THEN
418              IF(DMP_LOG)WRITE (UNIT_LOG, 1360)
419              CALL MFIX_EXIT(myPE)
420           ENDIF
421     
422           CALL END_LOG
423           RETURN
424     
425      1000 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
426              ' Message: The following field variables are undefined')
427      1010 FORMAT(1X,'I = ',I4,' J = ',I4,' K = ',I4,5X,A)
428      1011 FORMAT(1X,'I = ',I4,' J = ',I4,' K = ',I4,' M = ',I4,5X,A)
429      1012 FORMAT(1X,'I = ',I4,' J = ',I4,' K = ',I4,' N = ',I4,5X,A)
430      1013 FORMAT(1X,'I = ',I4,' J = ',I4,' K = ',I4,' M = ',I4,' N = ',I4,5X,A)
431      1050 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
432              ' Message: The sum of volume fractions is not equal to 1',/&
433              '          in the following cells:',/4X,'I',T14,'J',T24,'K')
434      1070 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
435              ' Message: EP_g is less than SMALL_NUMBER ',/&
436              '          in the following cells:',/4X,'I',T14,'J',T24,'K')
437      1075 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
438              ' Message: EP_g is unphysical (>0 or <1) ',/&
439              '          in the following cells:',/4X,'I',T14,'J',T24,'K')
440      1080 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
441              ' Message: EP_g is greater than one ',/&
442              '          in the following cells:',/4X,'I',T14,'J',T24,'K')
443      1100 FORMAT(1X,I4,T11,I4,T21,I4,'  Sum of EP = ', G12.5, '.NE. 1')
444      1150 FORMAT(1X,I4,T11,I4,T21,I4)
445      1300 FORMAT(/1X,70('*')/)
446      1350 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
447              ' Message: Turbulent length scale is nonzero. Specify MU_gmax.',/1X,70&
448              ('*')/)
449      1360 FORMAT(/1X,70('*')//' From: CHECK_DATA_20',/&
450              ' Message: K_Epsilon model is used. Specify MU_gmax in mfix.dat.',/1X,70&
451              ('*')/)
452           END SUBROUTINE CHECK_DATA_20
453     
454     
455