File: RELATIVE:/../../../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
24           USE scalars, only :NSCALAR
25           USE mpi_utility, only: 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 procedures:
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              WRITE(ERR_MSG, 2000) trim(iVAL(FRAME(1)))
107              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
108           ENDIF
109     
110      2000 FORMAT('Error 2000: Invalid value for FRAME = ',A'. Acceptable ',&
111              'values',/'are integers >= -1. Please correct mfix.dat and',/ &
112              'try again.')
113     
114           IF(VTK_DT(1)<ZERO) THEN
115               WRITE(ERR_MSG,2001) trim(iVal(VTK_DT(1)))
116              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
117           ENDIF
118     
119      2001 FORMAT('Error 2001: Invalid value for VTK_DT = ',A'. Acceptable',&
120              ' values',/'are positive numbers (e.g., 0.1).  Please ',      &
121              'correct mfix.dat and',/'try again.')
122     
123           N_VTK_REGIONS = 0
124           DO L = 1, DIMENSION_VTK
125              VTK_DEFINED(L) = .FALSE.
126              IF (VTK_X_W(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
127              IF (VTK_X_E(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
128              IF (VTK_Y_S(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
129              IF (VTK_Y_N(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
130              IF (VTK_Z_B(L) /= -UNDEFINED)   VTK_DEFINED(L) = .TRUE.
131              IF (VTK_Z_T(L) /=  UNDEFINED)   VTK_DEFINED(L) = .TRUE.
132     
133              IF(.NOT.VTK_DEFINED(L)) CYCLE
134              N_VTK_REGIONS =  N_VTK_REGIONS + 1
135           ENDDO   ! end loop over (l = 1,dimension_vtk)
136     
137     ! There must be at least one VTK region defined
138     ! If this is not the case, define the entire domain as default region
139           IF(WRITE_VTK_FILES.AND.N_VTK_REGIONS==0) THEN
140              VTK_DEFINED(1) = .TRUE.
141              VTK_X_W(1) = ZERO
142              VTK_X_E(1) = XLENGTH
143              VTK_Y_S(1) = ZERO
144              VTK_Y_N(1) = YLENGTH
145              VTK_Z_B(1) = ZERO
146              VTK_Z_T(1) = ZLENGTH
147              VTK_FILEBASE(1) = RUN_NAME
148           ENDIF
149     
150     ! If VTK_VAR is defined, fill-up the variable list
151     ! for the vtk subdomains
152           DO L = 1, DIM_VTK_VAR
153              IF(VTK_VAR(L)/=UNDEFINED_I) VTK_VARLIST(:,L) = VTK_VAR(L)
154           ENDDO
155     
156     
157           DO L = 1, DIMENSION_VTK
158     
159              IF(.NOT.VTK_DEFINED(L)) CYCLE
160     
161              DO LV = 1, DIM_VTK_VAR
162     
163                 SELECT CASE (VTK_VARLIST(L,LV))
164     
165                    CASE (1)
166                       VTK_EP_g(L) = .TRUE.
167     
168                    CASE (2)
169                       VTK_P_g(L)    = .TRUE.
170                       VTK_P_star(L) = .TRUE.
171     
172                    CASE (3)
173                       VTK_VEL_G(L) = .TRUE.
174     
175                    CASE (4)
176                       DO M = 1,MMAX
177                          VTK_VEL_S(L,M) = .TRUE.
178                       END DO
179     
180                    CASE (5)
181                       DO M = 1,MMAX
182                          VTK_ROP_s(L,M) = .TRUE.
183                       END DO
184     
185                    CASE (6)
186                       VTK_T_g(L) = .TRUE.
187                       DO M = 1,MMAX
188                          VTK_T_s(L,M) = .TRUE.
189                       END DO
190     
191                    CASE (7)
192                      !DO N = 1,NMAX(0)
193                         VTK_X_g(L,:) = .TRUE.
194                      !END DO
195     
196                       DO M = 1, MMAX
197                         !DO N = 1,NMAX(M)
198                             VTK_X_s(L,M,:) = .TRUE.
199                         !END DO
200                       END DO
201     
202                    CASE (8)
203                       DO M = 1,MMAX
204                          VTK_Theta_m(L,M) = .TRUE.
205                       END DO
206     
207                    CASE (9)
208                       DO N = 1,NSCALAR
209                          VTK_Scalar(L,N) =.TRUE.
210                       END DO
211     
212                    CASE (10)
213                       DO R = 1,nRR
214                          VTK_RRate(L,R) = .TRUE.
215                       END DO
216     
217                    CASE (11)
218                       IF(K_EPSILON) THEN
219                          VTK_K_Turb_G(L) = .TRUE.
220                          VTK_E_Turb_G(L) = .TRUE.
221                       ENDIF
222     
223                    CASE (12)
224                       VTK_VORTICITY(L) = .TRUE.
225                       VTK_LAMBDA_2(L)  = .TRUE.
226     
227                    CASE (100)
228                       VTK_PARTITION(L) = .TRUE.
229     
230                    CASE (101)
231                       VTK_BC_ID(L) = .TRUE.
232     
233                    CASE (102)
234                       VTK_DWALL(L) = .TRUE.
235     
236                    CASE (103)
237                       IF(DISCRETE_ELEMENT.AND.USE_STL) THEN
238                          VTK_FACET_COUNT_DES(L) = .TRUE.
239                       ENDIF
240     
241                    CASE (104)
242                       IF(DISCRETE_ELEMENT.AND.USE_STL) THEN
243                          VTK_NB_FACET_DES(L) = .TRUE.
244                       ENDIF
245     
246                    CASE(999)
247                       VTK_IJK(L) = .TRUE.
248     
249                    CASE(1000)
250                       VTK_NORMAL(L) = .TRUE.
251     
252                    CASE (1001)
253                       VTK_DEBUG(L,1) = .TRUE.
254     
255                    CASE (1002)
256                       VTK_DEBUG(L,2) = .TRUE.
257     
258                    CASE (1003)
259                       VTK_DEBUG(L,3) = .TRUE.
260     
261                    CASE (1004)
262                       VTK_DEBUG(L,4) = .TRUE.
263     
264                    CASE (1005)
265                       VTK_DEBUG(L,5) = .TRUE.
266     
267                    CASE (1006)
268                       VTK_DEBUG(L,6) = .TRUE.
269     
270                    CASE (1007)
271                       VTK_DEBUG(L,7) = .TRUE.
272     
273                    CASE (1008)
274                       VTK_DEBUG(L,8) = .TRUE.
275     
276                    CASE (1009)
277                       VTK_DEBUG(L,9) = .TRUE.
278     
279                    CASE (1010)
280                       VTK_DEBUG(L,10) = .TRUE.
281     
282                    CASE (1011)
283                       VTK_DEBUG(L,11) = .TRUE.
284     
285                    CASE (1012)
286                       VTK_DEBUG(L,12) = .TRUE.
287     
288                    CASE (1013)
289                       VTK_DEBUG(L,13) = .TRUE.
290     
291                    CASE (1014)
292                       VTK_DEBUG(L,14) = .TRUE.
293     
294                    CASE (1015)
295                       VTK_DEBUG(L,15) = .TRUE.
296     
297     
298                    CASE (0) ! do nothing
299     
300                    CASE (UNDEFINED_I) ! do nothing
301     
302                    CASE DEFAULT
303                       WRITE(ERR_MSG,2100) trim(iVal(L)),                   &
304                          trim(iVal(VTK_VAR(L)))
305                       CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
306                 END SELECT
307     
308      2100 FORMAT(' Error 2100: Unknown VTK variable flag ',A,':',A,       /&
309              'Available flags are:',                                      /&
310              '  1 : Void fraction (EP_g)',                                /&
311              '  2 : Gas pressure, solids pressure (P_g, P_star)',         /&
312              '  3 : Gas velocity (U_g, V_g, W_g)',                        /&
313              '  4 : Solids velocity (U_s, V_s, W_s)',                     /&
314              '  5 : Solids density (ROP_s)',                              /&
315              '  6 : Gas and solids temperature (T_g, T_s1, T_s2)',        /&
316              '  7 : Gas and solids mass fractions (X_g, X-s)',            /&
317              '  8 : Granular temperature (G)',                            /&
318              '  9 : User defined scalars',                                /&
319              ' 10 : Reaction Rates',                                      /&
320              ' 11 : Turbulence quantities (k and ε)',                     /&
321              ' 12 : Gas Vorticity magn and Lambda_2(VORTICITY,LAMBDA_2)', /&
322              '100: Processor assigned to scalar cell (Partition)',        /&
323              '101: Boundary condition flag for scalar cell (BC_ID)',      /&
324              'Please correct the mfix.dat file.')
325     
326     
327              ENDDO
328     
329     ! Activate particle orientation calculation if one vtk region needs it.
330              IF(VTK_PART_ORIENTATION(L)) PARTICLE_ORIENTATION = .TRUE.
331     
332           ENDDO   ! end loop over (l = 1,dimension_vtk)
333     
334     ! Finalize the error manager.
335           CALL FINL_ERR_MSG
336     
337           RETURN
338     
339      1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
340              'correct the mfix.dat file.')
341     
342      1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/      &
343              'Please correct the mfix.dat file.')
344     
345      1002 FORMAT('Error 1002: Illegal or unknown input: ',A,' = ',E14.6,/  &
346              'Please correct the mfix.dat file.')
347     
348      1003 FORMAT('Error 1003: Illegal or unknown input: ',A,' = ',I4,/     &
349              'Please correct the mfix.dat file.')
350     
351           END SUBROUTINE CHECK_OUTPUT_CONTROL
352