File: N:\mfix\model\flow_to_vel.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SUBROUTINE FLOW_TO_VEL_NEW(DO_VEL_CHECK, M_TOT, SKIP, BCV)
23
24 use param, only: DIM_M
25 use param1, only: UNDEFINED
26 use geometry, only: NO_I, NO_J, NO_K
27 use bc, only: BC_MASSFLOW_G
28 use bc, only: BC_VOLFLOW_G
29 use bc, only: BC_MASSFLOW_S
30 use bc, only: BC_VOLFLOW_S
31 use run, only: REINITIALIZING
32
33 use error_manager
34 use toleranc
35
36 IMPLICIT NONE
37
38
39
40 LOGICAL, intent(in) :: DO_VEL_CHECK
41
42
43 INTEGER, intent(in) :: M_TOT
44 LOGICAL, intent(in) :: SKIP(DIM_M)
45
46
47 INTEGER, intent(in) :: BCV
48
49
50 LOGICAL :: CONVERTED = .FALSE.
51
52
53 INTEGER :: M
54
55
56 CALL INIT_ERR_MSG("FLOW_TO_VEL_NEW")
57
58
59 IF(BC_MASSFLOW_G(BCV) /= UNDEFINED) &
60 CALL GAS_MASSFLOW_TO_VOLFLOW(BCV)
61
62 DO M=1,M_TOT
63 IF(BC_MASSFLOW_S(BCV,M) /= UNDEFINED) &
64 CALL SOLIDS_MASSFLOW_TO_VOLFLOW(BCV,M,SKIP(M))
65 ENDDO
66
67
68 IF(BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
69 CALL GAS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV)
70
71 = .TRUE.
72 ENDIF
73
74 DO M=1,M_TOT
75 IF(BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
76 CALL SOLIDS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK,BCV,M,SKIP(M))
77
78 = .TRUE.
79 ENDIF
80 ENDDO
81
82 IF(CONVERTED .AND. .NOT.REINITIALIZING .AND. &
83 (NO_I.OR.NO_J.OR.NO_K)) THEN
84 WRITE(ERR_MSG, 1100)
85 CALL FLUSH_ERR_MSG
86 ENDIF
87
88 CALL FINL_ERR_MSG
89
90 RETURN
91
92 1100 FORMAT('Warning 1100: Some volumetric or mass flow rates have ', &
93 'been converted',/'velocity. Ensure that the third (unused) ',&
94 'dimension in 2D simulations',/'is correctly specified (e.g.',&
95 ', in axisymmetric cylindrical coordinates',/'ZLENGTH = 2*Pi)')
96
97 END SUBROUTINE FLOW_TO_VEL_NEW
98
99
100
101
102
103
104
105
106
107
108
109
110 SUBROUTINE GAS_MASSFLOW_TO_VOLFLOW(BCV)
111
112 use bc, only: BC_MASSFLOW_g
113 use bc, only: BC_P_g
114 use bc, only: BC_T_g
115 use bc, only: BC_VOLFLOW_g
116 use bc, only: BC_X_g
117 use eos, only: EOSG
118 use error_manager
119 use param, only: DIMENSION_BC
120 use param1, only: UNDEFINED
121 use param1, only: ZERO
122 use physprop, only: CALC_MW
123 use physprop, only: MW_AVG, MW_g
124 use physprop, only: NMAX
125 use physprop, only: RO_g0
126 use scales, only: P_REF
127 use toleranc
128
129 IMPLICIT NONE
130
131 INTEGER, INTENT(in) :: BCV
132
133
134 DOUBLE PRECISION :: VOLFLOW
135
136 DOUBLE PRECISION :: MW
137
138 CALL INIT_ERR_MSG("GAS_MASSFLOW_TO_VOLFLOW")
139
140
141 IF(COMPARE(BC_MASSFLOW_G(BCV),ZERO)) THEN
142 VOLFLOW = ZERO
143
144
145 ELSEIF(RO_G0 /= UNDEFINED) THEN
146 VOLFLOW = BC_MASSFLOW_G(BCV)/RO_G0
147
148
149 ELSEIF(BC_P_G(BCV)/=UNDEFINED .AND. BC_T_G(BCV)/=UNDEFINED) THEN
150 IF(MW_AVG == UNDEFINED) THEN
151 MW = CALC_MW(BC_X_G,DIMENSION_BC,BCV,NMAX(0),MW_G)
152 ELSE
153 MW = MW_AVG
154 ENDIF
155 VOLFLOW = BC_MASSFLOW_G(BCV) / &
156 EOSG(MW,(BC_P_G(BCV)-P_REF),BC_T_G(BCV))
157
158
159
160 ELSE
161 WRITE(ERR_MSG, 1100) BCV
162 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
163
164 1100 FORMAT('Error 1100: Boundary condition ',I3,' failed sanity ', &
165 'check.',/'Please report this to the MFIX mailing list.')
166
167 ENDIF
168
169
170 IF(BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
171 IF(.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_G(BCV))) THEN
172 WRITE(ERR_MSG,1101) trim(iVar('BC_MASSFLOW_g',BCV)), BCV, &
173 VOLFLOW, BC_VOLFLOW_g(BCV)
174 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
175 ENDIF
176 ELSE
177
178
179 (BCV) = VOLFLOW
180 ENDIF
181
182 1101 FORMAT('Error 1101: Volumetric flow rate calculated from ',A,/ &
183 'does NOT equal the specified volumetric flow rate for BC',I3,&
184 /3x,'>>> Calculated: ',G14.7,/3x,'>>> Specified: ',G14.7,/ &
185 'Please correct the mfix.dat file.')
186
187
188 CALL FINL_ERR_MSG
189
190 RETURN
191
192 END SUBROUTINE GAS_MASSFLOW_TO_VOLFLOW
193
194
195
196
197
198
199
200
201
202
203
204
205 SUBROUTINE SOLIDS_MASSFLOW_TO_VOLFLOW(BCV,M, SKIP_M)
206
207 USE bc, only: BC_MASSFLOW_s
208 USE bc, only: BC_VOLFLOW_s
209 USE bc, only: BC_X_s
210 USE param1, only: UNDEFINED, ZERO
211 USE physprop, only: INERT_SPECIES
212 USE physprop, only: RO_s0
213 USE physprop, only: X_s0
214 use eos, only: EOSS
215 use error_manager
216 use toleranc
217
218 IMPLICIT NONE
219
220
221 INTEGER, INTENT(in) :: BCV, M
222 LOGICAL, INTENT(in) :: SKIP_M
223
224
225 DOUBLE PRECISION :: VOLFLOW
226
227 INTEGER :: INERT
228
229 CALL INIT_ERR_MSG("SOLIDS_MASSFLOW_TO_VOLFLOW")
230
231
232 IF(SKIP_M) THEN
233 WRITE(ERR_MSG,1100) M, BCV, trim(iVar("BC_MASSFLOW_S",BCV,M))
234 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
235 ENDIF
236
237 1100 FORMAT('Error 1100: Solids phase ',I2,' has a specified mass ', &
238 'flow rate',/'at BC ',I3,', ',A,'. But, both BC_ROP_s and ',&
239 'BC_EP_s are zero or undefined.',/'Please correct the ',&
240 'mfix.dat file.')
241
242 IF(COMPARE(BC_MASSFLOW_S(BCV,M),ZERO)) THEN
243 VOLFLOW = ZERO
244
245 ELSEIF(RO_S0(M) /= UNDEFINED) THEN
246 VOLFLOW = BC_MASSFLOW_S(BCV,M)/RO_S0(M)
247 ELSE
248
249 = INERT_SPECIES(M)
250
251 = BC_MASSFLOW_S(BCV,M)/EOSS(RO_s0(M), &
252 X_s0(M,INERT), BC_X_S(BCV,M,INERT))
253 ENDIF
254
255
256 IF(BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
257 IF(.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_S(BCV,M))) THEN
258 WRITE(ERR_MSG,1101) trim(iVar('BC_MASSFLOW_S',BCV,M)), BCV, &
259 VOLFLOW, BC_VOLFLOW_S(BCV,M)
260 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
261 ENDIF
262 ELSE
263 BC_VOLFLOW_S(BCV,M) = VOLFLOW
264 ENDIF
265
266 CALL FINL_ERR_MSG
267
268 RETURN
269
270 1101 FORMAT('Error 1101: Volumetric flow rate calculated from ',A,/ &
271 'does NOT equal the specified volumetric flow rate for BC',I3,&
272 /3x,'>>> Calculated: ',G14.7,/3x,'>>> Specified: ',G14.7,/ &
273 'Please correct the mfix.dat file.')
274
275
276 END SUBROUTINE SOLIDS_MASSFLOW_TO_VOLFLOW
277
278
279
280
281
282
283
284
285
286
287
288
289 SUBROUTINE GAS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV)
290
291 USE bc
292 USE compar
293 USE discretelement
294 USE error_manager
295 USE exit, only: mfix_exit
296 USE fldvar
297 USE funits
298 USE geometry
299 USE indices
300 USE mfix_pic
301 USE param
302 USE param1
303 USE physprop
304 USE run
305 USE scales
306 USE toleranc
307
308 IMPLICIT NONE
309
310
311
312
313 INTEGER, INTENT(in) :: BCV
314
315
316 LOGICAL, INTENT(in) :: DO_VEL_CHECK
317
318
319 DOUBLE PRECISION :: SGN, OFF
320
321
322 DOUBLE PRECISION :: VEL
323
324 CALL INIT_ERR_MSG("GAS_VOLFLOW_TO_VELOCITY")
325
326 SELECT CASE (BC_TYPE_ENUM(BCV))
327 CASE (MASS_INFLOW); SGN = ONE; OFF = ZERO
328 CASE (MASS_OUTFLOW); SGN = -ONE; OFF = ONE
329 CASE DEFAULT
330 write(*,*) 'error in GAS_VOLFLOW_TO_VELOCITY'
331 call mfix_exit(myPE)
332 END SELECT
333
334 SELECT CASE (BC_PLANE(BCV))
335 CASE ('W'); SGN = -SGN
336 CASE ('S'); SGN = -SGN
337 CASE ('B'); SGN = -SGN
338 END SELECT
339
340
341
342 = SGN*BC_VOLFLOW_G(BCV)/(BC_AREA(BCV)*BC_EP_G(BCV))
343
344
345
346
347
348
349 IF(BC_PLANE(BCV) == 'W' .OR. BC_PLANE(BCV)== 'E') THEN
350
351 IF(BC_U_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
352 IF(.NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
353 WRITE(ERR_MSG,1100) BCV, VEL, 'BC_U_g', BC_U_G(BCV)
354 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
355 ENDIF
356 ELSE
357 BC_U_G(BCV) = VEL
358 BC_V_G(BCV) = OFF * BC_V_G(BCV)
359 BC_W_G(BCV) = OFF * BC_W_G(BCV)
360 ENDIF
361
362 ELSEIF(BC_PLANE(BCV) == 'S' .OR. BC_PLANE(BCV)== 'N') THEN
363 IF(BC_V_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
364 IF(.NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
365 WRITE(ERR_MSG, 1100) BCV, VEL, 'BC_V_g', BC_V_G(BCV)
366 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
367 ENDIF
368 ELSE
369 BC_V_G(BCV) = VEL
370 BC_U_G(BCV) = OFF * BC_U_G(BCV)
371 BC_W_G(BCV) = OFF * BC_W_G(BCV)
372 ENDIF
373
374 ELSEIF(BC_PLANE(BCV) == 'B' .OR. BC_PLANE(BCV)== 'T') THEN
375 IF(BC_W_G(BCV) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
376 IF(.NOT.COMPARE(VEL, BC_W_G(BCV))) THEN
377 WRITE(ERR_MSG, 1100) BCV, VEL, 'BC_W_g', BC_W_G(BCV)
378 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
379 ENDIF
380 ELSE
381 BC_W_G(BCV) = VEL
382 BC_U_G(BCV) = OFF * BC_U_G(BCV)
383 BC_V_G(BCV) = OFF * BC_V_G(BCV)
384 ENDIF
385
386 ENDIF
387
388 CALL FINL_ERR_MSG
389
390 RETURN
391
392 1100 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
393 ' Computed velocity is not equal to specified value',/,&
394 ' Value computed from vol. or mass flow = ',G14.7,/,&
395 ' Specified value (',A,') = ',G14.7,/1X,70('*')/)
396
397 END SUBROUTINE GAS_VOLFLOW_TO_VELOCITY
398
399
400
401
402
403
404
405
406
407
408
409
410 SUBROUTINE SOLIDS_VOLFLOW_TO_VELOCITY(DO_VEL_CHECK, BCV, M, SKIP_M)
411
412 USE param
413 USE param1
414 USE geometry
415 USE fldvar
416 USE physprop
417 USE run
418 USE bc
419 USE scales
420 USE indices
421 USE funits
422 USE compar
423 USE discretelement
424 USE mfix_pic
425
426 use error_manager
427 use toleranc
428
429 IMPLICIT NONE
430
431
432
433
434 INTEGER, INTENT(in) :: BCV, M
435
436 LOGICAL, INTENT(in) :: DO_VEL_CHECK, SKIP_M
437
438
439 DOUBLE PRECISION :: VEL
440
441 DOUBLE PRECISION :: SGN, OFF
442
443
444
445 CALL INIT_ERR_MSG("SOLIDS_VOLFLOW_TO_VELOCITY")
446
447 IF(SKIP_M) THEN
448 WRITE(ERR_MSG,1100) M, BCV, trim(iVar("BC_VOLFLOW_S",BCV,M))
449 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
450 ENDIF
451
452 1100 FORMAT('Error 1100: Solids phase ',I2,' has a specified ', &
453 'volumetric flow rate',/'at BC ',I3,', ',A,'. But, both ',&
454 'BC_ROP_s and BC_EP_s are zero or undefined.',/'Please ',&
455 'the mfix.dat file.')
456
457 SELECT CASE (BC_TYPE_ENUM(BCV))
458 CASE (MASS_INFLOW); SGN = ONE; OFF = ZERO
459 CASE (MASS_OUTFLOW); SGN = -ONE; OFF = ONE
460 CASE DEFAULT
461 write(*,*) 'error in SOLIDS_VOLFLOW_TO_VELOCITY'
462 call mfix_exit(myPE)
463 END SELECT
464
465 SELECT CASE (BC_PLANE(BCV))
466 CASE ('W'); SGN = -SGN
467 CASE ('S'); SGN = -SGN
468 CASE ('B'); SGN = -SGN
469 END SELECT
470
471 IF(BC_EP_S(BCV,M) /= ZERO) THEN
472 VEL = SGN * BC_VOLFLOW_S(BCV,M)/(BC_AREA(BCV)*BC_EP_S(BCV,M))
473 ELSE
474 IF(BC_VOLFLOW_S(BCV,M) == ZERO) THEN
475 VEL = ZERO
476 ELSE
477 IF(DMP_LOG)WRITE (UNIT_LOG, 1101) BCV, M
478 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
479 ENDIF
480 ENDIF
481
482 1101 FORMAT('Error 1101: BC No:',I2,' Non-zero vol. or mass flow ',&
483 'specified with BC_ROP_s', I1,' = 0.')
484
485 IF(BC_PLANE(BCV) == 'W' .OR. BC_PLANE(BCV)== 'E') THEN
486 IF(BC_U_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
487 IF(.NOT.COMPARE(VEL, BC_U_S(BCV,M))) THEN
488 WRITE(ERR_MSG, 1300) BCV, (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
489 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
490 ENDIF
491 ELSE
492 BC_U_S(BCV,M) = VEL
493 BC_V_S(BCV,M) = OFF * BC_V_S(BCV,M)
494 BC_W_S(BCV,M) = OFF * BC_W_S(BCV,M)
495 ENDIF
496
497 ELSEIF(BC_PLANE(BCV) == 'S' .OR. BC_PLANE(BCV)== 'N') THEN
498 IF(BC_V_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
499 IF(.NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
500 WRITE(ERR_MSG,1300) BCV, VEL, 'BC_V_s', M, BC_V_S(BCV,M)
501 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
502 ENDIF
503 ELSE
504 BC_V_S(BCV,M) = VEL
505 BC_U_S(BCV,M) = OFF * BC_U_S(BCV,M)
506 BC_W_S(BCV,M) = OFF * BC_W_S(BCV,M)
507 ENDIF
508
509 ELSEIF(BC_PLANE(BCV) == 'B' .OR. BC_PLANE(BCV)== 'T') THEN
510 IF(BC_W_S(BCV,M) /= UNDEFINED .AND. DO_VEL_CHECK) THEN
511 IF(.NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
512 WRITE(ERR_MSG, 1300) BCV, VEL, 'BC_W_s', M, BC_W_S(BCV,M)
513 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
514 ENDIF
515 ELSE
516 BC_W_S(BCV,M) = VEL
517 BC_U_S(BCV,M) = OFF * BC_U_S(BCV,M)
518 BC_V_S(BCV,M) = OFF * BC_V_S(BCV,M)
519 ENDIF
520 ENDIF
521
522
523 CALL FINL_ERR_MSG
524
525 RETURN
526
527 1300 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
528 ' Computed velocity is not equal to specified value',/,&
529 ' Value computed from vol. or mass flow = ',G14.7,/,&
530 ' Specified value (',A,I1,') = ',G14.7,/1X,70('*')/)
531
532 END SUBROUTINE SOLIDS_VOLFLOW_TO_VELOCITY
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557 SUBROUTINE FLOW_TO_VEL(DO_VEL_CHECK)
558
559
560
561
562 USE bc
563 USE compar
564 USE discretelement
565 USE eos, ONLY: EOSG, EOSS
566 USE exit, only: mfix_exit
567 USE fldvar
568 USE funits
569 USE geometry
570 USE indices
571 USE mfix_pic
572 USE param
573 USE param1
574 USE physprop
575 USE run
576 USE scales
577 USE toleranc
578
579 IMPLICIT NONE
580
581
582
583
584 INTEGER :: BCV, M
585
586 DOUBLE PRECISION :: VOLFLOW
587
588 DOUBLE PRECISION :: VEL
589
590 DOUBLE PRECISION :: EPS
591
592 LOGICAL :: CONVERTED,DO_VEL_CHECK
593
594 DOUBLE PRECISION :: MW
595
596 INTEGER :: INERT
597
598 DOUBLE PRECISION :: BC_ROs
599
600
601
602
603
604
605
606
607
608
609
610
611
612 = UNDEFINED
613
614 CONVERTED = .FALSE.
615 DO BCV = 1, DIMENSION_BC
616 IF (BC_DEFINED(BCV)) THEN
617 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .OR.&
618 BC_TYPE_ENUM(BCV)==MASS_OUTFLOW) THEN
619
620
621
622 IF (BC_MASSFLOW_G(BCV) /= UNDEFINED) THEN
623 IF (RO_G0 /= UNDEFINED) THEN
624 VOLFLOW = BC_MASSFLOW_G(BCV)/RO_G0
625 ELSE
626 IF (BC_P_G(BCV)/=UNDEFINED .AND. &
627 BC_T_G(BCV)/=UNDEFINED) THEN
628 IF (MW_AVG == UNDEFINED) THEN
629 MW = CALC_MW(BC_X_G,DIMENSION_BC,BCV,NMAX(0),MW_G)
630 ELSE
631 MW = MW_AVG
632 ENDIF
633 VOLFLOW = BC_MASSFLOW_G(BCV)/&
634 EOSG(MW,(BC_P_G(BCV)-P_REF),BC_T_G(BCV))
635
636 ELSE
637
638
639
640
641
642
643
644 IF (BC_TYPE_ENUM(BCV) == MASS_OUTFLOW) THEN
645
646
647
648
649
650 IF (BC_MASSFLOW_G(BCV) == ZERO) THEN
651 VOLFLOW = ZERO
652 ELSEIF (BC_PLANE(BCV)=='W' .OR. &
653 BC_PLANE(BCV)=='E') THEN
654 IF (BC_U_G(BCV)==UNDEFINED .OR. &
655 BC_U_G(BCV)/=ZERO) THEN
656 IF(DMP_LOG)WRITE (UNIT_LOG, 1010)&
657 BCV, 'BC_U_g'
658 call mfix_exit(myPE)
659 ENDIF
660 ELSEIF (BC_PLANE(BCV)=='N' .OR. &
661 BC_PLANE(BCV)=='S') THEN
662 IF (BC_V_G(BCV)==UNDEFINED .OR. &
663 BC_V_G(BCV)/=ZERO) THEN
664 IF(DMP_LOG)WRITE (UNIT_LOG, 1010) &
665 BCV, 'BC_V_g'
666 call mfix_exit(myPE)
667 ENDIF
668 ELSEIF (BC_PLANE(BCV)=='T' .OR. &
669 BC_PLANE(BCV)=='B') THEN
670 IF (BC_W_G(BCV)==UNDEFINED .OR. &
671 BC_W_G(BCV)/=ZERO) THEN
672 IF(DMP_LOG)WRITE (UNIT_LOG, 1010) &
673 BCV, 'BC_W_g'
674 call mfix_exit(myPE)
675 ENDIF
676 ENDIF
677 ELSE
678
679 IF(DMP_LOG)WRITE (UNIT_LOG, 1020) BCV
680 call mfix_exit(myPE)
681 ENDIF
682 ENDIF
683 ENDIF
684
685
686 IF (BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
687
688
689 IF (.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_G(BCV))) THEN
690 IF(DMP_LOG)WRITE (UNIT_LOG, 1000) BCV, &
691 VOLFLOW, BC_VOLFLOW_G(BCV)
692 call mfix_exit(myPE)
693 ENDIF
694 ELSE
695 BC_VOLFLOW_G(BCV) = VOLFLOW
696 ENDIF
697 ENDIF
698
699
700
701
702
703 IF (BC_VOLFLOW_G(BCV) /= UNDEFINED) THEN
704
705 IF (BC_EP_G(BCV) /= UNDEFINED) THEN
706
707
708
709 = BC_VOLFLOW_G(BCV)/(BC_AREA(BCV)*BC_EP_G(BCV))
710 ELSE
711
712
713
714
715
716 RETURN
717 ENDIF
718
719
720
721
722
723
724 = .TRUE.
725 SELECT CASE (TRIM(BC_PLANE(BCV)))
726 CASE ('W')
727 IF (BC_U_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
728 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
729 .NOT.COMPARE((-VEL),BC_U_G(BCV))) THEN
730 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
731 (-VEL), 'BC_U_g', BC_U_G(BCV)
732 call mfix_exit(myPE)
733 ENDIF
734 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
735 .NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
736 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
737 VEL, 'BC_U_g', BC_U_G(BCV)
738 call mfix_exit(myPE)
739 ENDIF
740 ELSE
741 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
742 BC_U_G(BCV) = -VEL
743 BC_V_G(BCV) = ZERO
744 BC_W_G(BCV) = ZERO
745 ELSE
746 BC_U_G(BCV) = VEL
747 ENDIF
748 ENDIF
749 CASE ('E')
750 IF (BC_U_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
751 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
752 .NOT.COMPARE(VEL,BC_U_G(BCV))) THEN
753 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
754 'BC_U_g', BC_U_G(BCV)
755 call mfix_exit(myPE)
756 ENDIF
757 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
758 .NOT.COMPARE((-VEL),BC_U_G(BCV))) THEN
759 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
760 (-VEL), 'BC_U_g', BC_U_G(BCV)
761 call mfix_exit(myPE)
762 ENDIF
763 ELSE
764 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
765 BC_U_G(BCV) = VEL
766 BC_V_G(BCV) = ZERO
767 BC_W_G(BCV) = ZERO
768 ELSE
769 BC_U_G(BCV) = -VEL
770 ENDIF
771 ENDIF
772 CASE ('S')
773 IF (BC_V_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
774 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
775 .NOT.COMPARE((-VEL),BC_V_G(BCV))) THEN
776 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
777 (-VEL), 'BC_V_g', BC_V_G(BCV)
778 call mfix_exit(myPE)
779 ENDIF
780 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
781 .NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
782 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
783 'BC_V_g', BC_V_G(BCV)
784 call mfix_exit(myPE)
785 ENDIF
786 ELSE
787 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
788 BC_U_G(BCV) = ZERO
789 BC_V_G(BCV) = -VEL
790 BC_W_G(BCV) = ZERO
791 ELSE
792 BC_V_G(BCV) = VEL
793 ENDIF
794 ENDIF
795 CASE ('N')
796 IF (BC_V_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
797 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
798 .NOT.COMPARE(VEL,BC_V_G(BCV))) THEN
799 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
800 'BC_V_g', BC_V_G(BCV)
801 call mfix_exit(myPE)
802 ENDIF
803 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
804 .NOT.COMPARE((-VEL),BC_V_G(BCV))) THEN
805 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, &
806 (-VEL), 'BC_V_g', BC_V_G(BCV)
807 call mfix_exit(myPE)
808 ENDIF
809 ELSE
810 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
811 BC_U_G(BCV) = ZERO
812 BC_V_G(BCV) = VEL
813 BC_W_G(BCV) = ZERO
814 ELSE
815 BC_V_G(BCV) = -VEL
816 ENDIF
817 ENDIF
818 CASE ('B')
819 IF (BC_W_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
820 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
821 .NOT.COMPARE((-VEL),BC_W_G(BCV))) THEN
822 IF(DMP_LOG)WRITE (UNIT_LOG, 1100) BCV,&
823 (-VEL), 'BC_W_g', BC_W_G(BCV)
824 call mfix_exit(myPE)
825 ENDIF
826 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
827 .NOT.COMPARE(VEL,BC_W_G(BCV))) THEN
828 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
829 'BC_W_g', BC_W_G(BCV)
830 call mfix_exit(myPE)
831 ENDIF
832 ELSE
833 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
834 BC_U_G(BCV) = ZERO
835 BC_V_G(BCV) = ZERO
836 BC_W_G(BCV) = -VEL
837 ELSE
838 BC_W_G(BCV) = VEL
839 ENDIF
840 ENDIF
841 CASE ('T')
842 IF (BC_W_G(BCV) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
843 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
844 .NOT.COMPARE(VEL,BC_W_G(BCV))) THEN
845 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV, VEL,&
846 'BC_W_g', BC_W_G(BCV)
847 call mfix_exit(myPE)
848 ENDIF
849 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
850 .NOT.COMPARE((-VEL),BC_W_G(BCV))) THEN
851 IF(DMP_LOG) WRITE (UNIT_LOG, 1100) BCV,&
852 (-VEL), 'BC_W_g', BC_W_G(BCV)
853 call mfix_exit(myPE)
854 ENDIF
855 ELSE
856 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
857 BC_U_G(BCV) = ZERO
858 BC_V_G(BCV) = ZERO
859 BC_W_G(BCV) = VEL
860 ELSE
861 BC_W_G(BCV) = -VEL
862 ENDIF
863 ENDIF
864 END SELECT
865 ENDIF
866
867
868
869 IF (.NOT.DISCRETE_ELEMENT .OR. (DISCRETE_ELEMENT &
870 .AND. DES_CONTINUUM_HYBRID).OR. (DISCRETE_ELEMENT &
871 .AND. MPPIC)) THEN
872
873
874
875
876
877
878 DO M = 1, SMAX
879
880
881 = UNDEFINED
882 BC_ROs = UNDEFINED
883
884 IF((BC_MASSFLOW_S(BCV,M) /= UNDEFINED) .OR. &
885 (BC_VOLFLOW_S(BCV,M) /= UNDEFINED)) THEN
886
887
888 = UNDEFINED
889 IF(SOLVE_ROs(M))THEN
890 INERT = INERT_SPECIES(M)
891
892
893 IF(BC_X_S(BCV,M,INERT) == ZERO) THEN
894 IF(BC_ROP_S(BCV,M) /= ZERO) THEN
895 IF(DMP_LOG) THEN
896 WRITE(*,1401) M, BCV
897 WRITE(UNIT_LOG,1401) M, BCV
898 ENDIF
899 CALL MFIX_EXIT(myPE)
900 ELSE
901
902 = RO_s0(M)
903 ENDIF
904 ELSE
905
906 = EOSS(RO_s0(M),X_s0(M,INERT), &
907 BC_X_S(BCV,M,INERT))
908 ENDIF
909 ELSE
910 BC_ROs = RO_S0(M)
911 ENDIF
912 ELSE
913
914 = RO_S0(M)
915 ENDIF
916
917
918
919
920 IF (BC_MASSFLOW_S(BCV,M) /= UNDEFINED) THEN
921
922
923 IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
924 IF(DMP_LOG)THEN
925 WRITE(*,1401) M, BCV
926 WRITE(UNIT_LOG,1401) M, BCV
927 ENDIF
928 CALL MFIX_EXIT(myPE)
929 ENDIF
930
931 VOLFLOW = BC_MASSFLOW_S(BCV,M)/BC_ROs
932
933
934 IF (BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
935 IF (.NOT.COMPARE(VOLFLOW,BC_VOLFLOW_S(BCV,M))) THEN
936 IF(DMP_LOG) WRITE(UNIT_LOG,1200) &
937 BCV,VOLFLOW,M,BC_VOLFLOW_S(BCV,M)
938 call mfix_exit(myPE)
939 ENDIF
940 ELSE
941 BC_VOLFLOW_S(BCV,M) = VOLFLOW
942 ENDIF
943 ENDIF
944
945
946
947
948
949
950
951
952
953 IF (BC_ROP_S(BCV,M) == UNDEFINED .AND. &
954 BC_EP_G(BCV) /= UNDEFINED ) THEN
955 IF (BC_EP_G(BCV) == ONE) THEN
956 BC_ROP_S(BCV,M) = ZERO
957 ELSEIF (SMAX == 1 .AND. &
958 .NOT.DES_CONTINUUM_HYBRID) THEN
959
960
961 IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
962 IF(DMP_LOG)THEN
963 WRITE(*,1401) M, BCV
964 WRITE(UNIT_LOG,1401) M, BCV
965 ENDIF
966 CALL MFIX_EXIT(myPE)
967 ENDIF
968
969
970
971
972 (BCV,M) = (ONE - BC_EP_G(BCV))*BC_ROs
973 ENDIF
974 ENDIF
975
976
977
978
979
980 IF (BC_VOLFLOW_S(BCV,M) /= UNDEFINED) THEN
981
982
983 IF(BC_ROs <= ZERO .OR. BC_ROs==UNDEFINED) THEN
984 IF(DMP_LOG)THEN
985 WRITE(*,1401) M, BCV
986 WRITE(UNIT_LOG,1401) M, BCV
987 ENDIF
988 CALL MFIX_EXIT(myPE)
989 ENDIF
990
991 IF (BC_ROP_S(BCV,M) /= UNDEFINED) THEN
992 EPS = BC_ROP_S(BCV,M)/BC_ROs
993
994
995
996 IF (EPS /= ZERO) THEN
997 VEL = BC_VOLFLOW_S(BCV,M)/(BC_AREA(BCV)*EPS)
998 ELSE
999 IF (BC_VOLFLOW_S(BCV,M) == ZERO) THEN
1000 VEL = ZERO
1001 ELSE
1002 IF(DMP_LOG)WRITE (UNIT_LOG, 1250) BCV, M
1003 call mfix_exit(myPE)
1004 ENDIF
1005 ENDIF
1006 ELSE
1007 IF (BC_VOLFLOW_S(BCV,M) == ZERO) THEN
1008 VEL = ZERO
1009 ELSE
1010
1011
1012 IF(DMP_LOG)WRITE (UNIT_LOG, 1260) BCV, M
1013 call mfix_exit(myPE)
1014 ENDIF
1015 ENDIF
1016
1017
1018
1019
1020
1021
1022 = .TRUE.
1023 SELECT CASE (TRIM(BC_PLANE(BCV)))
1024 CASE ('W')
1025 IF (BC_U_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1026 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1027 .NOT.COMPARE((-VEL),BC_U_S(BCV,M))) THEN
1028 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1029 (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
1030 call mfix_exit(myPE)
1031 ENDIF
1032 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1033 .NOT.COMPARE(VEL,BC_U_S(BCV,M))) THEN
1034 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1035 VEL, 'BC_U_s', M, BC_U_S(BCV,M)
1036 call mfix_exit(myPE)
1037 ENDIF
1038 ELSE
1039 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1040 BC_U_S(BCV,M) = -VEL
1041 BC_V_S(BCV,M) = ZERO
1042 BC_W_S(BCV,M) = ZERO
1043 ELSE
1044 BC_U_S(BCV,M) = VEL
1045 ENDIF
1046 ENDIF
1047 CASE ('E')
1048 IF (BC_U_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1049 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1050 .NOT.COMPARE(VEL,BC_U_S(BCV,M))) THEN
1051 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1052 VEL, 'BC_U_s', M, BC_U_S(BCV,M)
1053 call mfix_exit(myPE)
1054 ENDIF
1055 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1056 .NOT.COMPARE((-VEL),BC_U_S(BCV,M))) THEN
1057 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1058 (-VEL), 'BC_U_s', M, BC_U_S(BCV,M)
1059 call mfix_exit(myPE)
1060 ENDIF
1061 ELSE
1062 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1063 BC_U_S(BCV,M) = VEL
1064 BC_V_S(BCV,M) = ZERO
1065 BC_W_S(BCV,M) = ZERO
1066 ELSE
1067 BC_U_S(BCV,M) = -VEL
1068 ENDIF
1069 ENDIF
1070 CASE ('S')
1071 IF (BC_V_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1072 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1073 .NOT.COMPARE((-VEL),BC_V_S(BCV,M))) THEN
1074 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1075 (-VEL), 'BC_V_s', M, BC_V_S(BCV,M)
1076 call mfix_exit(myPE)
1077 ENDIF
1078 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1079 .NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
1080 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1081 VEL, 'BC_V_s', M, BC_V_S(BCV,M)
1082 call mfix_exit(myPE)
1083 ENDIF
1084 ELSE
1085 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1086 BC_U_S(BCV,M) = ZERO
1087 BC_V_S(BCV,M) = -VEL
1088 BC_W_S(BCV,M) = ZERO
1089 ELSE
1090 BC_V_S(BCV,M) = VEL
1091 ENDIF
1092 ENDIF
1093 CASE ('N')
1094 IF (BC_V_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1095 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1096 .NOT.COMPARE(VEL,BC_V_S(BCV,M))) THEN
1097 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1098 VEL, 'BC_V_s', M, BC_V_S(BCV,M)
1099 call mfix_exit(myPE)
1100 ENDIF
1101 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1102 .NOT.COMPARE((-VEL),BC_V_S(BCV,M))) THEN
1103 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1104 (-VEL), 'BC_V_s', M, BC_V_S(BCV,M)
1105 call mfix_exit(myPE)
1106 ENDIF
1107 ELSE
1108 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1109 BC_U_S(BCV,M) = ZERO
1110 BC_V_S(BCV,M) = VEL
1111 BC_W_S(BCV,M) = ZERO
1112 ELSE
1113 BC_V_S(BCV,M) = -VEL
1114 ENDIF
1115 ENDIF
1116 CASE ('B')
1117 IF (BC_W_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1118 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1119 .NOT.COMPARE((-VEL),BC_W_S(BCV,M))) THEN
1120 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1121 (-VEL), 'BC_W_s', M, BC_W_S(BCV,M)
1122 call mfix_exit(myPE)
1123 ENDIF
1124 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1125 .NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
1126 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1127 VEL, 'BC_W_s', M, BC_W_S(BCV,M)
1128 call mfix_exit(myPE)
1129 ENDIF
1130 ELSE
1131 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1132 BC_U_S(BCV,M) = ZERO
1133 BC_V_S(BCV,M) = ZERO
1134 BC_W_S(BCV,M) = -VEL
1135 ELSE
1136 BC_W_S(BCV,M) = VEL
1137 ENDIF
1138 ENDIF
1139 CASE ('T')
1140 IF (BC_W_S(BCV,M) /= UNDEFINED.AND.DO_VEL_CHECK) THEN
1141 IF (BC_TYPE_ENUM(BCV)==MASS_INFLOW .AND. &
1142 .NOT.COMPARE(VEL,BC_W_S(BCV,M))) THEN
1143 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1144 VEL, 'BC_W_s', M, BC_W_S(BCV,M)
1145 call mfix_exit(myPE)
1146 ENDIF
1147 IF (BC_TYPE_ENUM(BCV)==MASS_OUTFLOW .AND. &
1148 .NOT.COMPARE((-VEL),BC_W_S(BCV,M))) THEN
1149 IF(DMP_LOG)WRITE (UNIT_LOG, 1300) BCV, &
1150 (-VEL), 'BC_W_s', M, BC_W_S(BCV,M)
1151 call mfix_exit(myPE)
1152 ENDIF
1153 ELSE
1154 IF (BC_TYPE_ENUM(BCV) == MASS_INFLOW) THEN
1155 BC_U_S(BCV,M) = ZERO
1156 BC_V_S(BCV,M) = ZERO
1157 BC_W_S(BCV,M) = VEL
1158 ELSE
1159 BC_W_S(BCV,M) = -VEL
1160 ENDIF
1161 ENDIF
1162 END SELECT
1163 ENDIF
1164
1165
1166
1167 ENDDO
1168 ENDIF
1169
1170 ENDIF
1171 ENDIF
1172 ENDDO
1173
1174
1175 IF (CONVERTED .AND. (NO_I .OR. NO_J .OR. NO_K) &
1176 .AND. DMP_LOG)WRITE (UNIT_LOG, 1500)
1177
1178 RETURN
1179
1180 1000 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1181 ' Computed volumetric flow is not equal to specified value',/,&
1182 ' Value computed from mass flow = ',G14.7,/,&
1183 ' Specified value (BC_VOLFLOW_g) = ',G14.7,/1X,70('*')/)
1184 1010 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,&
1185 ' BC_P_g, BC_T_g, and BC_X_g or',/' a nonzero value for ',A,&
1186 ' should be specified',/1X,70('*')/)
1187 1020 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,&
1188 ' BC_P_g, BC_T_g, and BC_X_g',/' should be specified',/1X,70('*')/)
1189 1100 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1190 ' Computed velocity is not equal to specified value',/,&
1191 ' Value computed from vol. or mass flow = ',G14.7,/,&
1192 ' Specified value (',A,') = ',G14.7,/1X,70('*')/)
1193 1200 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1194 ' Computed volumetric flow is not equal to specified value',/,&
1195 ' Value computed from mass flow = ',G14.7,/,&
1196 ' Specified value (BC_VOLFLOW_s',I1,') = ',G14.7,/1X,70('*')/)
1197 1250 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1198 ' Non-zero vol. or mass flow specified with BC_ROP_s',&
1199 I1,' = 0.',/1X,70('*')/)
1200 1260 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1201 ' BC_ROP_s',I1,' not specified',/1X,70('*')/)
1202 1300 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/' Message: BC No:',I2,/,&
1203 ' Computed velocity is not equal to specified value',/,&
1204 ' Value computed from vol. or mass flow = ',G14.7,/,&
1205 ' Specified value (',A,I1,') = ',G14.7,/1X,70('*')/)
1206 1500 FORMAT(/1X,70('*')//' From: FLOW_TO_VEL',/&
1207 ' Message: Some volumetric or mass flow rates have been',/&
1208 ' converted to velocity values. In 2D simulations ensure',/&
1209 ' that the third (unused) dimension is correctly specified;',/&
1210 ' e.g. in axisymmetric cylindrical coordinates ZLENGTH = 2*Pi'/1X,70&
1211 ('*')/)
1212
1213 1401 FORMAT(//1X,70('*')/' From: FLOW_TO_VEL',/,' Error 1401:', &
1214 ' Solids phase ',I2,' failed sanity check in BC region ',I3, &
1215 '. ',/' Please check mfix.dat file.',/1X,70('*')//)
1216
1217
1218 END SUBROUTINE FLOW_TO_VEL
1219