MFIX  2016-1
calc_ps_grad_pic.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! Subroutine: CALC_PS_GRAD_PIC !
3 ! Author: R. Garg !
4 ! !
5 ! Purpose: Calculate the solids pressure graident. !
6 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
7  SUBROUTINE calc_ps_grad_pic
8 
9 ! Modules
10 !---------------------------------------------------------------------//
13  use mfix_pic, only: pic_p_s
14  use mfix_pic, only: ps_force_pic
15  IMPLICIT NONE
16 
17 !......................................................................!
18 
19  SELECT CASE(des_interp_scheme_enum)
21  CASE DEFAULT; CALL calc_grad_des(pic_p_s(:,1), ps_force_pic)
22  END SELECT
23 
24  RETURN
25  END SUBROUTINE calc_ps_grad_pic
26 
27 
28 
29 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
30 ! Subroutine: CALC_PS_GRAD_PIC0 !
31 ! Author: R. Garg !
32 ! !
33 ! Purpose: Calculate the solids pressure graident. This routine !
34 ! stores the solid pressure graident at cell faces. !
35 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
36  SUBROUTINE calc_ps_grad_pic0
37 
38 ! Modules
39 !---------------------------------------------------------------------//
40  use compar, only: ijkstart3, ijkend3
41  use compar, only: istart2, jstart2, kstart2
42  use compar, only: istart3, jstart3, kstart3
43  use compar, only: iend3, jend3, kend3
44  use functions, only: fluid_at
45  use indices, only: i_of, j_of, k_of
46  use functions, only: ip_of, jp_of, kp_of
47  use functions, only: funijk
48  use functions, only: is_on_mype_owns
49  use geometry, only: do_k, no_k
50  use geometry, only: dx, dy, dz
51  use geometry, only: imin2, jmin2, kmin2
52  USE mfix_pic, only: pic_p_s, ps_force_pic
53  use param1, only: zero
54  use sendrecv, only: send_recv
55  implicit none
56 
57 ! Local variables
58 !---------------------------------------------------------------------//
59 ! general i, j, k indices
60  INTEGER I, J, K, IJK, IPJK, IJPK, IJKP, IDIM
61  integer :: I1, J1, K1
62 !......................................................................!
63 
64 ! Since EP_G is already shared across the processors, the pressure
65 ! gradient calculation can be made a function call so that the extra
66 ! communication of P_S can be avoided.
67 
68  DO ijk = ijkstart3, ijkend3
69  ps_force_pic(:,ijk) = zero
70  IF(.NOT.fluid_at(ijk)) cycle
71 
72  i = i_of(ijk)
73  j = j_of(ijk)
74  k = k_of(ijk)
75 
76  ipjk = ip_of(ijk)
77  ijpk = jp_of(ijk)
78  ijkp = kp_of(ijk)
79 
80 ! Calculate the solids pressure gradient at east face.
81  IF(fluid_at(ipjk)) THEN
82  ps_force_pic(1,ijk) = 2.0d0 * &
83  (pic_p_s(ipjk,1) - pic_p_s(ijk,1)) / &
84  (dx(i) + dx(i_of(ipjk)))
85  ELSE
86  IF(pic_p_s(ijk,1) > zero) THEN
87  ps_force_pic(1,ijk) = 2.0d0* &
88  (pic_p_s(ipjk,1) - pic_p_s(ijk,1)) / &
89  (dx(i) + dx(i_of(ipjk)))
90  ELSE
91  ps_force_pic(1,ijk) = zero
92  ENDIF
93  ENDIF
94 
95 ! Calculate the solids pressure graident at the north face.
96  IF(fluid_at(ijpk)) THEN
97  ps_force_pic(2,ijk) = 2.0d0* &
98  (pic_p_s(ijpk,1) - pic_p_s(ijk,1)) / &
99  (dy(j)+dy(j_of(ijpk)))
100  ELSE
101  IF(pic_p_s(ijk,1) > zero) THEN
102  ps_force_pic(2,ijk) = 2.0d0* &
103  (pic_p_s(ijpk,1) - pic_p_s(ijk,1))/ &
104  (dy(j)+dy(j_of(ijpk)))
105  ELSE
106  ps_force_pic(2,ijk) = zero
107  ENDIF
108  ENDIF
109 
110 ! Calculate the solids pressure graident at the top face.
111  IF(do_k) THEN
112  IF(fluid_at(ijkp)) THEN
113  ps_force_pic(3,ijk) = 2.0d0* &
114  (pic_p_s(ijkp,1) - pic_p_s(ijk,1))/ &
115  (dz(k)+dz(k_of(ijkp)))
116  ELSE
117  IF(pic_p_s(ijk,1).GT.zero) then
118  ps_force_pic(3,ijk) = 2.0d0*&
119  (pic_p_s(ijkp,1) - pic_p_s(ijk,1))/ &
120  (dz(k)+dz(k_of(ijkp)))
121  ELSE
122  ps_force_pic(3,ijk) = zero
123  ENDIF
124  ENDIF
125  ENDIF
126  ENDDO
127 
128 ! Compute the pressure gradients along the west domain bondary which
129 ! is previously skipped.
130  i1 = imin2
131  IF(i1 == istart2) THEN
132  DO k1 = kstart3, kend3
133  DO j1 = jstart3, jend3
134  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
135  ijk = funijk(i1,j1,k1)
136  ipjk = ip_of(ijk)
137  IF(pic_p_s(ipjk,1) > zero) THEN
138  ps_force_pic(1,ijk) = 2.0d0* &
139  (pic_p_s(ipjk,1) - pic_p_s(ijk,1)) / &
140  (dx(i1) + dx(i_of(ipjk)))
141  ELSE
142  ps_force_pic(1,ijk) = zero
143  ENDIF
144  ENDDO
145  ENDDO
146  ENDIF
147 
148 ! Compute the pressure gradients along the south domain bondary which
149 ! is previously skipped.
150  j1 = jmin2
151  IF(j1 == jstart2) THEN
152  DO k1 = kstart3, kend3
153  DO i1 = istart3, iend3
154  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
155  ijk = funijk(i1,j1,k1)
156  ijpk = jp_of(ijk)
157  IF(pic_p_s(ijpk,1).GT.zero) then
158  ps_force_pic(2,ijk) = 2.0d0* &
159  (pic_p_s(ijpk,1) - pic_p_s(ijk,1))/ &
160  (dy(j) + dy(j_of(ijpk)))
161  ELSE
162  ps_force_pic(2,ijk) = zero
163  ENDIF
164  ENDDO
165  ENDDO
166  ENDIF
167 
168 ! Compute the pressure gradients along the south domain bondary which
169 ! is previously skipped.
170  IF(do_k) then
171  k1 = kmin2
172  IF(k1 == kstart2) THEN
173  DO j1 = jstart3, jend3
174  DO i1 = istart3, iend3
175  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
176  ijk = funijk(i1,j1,k1)
177  ijkp = kp_of(ijk)
178  IF(pic_p_s(ijkp,1).GT.zero) THEN
179  ps_force_pic(3,ijk) = 2.0d0* &
180  (pic_p_s(ijkp,1) - pic_p_s(ijk,1))/ &
181  (dz(k)+dz(k_of(ijkp)))
182  ELSE
183  ps_force_pic(3,ijk) = zero
184  ENDIF
185  ENDDO
186  ENDDO
187  ENDIF
188  ENDIF
189 
190  DO idim = 1, merge(2,3,no_k)
191  CALL send_recv(ps_force_pic(idim,:),1)
192  ENDDO
193 
194  END SUBROUTINE calc_ps_grad_pic0
integer iend3
Definition: compar_mod.f:80
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer jstart3
Definition: compar_mod.f:80
integer ijkend3
Definition: compar_mod.f:80
integer, parameter des_interp_garg
subroutine calc_ps_grad_pic0
integer istart2
Definition: compar_mod.f:80
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
integer kstart3
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable pic_p_s
Definition: mfix_pic_mod.f:81
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
integer jmin2
Definition: geometry_mod.f:89
subroutine calc_ps_grad_pic
integer kstart2
Definition: compar_mod.f:80
integer kend3
Definition: compar_mod.f:80
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
integer jend3
Definition: compar_mod.f:80
integer jstart2
Definition: compar_mod.f:80
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
logical no_k
Definition: geometry_mod.f:28
integer des_interp_scheme_enum
logical do_k
Definition: geometry_mod.f:30
integer ijkstart3
Definition: compar_mod.f:80
subroutine calc_grad_des(PHI, DEL_PHI)
Definition: calc_grad_des.f:15
integer imin2
Definition: geometry_mod.f:89
integer istart3
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable ps_force_pic
Definition: mfix_pic_mod.f:25
double precision, parameter zero
Definition: param1_mod.f:27
integer kmin2
Definition: geometry_mod.f:89