MFIX  2016-1
source_rop_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: SOURCE_ROP_s C
4 ! Purpose: Determine source terms for solids continuity equation. C
5 ! C
6 ! Notes: The off-diagonal coefficients are positive. The center C
7 ! coefficient and the source vector are negative. C
8 ! See conv_rop_s0 for additional details. C
9 ! C
10 ! Author: M. Syamlal Date: 3 -JUL-96 C
11 ! Reviewer: Date: C
12 ! C
13 ! Literature/Document References: C
14 ! Variables referenced: C
15 ! Variables modified: C
16 ! Local variables: C
17 ! C
18 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
19 
20  SUBROUTINE source_rop_s(A_M, B_M, M)
21 
22 !-----------------------------------------------
23 ! Modules
24 !-----------------------------------------------
25  USE param
26  USE param1
27  USE parallel
28  USE fldvar
29  USE rxns
30  USE run
31  USE geometry
32  USE indices
33  USE pgcor
34  USE pscor
35  USE compar
36  USE functions
37  IMPLICIT NONE
38 !-----------------------------------------------
39 ! Dummy arguments
40 !-----------------------------------------------
41 ! Septadiagonal matrix A_m
42  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
43 ! Vector b_m
44  DOUBLE PRECISION, INTENT(INOUT) :: B_m(dimension_3, 0:dimension_m)
45 ! solids phase index
46  INTEGER, INTENT(IN) :: M
47 !-----------------------------------------------
48 ! Local variables
49 !-----------------------------------------------
50 ! DEL dot V
51  DOUBLE PRECISION :: DEL_V
52 ! Mass source
53  DOUBLE PRECISION :: Src
54 ! Indices
55  INTEGER :: I, J, K, IJK, IMJK, IJMK, IJKM
56 ! error message
57  CHARACTER(LEN=80) :: LINE
58 !-----------------------------------------------
59 
60 !!$omp parallel do private( I, J, K, IJK, IMJK, IJMK, IJKM, DEL_V, &
61 !!$omp& Src, LINE) &
62 !!$omp& schedule(static)
63  DO ijk = ijkstart3, ijkend3
64  IF (fluid_at(ijk) .AND. phase_4_p_g(ijk)/=m .AND. &
65  phase_4_p_s(ijk)/=m) THEN
66 
67  i = i_of(ijk)
68  j = j_of(ijk)
69  k = k_of(ijk)
70  imjk = im_of(ijk)
71  ijmk = jm_of(ijk)
72  ijkm = km_of(ijk)
73 
74  del_v = u_s(ijk,m)*ayz(ijk) - u_s(imjk,m)*ayz(imjk) +&
75  v_s(ijk,m)*axz(ijk) - v_s(ijmk,m)*axz(ijmk) + &
76  w_s(ijk,m)*axy(ijk) - w_s(ijkm,m)*axy(ijkm)
77 
78  IF (rop_s(ijk,m) > zero) THEN
79  src = vol(ijk)*zmax((-sum_r_s(ijk,m)))/rop_s(ijk,m)
80  ELSE
81  src = zero
82  ENDIF
83 
84  a_m(ijk,0,m) = -(a_m(ijk,east,m)+a_m(ijk,west,m)+a_m(ijk,north,m)+&
85  a_m(ijk,south,m)+a_m(ijk,top,m)+a_m(ijk,bottom,m)+&
86  vol(ijk)*odt+zmax(del_v)+src)
87  b_m(ijk,m) = -(rop_so(ijk,m)*vol(ijk)*odt+&
88  zmax((-del_v))*rop_s(ijk,m)+&
89  zmax(sum_r_s(ijk,m))*vol(ijk))
90 
91  IF (abs(a_m(ijk,0,m)) < small_number) THEN
92  IF (abs(b_m(ijk,m)) < small_number) THEN
93  a_m(ijk,0,m) = -one ! Equation is undefined.
94  b_m(ijk,m) = -rop_s(ijk,m) ! Use existing value
95  ELSE
96 !!$omp critical
97  WRITE (line, '(A,I6,A,I1,A,G12.5)') 'Error: At IJK = ', ijk, &
98  ' M = ', m, ' A = 0 and b = ', b_m(ijk,m)
99  CALL write_error ('SOURCE_ROP_s', line, 1)
100 !!$omp end critical
101  ENDIF
102  ENDIF
103  ELSE
104 ! set the value of rop_s in all wall and flow boundary cells to what is
105 ! known for that cell
106  a_m(ijk,east,m) = zero
107  a_m(ijk,west,m) = zero
108  a_m(ijk,north,m) = zero
109  a_m(ijk,south,m) = zero
110  a_m(ijk,top,m) = zero
111  a_m(ijk,bottom,m) = zero
112  a_m(ijk,0,m) = -one
113  b_m(ijk,m) = -rop_s(ijk,m)
114  ENDIF
115  ENDDO
116 
117  RETURN
118  END SUBROUTINE source_rop_s
119 
120 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
121 ! C
122 ! Subroutine: POINT_SOURCE_ROP_S C
123 ! Purpose: Adds point sources to the solids continuity equation. C
124 ! C
125 ! C
126 ! Author: J. Musser Date: 10-JUN-13 C
127 ! Reviewer: Date: C
128 ! C
129 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
130  SUBROUTINE point_source_rop_s(B_M, M)
132  use compar
133  use constant
134  use geometry
135  use indices
136  use param, only: dimension_m, dimension_3
137  use param1, only: small_number
138  use physprop
139  use ps
140  use run
141  use functions
142 
143  IMPLICIT NONE
144 !-----------------------------------------------
145 ! Dummy arguments
146 !-----------------------------------------------
147 ! Vector b_m
148  DOUBLE PRECISION, INTENT(INOUT) :: B_m(dimension_3, 0:dimension_m)
149 ! Solids phase index.
150  INTEGER, INTENT(IN) :: M
151 
152 !-----------------------------------------------
153 ! Local Variables
154 !-----------------------------------------------
155 
156 ! Indices
157  INTEGER :: IJK, I, J, K
158  INTEGER :: PSV
159 
160 ! terms of bm expression
161  DOUBLE PRECISION :: pSource
162 
163 !-----------------------------------------------
164  ps_lp: do psv = 1, dimension_ps
165 
166  if(.NOT.ps_defined(psv)) cycle ps_lp
167  if(ps_massflow_s(psv,m) < small_number) cycle ps_lp
168 
169  do k = ps_k_b(psv), ps_k_t(psv)
170  do j = ps_j_s(psv), ps_j_n(psv)
171  do i = ps_i_w(psv), ps_i_e(psv)
172 
173  if(.NOT.is_on_mype_plus2layers(i,j,k)) cycle
174  IF (dead_cell_at(i,j,k)) cycle ! skip dead cells
175 
176  ijk = funijk(i,j,k)
177  if(fluid_at(ijk)) then
178 
179  psource = ps_massflow_s(psv,m) * &
180  (vol(ijk)/ps_volume(psv))
181 
182  b_m(ijk,m) = b_m(ijk,m) - psource
183  endif
184  enddo
185  enddo
186  enddo
187 
188  enddo ps_lp
189 
190  RETURN
191  END SUBROUTINE point_source_rop_s
integer, dimension(dimension_ps) ps_i_w
Definition: ps_mod.f:40
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
Definition: pgcor_mod.f:1
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
subroutine write_error(NAME, LINE, LMAX)
Definition: write_error.f:21
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
Definition: rxns_mod.f:1
double precision, dimension(:,:), allocatable sum_r_s
Definition: rxns_mod.f:35
integer, dimension(dimension_ps) ps_j_n
Definition: ps_mod.f:43
integer east
Definition: param_mod.f:29
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
logical, dimension(dimension_ps) ps_defined
Definition: ps_mod.f:29
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
integer, dimension(:), allocatable phase_4_p_s
Definition: pscor_mod.f:28
subroutine source_rop_s(A_M, B_M, M)
Definition: source_rop_s.f:21
double precision, dimension(dimension_ps) ps_volume
Definition: ps_mod.f:84
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
integer, dimension(dimension_ps) ps_k_b
Definition: ps_mod.f:44
subroutine point_source_rop_s(B_M, M)
Definition: source_rop_s.f:131
logical, dimension(:,:,:), allocatable dead_cell_at
Definition: compar_mod.f:127
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, parameter small_number
Definition: param1_mod.f:24
double precision odt
Definition: run_mod.f:54
integer north
Definition: param_mod.f:37
integer south
Definition: param_mod.f:41
integer, dimension(dimension_ps) ps_k_t
Definition: ps_mod.f:45
Definition: pscor_mod.f:1
double precision, dimension(:,:), allocatable rop_so
Definition: fldvar_mod.f:54
Definition: run_mod.f:13
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
Definition: param_mod.f:2
integer, dimension(:), allocatable phase_4_p_g
Definition: pgcor_mod.f:22
integer ijkstart3
Definition: compar_mod.f:80
integer west
Definition: param_mod.f:33
double precision, dimension(dimension_ps, dim_m) ps_massflow_s
Definition: ps_mod.f:66
integer top
Definition: param_mod.f:45
Definition: ps_mod.f:22
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
integer, dimension(dimension_ps) ps_j_s
Definition: ps_mod.f:42
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
integer dimension_m
Definition: param_mod.f:18
integer, dimension(dimension_ps) ps_i_e
Definition: ps_mod.f:41
integer bottom
Definition: param_mod.f:49
double precision, parameter zero
Definition: param1_mod.f:27