File: N:\mfix\model\check_data\check_solids_model_prereqs.f
1
2
3
4
5
6
7
8
9
10 SUBROUTINE CHECK_SOLIDS_MODEL_PREREQS
11
12
13
14
15 use discretelement, only: DISCRETE_ELEMENT
16
17 use discretelement, only: DES_CONTINUUM_HYBRID
18
19 use discretelement, only: DES_CONTINUUM_COUPLED
20
21 use discretelement, only: DES_ONEWAY_COUPLED
22
23 use discretelement, only: DES_MMAX
24
25 use discretelement, only: PRINT_DES_DATA
26
27 use error_manager
28
29
30 use param, only: DIM_M
31
32
33 use physprop, only: MMAX, SMAX
34
35 use physprop, only: RO_g0
36
37
38 use mfix_pic, only: MPPIC
39
40 use mms, only: USE_MMS
41
42 use run, only: SOLIDS_MODEL
43
44 use run, only: TFM_SOLIDS, TFM_COUNT
45 use run, only: DEM_SOLIDS, DEM_COUNT
46 use run, only: PIC_SOLIDS, PIC_COUNT
47
48 USE run, only: SPECIES_EQ, ANY_SPECIES_EQ
49
50 use run, only: KT_TYPE
51
52
53 USE scalars, only: NSCALAR, phase4scalar
54
55 USE scalars, only: phase4scalar
56 implicit none
57
58
59
60
61 INTEGER :: M
62
63 LOGICAL :: ERR_MMAX
64
65 INTEGER :: N
66
67
68
69
70 CALL INIT_ERR_MSG("CHECK_SOLIDS_MODEL_PREREQS")
71
72
73
74 = .FALSE.
75 IF (MMAX < 0) ERR_MMAX = .TRUE.
76 IF(TRIM(KT_TYPE) == 'GHD') THEN
77 IF (MMAX+1 > DIM_M) ERR_MMAX = .TRUE.
78 ELSE
79 IF (MMAX > DIM_M) ERR_MMAX = .TRUE.
80 ENDIF
81 IF((USE_MMS).AND.(MMAX > 1)) ERR_MMAX = .TRUE.
82
83
84 IF (ERR_MMAX) THEN
85 WRITE(ERR_MSG, 1000) iVal(DIM_M)
86 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
87 ENDIF
88 1000 FORMAT('Error 1000: MMAX out of range. Min: 0, Max: ',A)
89
90
91 DO M=1, MMAX
92 SOLIDS_MODEL(M) = trim(adjustl(SOLIDS_MODEL(M)))
93 SELECT CASE(SOLIDS_MODEL(M))
94 CASE ('TFM'); TFM_COUNT = TFM_COUNT + 1
95 CASE ('DEM'); DEM_COUNT = DEM_COUNT + 1
96 CASE ('PIC'); PIC_COUNT = PIC_COUNT + 1
97
98 CASE DEFAULT
99 WRITE(ERR_MSG,1001) iVar('SOLIDS_MODEL',M), SOLIDS_MODEL(M)
100 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
101
102 1001 FORMAT('Error 1001: Unknown solids model: ',A,' = ',A)
103
104 END SELECT
105 ENDDO
106
107
108 = DEM_COUNT + PIC_COUNT
109
110
111 = MMAX - DES_MMAX
112 SMAX = MMAX
113
114 IF(TRIM(KT_TYPE) == 'GHD') THEN
115 MMAX = MMAX + 1
116 TFM_COUNT = TFM_COUNT + 1
117 SOLIDS_MODEL(MMAX) = 'TFM'
118 ENDIF
119
120
121
122 ((MMAX+DES_MMAX)+1:DIM_M) = '---'
123
124
125 = (TFM_COUNT > 0)
126 DEM_SOLIDS = (DEM_COUNT > 0)
127 PIC_SOLIDS = (PIC_COUNT > 0)
128
129
130 IF(PIC_SOLIDS .AND. TFM_SOLIDS)THEN
131 WRITE(ERR_MSG, 1002)
132 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
133 ENDIF
134 1002 FORMAT('Error 1002: MPPIC solids and continuum solids cannot ',&
135 'be combined.',/'Please correct the mfix.dat file.')
136
137
138
139 IF(PIC_SOLIDS .AND. DEM_SOLIDS)THEN
140 WRITE(ERR_MSG, 1003)
141 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
142 ENDIF
143 1003 FORMAT('Error 1003: MPPIC solids and DES solids cannot be ', &
144 'combined.',/'Please correct the mfix.dat file.')
145
146
147
148 = max(SMAX, DES_MMAX)
149 ANY_SPECIES_EQ = any(SPECIES_EQ(:M))
150
151
152 DO N = 1, NScalar
153 IF(Phase4Scalar(N) < 0 .OR. Phase4Scalar(N) > MMAX) THEN
154 WRITE(ERR_MSG,1004) iVar('Phase4Scalar',N), &
155 iVal(phase4scalar(N))
156 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157 ENDIF
158 ENDDO
159 1004 FORMAT('Error 1004: Illegal or unknown input: ',A,' = ',A,/ &
160 'Please correct the mfix.dat file.')
161
162
163 = DEM_SOLIDS .OR. PIC_SOLIDS
164
165 = PIC_SOLIDS
166
167 = (DEM_SOLIDS .AND. TFM_SOLIDS)
168
169 = .NOT.(RO_g0 == 0.0d0)
170
171 IF(DES_CONTINUUM_HYBRID) CALL HYBRID_HACK
172
173
174 IF(.NOT.DISCRETE_ELEMENT) THEN
175 DES_CONTINUUM_COUPLED = .FALSE.
176 = .FALSE.
177 DES_ONEWAY_COUPLED = .FALSE.
178 ENDIF
179
180 CALL FINL_ERR_MSG
181
182 RETURN
183
184 END SUBROUTINE CHECK_SOLIDS_MODEL_PREREQS
185
186
187
188
189
190
191
192
193
194
195
196 SUBROUTINE HYBRID_HACK
197
198
199
200
201 use param, only: DIM_M
202 use error_manager
203 use run, only: SOLIDS_MODEL
204
205
206
207 integer :: TFM_MAX
208 integer :: DEM_MIN
209 integer :: M
210
211
212
213 CALL INIT_ERR_MSG("HYBRID_HACK")
214
215
216 = -DIM_M
217 DEM_MIN = DIM_M
218
219
220 DO M=1, DIM_M
221 SELECT CASE(SOLIDS_MODEL(M))
222 CASE ('TFM'); TFM_MAX = max(M, TFM_MAX)
223 CASE ('DEM'); DEM_MIN = min(M, DEM_MIN)
224 END SELECT
225 ENDDO
226
227 write(*,*)' MAX TFM index: ', TFM_MAX
228 write(*,*)' MIN DEM index: ', DEM_MIN
229
230 IF(DEM_MIN < TFM_MAX) THEN
231 WRITE(ERR_MSG, 2000)
232 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
233 ENDIF
234
235 2000 FORMAT('Error 2000: Illegal phase specification for hybrid ', &
236 'model. All TFM',/'solids must be defined before DEM solids.',&
237 /'Please correct the mfix.dat file.')
238
239 CALL FINL_ERR_MSG
240
241 RETURN
242 END SUBROUTINE HYBRID_HACK
243