File: /nfs/home/0/users/jenkins/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 discretelement, only: PRINT_DES_DATA
41
42 use run, only: KT_TYPE
43
44 use mms, only: USE_MMS
45
46
47 USE scalars, only: NSCALAR, phase4scalar
48
49 USE scalars, only: phase4scalar
50
51
52
53
54 use param, only: DIM_M
55
56
57
58 use error_manager
59
60 implicit none
61
62
63
64
65 INTEGER :: M
66
67 LOGICAL :: ERR_MMAX
68
69 INTEGER :: N
70
71
72
73
74 CALL INIT_ERR_MSG("CHECK_SOLIDS_MODEL_PREREQS")
75
76
77
78 = .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
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
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
112 = DEM_COUNT + PIC_COUNT
113
114
115 = MMAX - DES_MMAX
116 SMAX = MMAX
117
118 IF(TRIM(KT_TYPE) == 'GHD') THEN
119 MMAX = MMAX + 1
120 TFM_COUNT = TFM_COUNT + 1
121 ENDIF
122
123
124
125 ((MMAX+DES_MMAX)+1:DIM_M) = '---'
126
127
128 = (TFM_COUNT > 0)
129 DEM_SOLIDS = (DEM_COUNT > 0)
130 PIC_SOLIDS = (PIC_COUNT > 0)
131
132
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
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
150
151 = max(SMAX, DES_MMAX)
152 ANY_SPECIES_EQ = any(SPECIES_EQ(:M))
153
154
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
166 = DEM_SOLIDS .OR. PIC_SOLIDS
167
168 = PIC_SOLIDS
169
170 = (DEM_SOLIDS .AND. TFM_SOLIDS)
171
172
173 IF(DES_CONTINUUM_HYBRID) CALL HYBRID_HACK
174
175
176 IF(.NOT.DISCRETE_ELEMENT) THEN
177 DES_CONTINUUM_COUPLED = .FALSE.
178 = .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
190
191
192
193
194
195
196
197
198 SUBROUTINE HYBRID_HACK
199
200
201 use run, only: SOLIDS_MODEL
202
203
204
205
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
216 CALL INIT_ERR_MSG("HYBRID_HACK")
217
218
219 = -DIM_M
220 DEM_MIN = DIM_M
221
222
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