File: /nfs/home/0/users/jenkins/mfix.git/model/calc_outflow.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Subroutine: calc_outflow                                            C
4     !  Purpose: Calculate mass and volumetric out flow rates from an       C
5     !  outflow boundary                                                    C
6     !                                                                      C
7     !  Author: M. Syamlal                                 Date: 28-OCT-92  C
8     !                                                                      C
9     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
10     
11           SUBROUTINE CALC_OUTFLOW(L)
12     
13     ! Modules
14     !--------------------------------------------------------------------//
15           use bc, only: bc_plane
16           use bc, only: bc_k_b, bc_k_t
17           use bc, only: bc_j_s, bc_j_n
18           use bc, only: bc_i_w, bc_i_e
19           use bc, only: bc_out_n
20           use bc, only: bc_mout_g, bc_vout_g
21           use bc, only: bc_mout_s, bc_vout_s
22           use geometry, only: dx, dy, dz
23           use geometry, only: x_e, x
24           use physprop, only: smax
25           use fldvar, only: u_g, v_g, w_g, u_s, v_s, w_s
26           use fldvar, only: rop_g, ro_g, ep_g
27           use fldvar, only: rop_s, ep_s
28           use functions, only: im_of, ip_of, jm_of, jp_of, km_of, kp_of
29           use functions, only: fluid_at
30           use functions, only: is_on_mype_plus2layers
31           use functions, only: funijk
32           use compar, only: dead_cell_at
33           IMPLICIT NONE
34     
35     ! Dummy arguments
36     !--------------------------------------------------------------------//
37     ! Boundary condition number
38           INTEGER, INTENT(IN) :: L
39     
40     ! Local variables
41     !--------------------------------------------------------------------//
42     ! Indices
43           INTEGER :: I, J, K, IJK
44     ! Solids phase
45           INTEGER :: M
46     ! ijk index of fluid cell adjacent to boundary cell
47           INTEGER :: IJK2
48     !--------------------------------------------------------------------//
49     
50           BC_OUT_N(L) = BC_OUT_N(L) + 1
51           DO K = BC_K_B(L), BC_K_T(L)
52              DO J = BC_J_S(L), BC_J_N(L)
53                 DO I = BC_I_W(L), BC_I_E(L)
54     ! Check if current i,j,k resides on this PE
55                    IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
56                    IF (DEAD_CELL_AT(I,J,K)) CYCLE  ! skip dead cells
57                    IJK = FUNIJK(I,J,K)
58                    SELECT CASE (TRIM(BC_PLANE(L)))
59                    CASE ('W')
60                       IJK2 = IM_OF(IJK)
61                       BC_MOUT_G(L) = BC_MOUT_G(L) + DY(J)*X_E(I-1)*DZ(K)*&
62                          U_G(IJK2)*ROP_G(IJK2)
63                       BC_VOUT_G(L) = BC_VOUT_G(L) + DY(J)*X_E(I-1)*DZ(K)*&
64                          U_G(IJK2)*EP_G(IJK2)
65                    CASE ('E')
66                       IJK2 = IP_OF(IJK)
67                       BC_MOUT_G(L) = BC_MOUT_G(L) + DY(J)*X_E(I)*DZ(K)*&
68                          U_G(IJK)*ROP_G(IJK2)
69                       BC_VOUT_G(L) = BC_VOUT_G(L) + DY(J)*X_E(I)*DZ(K)*&
70                          U_G(IJK)*EP_G(IJK2)
71                    CASE ('S')
72                       IJK2 = JM_OF(IJK)
73                       BC_MOUT_G(L) = BC_MOUT_G(L) + DX(I)*X(I)*DZ(K)*&
74                          V_G(IJK2)*ROP_G(IJK2)
75                       BC_VOUT_G(L) = BC_VOUT_G(L) + DX(I)*X(I)*DZ(K)*&
76                          V_G(IJK2)*EP_G(IJK2)
77                    CASE ('N')
78                       IJK2 = JP_OF(IJK)
79                       BC_MOUT_G(L) = BC_MOUT_G(L) + DX(I)*X(I)*DZ(K)*&
80                          V_G(IJK)*ROP_G(IJK2)
81                       BC_VOUT_G(L) = BC_VOUT_G(L) + DX(I)*X(I)*DZ(K)*&
82                          V_G(IJK)*EP_G(IJK2)
83                    CASE ('B')
84                       IJK2 = KM_OF(IJK)
85                       BC_MOUT_G(L) = BC_MOUT_G(L) + DX(I)*DY(J)*&
86                          W_G(IJK2)*ROP_G(IJK2)
87                       BC_VOUT_G(L)=BC_VOUT_G(L)+DX(I)*DY(J)*&
88                          W_G(IJK2)*EP_G(IJK2)
89                    CASE ('T')
90                       IJK2 = KP_OF(IJK)
91                       BC_MOUT_G(L)=BC_MOUT_G(L)+DX(I)*DY(J)*&
92                          W_G(IJK)*ROP_G(IJK2)
93                       BC_VOUT_G(L) = BC_VOUT_G(L) + DX(I)*DY(J)*&
94                          W_G(IJK)*EP_G(IJK2)
95                    END SELECT
96     
97                    DO M = 1, SMAX
98                       SELECT CASE (TRIM(BC_PLANE(L)))
99                       CASE ('W')
100                          IJK2 = IM_OF(IJK)
101                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DY(J)*X_E(I-1)*&
102                             DZ(K)*U_S(IJK2,M)*ROP_S(IJK2,M)
103                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DY(J)*X_E(I-1)*&
104                             DZ(K)*U_S(IJK2,M)*EP_S(IJK2,M)
105                       CASE ('E')
106                          IJK2 = IP_OF(IJK)
107                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DY(J)*X_E(I)*&
108                             DZ(K)*U_S(IJK,M)*ROP_S(IJK2,M)
109                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DY(J)*X_E(I)*&
110                             DZ(K)*U_S(IJK,M)*EP_S(IJK2,M)
111                       CASE ('S')
112                          IJK2 = JM_OF(IJK)
113                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DX(I)*X(I)*&
114                             DZ(K)*V_S(IJK2,M)*ROP_S(IJK2,M)
115                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DX(I)*X(I)*&
116                             DZ(K)*V_S(IJK2,M)*EP_S(IJK2,M)
117                       CASE ('N')
118                          IJK2 = JP_OF(IJK)
119                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DX(I)*X(I)*&
120                             DZ(K)*V_S(IJK,M)*ROP_S(IJK2,M)
121                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DX(I)*X(I)*&
122                             DZ(K)*V_S(IJK,M)*EP_S(IJK2,M)
123                       CASE ('B')
124                          IJK2 = KM_OF(IJK)
125                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DX(I)*DY(J)*&
126                             W_S(IJK2,M)*ROP_S(IJK2,M)
127                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DX(I)*DY(J)*&
128                             W_S(IJK2,M)*EP_S(IJK2,M)
129                       CASE ('T')
130                          IJK2 = KP_OF(IJK)
131                          BC_MOUT_S(L,M) = BC_MOUT_S(L,M) + DX(I)*DY(J)*&
132                             W_S(IJK,M)*ROP_S(IJK2,M)
133                          BC_VOUT_S(L,M) = BC_VOUT_S(L,M) + DX(I)*DY(J)*&
134                             W_S(IJK,M)*EP_S(IJK2,M)
135                       END SELECT
136                    ENDDO   ! end do loop m = 1,smax
137     
138                 ENDDO   ! end do loop (i=bc_i_w(l), bc_i_e(l))
139              ENDDO   ! end do loop (j=bc_j_s(l), bc_j_n(l))
140           ENDDO   ! end do loop (k=bc_k_b(l), bc_k_t(l))
141     
142           RETURN
143           END SUBROUTINE CALC_OUTFLOW
144