MFIX  2016-1
conv_pp_g.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CONV_Pp_g C
4 ! Purpose: Determine convection terms for Pressure correction C
5 ! equation. C
6 ! C
7 ! Notes: The off-diagonal coefficients calculated here must be C
8 ! positive. The center coefficient and the source vector are C
9 ! negative. C
10 ! Multiplication with factors d_e, d_n, and d_t are carried C
11 ! out in source_pp_g. Constant pressure boundaries are C
12 ! handled by holding the Pp_g at the boundaries zero. For C
13 ! specified mass flow boundaries (part of) a's are calculated C
14 ! here since b is calculated from a's in source_pp_g. After C
15 ! calculating b, a's are multiplied by d and at the flow C
16 ! boundaries are set to zero. C
17 ! C
18 ! Author: M. Syamlal Date: 20-JUN-96 C
19 ! Reviewer: Date: C
20 ! C
21 ! Revision Number: 1 C
22 ! Purpose: to use face densities calculated in CONV_ROP C
23 ! Author: M. Syamlal Date: 1-JUN-05 C
24 ! Reviewer: Date: C
25 ! C
26 ! Literature/Document References: C
27 ! Variables referenced: C
28 ! Variables modified: C
29 ! Local variables: C
30 ! C
31 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
32 
33  SUBROUTINE conv_pp_g(A_M, B_M)
34 
35 !-----------------------------------------------
36 ! Modules
37 !-----------------------------------------------
38  USE param
39  USE param1
40  USE fldvar
41  USE run
42  USE parallel
43  USE physprop
44  USE geometry
45  USE indices
46  USE pgcor
47  USE compar
48  USE mflux
49  USE functions
50  IMPLICIT NONE
51 !-----------------------------------------------
52 ! Dummy arguments
53 !-----------------------------------------------
54 ! Septadiagonal matrix A_m
55  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
56 ! Vector b_m
57  DOUBLE PRECISION, INTENT(INOUT) :: B_m(dimension_3, 0:dimension_m)
58 !-----------------------------------------------
59 ! Local variables
60 !-----------------------------------------------
61 ! Indices
62  INTEGER :: IJK, IPJK, IJPK, IJKP
63  INTEGER :: IMJK, IJMK, IJKM
64  INTEGER :: M
65 ! local value of A_m
66  DOUBLE PRECISION :: am
67 !-----------------------------------------------
68 
69 
70 ! Calculate convection fluxes through each of the faces
71 
72 !$omp parallel do default(none) private( IJK, IPJK, IJPK, IJKP, M, AM, IMJK, IJMK, IJKM) &
73 !$omp shared(ijkstart3, ijkend3, rop_ge, rop_gn, rop_gt, axz, axy, ayz, do_k, a_m)
74  DO ijk = ijkstart3, ijkend3
75  IF (fluid_at(ijk)) THEN
76  ipjk = ip_of(ijk)
77  ijpk = jp_of(ijk)
78  ijkp = kp_of(ijk)
79 
80 ! East face (i+1/2, j, k)
81  am = rop_ge(ijk)*ayz(ijk)
82  a_m(ijk,east,0) = am
83  a_m(ipjk,west,0) = am
84 
85 ! North face (i, j+1/2, k)
86  am = rop_gn(ijk)*axz(ijk)
87  a_m(ijk,north,0) = am
88  a_m(ijpk,south,0) = am
89 
90 ! Top face (i, j, k+1/2)
91  IF (do_k) THEN
92  am = rop_gt(ijk)*axy(ijk)
93  a_m(ijk,top,0) = am
94  a_m(ijkp,bottom,0) = am
95  ENDIF
96 
97 ! West face (i-1/2, j, k)
98  imjk = im_of(ijk)
99  IF (.NOT.fluid_at(imjk)) THEN
100  am = rop_ge(imjk)*ayz(imjk)
101  a_m(ijk,west,0) = am
102  ENDIF
103 
104 ! South face (i, j-1/2, k)
105  ijmk = jm_of(ijk)
106  IF (.NOT.fluid_at(ijmk)) THEN
107  am = rop_gn(ijmk)*axz(ijmk)
108  a_m(ijk,south,0) = am
109  ENDIF
110 
111 ! Bottom face (i, j, k-1/2)
112  IF (do_k) THEN
113  ijkm = km_of(ijk)
114  IF (.NOT.fluid_at(ijkm)) THEN
115  am = rop_gt(ijkm)*axy(ijkm)
116  a_m(ijk,bottom,0) = am
117  ENDIF
118  ENDIF
119  ENDIF ! end if (fluid_at(ijk))
120  ENDDO ! end do ijk=ijkstart3,ijkend3
121 
122 
123 ! solids phase terms are needed for those solids phases that do not
124 ! become close packed. these terms are used to essentially make the
125 ! matrix equation for gas pressure correction a mixture pressure
126 ! correction equation by adding solids phases that do not become
127 ! close packed
128  DO m = 1, mmax
129  IF (.NOT.close_packed(m)) THEN
130  DO ijk = ijkstart3, ijkend3
131  IF (fluid_at(ijk)) THEN
132  ipjk = ip_of(ijk)
133  ijpk = jp_of(ijk)
134  ijkp = kp_of(ijk)
135 
136 ! East face (i+1/2, j, k)
137  am = rop_se(ijk,m)*ayz(ijk)
138  a_m(ijk,east,m) = am
139  a_m(ipjk,west,m) = am
140 
141 ! North face (i, j+1/2, k)
142  am = rop_sn(ijk,m)*axz(ijk)
143  a_m(ijk,north,m) = am
144  a_m(ijpk,south,m) = am
145 
146 ! Top face (i, j, k+1/2)
147  IF (do_k) THEN
148  am = rop_st(ijk,m)*axy(ijk)
149  a_m(ijk,top,m) = am
150  a_m(ijkp,bottom,m) = am
151  ENDIF
152 
153 ! West face (i-1/2, j, k)
154  imjk = im_of(ijk)
155  IF (.NOT.fluid_at(imjk)) THEN
156  am = rop_se(imjk,m)*ayz(imjk)
157  a_m(ijk,west,m) = am
158  ENDIF
159 
160 ! South face (i, j-1/2, k)
161  ijmk = jm_of(ijk)
162  IF (.NOT.fluid_at(ijmk)) THEN
163  am = rop_sn(ijmk,m)*axz(ijmk)
164  a_m(ijk,south,m) = am
165  ENDIF
166 
167 ! Bottom face (i, j, k-1/2)
168  IF (do_k) THEN
169  ijkm = km_of(ijk)
170  IF (.NOT.fluid_at(ijkm)) THEN
171  am = rop_st(ijkm,m)*axy(ijkm)
172  a_m(ijk,bottom,m) = am
173  ENDIF
174  ENDIF
175 
176  ENDIF ! end if(fluid_at(ijk))
177  ENDDO ! end do ijk=ijkstart3,ijkend3
178  ENDIF ! end if(.not.close_packed)
179  ENDDO ! end do (m=1,mmax)
180 
181  RETURN
182  END SUBROUTINE conv_pp_g
double precision, dimension(:,:), allocatable rop_st
Definition: mflux_mod.f:46
integer ijkend3
Definition: compar_mod.f:80
Definition: pgcor_mod.f:1
integer dimension_3
Definition: param_mod.f:11
double precision, dimension(:), allocatable rop_gn
Definition: mflux_mod.f:38
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
integer east
Definition: param_mod.f:29
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
logical, dimension(dim_m) close_packed
Definition: physprop_mod.f:56
integer mmax
Definition: physprop_mod.f:19
subroutine conv_pp_g(A_M, B_M)
Definition: conv_pp_g.f:34
integer north
Definition: param_mod.f:37
double precision, dimension(:), allocatable rop_ge
Definition: mflux_mod.f:36
integer south
Definition: param_mod.f:41
Definition: run_mod.f:13
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
Definition: param_mod.f:2
double precision, dimension(:), allocatable rop_gt
Definition: mflux_mod.f:40
logical do_k
Definition: geometry_mod.f:30
double precision, dimension(:,:), allocatable rop_se
Definition: mflux_mod.f:44
integer ijkstart3
Definition: compar_mod.f:80
integer west
Definition: param_mod.f:33
integer top
Definition: param_mod.f:45
double precision, dimension(:,:), allocatable rop_sn
Definition: mflux_mod.f:42
integer dimension_m
Definition: param_mod.f:18
integer bottom
Definition: param_mod.f:49