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