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