File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_output_control.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !  Subroutine: CHECK_OUTPUT_CONTROL                                    !
3     !  Purpose: Check the output control namelist section                  !
4     !                                                                      !
5     !  Author: P. Nicoletti                               Date: 27-NOV-91  !
6     !                                                                      !
7     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
8           SUBROUTINE CHECK_OUTPUT_CONTROL
9     
10     ! Global Variables:
11     !---------------------------------------------------------------------//
12     ! Time intervalue between updating the RES and SPx files.
13           use output, only: RES_DT, SPX_DT
14     ! Time-step intervalue between updating the .LOG file.
15           use output, only: NLOG
16     ! Flag: Use the K-Epsilon model
17           use run, only: K_EPSILON
18     ! Number of arrays to store in SPA
19           use rxns, only: nRR
20     ! VTK
21           use vtk
22           USE run, only: RUN_NAME
23           USE physprop, only: MMAX,NMAX
24           USE scalars, only :NSCALAR
25           USE mpi_utility, only: myPE, PE_IO,XLENGTH,YLENGTH,ZLENGTH
26           USE DISCRETELEMENT, only:DISCRETE_ELEMENT
27           USE DISCRETELEMENT, only: PARTICLE_ORIENTATION
28           USE cutcell, only: USE_STL
29     
30     ! Global Parameters:
31     !---------------------------------------------------------------------//
32     ! Number aliases
33           use param1, only: UNDEFINED, UNDEFINED_I, ZERO, LARGE_NUMBER
34     ! Number of SPx files.
35           USE param1, only: N_SPX
36     
37     ! Global Module proceedures:
38     !---------------------------------------------------------------------//
39           use error_manager
40     
41           IMPLICIT NONE
42     
43     ! Local Variables:
44     !---------------------------------------------------------------------//
45     ! Loop counter
46           INTEGER :: LC
47     
48           INTEGER :: L,M,N,LV,N_VTK_REGIONS,R
49     
50     !......................................................................!
51     
52     
53     ! Initialize the error manager.
54           CALL INIT_ERR_MSG("CHECK_OUTPUT_CONTROL")
55     
56     
57     ! Check the values specified for the RES file.
58           IF (RES_DT==UNDEFINED)THEN
59              WRITE(ERR_MSG,1000) 'RES_DT'
60              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
61           ELSEIF(RES_DT <= ZERO) THEN
62              WRITE(ERR_MSG,1002) 'RES_DT', RES_DT
63              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
64           ENDIF
65     
66     
67     ! Check the SPx Files
68           SPx_LP: DO LC = 1, N_SPX
69     
70     ! Disable writing the .SPA file if nRR is unspecified.
71              IF(LC == 10) THEN
72                 IF(nRR == 0) THEN
73                    IF (SPX_DT(LC) == UNDEFINED) SPX_DT(LC) = LARGE_NUMBER
74                    CYCLE SPx_LP
75                 ENDIF
76     
77     ! Disable writing the .SPB file if K-Epsilon is unspecified.
78              ELSEIF(LC == 11) THEN
79                 IF(.NOT.K_Epsilon) THEN
80                    IF (SPX_DT(LC)==UNDEFINED)SPX_DT(LC) = LARGE_NUMBER
81                    CYCLE SPx_LP
82                 ENDIF
83     
84     ! Verify the remaining SPx files.
85              ELSE
86                 IF(SPX_DT(LC) == UNDEFINED) THEN
87                    WRITE(ERR_MSG,1000) iVar('SPX_DT',LC)
88                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
89     
90                 ELSEIF(SPX_DT(LC) <= ZERO) THEN
91                    WRITE(ERR_MSG,1001) iVar('SPX_DT',LC), SPX_DT(LC)
92                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
93                 ENDIF
94              ENDIF
95           ENDDO SPx_LP
96     
97     ! Verify that the LOG frequency is valid.
98           IF(NLOG <= 0) THEN
99              WRITE(ERR_MSG,1003) 'NLOG', NLOG
100              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
101           ENDIF
102     
103     ! Check VTK regions
104     
105           IF(FRAME(1)<-1) THEN
106              IF(MyPE == PE_IO) THEN
107                 WRITE(*,*)'INPUT ERROR: INALID VALUE OF FRAME =', FRAME
108                 WRITE(*,*)'ACCEPTABLE VALUES ARE INTEGERS >= -1.'
109                 WRITE(*,*)'PLEASE CORRECT MFIX.DAT AND TRY AGAIN.'
110              ENDIF
111              CALL MFIX_EXIT(MYPE)
112           ENDIF
113     
114           IF(VTK_DT(1)<ZERO) THEN
115              IF(MyPE == PE_IO) THEN
116                 WRITE(*,*)'INPUT ERROR: NEGATIVE VALUE OF VTK_DT =', VTK_DT(1)
117                 WRITE(*,*)'ACCEPTABLE VALUES ARE POSITIVE NUMBERS (E.G. 0.1).'
118                 WRITE(*,*)'PLEASE CORRECT MFIX.DAT AND TRY AGAIN.'
119              ENDIF
120              CALL MFIX_EXIT(MYPE)
121           ENDIF
122     
123           N_VTK_REGIONS = 0
124     
125           DO L = 1, DIMENSION_VTK
126              VTK_DEFINED(L) = .FALSE.
127              IF (VTK_X_W(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
128              IF (VTK_X_E(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
129              IF (VTK_Y_S(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
130              IF (VTK_Y_N(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
131              IF (VTK_Z_B(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
132              IF (VTK_Z_T(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
133     
134              IF(.NOT.VTK_DEFINED(L)) CYCLE
135     
136              N_VTK_REGIONS =  N_VTK_REGIONS + 1
137     
138           ENDDO   ! end loop over (l = 1,dimension_vtk)
139     
140     ! There must be at least one VTK region defined
141     ! If this is not the case, define the entire domain as default region
142           IF(WRITE_VTK_FILES.AND.N_VTK_REGIONS==0) THEN
143              VTK_DEFINED(1) = .TRUE.
144              VTK_X_W(1) = ZERO
145              VTK_X_E(1) = XLENGTH
146              VTK_Y_S(1) = ZERO
147              VTK_Y_N(1) = YLENGTH
148              VTK_Z_B(1) = ZERO
149              VTK_Z_T(1) = ZLENGTH
150              VTK_FILEBASE(1) = RUN_NAME
151           ENDIF
152     
153     ! If VTK_VAR is defined, fill-up the variable list
154     ! for the vtk subdomains
155           DO L = 1, DIM_VTK_VAR
156              IF(VTK_VAR(L)/=UNDEFINED_I) VTK_VARLIST(:,L) = VTK_VAR(L)
157           ENDDO
158     
159     
160           DO L = 1, DIMENSION_VTK
161     
162              IF(.NOT.VTK_DEFINED(L)) CYCLE
163     
164              DO LV = 1, DIM_VTK_VAR
165     
166                 SELECT CASE (VTK_VARLIST(L,LV))
167     
168                    CASE (1)
169                       VTK_EP_g(L) = .TRUE.
170     
171                    CASE (2)
172                       VTK_P_g(L)    = .TRUE.
173                       VTK_P_star(L) = .TRUE.
174     
175                    CASE (3)
176                       VTK_VEL_G(L) = .TRUE.
177     
178                    CASE (4)
179                       DO M = 1,MMAX
180                          VTK_VEL_S(L,M) = .TRUE.
181                       END DO
182     
183                    CASE (5)
184                       DO M = 1,MMAX
185                          VTK_ROP_s(L,M) = .TRUE.
186                       END DO
187     
188                    CASE (6)
189                       VTK_T_g(L) = .TRUE.
190                       DO M = 1,MMAX
191                          VTK_T_s(L,M) = .TRUE.
192                       END DO
193     
194                    CASE (7)
195                      !DO N = 1,NMAX(0)
196                         VTK_X_g(L,:) = .TRUE.
197                      !END DO
198     
199                       DO M = 1, MMAX
200                         !DO N = 1,NMAX(M)
201                             VTK_X_s(L,M,:) = .TRUE.
202                         !END DO
203                       END DO
204     
205     
206                    CASE (8)
207                       DO M = 1,MMAX
208                          VTK_Theta_m(L,M) = .TRUE.
209                       END DO
210     
211                    CASE (9)
212                       DO N = 1,NSCALAR
213                          VTK_Scalar(L,N) =.TRUE.
214                       END DO
215     
216                    CASE (10)
217                       DO R = 1,nRR
218                          VTK_RRate(L,R) = .TRUE.
219                       END DO
220     
221                    CASE (11)
222                       IF(K_EPSILON) THEN
223                          VTK_K_Turb_G(L) = .TRUE.
224                          VTK_E_Turb_G(L) = .TRUE.
225                       ENDIF
226     
227                    CASE (12)
228                       VTK_VORTICITY(L) = .TRUE.
229                       VTK_LAMBDA_2(L)  = .TRUE.
230     
231                    CASE (100)
232                       VTK_PARTITION(L) = .TRUE.
233     
234                    CASE (101)
235                       VTK_BC_ID(L) = .TRUE.
236     
237                    CASE (102)
238                       VTK_DWALL(L) = .TRUE.
239     
240                    CASE (103)
241                       IF(DISCRETE_ELEMENT.AND.USE_STL) THEN
242                          VTK_FACET_COUNT_DES(L) = .TRUE.
243                       ENDIF
244     
245                    CASE (104)
246                       IF(DISCRETE_ELEMENT.AND.USE_STL) THEN
247                          VTK_NB_FACET_DES(L) = .TRUE.
248                       ENDIF
249     
250                    CASE(999)
251                       VTK_IJK(L) = .TRUE.
252     
253                    CASE(1000)
254                       VTK_NORMAL(L) = .TRUE.
255     
256                    CASE (1001)
257                       VTK_DEBUG(L,1) = .TRUE.
258     
259                    CASE (1002)
260                       VTK_DEBUG(L,2) = .TRUE.
261     
262                    CASE (1003)
263                       VTK_DEBUG(L,3) = .TRUE.
264     
265                    CASE (1004)
266                       VTK_DEBUG(L,4) = .TRUE.
267     
268                    CASE (1005)
269                       VTK_DEBUG(L,5) = .TRUE.
270     
271                    CASE (1006)
272                       VTK_DEBUG(L,6) = .TRUE.
273     
274                    CASE (1007)
275                       VTK_DEBUG(L,7) = .TRUE.
276     
277                    CASE (1008)
278                       VTK_DEBUG(L,8) = .TRUE.
279     
280                    CASE (1009)
281                       VTK_DEBUG(L,9) = .TRUE.
282     
283                    CASE (1010)
284                       VTK_DEBUG(L,10) = .TRUE.
285     
286                    CASE (1011)
287                       VTK_DEBUG(L,11) = .TRUE.
288     
289                    CASE (1012)
290                       VTK_DEBUG(L,12) = .TRUE.
291     
292                    CASE (1013)
293                       VTK_DEBUG(L,13) = .TRUE.
294     
295                    CASE (1014)
296                       VTK_DEBUG(L,14) = .TRUE.
297     
298                    CASE (1015)
299                       VTK_DEBUG(L,15) = .TRUE.
300     
301     
302                    CASE (0) ! do nothing
303     
304                    CASE (UNDEFINED_I) ! do nothing
305     
306                    CASE DEFAULT
307     
308                       WRITE(*,*) ' Unknown VTK variable flag ',L,':',VTK_VAR(L)
309                       WRITE(*,*) ' Available flags are : '
310                       WRITE(*,*) ' 1 : Void fraction (EP_g)'
311                       WRITE(*,*) ' 2 : Gas pressure, solids pressure (P_g, P_star)'
312                       WRITE(*,*) ' 3 : Gas velocity (U_g, V_g, W_g)'
313                       WRITE(*,*) ' 4 : Solids velocity (U_s, V_s, W_s)'
314                       WRITE(*,*) ' 5 : Solids density (ROP_s)'
315                       WRITE(*,*) ' 6 : Gas and solids temperature (T_g, T_s1, T_s2)'
316                       WRITE(*,*) ' 7 : Gas and solids mass fractions (X_g, X-s)'
317                       WRITE(*,*) ' 8 : Granular temperature (G)'
318                       write(*,*) ' 9 : User defined scalars'
319                       write(*,*) '10 : Reaction Rates'
320                       write(*,*) '11 : Turbulence quantities (k and )'
321                       write(*,*) '12 : Gas Vorticity magnitude and Lambda_2 (VORTICITY, LAMBDA_2)'
322                       write(*,*) '100: Processor assigned to scalar cell (Partition)'
323                       write(*,*) '101: Boundary condition flag for scalar cell (BC_ID)'
324                       write(*,*) 'MFiX will exit now.'
325                       CALL MFIX_EXIT(myPE)
326     
327                 END SELECT
328     
329              ENDDO
330     
331     ! Activate particle orientation calculation if one vtk region needs it.
332              IF(VTK_PART_ORIENTATION(L)) PARTICLE_ORIENTATION = .TRUE.
333     
334           ENDDO   ! end loop over (l = 1,dimension_vtk)
335     
336     ! Finalize the error manager.
337           CALL FINL_ERR_MSG
338     
339           RETURN
340     
341      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
342              'correct the mfix.dat file.')
343     
344      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/      &
345              'Please correct the mfix.dat file.')
346     
347      1002 FORMAT('Error 1002: Illegal or unknown input: ',A,' = ',E14.6,/  &
348              'Please correct the mfix.dat file.')
349     
350      1003 FORMAT('Error 1003: Illegal or unknown input: ',A,' = ',I4,/     &
351              'Please correct the mfix.dat file.')
352     
353           END SUBROUTINE CHECK_OUTPUT_CONTROL
354