MFIX  2016-1
dif_phi_source_des.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Subroutine: SOURCE_phi !
4 ! Author: M. Syamlal Date: 30-APR-97 !
5 ! !
6 ! Purpose: Determine source terms for phi eq. The terms !
7 ! appear in the center coefficient and RHS vector. The center !
8 ! coefficient and source vector are negative. The off-diagonal !
9 ! coefficients are positive. S_p must be positive. !
10 ! !
11 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
12  SUBROUTINE dif_phi_source_des(PHI, M, A_M, B_M, lDT)
13 
14 !-----------------------------------------------
15 ! Modules
16 !-----------------------------------------------
17  USE param
18  USE param1
19  USE parallel
20  USE scales
21  USE physprop
22  USE fldvar
23  USE rxns
24  USE run
25  USE toleranc
26  USE geometry
27  USE indices
28  USE compar
29  USE fun_avg
30  USE functions
31 
32  IMPLICIT NONE
33 !-----------------------------------------------
34 ! Dummy Arguments
35 !-----------------------------------------------
36 ! Source term on RHS
37  DOUBLE PRECISION :: S_C
38 ! Phi
39  DOUBLE PRECISION, INTENT(IN) :: Phi(dimension_3)
40 ! phase index
41  INTEGER, INTENT(IN) :: M
42 ! Septadiagonal matrix A_m
43  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
44 ! Vector b_m
45  DOUBLE PRECISION, INTENT(INOUT) :: B_m(dimension_3, 0:dimension_m)
46 ! Diffusion time-step
47  DOUBLE PRECISION, INTENT(IN) :: lDT
48 !-----------------------------------------------
49 ! Local variables
50 !-----------------------------------------------
51 ! Indices
52  INTEGER :: IJK
53 
54  DOUBLE PRECISION :: APO
55  DOUBLE PRECISION :: lOoDT
56 !-----------------------------------------------
57 
58 
59  loodt = 1.0d0/ldt
60 
61  DO ijk = ijkstart3, ijkend3
62 
63  IF (fluid_at(ijk)) THEN
64 
65  apo = vol(ijk)*loodt
66 
67 ! Collect the terms
68  a_m(ijk,0,m) = -(a_m(ijk,east,m)+a_m(ijk,west,m)+&
69  a_m(ijk,north,m)+a_m(ijk,south,m)+&
70  a_m(ijk,top,m)+a_m(ijk,bottom,m)+ apo)
71 
72  s_c = apo*phi(ijk)
73 
74  IF(b_m(ijk,m) < s_c .OR. phi(ijk) == zero) THEN
75  b_m(ijk,m) = b_m(ijk,m) - s_c
76  ELSE
77  a_m(ijk,0,m) = a_m(ijk,0,m) - b_m(ijk,m)/phi(ijk)
78  b_m(ijk,m) = -s_c
79  ENDIF
80 
81  ENDIF
82  ENDDO
83 
84 
85  RETURN
86  END SUBROUTINE dif_phi_source_des
integer ijkend3
Definition: compar_mod.f:80
integer dimension_3
Definition: param_mod.f:11
Definition: rxns_mod.f:1
integer east
Definition: param_mod.f:29
integer north
Definition: param_mod.f:37
subroutine dif_phi_source_des(PHI, M, A_M, B_M, lDT)
integer south
Definition: param_mod.f:41
Definition: run_mod.f:13
Definition: param_mod.f:2
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 vol
Definition: geometry_mod.f:212
integer dimension_m
Definition: param_mod.f:18
integer bottom
Definition: param_mod.f:49
double precision, parameter zero
Definition: param1_mod.f:27