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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  SUBROUTINE: CHECK_SOLIDS_MODEL_PREREQS                              !
4     !  Purpose: Check the distributed parallel namelist variables.         !
5     !                                                                      !
6     !  Author: P. Nicoletti                               Date: 14-DEC-99  !
7     !  Reviewer: J.Musser                                 Date: 16-Jan-14  !
8     !                                                                      !
9     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
10           SUBROUTINE CHECK_SOLIDS_MODEL_PREREQS
11     
12     
13     ! Global Variables:
14     !---------------------------------------------------------------------//
15     ! Number of ranks.
16           use run, only: SOLIDS_MODEL
17     
18     ! Flag: Use DES E-E solids model
19           use run, only: TFM_SOLIDS, TFM_COUNT
20           use run, only: DEM_SOLIDS, DEM_COUNT
21           use run, only: PIC_SOLIDS, PIC_COUNT
22     ! Flag: Solve species eq.
23           USE run, only: SPECIES_EQ, ANY_SPECIES_EQ
24     
25     ! Flag: Use DES E-L model
26           use discretelement, only: DISCRETE_ELEMENT
27     ! Flag: Use MPPIC E-L model
28           use mfix_pic, only: MPPIC
29     ! Flag: Use TFM and DEM solids models.
30           use discretelement, only: DES_CONTINUUM_HYBRID
31     ! Flag: gas/solids E-L simulation, otherwise granular flow.
32           use discretelement, only: DES_CONTINUUM_COUPLED
33     ! Flag: Fluid affects particles, but particles do not impact fluid.
34           use discretelement, only: DES_ONEWAY_COUPLED
35     ! Number of discrtete solids phases.
36           use discretelement, only: DES_MMAX
37     ! Number of phases specified by the user.
38           use physprop, only: MMAX, SMAX
39     ! Print E-L data.
40           use discretelement, only: PRINT_DES_DATA
41     ! Kinetic theory model for TFM solids.
42           use run, only: KT_TYPE
43     ! Flag: Method of manufactured solutions (MMS)
44           use mms, only: USE_MMS
45     
46     ! Number of scalar equations to solve
47           USE scalars, only: NSCALAR, phase4scalar
48     ! Phase associated with scalar transport.
49           USE scalars, only: phase4scalar
50     
51     ! Global Parameters:
52     !---------------------------------------------------------------------//
53     ! Maximum number of solids phases.
54           use param, only: DIM_M
55     
56     ! Global Module procedures:
57     !---------------------------------------------------------------------//
58           use error_manager
59     
60           implicit none
61     
62     ! Local Variables:
63     !---------------------------------------------------------------------//
64     ! Loop counter
65           INTEGER :: M ! Phase index
66     ! Error indicator for mmax
67           LOGICAL :: ERR_MMAX
68     ! Dummy integer
69           INTEGER :: N
70     !......................................................................!
71     
72     
73     ! Initialize the error manager.
74           CALL INIT_ERR_MSG("CHECK_SOLIDS_MODEL_PREREQS")
75     
76     ! Moved this here but will need to discuss if this is best route
77     ! going forward
78           ERR_MMAX = .FALSE.
79           IF (MMAX < 0) ERR_MMAX = .TRUE.
80           IF(TRIM(KT_TYPE) == 'GHD') THEN
81              IF (MMAX+1 > DIM_M) ERR_MMAX = .TRUE.
82           ELSE
83              IF (MMAX > DIM_M) ERR_MMAX = .TRUE.
84           ENDIF
85           IF((USE_MMS).AND.(MMAX > 1)) ERR_MMAX = .TRUE.
86     
87     ! Check MMAX
88           IF (ERR_MMAX) THEN
89              WRITE(ERR_MSG, 1000) iVal(DIM_M)
90              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
91           ENDIF
92      1000 FORMAT('Error 1000: MMAX out of range. Min: 0, Max: ',A)
93     
94     ! Loop over the phases to see what was specified.
95           DO M=1, MMAX
96              SOLIDS_MODEL(M) = trim(adjustl(SOLIDS_MODEL(M)))
97              SELECT CASE(SOLIDS_MODEL(M))
98              CASE ('TFM'); TFM_COUNT = TFM_COUNT + 1
99              CASE ('DEM'); DEM_COUNT = DEM_COUNT + 1
100              CASE ('PIC'); PIC_COUNT = PIC_COUNT + 1
101     
102              CASE DEFAULT
103                 WRITE(ERR_MSG,1001) iVar('SOLIDS_MODEL',M), SOLIDS_MODEL(M)
104                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
105     
106      1001 FORMAT('Error 1001: Unknown solids model: ',A,' = ',A)
107     
108              END SELECT
109           ENDDO
110     
111     ! Set the number of discrete phases.
112           DES_MMAX = DEM_COUNT + PIC_COUNT
113     
114     ! Set the number of TFM phases.  (should be equivalent to tfm_count)
115           MMAX = MMAX - DES_MMAX
116           SMAX = MMAX   ! USE smax in the code for the number of TFM phases
117     ! For GHD theory increase MMAX by one to serve as 'mixture' phase
118           IF(TRIM(KT_TYPE) == 'GHD') THEN
119              MMAX = MMAX + 1
120              TFM_COUNT = TFM_COUNT + 1
121           ENDIF
122     
123     
124     ! Clear out the unused phases.
125           SOLIDS_MODEL((MMAX+DES_MMAX)+1:DIM_M) = '---'
126     
127     ! Set the runtime flags:
128           TFM_SOLIDS = (TFM_COUNT > 0)
129           DEM_SOLIDS = (DEM_COUNT > 0)
130           PIC_SOLIDS = (PIC_COUNT > 0)
131     
132     ! MPPIC and continuum solids don't mix.
133           IF(PIC_SOLIDS .AND. TFM_SOLIDS)THEN
134              WRITE(ERR_MSG, 1002)
135              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
136           ENDIF
137      1002 FORMAT('Error 1002: MPPIC solids and continuum solids cannot ',&
138              'be combined.',/'Please correct the mfix.dat file.')
139     
140     
141     ! MPPIC and DEM solids don't mix.
142           IF(PIC_SOLIDS .AND. DEM_SOLIDS)THEN
143              WRITE(ERR_MSG, 1003)
144              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
145           ENDIF
146      1003 FORMAT('Error 1003: MPPIC solids and DES solids cannot be ',     &
147              'combined.',/'Please correct the mfix.dat file.')
148     
149     ! temporary move for now since these rely on definition of mmax/smax
150     ! Set variable ANY_SPECIES_EQ
151           M = max(SMAX, DES_MMAX)
152           ANY_SPECIES_EQ = any(SPECIES_EQ(:M))
153     
154     ! Check phase specification for scalars
155           DO N = 1, NScalar
156              IF(Phase4Scalar(N) < 0 .OR. Phase4Scalar(N) > MMAX) THEN
157                 WRITE(ERR_MSG,1004) iVar('Phase4Scalar',N), &
158                    iVal(phase4scalar(N))
159                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
160              ENDIF
161           ENDDO
162      1004 FORMAT('Error 1004: Illegal or unknown input: ',A,' = ',A,/  &
163              'Please correct the mfix.dat file.')
164     
165     ! Set the DEM runtime flag.
166           DISCRETE_ELEMENT = DEM_SOLIDS .OR. PIC_SOLIDS
167     ! Set the MMPIC runtime flag.
168           MPPIC = PIC_SOLIDS
169     ! Set the Hybird flag.
170           DES_CONTINUUM_HYBRID = (DEM_SOLIDS .AND. TFM_SOLIDS)
171     
172     
173           IF(DES_CONTINUUM_HYBRID) CALL HYBRID_HACK
174     
175     ! Overwrite user settings if no Lagrangian solids
176           IF(.NOT.DISCRETE_ELEMENT) THEN
177              DES_CONTINUUM_COUPLED = .FALSE.   ! This keyword might get removed.
178              PRINT_DES_DATA = .FALSE.
179              DES_ONEWAY_COUPLED = .FALSE.
180           ENDIF
181     
182           CALL FINL_ERR_MSG
183     
184           RETURN
185     
186           END SUBROUTINE CHECK_SOLIDS_MODEL_PREREQS
187     
188     
189     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
190     !                                                                      !
191     !  SUBROUTINE: Hybrid_HACK                                             !
192     !  Purpose: Check the distributed parallel namelist variables.         !
193     !                                                                      !
194     !  Author: P. Nicoletti                               Date: 14-DEC-99  !
195     !  Reviewer: J.Musser                                 Date: 16-Jan-14  !
196     !                                                                      !
197     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
198           SUBROUTINE HYBRID_HACK
199     
200     ! Number of ranks.
201           use run, only: SOLIDS_MODEL
202     
203     ! Global Parameters:
204     !---------------------------------------------------------------------//
205     ! Maximum number of solids phases.
206           use param, only: DIM_M
207     
208           use error_manager
209     
210           integer :: TFM_MAX
211           integer :: DEM_MIN
212           integer :: M
213     !......................................................................!
214     
215     ! Initialize the error manager.
216           CALL INIT_ERR_MSG("HYBRID_HACK")
217     
218     ! Initialize the loop variables.
219           TFM_MAX = -DIM_M
220           DEM_MIN =  DIM_M
221     
222     ! Loop over the phases to see what was specified.
223           DO M=1, DIM_M
224              SELECT CASE(SOLIDS_MODEL(M))
225              CASE ('TFM'); TFM_MAX = max(M, TFM_MAX)
226              CASE ('DEM'); DEM_MIN = min(M, DEM_MIN)
227              END SELECT
228           ENDDO
229     
230           write(*,*)'  MAX TFM index: ', TFM_MAX
231           write(*,*)'  MIN DEM index: ', DEM_MIN
232     
233           IF(DEM_MIN < TFM_MAX) THEN
234              WRITE(ERR_MSG, 2000)
235              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
236           ENDIF
237     
238      2000 FORMAT('Error 2000: Illegal phase specification for hybrid ',    &
239              'model. All TFM',/'solids must be defined before DEM solids.',&
240              /'Please correct the mfix.dat file.')
241     
242           CALL FINL_ERR_MSG
243     
244           RETURN
245           END SUBROUTINE HYBRID_HACK
246