File: N:\mfix\model\check_data\check_initial_conditions.f
1
2
3
4
5
6
7
8
9
10
11
12 SUBROUTINE CHECK_INITIAL_CONDITIONS
13
14
15
16
17 use ic, only: IC_DEFINED
18
19 use run, only: DEM_SOLIDS
20
21 use run, only: RUN_TYPE
22
23 use run, only: PIC_SOLIDS
24
25 use run, only: REINITIALIZING
26
27
28
29
30 use param, only: DIMENSION_IC
31
32
33
34 use error_manager
35
36 IMPLICIT NONE
37
38
39
40
41 INTEGER :: ICV
42
43
44
45 CALL INIT_ERR_MSG("CHECK_INITIAL_CONDITIONS")
46
47
48 CALL CHECK_IC_GEOMETRY
49
50
51 DO ICV=1, DIMENSION_IC
52
53
54 IF(IC_DEFINED(ICV)) THEN
55
56 CALL CHECK_IC_GAS_PHASE(ICV)
57
58 CALL CHECK_IC_SOLIDS_PHASES(ICV)
59
60
61
62 ELSEIF(RUN_TYPE == 'NEW' .AND. .NOT.REINITIALIZING) THEN
63 CALL CHECK_IC_OVERFLOW(ICV)
64 ENDIF
65 ENDDO
66
67
68
69
70 IF(DEM_SOLIDS.OR.PIC_SOLIDS) &
71 CALL CHECK_IC_COMMON_DISCRETE
72 IF(DEM_SOLIDS) CALL CHECK_IC_DEM
73 IF(PIC_SOLIDS) CALL CHECK_IC_MPPIC
74
75
76 CALL FINL_ERR_MSG
77
78 RETURN
79 END SUBROUTINE CHECK_INITIAL_CONDITIONS
80
81
82
83
84
85
86
87
88
89
90 SUBROUTINE CHECK_IC_GEOMETRY
91
92
93
94
95
96 use ic, only: IC_DEFINED
97
98 use ic, only: IC_TYPE
99
100 use ic, only: IC_X_e, IC_X_w, IC_I_e, IC_I_w
101 use ic, only: IC_Y_n, IC_Y_s, IC_J_n, IC_J_s
102 use ic, only: IC_Z_t, IC_Z_b, IC_K_t, IC_K_b
103
104 use geometry, only: NO_I, IMAX, IMIN1, IMAX1, XLENGTH, DX, XMIN
105 use geometry, only: NO_J, JMAX, JMIN1, JMAX1, YLENGTH, DY
106 use geometry, only: NO_K, KMAX, KMIN1, KMAX1, ZLENGTH, DZ
107
108 use run, only: RUN_TYPE
109 use run, only: REINITIALIZING
110
111
112
113
114 use param, only: DIMENSION_IC
115
116 use param1, only: ZERO, UNDEFINED, UNDEFINED_I
117
118
119
120 use error_manager
121
122
123 implicit none
124
125
126
127
128
129 INTEGER :: ICV
130
131 INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
132
133
134
135
136 CALL INIT_ERR_MSG("CHECK_IC_GEOMETRY")
137
138
139 DO ICV = 1, DIMENSION_IC
140
141 IC_DEFINED(ICV) = .FALSE.
142 IF (IC_X_W(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
143 IF (IC_X_E(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
144 IF (IC_Y_S(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
145 IF (IC_Y_N(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
146 IF (IC_Z_B(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
147 IF (IC_Z_T(ICV) /= UNDEFINED) IC_DEFINED(ICV) = .TRUE.
148 IF (IC_I_W(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
149 IF (IC_I_E(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
150 IF (IC_J_S(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
151 IF (IC_J_N(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
152 IF (IC_K_B(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
153 IF (IC_K_T(ICV) /= UNDEFINED_I) IC_DEFINED(ICV) = .TRUE.
154
155
156 IF(RUN_TYPE /= 'NEW' .AND. IC_TYPE(ICV) /= 'PATCH') &
157 IC_DEFINED(ICV) = .FALSE.
158
159
160
161 IF(RUN_TYPE == 'NEW' .AND. IC_TYPE(ICV) == 'PATCH') &
162 IC_DEFINED(ICV) = .FALSE.
163
164
165 IF(REINITIALIZING) IC_DEFINED(ICV)=(IC_TYPE(ICV)=='PATCH')
166
167 IF(.NOT.IC_DEFINED(ICV)) CYCLE
168
169 IF (IC_X_W(ICV)==UNDEFINED .AND. IC_I_W(ICV)==UNDEFINED_I) THEN
170 IF (NO_I) THEN
171 IC_X_W(ICV) = ZERO
172 ELSE
173 WRITE(ERR_MSG, 1100) ICV, 'IC_X_w and IC_I_w'
174 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175 ENDIF
176 ENDIF
177
178 IF (IC_X_E(ICV)==UNDEFINED .AND. IC_I_E(ICV)==UNDEFINED_I) THEN
179 IF (NO_I) THEN
180 IC_X_E(ICV) = XLENGTH
181 ELSE
182 WRITE(ERR_MSG, 1100) ICV, 'IC_X_e and IC_I_e'
183 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
184 ENDIF
185 ENDIF
186
187 IF (IC_Y_S(ICV)==UNDEFINED .AND. IC_J_S(ICV)==UNDEFINED_I) THEN
188 IF (NO_J) THEN
189 IC_Y_S(ICV) = ZERO
190 ELSE
191 WRITE(ERR_MSG, 1100) ICV, 'IC_Y_s and IC_J_s'
192 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
193 ENDIF
194 ENDIF
195
196 IF (IC_Y_N(ICV)==UNDEFINED .AND. IC_J_N(ICV)==UNDEFINED_I) THEN
197 IF (NO_J) THEN
198 IC_Y_N(ICV) = YLENGTH
199 ELSE
200 WRITE(ERR_MSG, 1100) ICV, 'IC_Y_n and IC_J_n'
201 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
202 ENDIF
203 ENDIF
204
205 IF (IC_Z_B(ICV)==UNDEFINED .AND. IC_K_B(ICV)==UNDEFINED_I) THEN
206 IF (NO_K) THEN
207 IC_Z_B(ICV) = ZERO
208 ELSE
209 WRITE(ERR_MSG, 1100) ICV, 'IC_Z_b and IC_K_b'
210 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
211 ENDIF
212 ENDIF
213
214 IF (IC_Z_T(ICV)==UNDEFINED .AND. IC_K_T(ICV)==UNDEFINED_I) THEN
215 IF (NO_K) THEN
216 IC_Z_T(ICV) = ZLENGTH
217 ELSE
218 WRITE(ERR_MSG, 1100) ICV, 'IC_Z_t and IC_K_t'
219 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
220 ENDIF
221 ENDIF
222
223 ENDDO
224
225 FORMAT('Error 1100: Initial condition region ',I3,' is ill-', &
226 'defined.',/' > ',A,' are not specified.',/'Please correct ', &
227 'the mfix.dat file.')
228
229
230 DO ICV = 1, DIMENSION_IC
231
232
233 IF(.NOT.IC_DEFINED(ICV)) CYCLE
234
235 IF (IC_X_W(ICV)/=UNDEFINED .AND. IC_X_E(ICV)/=UNDEFINED) THEN
236 IF (NO_I) THEN
237 I_W = 1
238 I_E = 1
239 ELSE
240 CALL CALC_CELL (XMIN, IC_X_W(ICV), DX, IMAX, I_W)
241 I_W = I_W + 1
242 CALL CALC_CELL (XMIN, IC_X_E(ICV), DX, IMAX, I_E)
243 ENDIF
244 IF (IC_I_W(ICV)/=UNDEFINED_I .OR. IC_I_E(ICV)/=UNDEFINED_I) THEN
245 CALL LOCATION_CHECK (IC_I_W(ICV), I_W, ICV, 'IC - west')
246 CALL LOCATION_CHECK (IC_I_E(ICV), I_E, ICV, 'IC - east')
247 ELSE
248 IC_I_W(ICV) = I_W
249 IC_I_E(ICV) = I_E
250 ENDIF
251 ENDIF
252
253
254 IF(IC_I_W(ICV) > IC_I_E(ICV)) THEN
255 WRITE(ERR_MSG, 1101) ICV, 'IC_I_W > IC_I_E'
256 write(*,*)' dump:',IC_I_W(ICV),IC_I_E(ICV)
257 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
258 ELSEIF(IC_I_W(ICV) < IMIN1) THEN
259 WRITE(ERR_MSG, 1101) ICV, 'IC_I_W < IMIN1'
260 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
261 ELSEIF(IC_I_W(ICV) > IMAX1) THEN
262 WRITE(ERR_MSG, 1101) ICV, 'IC_I_W > IMAX1'
263 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
264 ELSEIF(IC_I_E(ICV) < IMIN1) THEN
265 WRITE(ERR_MSG, 1101) ICV, 'IC_I_E < IMIN1'
266 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
267 ELSEIF(IC_I_E(ICV) > IMAX1) THEN
268 WRITE(ERR_MSG, 1101) ICV, 'IC_Z_t and IC_K_t'
269 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
270 ENDIF
271
272 IF (IC_Y_S(ICV)/=UNDEFINED .AND. IC_Y_N(ICV)/=UNDEFINED) THEN
273 IF (NO_J) THEN
274 J_S = 1
275 J_N = 1
276 ELSE
277 CALL CALC_CELL (ZERO, IC_Y_S(ICV), DY, JMAX, J_S)
278 J_S = J_S + 1
279 CALL CALC_CELL (ZERO, IC_Y_N(ICV), DY, JMAX, J_N)
280 ENDIF
281 IF (IC_J_S(ICV)/=UNDEFINED_I .OR. IC_J_N(ICV)/=UNDEFINED_I) THEN
282 CALL LOCATION_CHECK (IC_J_S(ICV), J_S, ICV, 'IC - south')
283 CALL LOCATION_CHECK (IC_J_N(ICV), J_N, ICV, 'IC - north')
284 ELSE
285 IC_J_S(ICV) = J_S
286 IC_J_N(ICV) = J_N
287 ENDIF
288 ENDIF
289
290 IF(IC_J_S(ICV) > IC_J_N(ICV)) THEN
291 WRITE(ERR_MSG, 1101) ICV, 'IC_J_S > IC_J_N'
292 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
293 ELSEIF(IC_J_S(ICV)<JMIN1) THEN
294 WRITE(ERR_MSG, 1101) ICV, 'IC_J_S < JMIN1'
295 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
296 ELSEIF(IC_J_S(ICV)>JMAX1) THEN
297 WRITE(ERR_MSG, 1101) ICV, 'IC_J_S > JMAX1'
298 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
299 ELSEIF(IC_J_N(ICV)<JMIN1) THEN
300 WRITE(ERR_MSG, 1101) ICV, 'IC_J_N < JMIN1'
301 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
302 ELSEIF(IC_J_N(ICV)>JMAX1) THEN
303 WRITE(ERR_MSG, 1101) ICV, 'IC_J_N > JMAX1'
304 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
305 ENDIF
306
307
308 IF (IC_Z_B(ICV)/=UNDEFINED .AND. IC_Z_T(ICV)/=UNDEFINED) THEN
309 IF (NO_K) THEN
310 K_B = 1
311 K_T = 1
312 ELSE
313 CALL CALC_CELL (ZERO, IC_Z_B(ICV), DZ, KMAX, K_B)
314 K_B = K_B + 1
315 CALL CALC_CELL (ZERO, IC_Z_T(ICV), DZ, KMAX, K_T)
316 ENDIF
317 IF (IC_K_B(ICV)/=UNDEFINED_I .OR. IC_K_T(ICV)/=UNDEFINED_I) THEN
318 CALL LOCATION_CHECK (IC_K_B(ICV), K_B, ICV, 'IC - bottom')
319 CALL LOCATION_CHECK (IC_K_T(ICV), K_T, ICV, 'IC - top')
320 ELSE
321 IC_K_B(ICV) = K_B
322 IC_K_T(ICV) = K_T
323 ENDIF
324 ENDIF
325
326 IF(IC_K_B(ICV) > IC_K_T(ICV)) THEN
327 WRITE(ERR_MSG, 1101) ICV, 'IC_K_B > IC_K_T'
328 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
329 ELSEIF(IC_K_B(ICV) < KMIN1) THEN
330 WRITE(ERR_MSG, 1101) ICV, 'IC_K_B < KMIN1'
331 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
332 ELSEIF(IC_K_B(ICV) > KMAX1) THEN
333 WRITE(ERR_MSG, 1101) ICV, 'IC_K_B > KMAX1'
334 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
335 ELSEIF(IC_K_T(ICV) < KMIN1) THEN
336 WRITE(ERR_MSG, 1101) ICV, 'IC_K_T < KMIN1'
337 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
338 ELSEIF(IC_K_T(ICV) > KMAX1) THEN
339 WRITE(ERR_MSG, 1101) ICV, 'IC_K_T > KMAX1'
340 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
341 ENDIF
342
343
344 1101 FORMAT('Error 1101: Initial condition region ',I2,' is ill-', &
345 'defined.',/3x,A,/'Please correct the mfix.dat file.')
346
347 ENDDO
348
349 CALL FINL_ERR_MSG
350
351 RETURN
352 END SUBROUTINE CHECK_IC_GEOMETRY
353
354
355
356
357
358
359
360
361
362
363 SUBROUTINE CHECK_IC_GAS_PHASE(ICV)
364
365
366
367 use constant, only: l_scale0
368
369 use ic, only: IC_EP_g, IC_P_g, IC_T_g, IC_X_g
370
371 use ic, only: IC_U_g, IC_V_g, IC_W_g
372
373 use ic, only: IC_GAMA_RG, IC_T_RG
374
375 use ic, only: IC_K_TURB_G, IC_E_TURB_G
376
377 use ic, only: IC_L_SCALE
378
379 use ic, only: IC_SCALAR
380
381 use ic, only: IC_TYPE
382
383
384 use run, only: ENERGY_EQ
385
386 use run, only: SPECIES_EQ
387
388 use run, only: K_Epsilon
389
390 use physprop, only: RO_G0, MU_G0
391
392 use physprop, only: MW_AVG
393
394 use physprop, only: NMAX
395
396 use scalars, only: NSCALAR
397
398 use geometry, only: NO_I, NO_J, NO_K
399
400
401
402
403 use param1, only: ZERO, ONE, UNDEFINED
404
405
406
407 use error_manager
408
409 use toleranc
410
411 implicit none
412
413
414
415 INTEGER, INTENT(IN) :: ICV
416
417
418
419
420 INTEGER :: N
421
422 DOUBLE PRECISION :: SUM
423
424 LOGICAL :: BASIC_IC
425
426
427
428 CALL INIT_ERR_MSG("CHECK_IC_GAS_PHASE")
429
430
431 = (IC_TYPE(ICV) /= 'PATCH')
432
433
434 IF(BASIC_IC) THEN
435 IF(IC_U_G(ICV) == UNDEFINED) THEN
436 IF(NO_I) THEN
437 IC_U_G(ICV) = ZERO
438 ELSE
439 WRITE(ERR_MSG, 1000) trim(iVar('IC_U_g',ICV))
440 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
441 ENDIF
442 ENDIF
443
444 IF(IC_V_G(ICV) == UNDEFINED) THEN
445 IF(NO_J) THEN
446 IC_V_G(ICV) = ZERO
447 ELSE
448 WRITE(ERR_MSG, 1000) trim(iVar('IC_V_g',ICV))
449 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
450 ENDIF
451 ENDIF
452
453 IF(IC_W_G(ICV) == UNDEFINED) THEN
454 IF (NO_K) THEN
455 IC_W_G(ICV) = ZERO
456 ELSE
457 WRITE(ERR_MSG, 1000) trim(iVar('IC_W_g',ICV))
458 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
459 ENDIF
460 ENDIF
461 ENDIF
462
463
464
465
466 IF(IC_EP_G(ICV) == UNDEFINED .AND. BASIC_IC) THEN
467 WRITE(ERR_MSG, 1000) trim(iVar('IC_EP_g',ICV))
468 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
469 ENDIF
470
471
472
473 IF(IC_P_G(ICV) /= UNDEFINED) THEN
474 IF(RO_G0==UNDEFINED .AND. IC_P_G(ICV)<=ZERO) THEN
475 WRITE(ERR_MSG, 1100) trim(iVar('IC_P_g',ICV)), &
476 iVal(IC_P_G(ICV))
477 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
478 ENDIF
479 ENDIF
480
481 1100 FORMAT('Error 1100: Pressure must be greater than 0.0 for ', &
482 'compressible flow',/'Illegal value: ',A,' = ',A,/'Please ', &
483 'correct the mfix.dat file.')
484
485 IF(BASIC_IC) THEN
486 IF(ENERGY_EQ .OR. RO_G0==UNDEFINED .OR. MU_G0==UNDEFINED) THEN
487 IF(IC_T_G(ICV)==UNDEFINED) THEN
488 WRITE(ERR_MSG, 1000) trim(iVar('IC_T_g',ICV))
489 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
490 ENDIF
491 ENDIF
492 ENDIF
493
494
495 IF (ENERGY_EQ) THEN
496 IF (IC_GAMA_RG(ICV) < ZERO) THEN
497 WRITE(ERR_MSG, 1001) trim(iVar('IC_GAMA_Rg',ICV)), &
498 iVal(IC_GAMA_RG(ICV))
499 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
500 ELSEIF (IC_GAMA_RG(ICV) > ZERO) THEN
501 IF (IC_T_RG(ICV) == UNDEFINED) THEN
502 WRITE(ERR_MSG, 1000) iVar('IC_T_Rg',ICV)
503 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
504 ENDIF
505 ENDIF
506 ENDIF
507
508
509
510 = ZERO
511 DO N = 1, NMAX(0)
512 IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
513 SUM = SUM + IC_X_G(ICV,N)
514 ELSEIF(BASIC_IC) THEN
515 IC_X_G(ICV,N) = ZERO
516 ENDIF
517 ENDDO
518
519
520
521 IF(.NOT.COMPARE(ONE,SUM)) THEN
522
523
524 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM))THEN
525
526
527 ELSEIF(SPECIES_EQ(0)) THEN
528 WRITE(ERR_MSG, 1110) ICV
529 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
530
531 1110 FORMAT('Error 1110: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
532 'gas phase',/'species equations are solved. Please correct ', &
533 'the mfix.dat file.')
534
535
536 ELSEIF(RO_G0 == UNDEFINED .AND. MW_AVG == UNDEFINED) THEN
537 WRITE(ERR_MSG, 1111) ICV
538 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
539
540 1111 FORMAT('Error 1111: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
541 'gas phase',/'is compressible and MW_AVG is UNDEFINED.',/ &
542 'Please correct the mfix.dat file.')
543
544 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
545 WRITE(ERR_MSG, 1112) ICV
546 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
547
548 1112 FORMAT('Error 1112: IC_X_g(',I3,',:) do not sum to ONE or ZERO ',&
549 'and they',/'are not needed. Please correct the mfix.dat ', &
550 'file.')
551
552 ELSE
553 IC_X_G(ICV,:) = ZERO
554 IC_X_G(ICV,1) = ONE
555 ENDIF
556 ENDIF
557
558
559 DO N = 1, NScalar
560 IF(IC_Scalar(ICV,N) == UNDEFINED) IC_Scalar(ICV,N) = ZERO
561 ENDDO
562
563
564 IF(BASIC_IC) THEN
565 IF (L_SCALE0 == ZERO) THEN
566 IF (IC_L_SCALE(ICV) /= UNDEFINED) THEN
567 WRITE(ERR_MSG, 1113) ICV
568 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
569 1113 FORMAT('Error 1113: IC_L_SCALE(',I3,',:) is defined but L_SCALE0 ',&
570 'is equal',/,'to zero. A non-zero value must be specified to ',&
571 'activate this model.',/,'Please correct the mfix.dat file.')
572 ENDIF
573 ELSEIF (L_SCALE0 < ZERO) THEN
574 WRITE(ERR_MSG, 1001) 'L_SCALE0', iVal(L_scale0)
575 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
576 ELSE
577 IF (IC_L_SCALE(ICV) < ZERO) THEN
578 WRITE(ERR_MSG, 1001) iVar('IC_L_SCALE',ICV), &
579 iVal(IC_L_SCALE(ICV))
580 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
581 ENDIF
582 ENDIF
583 ENDIF
584
585
586 IF(K_Epsilon .AND. BASIC_IC) THEN
587 IF (IC_K_Turb_G(ICV) == UNDEFINED) THEN
588 WRITE(ERR_MSG, 1000) iVar('IC_K_Turb_G',ICV)
589 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
590 ENDIF
591 IF (IC_E_Turb_G(ICV) == UNDEFINED) THEN
592 WRITE(ERR_MSG, 1000) iVar('IC_E_Turb_G',ICV)
593 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
594 ENDIF
595 ENDIF
596
597 CALL FINL_ERR_MSG
598
599 RETURN
600
601 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
602 'correct the mfix.dat file.')
603
604 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
605 'Please correct the mfix.dat file.')
606
607 END SUBROUTINE CHECK_IC_GAS_PHASE
608
609
610
611
612
613
614
615
616
617
618
619 SUBROUTINE CHECK_IC_SOLIDS_PHASES(ICV)
620
621
622
623
624
625 use ic, only: IC_EP_s, IC_ROP_s
626
627 use ic, only: IC_U_s, IC_V_s, IC_W_s
628
629 use ic, only: IC_T_s, IC_X_s, IC_THETA_M
630
631 use ic, only: IC_GAMA_RS, IC_T_RS
632
633 use ic, only: IC_EP_g, IC_T_g
634
635 use ic, only: IC_TYPE
636
637
638 use run, only: ENERGY_EQ
639
640 use run, only: SPECIES_EQ
641
642 use run, only: GRANULAR_ENERGY
643
644 use run, only: SOLVE_ROs
645
646 use physprop, only: X_S0, INERT_SPECIES
647
648 use physprop, only: RO_S0
649
650 use physprop, only: NMAX
651
652 use physprop, only: SMAX
653
654 use discretelement, only: DES_MMAX
655
656 use geometry, only: NO_I, NO_J, NO_K
657
658
659
660
661 use param, only: DIM_M
662
663 use param1, only: ZERO, ONE, UNDEFINED
664
665 USE eos, ONLY: EOSS
666
667
668
669 use error_manager
670
671 use toleranc
672
673 IMPLICIT NONE
674
675
676
677
678 INTEGER, INTENT(IN) :: ICV
679
680 INTEGER :: M, N
681
682 DOUBLE PRECISION SUM, SUM_EP
683
684 DOUBLE PRECISION :: IC_ROs(1:DIM_M)
685
686 INTEGER :: INERT
687
688 LOGICAL :: SKIP(1:DIM_M)
689
690 INTEGER :: MMAX_TOT
691
692 LOGICAL :: BASIC_IC
693
694
695
696 CALL INIT_ERR_MSG("CHECK_IC_SOLIDS_PHASES")
697
698
699 = (IC_TYPE(ICV) /= 'PATCH')
700
701
702 = SMAX + DES_MMAX
703
704
705 IF(MMAX_TOT == 1 .AND. IC_EP_S(ICV,1) == UNDEFINED) THEN
706 IF(IC_EP_g(ICV) /= UNDEFINED) IC_EP_S(ICV,1) = ONE-IC_EP_g(ICV)
707 ENDIF
708
709
710
711 IF(MMAX_TOT > 1 .AND. .NOT.COMPARE(IC_EP_g(ICV),ONE)) THEN
712
713 IF(IC_EP_g(ICV) /= UNDEFINED) THEN
714 DO M = 1, MMAX_TOT
715 IF(IC_ROP_S(ICV,M) == UNDEFINED .AND. &
716 IC_EP_S(ICV,M) == UNDEFINED) THEN
717 WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
718 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
719 ENDIF
720 ENDDO
721
722
723 ELSE
724 DO M = 1, MMAX_TOT
725 IF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
726 IC_EP_S(ICV,M) /= UNDEFINED) THEN
727 WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
728 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
729 ENDIF
730 ENDDO
731 ENDIF
732 ENDIF
733
734 1400 FORMAT('Error 1400: Insufficient solids phase ',I2,' ', &
735 'information for IC',/'region ',I3,'. ',A,' not specified.',/ &
736 'Please correct the mfix.dat file.')
737
738
739 DO M = 1, MMAX_TOT
740 SKIP(M)=(IC_ROP_S(ICV,M)==UNDEFINED.OR.IC_ROP_S(ICV,M)==ZERO) &
741 .AND.(IC_EP_S(ICV,M)==UNDEFINED .OR.IC_EP_S(ICV,M)==ZERO)
742 ENDDO
743
744 IF(MMAX_TOT == 1 .AND. IC_EP_g(ICV)/=ONE) SKIP(1) = .FALSE.
745
746 DO M=1, MMAX_TOT
747
748
749 IF(BASIC_IC) THEN
750 IF(IC_U_S(ICV,M) == UNDEFINED) THEN
751 IF (SKIP(M) .OR. NO_I) THEN
752 IC_U_S(ICV,M) = ZERO
753 ELSE
754 WRITE(ERR_MSG, 1000)trim(iVar('IC_U_s',ICV,M))
755 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
756 ENDIF
757 ENDIF
758
759 IF(IC_V_S(ICV,M) == UNDEFINED) THEN
760 IF(SKIP(M) .OR. NO_J) THEN
761 IC_V_S(ICV,M) = ZERO
762 ELSE
763 WRITE(ERR_MSG, 1000)trim(iVar('IC_V_s',ICV,M))
764 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
765 ENDIF
766 ENDIF
767
768 IF(IC_W_S(ICV,M) == UNDEFINED) THEN
769 IF(SKIP(M) .OR. NO_K) THEN
770 IC_W_S(ICV,M) = ZERO
771 ELSE
772 WRITE(ERR_MSG, 1000)trim(iVar('IC_W_s',ICV,M))
773 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
774 ENDIF
775 ENDIF
776
777 IF(ENERGY_EQ .AND. IC_T_S(ICV,M)==UNDEFINED) THEN
778 IF(SKIP(M)) THEN
779 IC_T_S(ICV,M) = IC_T_G(ICV)
780 ELSE
781 WRITE(ERR_MSG, 1000)trim(iVar('IC_T_s',ICV,M))
782 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
783 ENDIF
784 ENDIF
785
786 IF(GRANULAR_ENERGY .AND. IC_THETA_M(ICV,M)==UNDEFINED) THEN
787 IF(SKIP(M)) THEN
788 IC_THETA_M(ICV,M) = ZERO
789 ELSE
790 WRITE(ERR_MSG, 1000)trim(iVar('IC_Theta_M',ICV,M))
791 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
792 ENDIF
793 ENDIF
794
795 IF(ENERGY_EQ) THEN
796 IF(IC_GAMA_RS(ICV,M) < ZERO) THEN
797 WRITE(ERR_MSG, 1001)trim(iVar('IC_GAMA_Rs',ICV,M)), &
798 iVal(IC_GAMA_RS(ICV,M))
799 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
800 ELSEIF (IC_GAMA_RS(ICV,M) > ZERO) THEN
801 IF(IC_T_RS(ICV,M) == UNDEFINED) THEN
802 WRITE(ERR_MSG, 1001)trim(iVar('IC_T_Rs',ICV,M))
803 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
804 ENDIF
805 ENDIF
806 ENDIF
807 ENDIF
808
809
810
811 = ZERO
812 DO N = 1, NMAX(M)
813 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
814 SUM = SUM + IC_X_S(ICV,M,N)
815 ELSEIF(BASIC_IC) THEN
816 IC_X_S(ICV,M,N) = ZERO
817 ENDIF
818 ENDDO
819
820
821 IF(.NOT.COMPARE(ONE,SUM)) THEN
822
823
824 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM)) THEN
825
826 ELSEIF(SPECIES_EQ(M) .AND. .NOT.SKIP(M)) THEN
827 WRITE(ERR_MSG, 1402) ICV, M
828 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
829
830 1402 FORMAT('Error 1402: IC_X_s(',I3,',',I2,',:) do NOT sum to ONE ', &
831 'and the solids phase',/'species equations are solved. ', &
832 'Please correct the mfix.dat file.')
833
834 ELSEIF(SOLVE_ROS(M) .AND. .NOT.SKIP(M)) THEN
835 WRITE(ERR_MSG, 1403) ICV, M
836 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
837
838 1403 FORMAT('Error 1403: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ', &
839 'and the solids phase',/'density is calculated. Please ', &
840 'correct the mfix.dat file.')
841
842 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
843 WRITE(ERR_MSG, 1404) ICV
844 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
845
846 1404 FORMAT('Error 1404: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ', &
847 'or ZERO and',/'they are not needed. Please correct the ', &
848 'mfix.dat file.')
849
850 ELSE
851 IC_X_S(ICV,M,:) = ZERO
852 IC_X_S(ICV,M,1) = ONE
853 ENDIF
854 ENDIF
855
856
857 IF(SKIP(M)) THEN
858 IC_ROs(M) = merge(RO_s0(M), RO_s0(M), SOLVE_ROs(M))
859
860 ELSEIF(.NOT.SOLVE_ROs(M)) THEN
861 IC_ROs(M) = RO_s0(M)
862
863 ELSE
864
865
866 = INERT_SPECIES(M)
867 IF(IC_X_S(ICV,M,INERT) == ZERO) THEN
868 WRITE(ERR_MSG,1405) M, ICV
869 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
870 ENDIF
871
872 1405 FORMAT('Error 1405: No inert species for phase ',I2,' in IC ', &
873 'region ',I3,'.',/'Unable to calculate solids phase density. ',&
874 'Please refer to the Readme',/' file for required variable ', &
875 'solids density model input parameters and',/' make the ', &
876 'necessary corrections to the data file.')
877
878
879 (M) = EOSS(RO_s0(M), X_s0(M,INERT), &
880 IC_X_S(ICV,M,INERT))
881 ENDIF
882
883 ENDDO
884
885
886
887 = IC_EP_G(ICV)
888
889 DO M=1, MMAX_TOT
890
891
892 IF(BASIC_IC .AND. SKIP(M)) THEN
893 IC_EP_S(ICV,M) = ZERO
894 IC_ROP_S(ICV,M) = ZERO
895
896
897 ELSEIF(.NOT.BASIC_IC .AND. (IC_ROP_S(ICV,M) == UNDEFINED &
898 .AND. IC_EP_S(ICV,M) == UNDEFINED)) THEN
899
900
901 ELSEIF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
902 IC_EP_S(ICV,M) /= UNDEFINED) THEN
903
904 IF(.NOT.COMPARE(IC_EP_S(ICV,M)*IC_ROs(M), &
905 IC_ROP_S(ICV,M))) THEN
906
907
908
909 IF(BASIC_IC) THEN
910
911 WRITE(ERR_MSG,1406) M, ICV
912 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
913
914 1406 FORMAT('Error 1406: IC_EP_s and IC_ROP_s are inconsistent for ',&
915 'phase ',I2,/,'in IC region ', I3,'. Please correct the ',&
916 'mfix.dat file.')
917
918
919
920
921
922
923 ELSE
924
925 WRITE(ERR_MSG,1407) trim(iVar('IC_ROP_s',ICV,M)), &
926 trim(iVAL(IC_ROP_S(ICV,M))), trim(iVar('IC_EP_s',&
927 ICV,M)), trim(iVAL(IC_EP_S(ICV,M)))
928 CALL FLUSH_ERR_MSG()
929
930 1407 FORMAT('Warning 1407: IC_EP_s and IC_ROP_s are inconsistent:', &
931 2(/3x,A,' = ',A),/'Deferring to IC_EP_s to overcome conflict.')
932
933 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M)*IC_ROs(M)
934
935 ENDIF
936 ENDIF
937
938
939
940 ELSEIF(IC_EP_S(ICV,M) == UNDEFINED)THEN
941 IC_EP_S(ICV,M) = IC_ROP_S(ICV,M) / IC_ROs(M)
942
943
944 ELSEIF(IC_ROP_S(ICV,M) == UNDEFINED) THEN
945 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M) * IC_ROs(M)
946
947 ELSE
948
949 ENDIF
950
951 = SUM_EP + IC_EP_S(ICV,M)
952 ENDDO
953
954
955 IF(BASIC_IC .AND. .NOT.COMPARE(SUM_EP,ONE)) THEN
956 WRITE(ERR_MSG,1410) ICV
957 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
958 ENDIF
959
960 1410 FORMAT('Error 1410: Illegal initial condition region : ',I3,/ &
961 'Sum of volume fractions does NOT equal ONE. Please correct',/&
962 'the mfix.dat file.')
963
964
965 CALL FINL_ERR_MSG
966
967 RETURN
968
969
970 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
971 'correct the mfix.dat file.')
972
973 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
974 'Please correct the mfix.dat file.')
975
976 1002 FORMAT('Error 1002: Illegal data in initial condition region ', &
977 I3,/A,' defined for unknown solids phase ',I2,'.',/ &
978 'Please correct the mfix.dat file.')
979
980 END SUBROUTINE CHECK_IC_SOLIDS_PHASES
981
982
983
984
985
986
987
988
989
990
991
992
993 SUBROUTINE CHECK_IC_OVERFLOW(ICV)
994
995
996
997
998 use ic, only: IC_EP_g, IC_T_g, IC_X_g
999
1000 use ic, only: IC_U_g, IC_V_g, IC_W_g
1001
1002 use ic, only: IC_T_RG
1003
1004 use ic, only: IC_K_TURB_G, IC_E_TURB_G
1005
1006 use ic, only: IC_SCALAR
1007
1008 use ic, only: IC_ROP_s
1009
1010 use ic, only: IC_U_s, IC_V_s, IC_W_s
1011
1012 use ic, only: IC_T_s, IC_X_s
1013
1014 use ic, only: IC_T_RS
1015
1016 use ic, only: IC_TYPE
1017
1018
1019
1020
1021 use param1, only: UNDEFINED
1022
1023 use param, only: DIM_M, DIM_SCALAR
1024
1025 use param, only: DIM_N_g, DIM_N_s
1026
1027
1028
1029 use error_manager
1030
1031 implicit none
1032
1033
1034
1035
1036 INTEGER, INTENT(IN) :: ICV
1037
1038
1039
1040
1041 INTEGER :: M, N
1042
1043
1044 IF (IC_TYPE(ICV) == 'PATCH') RETURN
1045
1046
1047 CALL INIT_ERR_MSG("CHECK_IC_OVERFLOW")
1048
1049
1050
1051 IF(IC_U_G(ICV) /= UNDEFINED) THEN
1052 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_g',ICV))
1053 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1054 ELSEIF(IC_V_G(ICV) /= UNDEFINED) THEN
1055 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_g',ICV))
1056 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1057 ELSEIF(IC_W_G(ICV) /= UNDEFINED) THEN
1058 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_g',ICV))
1059 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1060 ELSEIF(IC_EP_G(ICV) /= UNDEFINED) THEN
1061 WRITE(ERR_MSG, 1010) trim(iVar('IC_EP_g',ICV))
1062 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1063 ELSEIF(IC_T_G(ICV) /= UNDEFINED) THEN
1064 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_g',ICV))
1065 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1066 ELSEIF(IC_T_RG(ICV) /= UNDEFINED) THEN
1067 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rg',ICV))
1068 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1069 ELSEIF(IC_K_Turb_G(ICV) /= UNDEFINED) THEN
1070 WRITE(ERR_MSG, 1010) trim(iVar('IC_K_Turb_G',ICV))
1071 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1072 ELSEIF(IC_E_Turb_G(ICV) /= UNDEFINED) THEN
1073 WRITE(ERR_MSG, 1010) trim(iVar('IC_E_Turb_G',ICV))
1074 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1075 ENDIF
1076 DO N = 1, DIM_N_G
1077 IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
1078 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_g',ICV))
1079 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1080 ENDIF
1081 ENDDO
1082 DO N = 1, DIM_SCALAR
1083 IF(IC_Scalar(ICV,N) /= UNDEFINED) THEN
1084 WRITE(ERR_MSG, 1010) trim(iVar('IC_Scalar',ICV))
1085 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1086 ENDIF
1087 ENDDO
1088
1089
1090
1091
1092
1093 DO M=1, DIM_M
1094 IF(IC_ROP_S(ICV,M) /= UNDEFINED) THEN
1095 WRITE(ERR_MSG, 1010) trim(iVar('IC_ROP_s',ICV,M))
1096 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1097 ELSEIF(IC_U_S(ICV,M) /= UNDEFINED) THEN
1098 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_s',ICV,M))
1099 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1100 ELSEIF(IC_V_S(ICV,M) /= UNDEFINED) THEN
1101 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_s',ICV,M))
1102 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1103 ELSEIF(IC_W_S(ICV,M) /= UNDEFINED) THEN
1104 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_s',ICV,M))
1105 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1106 ELSEIF(IC_T_S(ICV,M) /= UNDEFINED) THEN
1107 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_s',ICV,M))
1108 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1109 ELSEIF(IC_T_RS(ICV,M) /= UNDEFINED) THEN
1110 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rs',ICV,M))
1111 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1112 ENDIF
1113 DO N = 1, DIM_N_S
1114 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
1115 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_s',ICV,M))
1116 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1117 ENDIF
1118 ENDDO
1119 ENDDO
1120
1121
1122 CALL FINL_ERR_MSG
1123 RETURN
1124
1125 1010 FORMAT('Error 1010: ',A,' specified in an undefined IC region')
1126
1127 END SUBROUTINE CHECK_IC_OVERFLOW
1128