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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  MODULE: GET_DATA                                                    C
4     !  Purpose: read and verify input data, open files                     C
5     !                                                                      C
6     !  Author: P. Nicoletti                               Date: 04-DEC-91  C
7     !  Reviewer: M.SYAMLAL, W.ROGERS, P.NICOLETTI         Date: 24-JAN-92  C
8     !                                                                      C
9     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
10     MODULE read_input
11     
12       CONTAINS
13     
14           SUBROUTINE GET_DATA
15     
16     !-----------------------------------------------
17     ! Modules
18     !-----------------------------------------------
19           USE check_data_cg, only: adjust_ijk_size, check_data_cartesian
20           USE cut_cell_preproc, only: cut_cell_preprocessing
21           USE compar
22           USE constant, only: L_SCALE0
23           USE cutcell
24           USE dashboard
25           USE des_allocate
26           USE des_rxns
27           USE des_thermo
28           USE desgrid, only: DESGRID_INIT
29           USE discretelement
30           USE error_manager
31           USE funits
32           USE gridmap
33           USE iterate, only: max_nit
34           USE leqsol
35           USE mfix_pic
36           USE mpi_init_des, only: DESMPI_INIT
37           USE parallel
38           USE param
39           USE param1
40           USE qmom_kinetic_equation
41           USE run
42           USE stl_preproc_des, only: DES_STL_PREPROCESSING
43           USE visc_g, only: L_SCALE
44     
45           IMPLICIT NONE
46     !-----------------------------------------------
47     ! Local variables
48     !-----------------------------------------------
49     ! shift DX, DY and DZ values
50           LOGICAL, PARAMETER :: SHIFT = .TRUE.
51     
52     ! This module call routines to initialize the namelist variables.
53           CALL INIT_NAMELIST
54     ! Read in the namelist variables from the ascii input file.
55           CALL READ_NAMELIST(0,"mfix.dat")
56     
57     ! Initialize the error manager. This call occurs after the mfix.dat
58     ! is read so that message verbosity can be set and the .LOG file
59     ! can be opened.
60           CALL INIT_ERROR_MANAGER
61     
62     ! Write header in the .LOG file and to screen.
63     ! Not sure if the values are correct or useful
64           CALL WRITE_HEADER
65     
66     ! Open files
67           CALL OPEN_FILES(RUN_NAME, RUN_TYPE, N_SPX)
68     
69     ! These checks verify that sufficient information was provided
70     ! to setup the domain indices and DMP gridmap.
71           CALL CHECK_GEOMETRY_PREREQS
72           CALL CHECK_DMP_PREREQS
73     
74     ! Set up the physical domain indicies (cell index max/min values).
75           CALL SET_MAX2
76     
77     ! Set constants
78           CALL SET_CONSTANTS
79     
80     ! Adjust partition for better load balance (done when RE_INDEXING is .TRUE.)
81           CALL ADJUST_IJK_SIZE
82     
83     ! Partition the domain and set indices
84           CALL GRIDMAP_INIT
85     
86     ! Check the minimum solids phase requirements.
87           CALL CHECK_SOLIDS_MODEL_PREREQS
88     
89           CALL CHECK_RUN_CONTROL
90           CALL CHECK_NUMERICS
91           CALL CHECK_OUTPUT_CONTROL
92     
93           CALL CHECK_GAS_PHASE
94           CALL CHECK_SOLIDS_PHASES
95           CALL SET_PARAMETERS
96     
97     ! Basic geometry checks.
98           CALL CHECK_GEOMETRY(SHIFT)
99           IF(DISCRETE_ELEMENT) CALL CHECK_GEOMETRY_DES
100     
101     ! Set grid spacing variables.
102           CALL SET_GEOMETRY
103           IF(DISCRETE_ELEMENT) CALL SET_GEOMETRY_DES
104     
105           CALL CHECK_INITIAL_CONDITIONS
106           CALL CHECK_BOUNDARY_CONDITIONS
107           CALL CHECK_INTERNAL_SURFACES
108           CALL CHECK_POINT_SOURCES
109     
110           CALL CHECK_CHEMICAL_RXNS
111           CALL CHECK_ODEPACK_STIFF_CHEM
112     
113     
114     
115     !----------------------  DOMAIN SPECIFIC CHECKS  --------------------!
116     
117     
118     ! This call needs to occur before any of the IC/BC checks.
119           CALL SET_ICBC_FLAG
120     
121     ! Compute area of boundary surfaces.
122           CALL GET_BC_AREA
123     
124     ! Convert (mass, volume) flows to velocities.
125           CALL SET_BC_FLOW
126     
127     ! Set the flags for identifying computational cells
128           CALL SET_FLAGS
129     ! Set arrays for computing indices
130           CALL SET_INCREMENTS
131           CALL SET_INCREMENTS3
132     
133     ! Cartesian grid implementation
134           CALL CHECK_DATA_CARTESIAN
135           IF(CARTESIAN_GRID) THEN
136              CALL CUT_CELL_PREPROCESSING
137           ELSE
138              CALL ALLOCATE_DUMMY_CUT_CELL_ARRAYS
139           ENDIF
140     
141           IF(DISCRETE_ELEMENT) THEN
142              CALL DESGRID_INIT
143              CALL DESMPI_INIT
144              CALL DES_STL_PREPROCESSING
145           ENDIF
146     
147     !--------------------------  ARRAY ALLOCATION -----------------------!
148     
149     ! Allocate array storage.
150           CALL ALLOCATE_ARRAYS
151           IF(DISCRETE_ELEMENT) CALL DES_ALLOCATE_ARRAYS
152           IF(QMOMK) CALL QMOMK_ALLOCATE_ARRAYS
153     
154     ! Initialize arrays.
155           CALL INIT_FVARS
156           IF(DISCRETE_ELEMENT) CALL DES_INIT_ARRAYS
157     
158     ! This is all that happens in SET_L_SCALE so it needs moved, maybe
159     ! this should go in int_fluid_var.?
160     !     CALL SET_L_SCALE
161           L_SCALE(:) = L_SCALE0
162     
163     !======================================================================
164     ! Data initialization for Dashboard
165     !======================================================================
166           INIT_TIME = TIME
167           SMMIN =  LARGE_NUMBER
168           SMMAX = -LARGE_NUMBER
169     
170           DTMIN =  LARGE_NUMBER
171           DTMAX = -LARGE_NUMBER
172     
173           NIT_MIN = MAX_NIT
174           NIT_MAX = 0
175     
176           N_DASHBOARD = 0
177     
178     
179           RETURN
180     
181         END SUBROUTINE GET_DATA
182     
183     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
184     !                                                                      C
185     !  Subroutine: SET_CONSTANTS                                           C
186     !  Purpose: Set various constants                                      C
187     !                                                                      C
188     !  Author: M. Syamlal                                 Date: 30-JAN-92  C
189     !                                                                      C
190     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
191           SUBROUTINE SET_CONSTANTS
192     
193     ! Modules
194     !---------------------------------------------------------------------//
195           USE param1, only: zero, one, undefined
196           USE constant, only: gas_const
197           USE constant, only: gravity, gravity_x, gravity_y, gravity_z
198           USE constant, only: to_SI
199           USE constant, only: k_scale
200           USE run, only: LAM_HYS, UNITS
201           USE error_manager, only: err_msg, init_err_msg, finl_err_msg
202           USE error_manager, only: flush_err_msg
203     
204           IMPLICIT NONE
205     !---------------------------------------------------------------------//
206     
207     ! Note that the cell flags are not set when this routine is called.
208     
209     ! Dimensionless constants
210           K_SCALE = .08D0   ! this actually isn't used anywhere...
211     
212     ! Enter the value of all constants in various units (CGS or SI)
213           IF (UNITS == 'SI') THEN
214              IF (GRAVITY == UNDEFINED) GRAVITY = 9.80665D0 ! m/s2
215              GAS_CONST = 8314.56D0                !Pa.m3/kmol.K, or kg m2/s2 kmol K (Perry and Green, 1984)
216              to_SI = 0.1D0                        !to convert dyne/cm2 to Pa. e.g. calc_mu_g.f
217              IF (LAM_HYS == UNDEFINED) LAM_HYS = 0.000001d0    ! m
218           ELSEIF (UNITS == 'CGS') THEN
219              IF (GRAVITY == UNDEFINED) GRAVITY = 980.665D0 !cm/s2
220              GAS_CONST = 8314.56D4                !g.cm2/s2.mol.K
221              to_SI = ONE                          !does not do anything in CGS. e.g.: calc_mu_g.f
222              IF (LAM_HYS == UNDEFINED) LAM_HYS = 0.0001d0    ! cm
223           ELSE
224     ! Initialize the error manager.
225              CALL INIT_ERR_MSG("SET_CONSTANTS")
226              WRITE(ERR_MSG,1005) UNITS
227              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
228              CALL FINL_ERR_MSG
229      1005 FORMAT('Error 1005: Unknown UNITS = ',A,/ &
230              'Please correct the mfix.dat file.')
231           ENDIF
232     
233     ! If all components of the gravitational acceleration vector are
234     ! undefined (zero), then use the default value for the negative
235     ! y-direction. This ensures backward compatibility with the old
236     ! (legacy) GRAVITY keyword. At this point GRAVITY is defined,
237     ! either from mfix.dat or by default above
238           IF(GRAVITY_X==ZERO.AND.GRAVITY_Y==ZERO.AND.GRAVITY_Z==ZERO) THEN
239              GRAVITY_X = ZERO
240              GRAVITY_Y = - GRAVITY
241              GRAVITY_Z = ZERO
242           ENDIF
243     
244           RETURN
245           END SUBROUTINE SET_CONSTANTS
246         END MODULE read_input
247