MFIX  2016-1
check_output_control.f
Go to the documentation of this file.
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
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
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
logical, dimension(dimension_vtk) vtk_defined
Definition: vtk_mod.f:108
character(len=32) function ivar(VAR, i1, i2, i3)
subroutine finl_err_msg
logical, dimension(dimension_vtk) vtk_t_g
Definition: vtk_mod.f:186
logical write_vtk_files
Definition: vtk_mod.f:24
double precision, dimension(dimension_vtk) vtk_x_e
Definition: vtk_mod.f:114
integer, parameter dim_vtk_var
Definition: vtk_mod.f:37
Definition: rxns_mod.f:1
character(len=60) run_name
Definition: run_mod.f:24
logical, dimension(dimension_vtk) vtk_p_star
Definition: vtk_mod.f:153
logical, dimension(dimension_vtk) vtk_part_orientation
Definition: vtk_mod.f:255
Definition: vtk_mod.f:1
integer, parameter n_spx
Definition: param1_mod.f:5
double precision, dimension(dimension_vtk) vtk_y_n
Definition: vtk_mod.f:120
double precision, parameter undefined
Definition: param1_mod.f:18
subroutine check_output_control
integer nlog
Definition: output_mod.f:29
double precision, dimension(n_spx) spx_dt
Definition: output_mod.f:21
logical, dimension(dimension_vtk) vtk_dwall
Definition: vtk_mod.f:223
double precision res_dt
Definition: output_mod.f:15
subroutine init_err_msg(CALLER)
integer, dimension(dimension_vtk) frame
Definition: vtk_mod.f:102
logical, dimension(dimension_vtk, vtk_nrrmax) vtk_rrate
Definition: vtk_mod.f:204
logical, dimension(dimension_vtk) vtk_nb_facet_des
Definition: vtk_mod.f:229
logical, dimension(dimension_vtk, dim_m) vtk_t_s
Definition: vtk_mod.f:189
logical, dimension(dimension_vtk, dim_m) vtk_vel_s
Definition: vtk_mod.f:177
logical, dimension(dimension_vtk) vtk_ep_g
Definition: vtk_mod.f:147
logical, dimension(dimension_vtk, dim_scalar) vtk_scalar
Definition: vtk_mod.f:201
logical use_stl
Definition: cutcell_mod.f:428
integer mmax
Definition: physprop_mod.f:19
double precision, dimension(dimension_vtk) vtk_dt
Definition: vtk_mod.f:89
logical, dimension(dimension_vtk) vtk_lambda_2
Definition: vtk_mod.f:214
logical, dimension(dimension_vtk) vtk_normal
Definition: vtk_mod.f:235
logical, dimension(dimension_vtk) vtk_k_turb_g
Definition: vtk_mod.f:207
integer, dimension(dim_vtk_var) vtk_var
Definition: vtk_mod.f:38
double precision, dimension(dimension_vtk) vtk_y_s
Definition: vtk_mod.f:117
logical, dimension(dimension_vtk, dim_n_g) vtk_x_g
Definition: vtk_mod.f:192
logical, dimension(dimension_vtk, dim_m) vtk_theta_m
Definition: vtk_mod.f:198
logical, dimension(dimension_vtk, dim_m, dim_n_s) vtk_x_s
Definition: vtk_mod.f:195
logical, dimension(dimension_vtk, 15) vtk_debug
Definition: vtk_mod.f:238
Definition: run_mod.f:13
logical, dimension(dimension_vtk) vtk_bc_id
Definition: vtk_mod.f:220
integer nrr
Definition: rxns_mod.f:10
double precision, parameter large_number
Definition: param1_mod.f:23
logical, dimension(dimension_vtk) vtk_vel_g
Definition: vtk_mod.f:174
logical, dimension(dimension_vtk) vtk_facet_count_des
Definition: vtk_mod.f:226
logical, dimension(dimension_vtk) vtk_p_g
Definition: vtk_mod.f:150
logical, dimension(dimension_vtk, dim_m) vtk_rop_s
Definition: vtk_mod.f:180
logical, dimension(dimension_vtk) vtk_partition
Definition: vtk_mod.f:217
logical k_epsilon
Definition: run_mod.f:97
integer, parameter undefined_i
Definition: param1_mod.f:19
double precision, dimension(dimension_vtk) vtk_z_b
Definition: vtk_mod.f:123
character(len=line_length), dimension(line_count) err_msg
integer nscalar
Definition: scalars_mod.f:7
logical, dimension(dimension_vtk) vtk_e_turb_g
Definition: vtk_mod.f:208
logical, dimension(dimension_vtk) vtk_vorticity
Definition: vtk_mod.f:211
character(len=255), dimension(dimension_vtk) vtk_filebase
Definition: vtk_mod.f:144
double precision, dimension(dimension_vtk) vtk_z_t
Definition: vtk_mod.f:126
integer, parameter dimension_vtk
Definition: vtk_mod.f:81
integer, dimension(dimension_vtk, dim_vtk_var) vtk_varlist
Definition: vtk_mod.f:240
double precision, dimension(dimension_vtk) vtk_x_w
Definition: vtk_mod.f:111
logical, dimension(dimension_vtk) vtk_ijk
Definition: vtk_mod.f:232
double precision, parameter zero
Definition: param1_mod.f:27
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)