File: RELATIVE:/../../../mfix.git/model/check_data/check_solids_continuum.f
1
2
3
4
5
6
7
8
9 SUBROUTINE CHECK_SOLIDS_CONTINUUM
10
11
12
13 USE constant
14 USE run
15 USE physprop
16
17
18
19 USE param1, only: zero, one, undefined, undefined_i
20
21
22
23 use error_manager
24
25 IMPLICIT NONE
26
27
28
29 INTEGER :: LC, M
30 DOUBLE PRECISION :: lsin_phi
31
32 INTEGER :: def_mus0, undef_mus0
33
34
35
36
37 = UNDEFINED
38 = UNDEFINED
39 = UNDEFINED
40 = UNDEFINED
41
42
43 CALL INIT_ERR_MSG("CHECK_SOLIDS_CONTINUUM")
44
45
46
47 IF(EP_STAR == UNDEFINED) THEN
48 WRITE(ERR_MSG,1000) 'EP_STAR'
49 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
50 ELSEIF(EP_STAR < ZERO .OR. EP_STAR > ONE) THEN
51 WRITE(ERR_MSG, 1001)'EP_STAR', iVal(EP_STAR)
52 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
53 ENDIF
54
55
56 IF (DIF_S0 < ZERO) THEN
57 WRITE(ERR_MSG, 1001) 'DIF_s0', DIF_s0
58 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
59 ENDIF
60
61
62 = 0
63 DO M = 1, SMAX
64 IF (MU_s0(M) /= UNDEFINED) THEN
65 def_mus0 = def_mus0 + 1
66 IF(MU_s0(M) < ZERO) THEN
67 WRITE(ERR_MSG, 1001) trim(iVar('Mu_s0',M)), &
68 iVal(Mu_s0(M))
69 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
70 ENDIF
71 ENDIF
72 ENDDO
73 undef_mus0 = smax - def_mus0
74
75 DO M = SMAX+1, DIM_M
76 IF(MU_s0(M) /= UNDEFINED)THEN
77 WRITE(ERR_MSG,1002) trim(iVar('Mu_s0',M))
78 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
79 ENDIF
80 ENDDO
81
82
83
84 IF (def_mus0 > 0) THEN
85 IF(GRANULAR_ENERGY) THEN
86
87
88
89
90
91
92
93
94
95
96 WRITE(ERR_MSG,1100)
97 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
98 ENDIF
99
100
101 IF (SMAX >=2) THEN
102 IF (C_E == UNDEFINED) THEN
103 WRITE(ERR_MSG,1101)
104 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
105 ELSEIF (C_F == UNDEFINED) THEN
106 WRITE(ERR_MSG,1102)
107 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
108 ENDIF
109 ENDIF
110 ENDIF
111
112
113
114
115 IF (GRANULAR_ENERGY) THEN
116 IF(def_mus0 >0) THEN
117 WRITE(ERR_MSG,1100)
118 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
119 ENDIF
120 CALL CHECK_KT_TYPE
121 ENDIF
122
123
124
125 IF (.NOT.GRANULAR_ENERGY .AND. undef_mus0 > 0) THEN
126 IF (C_E == UNDEFINED) THEN
127 WRITE(ERR_MSG,1101)
128 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
129 ENDIF
130
131
132 IF (SMAX >=2 .OR. DEM_SOLIDS) THEN
133 IF (C_F == UNDEFINED) THEN
134 WRITE(ERR_MSG,1102)
135 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
136 ENDIF
137 ENDIF
138 ENDIF
139 1100 FORMAT('Error 1100: Constant viscosity is specified but', /&
140 'GRANULAR_ENERGY=.TRUE. Please correct the mfix.dat file')
141 1101 FORMAT('Error 1101: Coefficient of restitution (C_E) not ', &
142 'specified.',/'Please correct the mfix.dat file.')
143 1102 FORMAT('Error 1102: Coefficient of friction (C_F) not ', &
144 'specified.',/'Please correct the mfix.dat file.')
145
146
147
148
149
150
151
152 IF (FRICTION) THEN
153 IF(SCHAEFFER) THEN
154 WRITE(ERR_MSG, 1200)
155 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
156
157 ELSEIF (.NOT.GRANULAR_ENERGY) THEN
158 WRITE(ERR_MSG,1201)
159 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
160
161 ELSEIF(SAVAGE>2 .OR. SAVAGE<0) THEN
162 WRITE(ERR_MSG, 1001)'SAVAGE', iVal(SAVAGE)
163 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
164
165 ELSEIF(BLENDING_STRESS) THEN
166 WRITE(ERR_MSG, 1202)
167 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
168 ELSEIF(PHI == UNDEFINED) THEN
169 WRITE(ERR_MSG, 1203)
170 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
171
172 ELSEIF(PHI_W == UNDEFINED) THEN
173 WRITE(ERR_MSG, 1204)
174 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175 ENDIF
176
177
178 = SIN(PHI*PI/180.D0)
179 TAN_PHI_W = TAN(PHI_W*PI/180.D0)
180 ENDIF
181 1201 FORMAT('Error 1201: The FRICTION solids stress model requires ', &
182 /,'GRANULAR_ENERGY=.TRUE. Please correct the mfix.dat file.')
183 1202 FORMAT('Error 1202: Cannot use BLENDING_STRESS with FRICTION ',&
184 /,'Please correct the mfix.dat file.')
185 1204 FORMAT('Error 1204: Angle of particle-wall friction (PHI_W) not',&
186 ' specified.',/'Please correct the mfix.dat file.')
187
188
189
190 IF(SCHAEFFER) THEN
191 IF(FRICTION) THEN
192 WRITE(ERR_MSG, 1200)
193 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
194 ELSEIF (PHI == UNDEFINED) THEN
195 WRITE(ERR_MSG, 1203)
196 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
197 ENDIF
198
199
200 = sin(phi*PI/180.d0)
201 SIN2_PHI = lSIN_PHI*lSIN_PHI
202 F_PHI = (3.0D0 - 2.0D0*SIN2_PHI)/3.0D0
203 ENDIF
204 1200 FORMAT('Error 1200: FRICTION and SCHAEFFER models cannot be ',&
205 'used',/'together. Please correct the mfix.dat file')
206 1203 FORMAT('Error 1203: Angle of internal friction (PHI) not ', &
207 'specified.',/'Please correct the mfix.dat file.')
208
209
210 IF(YU_STANDISH .AND. FEDORS_LANDEL) THEN
211 WRITE(ERR_MSG, 1300)
212 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
213 ELSEIF(YU_STANDISH) THEN
214
215 IF(SMAX < 2) THEN
216 WRITE(ERR_MSG, 1301)
217 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
218 ENDIF
219 ELSEIF(FEDORS_LANDEL) THEN
220
221 IF(SMAX /= 2) THEN
222 WRITE(ERR_MSG, 1302)
223 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
224 ENDIF
225 ENDIF
226 1300 FORMAT('Error 1300: FEDORS_LANDEL and YU_STANDISH correlations ',&
227 'cannot be',/'used at the same time. Please correct the ', &
228 'mfix.dat file.')
229 1301 FORMAT('Error 1301: YU_STANDISH correlation is for polydisperse',&
230 ' mixtures',/'(MMAX >= 2). Please correct the mfix.dat file.')
231 1302 FORMAT('Error 1302: FEDORS_LANDEL correlation is for binary ', &
232 'mixtures (MMAX=2).',/'Please correct the mfix.dat file.')
233
234
235
236 IF(BLENDING_STRESS) THEN
237
238 IF(SIGM_BLEND) TANH_BLEND = .FALSE.
239 ELSE
240 TANH_BLEND = .FALSE.
241 SIGM_BLEND = .FALSE.
242 ENDIF
243
244
245 IF(MODEL_B) THEN
246 DO LC = 1, MMAX
247 IF(.NOT.CLOSE_PACKED(LC)) THEN
248 WRITE(ERR_MSG, 1400) LC
249 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
250 ENDIF
251 ENDDO
252 ENDIF
253 1400 FORMAT('Error 1400: Solids phase ',I2,' is not CLOSE_PACKED.',/, &
254 'All solids phases must be CLOSE_PACKED with MODEL_B=.TURE.',/ &
255 'Please correct the mfix.dat file.')
256
257
258
259 IF (ADDED_MASS) THEN
260 IF(M_AM == UNDEFINED_I)THEN
261 WRITE(ERR_MSG, 1500)
262 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
263 ELSEIF(M_AM == 0 .OR. M_AM > MMAX) THEN
264 WRITE(ERR_MSG,1501)
265 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
266 1500 FORMAT('Error 1500: Must specify a disperse phase, M_AM, where ',&
267 'the',/'virtual mass applies (ADDED_MASS).',/'Please correct',&
268 ' the mfix.dat file.')
269 1501 FORMAT('Error 1501: M_AM is out of range. [1,MMAX]',/'Please ', &
270 'correct the mfix.dat file.')
271 ENDIF
272 ENDIF
273
274
275
276 SELECT CASE(trim(adjustl(RDF_TYPE)))
277
278 CASE ('LEBOWITZ')
279 RDF_TYPE_ENUM = LEBOWITZ
280
281 CASE ('MODIFIED_LEBOWITZ')
282 RDF_TYPE_ENUM = MODIFIED_LEBOWITZ
283
284 CASE ('MANSOORI')
285 RDF_TYPE_ENUM = MANSOORI
286
287 CASE ('MODIFIED_MANSOORI')
288 RDF_TYPE_ENUM = MODIFIED_MANSOORI
289
290 CASE DEFAULT
291 WRITE(ERR_MSG, 1600)
292 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
293 END SELECT
294
295 1600 FORMAT('Error 1600: Unknown RDF_TYPE',/'Please ', &
296 'correct the mfix.dat file.')
297
298
299
300 IF(MMAX == 1) THEN
301 IF(RDF_TYPE_ENUM /= LEBOWITZ) THEN
302 WRITE(ERR_MSG, 1601) trim(adjustl(RDF_TYPE))
303 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
304
305 1601 FORMAT('Error 1601: The RDF_TYPE should NOT be specified when ',&
306 'MMAX = 1',/'because Carnahan-Starling is the only available',&
307 ' radial distribution',/'function for monodisperse systems. ',&
308 'Please correct the mfix.dat file.')
309
310 ELSE
311 RDF_TYPE_ENUM = CARNAHAN_STARLING
312 ENDIF
313 ENDIF
314
315 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
316 'correct the mfix.dat file.')
317 1001 FORMAT('Error 1001: Illegal or unphysical input: ',A,' = ',A,/ &
318 'Please correct the mfix.dat file.')
319 1002 FORMAT('Error 1002: Illegal input: ',A,' specified out of ',&
320 'range.', /,'Please correct the mfix.dat file.')
321
322
323 CALL FINL_ERR_MSG
324
325
326 RETURN
327 END SUBROUTINE CHECK_SOLIDS_CONTINUUM
328
329
330
331
332
333
334
335
336
337
338
339
340
341 SUBROUTINE CHECK_KT_TYPE
342
343
344
345
346 USE constant
347 USE run
348 USE physprop
349
350
351
352 USE param1, only: half, one, undefined
353
354
355
356 use error_manager
357
358 IMPLICIT NONE
359
360
361
362
363 INTEGER :: I, J
364
365
366
367
368
369 CALL INIT_ERR_MSG("CHECK_KT_TYPE")
370
371
372 IF (AHMADI .AND. SIMONIN) THEN
373 WRITE(ERR_MSG, 9001)
374 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
375 ELSEIF(AHMADI) THEN
376 IF(KT_TYPE(1:6) /= 'AHMADI' .AND. &
377 KT_TYPE(1:8) /= 'LUN_1984')THEN
378 WRITE(ERR_MSG,9002)trim(KT_TYPE)
379 CALL FLUSH_ERR_MSG(ABORT = .TRUE.)
380 ELSE
381 KT_TYPE='AHMADI'
382 ENDIF
383 ELSEIF(SIMONIN) THEN
384 IF(KT_TYPE(1:7) /= 'SIMONIN' .AND. &
385 KT_TYPE(1:8) /= 'LUN_1984')THEN
386 WRITE(ERR_MSG,9003)trim(KT_TYPE)
387 CALL FLUSH_ERR_MSG(ABORT = .TRUE.)
388 ELSE
389 KT_TYPE='SIMONIN'
390 ENDIF
391 ENDIF
392 9001 FORMAT('Error 9001: Cannot specify AHMADI and SIMONIN together.',&
393 /'Please correct the mfix.dat file.')
394 9002 FORMAT('Error 9002: Cannot specify AHMADI and KT_TYPE = ',A,'.', &
395 /'Please correct the mfix.dat file.')
396 9003 FORMAT('Error 9003: Cannot specify SIMONIN and KT_TYPE = ',A,'.',&
397 /'Please correct the mfix.dat file.')
398
399
400
401
402 SELECT CASE(trim(adjustl(KT_TYPE)))
403
404
405 CASE ('IA_NONEP')
406 KT_TYPE_ENUM = IA_2005
407 IF (C_E == UNDEFINED) THEN
408 WRITE(ERR_MSG,1003)
409 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
410 ENDIF
411
412
413
414 CASE ('GD_99')
415 KT_TYPE_ENUM = GD_1999
416 IF (C_E == UNDEFINED) THEN
417 WRITE(ERR_MSG,1003)
418 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
419 ELSEIF(SMAX > 1) THEN
420 WRITE(ERR_MSG,1002) TRIM(KT_TYPE)
421 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
422 ENDIF
423
424
425
426 CASE ('GTSH')
427 KT_TYPE_ENUM = GTSH_2012
428 IF (C_E == UNDEFINED) THEN
429 WRITE(ERR_MSG,1002)
430 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
431 ELSEIF(SMAX > 1) THEN
432 WRITE(ERR_MSG,1002) TRIM(KT_TYPE)
433 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
434 ENDIF
435
436
437
438 CASE ('GHD')
439 KT_TYPE_ENUM = GHD_2007
440
441
442 DO I = 1, SMAX
443 DO J = 1, SMAX
444 IF(r_p(I,J) == UNDEFINED) THEN
445 IF(C_E == UNDEFINED) THEN
446 WRITE(ERR_MSG,1003)
447 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
448 ELSE
449 r_p(I,J) = C_e
450 ENDIF
451 ENDIF
452
453 (J,I) = r_p(I,J)
454 ENDDO
455 ENDDO
456
457 IF(DRAG_TYPE_ENUM /= WEN_YU .AND. DRAG_TYPE_ENUM /= HYS) THEN
458 WRITE(ERR_MSG, 1030)
459 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
460 ELSEIF(ADDED_MASS) THEN
461 WRITE(ERR_MSG,1031)
462 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
463 ELSEIF(SMAX > 2) THEN
464 WRITE(ERR_MSG, 1032)
465 CALL FLUSH_ERR_MSG
466 ENDIF
467
468
469
470 (MMAX) = .FALSE.
471 NMAX_s(MMAX) = 1
472
473
474
475 (MMAX) = 1
476
477 1030 FORMAT('Error 1030: KT_TYPE = "GHD" is restricted to DRAG_TYPE', &
478 'values of WEN_YU and HYS.',/'Please correct the mfix.dat ', &
479 'file.')
480 1031 FORMAT('Error 1031: ADDED_MASS force cannot be applied with ', &
481 'GHD theory that',/'solves for mixture equations.',/'Please', &
482 'correct the mifx.dat file.')
483 1032 FORMAT('Warning 1032: GHD theory may not be valid for more ', &
484 'than two solids phases',/'it requires further development.')
485
486
487
488 CASE ('AHMADI')
489 KT_TYPE_ENUM = AHMADI_1995
490 AHMADI = .TRUE.
491 IF(.NOT.K_EPSILON) THEN
492 WRITE(ERR_MSG,1040) 'K_EPSILON = .TRUE.'
493 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
494 ELSEIF (C_E == UNDEFINED) THEN
495 WRITE(ERR_MSG,1003)
496 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
497 ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
498 WRITE(ERR_MSG, 1004)
499 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
500 ENDIF
501 1040 FORMAT('Error 1040: KT_TYPE = "AHMADI" requires ',A,/ &
502 'Please correct the mfix.dat file.')
503
504
505
506 CASE ('SIMONIN')
507 KT_TYPE_ENUM = SIMONIN_1996
508 SIMONIN = .TRUE.
509 IF(.NOT.K_EPSILON) THEN
510 WRITE(ERR_MSG,1050) 'K_EPSILON = .TRUE.'
511 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
512 ELSEIF (C_E == UNDEFINED) THEN
513 WRITE(ERR_MSG,1003)
514 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
515 ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
516 WRITE(ERR_MSG, 1004)
517 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
518 ENDIF
519 1050 FORMAT('Error 1050: KT_TYPE = "SIMONIN" requires ',A,/ &
520 'Please correct the mfix.dat file.')
521
522
523
524
525 CASE ('LUN_1984')
526 KT_TYPE_ENUM = LUN_1984
527
528
529 IF (C_E == UNDEFINED) THEN
530 WRITE(ERR_MSG,1003)
531 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
532 ELSEIF(C_F == UNDEFINED .AND. SMAX>=2) THEN
533 WRITE(ERR_MSG, 1004)
534 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
535 ENDIF
536
537
538 CASE DEFAULT
539 WRITE(ERR_MSG,1001) trim(adjustl(KT_TYPE))
540 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
541 1001 FORMAT('Error 1001: Invalid or unknown KT_TYPE: ',A,/ &
542 'Please correct the mfix.dat file.')
543
544 END SELECT
545
546
547
548
549
550 = (ONE + C_E)*HALF
551
552
553 1002 FORMAT('Error 1002: KT_TYPE = ',A,' is for monodisperse',&
554 ' solids',/'(MMAX = 1). Please correct the mfix.dat file.')
555
556 1003 FORMAT('Error 1003: Coefficient of restitution (C_E) not ', &
557 'specified.',/'Please correct the mfix.dat file.')
558
559 1004 FORMAT('Error 1004: Coefficient of friction (C_F) not ', &
560 'specified.',/'Please correct the mfix.dat file.')
561
562
563 RETURN
564 END SUBROUTINE CHECK_KT_TYPE
565