File: RELATIVE:/../../../mfix.git/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
368 use ic, only: IC_EP_g, IC_P_g, IC_T_g, IC_X_g
369
370 use ic, only: IC_U_g, IC_V_g, IC_W_g
371
372 use ic, only: IC_GAMA_RG, IC_T_RG
373
374 use ic, only: IC_K_TURB_G, IC_E_TURB_G
375
376 use ic, only: IC_SCALAR
377
378 use ic, only: IC_TYPE
379
380
381 use run, only: ENERGY_EQ
382
383 use run, only: SPECIES_EQ
384
385 use run, only: K_Epsilon
386
387 use physprop, only: RO_G0, MU_G0
388
389 use physprop, only: MW_AVG
390
391 use physprop, only: NMAX
392
393 use scalars, only: NSCALAR
394
395 use geometry, only: NO_I, NO_J, NO_K
396
397
398
399
400 use param1, only: ZERO, ONE, UNDEFINED
401
402
403
404 use error_manager
405
406 use toleranc
407
408 implicit none
409
410
411
412 INTEGER, INTENT(IN) :: ICV
413
414
415
416
417 INTEGER :: N
418
419 DOUBLE PRECISION :: SUM
420
421 LOGICAL :: BASIC_IC
422
423
424
425 CALL INIT_ERR_MSG("CHECK_IC_GAS_PHASE")
426
427
428 = (IC_TYPE(ICV) /= 'PATCH')
429
430
431 IF(BASIC_IC) THEN
432 IF(IC_U_G(ICV) == UNDEFINED) THEN
433 IF(NO_I) THEN
434 IC_U_G(ICV) = ZERO
435 ELSE
436 WRITE(ERR_MSG, 1000) trim(iVar('IC_U_g',ICV))
437 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
438 ENDIF
439 ENDIF
440
441 IF(IC_V_G(ICV) == UNDEFINED) THEN
442 IF(NO_J) THEN
443 IC_V_G(ICV) = ZERO
444 ELSE
445 WRITE(ERR_MSG, 1000) trim(iVar('IC_V_g',ICV))
446 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
447 ENDIF
448 ENDIF
449
450 IF(IC_W_G(ICV) == UNDEFINED) THEN
451 IF (NO_K) THEN
452 IC_W_G(ICV) = ZERO
453 ELSE
454 WRITE(ERR_MSG, 1000) trim(iVar('IC_W_g',ICV))
455 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
456 ENDIF
457 ENDIF
458 ENDIF
459
460
461
462
463 IF(IC_EP_G(ICV) == UNDEFINED .AND. BASIC_IC) THEN
464 WRITE(ERR_MSG, 1000) trim(iVar('IC_EP_g',ICV))
465 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
466 ENDIF
467
468
469
470 IF(IC_P_G(ICV) /= UNDEFINED) THEN
471 IF(RO_G0==UNDEFINED .AND. IC_P_G(ICV)<=ZERO) THEN
472 WRITE(ERR_MSG, 1100) trim(iVar('IC_P_g',ICV)), &
473 iVal(IC_P_G(ICV))
474 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
475 ENDIF
476 ENDIF
477
478 1100 FORMAT('Error 1100: Pressure must be greater than 0.0 for ', &
479 'compressible flow',/'Illegal value: ',A,' = ',A,/'Please ', &
480 'correct the mfix.dat file.')
481
482 IF(BASIC_IC) THEN
483 IF(ENERGY_EQ .OR. RO_G0==UNDEFINED .OR. MU_G0==UNDEFINED) THEN
484 IF(IC_T_G(ICV)==UNDEFINED) THEN
485 WRITE(ERR_MSG, 1000) trim(iVar('IC_T_g',ICV))
486 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
487 ENDIF
488 ENDIF
489 ENDIF
490
491
492 IF (ENERGY_EQ) THEN
493 IF (IC_GAMA_RG(ICV) < ZERO) THEN
494 WRITE(ERR_MSG, 1001) trim(iVar('IC_GAMA_Rg',ICV)), &
495 iVal(IC_GAMA_RG(ICV))
496 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
497 ELSEIF (IC_GAMA_RG(ICV) > ZERO) THEN
498 IF (IC_T_RG(ICV) == UNDEFINED) THEN
499 WRITE(ERR_MSG, 1000) iVar('IC_T_Rg',ICV)
500 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
501 ENDIF
502 ENDIF
503 ENDIF
504
505
506
507 = ZERO
508 DO N = 1, NMAX(0)
509 IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
510 SUM = SUM + IC_X_G(ICV,N)
511 ELSEIF(BASIC_IC) THEN
512 IC_X_G(ICV,N) = ZERO
513 ENDIF
514 ENDDO
515
516
517
518 IF(.NOT.COMPARE(ONE,SUM)) THEN
519
520
521 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM))THEN
522
523
524 ELSEIF(SPECIES_EQ(0)) THEN
525 WRITE(ERR_MSG, 1110) ICV
526 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
527
528 1110 FORMAT('Error 1110: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
529 'gas phase',/'species equations are solved. Please correct ', &
530 'the mfix.dat file.')
531
532
533 ELSEIF(RO_G0 == UNDEFINED .AND. MW_AVG == UNDEFINED) THEN
534 WRITE(ERR_MSG, 1111) ICV
535 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
536
537 1111 FORMAT('Error 1111: IC_X_g(',I3,',:) do NOT sum to ONE and the ',&
538 'gas phase',/'is compressible and MW_AVG is UNDEFINED.',/ &
539 'Please correct the mfix.dat the mfix.dat file.')
540
541 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
542 WRITE(ERR_MSG, 1112) ICV
543 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
544
545 1112 FORMAT('Error 1112: IC_X_g(',I3,',:) do not sum to ONE or ZERO ',&
546 'and they',/'are not needed. Please correct the mfix.dat ', &
547 'the mfix.dat file.')
548
549 ELSE
550 IC_X_G(ICV,:) = ZERO
551 IC_X_G(ICV,1) = ONE
552 ENDIF
553 ENDIF
554
555
556 DO N = 1, NScalar
557 IF(IC_Scalar(ICV,N) == UNDEFINED) IC_Scalar(ICV,N) = ZERO
558 ENDDO
559
560
561 IF(K_Epsilon .AND. BASIC_IC) THEN
562 IF (IC_K_Turb_G(ICV) == UNDEFINED) THEN
563 WRITE(ERR_MSG, 1000) iVar('IC_K_Turb_G',ICV)
564 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
565 ENDIF
566 IF (IC_E_Turb_G(ICV) == UNDEFINED) THEN
567 WRITE(ERR_MSG, 1000) iVar('IC_E_Turb_G',ICV)
568 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
569 ENDIF
570 ENDIF
571
572 CALL FINL_ERR_MSG
573
574 RETURN
575
576 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
577 'correct the mfix.dat file.')
578
579 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
580 'Please correct the mfix.dat file.')
581
582 END SUBROUTINE CHECK_IC_GAS_PHASE
583
584
585
586
587
588
589
590
591
592
593
594 SUBROUTINE CHECK_IC_SOLIDS_PHASES(ICV)
595
596
597
598
599
600 use ic, only: IC_EP_s, IC_ROP_s
601
602 use ic, only: IC_U_s, IC_V_s, IC_W_s
603
604 use ic, only: IC_T_s, IC_X_s, IC_THETA_M
605
606 use ic, only: IC_GAMA_RS, IC_T_RS
607
608 use ic, only: IC_EP_g, IC_T_g
609
610 use ic, only: IC_TYPE
611
612
613 use run, only: ENERGY_EQ
614
615 use run, only: SPECIES_EQ
616
617 use run, only: GRANULAR_ENERGY
618
619 use run, only: SOLVE_ROs
620
621 use physprop, only: BASE_ROs, X_S0, INERT_SPECIES
622
623 use physprop, only: RO_S0
624
625 use physprop, only: NMAX
626
627 use physprop, only: SMAX
628
629 use discretelement, only: DES_MMAX
630
631 use geometry, only: NO_I, NO_J, NO_K
632
633
634
635
636 use param, only: DIM_M
637
638 use param1, only: ZERO, ONE, UNDEFINED
639
640 USE eos, ONLY: EOSS
641
642
643
644 use error_manager
645
646 use toleranc
647
648 IMPLICIT NONE
649
650
651
652
653 INTEGER, INTENT(IN) :: ICV
654
655 INTEGER :: M, N
656
657 DOUBLE PRECISION SUM, SUM_EP
658
659 DOUBLE PRECISION :: IC_ROs(1:DIM_M)
660
661 INTEGER :: INERT
662
663 LOGICAL :: SKIP(1:DIM_M)
664
665 INTEGER :: MMAX_TOT
666
667 LOGICAL :: BASIC_IC
668
669
670
671 CALL INIT_ERR_MSG("CHECK_IC_SOLIDS_PHASES")
672
673
674 = (IC_TYPE(ICV) /= 'PATCH')
675
676
677 = SMAX + DES_MMAX
678
679
680 IF(MMAX_TOT == 1 .AND. IC_EP_S(ICV,1) == UNDEFINED) THEN
681 IF(IC_EP_g(ICV) /= UNDEFINED) IC_EP_S(ICV,1) = ONE-IC_EP_g(ICV)
682 ENDIF
683
684
685
686 IF(MMAX_TOT > 1 .AND. .NOT.COMPARE(IC_EP_g(ICV),ONE)) THEN
687
688 IF(IC_EP_g(ICV) /= UNDEFINED) THEN
689 DO M = 1, MMAX_TOT
690 IF(IC_ROP_S(ICV,M) == UNDEFINED .AND. &
691 IC_EP_S(ICV,M) == UNDEFINED) THEN
692 WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
693 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
694 ENDIF
695 ENDDO
696
697
698 ELSE
699 DO M = 1, MMAX_TOT
700 IF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
701 IC_EP_S(ICV,M) /= UNDEFINED) THEN
702 WRITE(ERR_MSG, 1400) M, ICV, 'IC_ROP_s and IC_EP_s'
703 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
704 ENDIF
705 ENDDO
706 ENDIF
707 ENDIF
708
709 1400 FORMAT('Error 1400: Insufficient solids phase ',I2,' ', &
710 'information for IC',/'region ',I3,'. ',A,' not specified.',/ &
711 'Please correct the mfix.dat file.')
712
713
714 DO M = 1, MMAX_TOT
715 SKIP(M)=(IC_ROP_S(ICV,M)==UNDEFINED.OR.IC_ROP_S(ICV,M)==ZERO) &
716 .AND.(IC_EP_S(ICV,M)==UNDEFINED .OR.IC_EP_S(ICV,M)==ZERO)
717 ENDDO
718
719 IF(MMAX_TOT == 1 .AND. IC_EP_g(ICV)/=ONE) SKIP(1) = .FALSE.
720
721 DO M=1, MMAX_TOT
722
723
724 IF(BASIC_IC) THEN
725 IF(IC_U_S(ICV,M) == UNDEFINED) THEN
726 IF (SKIP(M) .OR. NO_I) THEN
727 IC_U_S(ICV,M) = ZERO
728 ELSE
729 WRITE(ERR_MSG, 1000)trim(iVar('IC_U_s',ICV,M))
730 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
731 ENDIF
732 ENDIF
733
734 IF(IC_V_S(ICV,M) == UNDEFINED) THEN
735 IF(SKIP(M) .OR. NO_J) THEN
736 IC_V_S(ICV,M) = ZERO
737 ELSE
738 WRITE(ERR_MSG, 1000)trim(iVar('IC_V_s',ICV,M))
739 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
740 ENDIF
741 ENDIF
742
743 IF(IC_W_S(ICV,M) == UNDEFINED) THEN
744 IF(SKIP(M) .OR. NO_K) THEN
745 IC_W_S(ICV,M) = ZERO
746 ELSE
747 WRITE(ERR_MSG, 1000)trim(iVar('IC_W_s',ICV,M))
748 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
749 ENDIF
750 ENDIF
751
752 IF(ENERGY_EQ .AND. IC_T_S(ICV,M)==UNDEFINED) THEN
753 IF(SKIP(M)) THEN
754 IC_T_S(ICV,M) = IC_T_G(ICV)
755 ELSE
756 WRITE(ERR_MSG, 1000)trim(iVar('IC_T_s',ICV,M))
757 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
758 ENDIF
759 ENDIF
760
761 IF(GRANULAR_ENERGY .AND. IC_THETA_M(ICV,M)==UNDEFINED) THEN
762 IF(SKIP(M)) THEN
763 IC_THETA_M(ICV,M) = ZERO
764 ELSE
765 WRITE(ERR_MSG, 1000)trim(iVar('IC_Theta_M',ICV,M))
766 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
767 ENDIF
768 ENDIF
769
770 IF(ENERGY_EQ) THEN
771 IF(IC_GAMA_RS(ICV,M) < ZERO) THEN
772 WRITE(ERR_MSG, 1001)trim(iVar('IC_GAMA_Rs',ICV,M)), &
773 iVal(IC_GAMA_RS(ICV,M))
774 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
775 ELSEIF (IC_GAMA_RS(ICV,M) > ZERO) THEN
776 IF(IC_T_RS(ICV,M) == UNDEFINED) THEN
777 WRITE(ERR_MSG, 1001)trim(iVar('IC_T_Rs',ICV,M))
778 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
779 ENDIF
780 ENDIF
781 ENDIF
782 ENDIF
783
784
785
786 = ZERO
787 DO N = 1, NMAX(M)
788 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
789 SUM = SUM + IC_X_S(ICV,M,N)
790 ELSEIF(BASIC_IC) THEN
791 IC_X_S(ICV,M,N) = ZERO
792 ENDIF
793 ENDDO
794
795
796 IF(.NOT.COMPARE(ONE,SUM)) THEN
797
798
799 IF(.NOT.BASIC_IC .AND. COMPARE(ZERO,SUM)) THEN
800
801 ELSEIF(SPECIES_EQ(M) .AND. .NOT.SKIP(M)) THEN
802 WRITE(ERR_MSG, 1402) ICV, M
803 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
804
805 1402 FORMAT('Error 1402: IC_X_s(',I3,',',I2,',:) do NOT sum to ONE ', &
806 'and the solids phase',/'species equations are solved. ', &
807 'Please correct the mfix.dat file.')
808
809 ELSEIF(SOLVE_ROS(M) .AND. .NOT.SKIP(M)) THEN
810 WRITE(ERR_MSG, 1403) ICV, M
811 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
812
813 1403 FORMAT('Error 1403: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ', &
814 'and the solids phase',/'density is calculated. Please ', &
815 'correct the mfix.dat file.')
816
817 ELSEIF(.NOT.COMPARE(SUM,ZERO)) THEN
818 WRITE(ERR_MSG, 1404) ICV
819 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
820
821 1404 FORMAT('Error 1404: IC_X_s(',I3,',',I2,':) do NOT sum to ONE ', &
822 'or ZERO and',/'they are not needed. Please correct the ', &
823 'mfix.dat file.')
824
825 ELSE
826 IC_X_S(ICV,M,:) = ZERO
827 IC_X_S(ICV,M,1) = ONE
828 ENDIF
829 ENDIF
830
831
832 IF(SKIP(M)) THEN
833 IC_ROs(M) = merge(BASE_ROs(M), RO_s0(M), SOLVE_ROs(M))
834
835 ELSEIF(.NOT.SOLVE_ROs(M)) THEN
836 IC_ROs(M) = RO_s0(M)
837
838 ELSE
839
840
841 = INERT_SPECIES(M)
842 IF(IC_X_S(ICV,M,INERT) == ZERO) THEN
843 WRITE(ERR_MSG,1405) M, ICV
844 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
845 ENDIF
846
847 1405 FORMAT('Error 1405: No inert species for phase ',I2,' in IC ', &
848 'region ',I3,'.',/'Unable to calculate solids phase density. ',&
849 'Please refer to the Readme',/' file for required variable ', &
850 'solids density model input parameters and',/' make the ', &
851 'necessary corrections to the data file.')
852
853
854 (M) = EOSS(BASE_ROs(M), X_s0(M,INERT), &
855 IC_X_S(ICV,M,INERT))
856 ENDIF
857
858 ENDDO
859
860
861
862 = IC_EP_G(ICV)
863
864 DO M=1, MMAX_TOT
865
866
867 IF(BASIC_IC .AND. SKIP(M)) THEN
868 IC_EP_S(ICV,M) = ZERO
869 IC_ROP_S(ICV,M) = ZERO
870
871
872 ELSEIF(.NOT.BASIC_IC .AND. (IC_ROP_S(ICV,M) == UNDEFINED &
873 .AND. IC_EP_S(ICV,M) == UNDEFINED)) THEN
874
875
876 ELSEIF(IC_ROP_S(ICV,M) /= UNDEFINED .AND. &
877 IC_EP_S(ICV,M) /= UNDEFINED) THEN
878
879 IF(.NOT.COMPARE(IC_EP_S(ICV,M)*IC_ROs(M), &
880 IC_ROP_S(ICV,M))) THEN
881
882
883
884 IF(BASIC_IC) THEN
885
886 WRITE(ERR_MSG,1406) M, ICV
887 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
888
889 1406 FORMAT('Error 1406: IC_EP_s and IC_ROP_s are inconsistent for ',&
890 'phase ',I2,/,'in IC region ', I3,'. Please correct the ',&
891 'mfix.dat file.')
892
893
894
895
896
897
898 ELSE
899
900 WRITE(ERR_MSG,1407) trim(iVar('IC_ROP_s',ICV,M)), &
901 trim(iVAL(IC_ROP_S(ICV,M))), trim(iVar('IC_EP_s',&
902 ICV,M)), trim(iVAL(IC_EP_S(ICV,M)))
903 CALL FLUSH_ERR_MSG()
904
905 1407 FORMAT('Warning 1407: IC_EP_s and IC_ROP_s are inconsistent:', &
906 2(/3x,A,' = ',A),/'Deferring to IC_EP_s to overcome conflict.')
907
908 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M)*IC_ROs(M)
909
910 ENDIF
911 ENDIF
912
913
914
915 ELSEIF(IC_EP_S(ICV,M) == UNDEFINED)THEN
916 IC_EP_S(ICV,M) = IC_ROP_S(ICV,M) / IC_ROs(M)
917
918
919 ELSEIF(IC_ROP_S(ICV,M) == UNDEFINED) THEN
920 IC_ROP_S(ICV,M) = IC_EP_S(ICV,M) * IC_ROs(M)
921
922 ELSE
923
924 ENDIF
925
926 = SUM_EP + IC_EP_S(ICV,M)
927 ENDDO
928
929
930 IF(BASIC_IC .AND. .NOT.COMPARE(SUM_EP,ONE)) THEN
931 WRITE(ERR_MSG,1410) ICV
932 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
933 ENDIF
934
935 1410 FORMAT('Error 1410: Illegal initial condition region : ',I3,/ &
936 'Sum of volume fractions does NOT equal ONE. Please correct',/&
937 'the mfix.dat file.')
938
939
940 CALL FINL_ERR_MSG
941
942 RETURN
943
944
945 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
946 'correct the mfix.dat file.')
947
948 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
949 'Please correct the mfix.dat file.')
950
951 1002 FORMAT('Error 1002: Illegal data in initial condition region ', &
952 I3,/A,' defined for unknown solids phase ',I2,'.',/ &
953 'Please correct the mfix.dat file.')
954
955 END SUBROUTINE CHECK_IC_SOLIDS_PHASES
956
957
958
959
960
961
962
963
964
965
966
967
968 SUBROUTINE CHECK_IC_OVERFLOW(ICV)
969
970
971
972
973 use ic, only: IC_EP_g, IC_T_g, IC_X_g
974
975 use ic, only: IC_U_g, IC_V_g, IC_W_g
976
977 use ic, only: IC_T_RG
978
979 use ic, only: IC_K_TURB_G, IC_E_TURB_G
980
981 use ic, only: IC_SCALAR
982
983 use ic, only: IC_ROP_s
984
985 use ic, only: IC_U_s, IC_V_s, IC_W_s
986
987 use ic, only: IC_T_s, IC_X_s
988
989 use ic, only: IC_T_RS
990
991 use ic, only: IC_TYPE
992
993
994
995
996 use param1, only: UNDEFINED
997
998 use param, only: DIM_M, DIM_SCALAR
999
1000 use param, only: DIM_N_g, DIM_N_s
1001
1002
1003
1004 use error_manager
1005
1006 implicit none
1007
1008
1009
1010
1011 INTEGER, INTENT(IN) :: ICV
1012
1013
1014
1015
1016 INTEGER :: M, N
1017
1018
1019 IF (IC_TYPE(ICV) == 'PATCH') RETURN
1020
1021
1022 CALL INIT_ERR_MSG("CHECK_IC_OVERFLOW")
1023
1024
1025
1026 IF(IC_U_G(ICV) /= UNDEFINED) THEN
1027 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_g',ICV))
1028 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1029 ELSEIF(IC_V_G(ICV) /= UNDEFINED) THEN
1030 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_g',ICV))
1031 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1032 ELSEIF(IC_W_G(ICV) /= UNDEFINED) THEN
1033 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_g',ICV))
1034 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1035 ELSEIF(IC_EP_G(ICV) /= UNDEFINED) THEN
1036 WRITE(ERR_MSG, 1010) trim(iVar('IC_EP_g',ICV))
1037 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1038 ELSEIF(IC_T_G(ICV) /= UNDEFINED) THEN
1039 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_g',ICV))
1040 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1041 ELSEIF(IC_T_RG(ICV) /= UNDEFINED) THEN
1042 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rg',ICV))
1043 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1044 ELSEIF(IC_K_Turb_G(ICV) /= UNDEFINED) THEN
1045 WRITE(ERR_MSG, 1010) trim(iVar('IC_K_Turb_G',ICV))
1046 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1047 ELSEIF(IC_E_Turb_G(ICV) /= UNDEFINED) THEN
1048 WRITE(ERR_MSG, 1010) trim(iVar('IC_E_Turb_G',ICV))
1049 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1050 ENDIF
1051 DO N = 1, DIM_N_G
1052 IF(IC_X_G(ICV,N) /= UNDEFINED) THEN
1053 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_g',ICV))
1054 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1055 ENDIF
1056 ENDDO
1057 DO N = 1, DIM_SCALAR
1058 IF(IC_Scalar(ICV,N) /= UNDEFINED) THEN
1059 WRITE(ERR_MSG, 1010) trim(iVar('IC_Scalar',ICV))
1060 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1061 ENDIF
1062 ENDDO
1063
1064
1065
1066
1067
1068 DO M=1, DIM_M
1069 IF(IC_ROP_S(ICV,M) /= UNDEFINED) THEN
1070 WRITE(ERR_MSG, 1010) trim(iVar('IC_ROP_s',ICV,M))
1071 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1072 ELSEIF(IC_U_S(ICV,M) /= UNDEFINED) THEN
1073 WRITE(ERR_MSG, 1010) trim(iVar('IC_U_s',ICV,M))
1074 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1075 ELSEIF(IC_V_S(ICV,M) /= UNDEFINED) THEN
1076 WRITE(ERR_MSG, 1010) trim(iVar('IC_V_s',ICV,M))
1077 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1078 ELSEIF(IC_W_S(ICV,M) /= UNDEFINED) THEN
1079 WRITE(ERR_MSG, 1010) trim(iVar('IC_W_s',ICV,M))
1080 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1081 ELSEIF(IC_T_S(ICV,M) /= UNDEFINED) THEN
1082 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_s',ICV,M))
1083 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1084 ELSEIF(IC_T_RS(ICV,M) /= UNDEFINED) THEN
1085 WRITE(ERR_MSG, 1010) trim(iVar('IC_T_Rs',ICV,M))
1086 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1087 ENDIF
1088 DO N = 1, DIM_N_S
1089 IF(IC_X_S(ICV,M,N) /= UNDEFINED) THEN
1090 WRITE(ERR_MSG, 1010) trim(iVar('IC_X_s',ICV,M))
1091 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
1092 ENDIF
1093 ENDDO
1094 ENDDO
1095
1096
1097 CALL FINL_ERR_MSG
1098 RETURN
1099
1100 1010 FORMAT('Error 1010: ',A,' specified in an undefined IC region')
1101
1102 END SUBROUTINE CHECK_IC_OVERFLOW
1103