MFIX  2016-1
calc_k_cp.f
Go to the documentation of this file.
1 ! TO DO:
2 ! 1. Kcp needs to be defined for each solids phase (?).
3 ! 2. The part of Kcp from P_star should be based on the
4 ! sum of EP_s of close-packed solids.
5 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
6 ! C
7 ! Subroutine: CALC_K_cp C
8 ! Purpose: Calculate and store dPodEp_s C
9 ! C
10 ! Notes: MCP must be defined to call this routine. C
11 ! C
12 ! Author: M. Syamlal Date: 5-FEB-97 C
13 ! Reviewer: Date: C
14 ! C
15 ! C
16 ! Literature/Document References: C
17 ! C
18 ! Variables referenced: C
19 ! Variables modified: C
20 ! C
21 ! Local variables: C
22 ! C
23 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
24 
25  SUBROUTINE calc_k_cp(Kcp)
26 
27 !-----------------------------------------------
28 ! Modules
29 !----------------------------------------------
30  USE compar
31  USE constant
32  USE fldvar
33  USE functions
34  USE geometry
35  USE indices
36  USE param
37  USE param1
38  USE physprop
39  USE pscor
40  USE rdf
41  USE run
42  USE sendrecv
43  USE solids_pressure
44  USE trace
45  USE visc_s
46  IMPLICIT NONE
47 !-----------------------------------------------
48 ! Dummy arguments
49 !-----------------------------------------------
50 ! dPodEP_s
51  DOUBLE PRECISION :: Kcp(dimension_3)
52 !-----------------------------------------------
53 ! Local variables
54 !-----------------------------------------------
55 ! indices
56  INTEGER :: IJK, M
57 ! Other variables
58  DOUBLE PRECISION :: Pc, DPcoDEPs, Mu, Mu_b, Mu_zeta, ZETA
59  DOUBLE PRECISION :: F2, DF2oDEPs, Pf, Pfmax, N_Pff
60 ! Blend Factor
61  Double Precision :: blend
62 !-----------------------------------------------
63 ! External functions
64 !-----------------------------------------------
65  DOUBLE PRECISION :: DZETAoDEPs
66 !-----------------------------------------------
67 
68 ! initializing
69  kcp(:) = zero
70 
71  IF (mcp == undefined_i) THEN
72 ! this error should be caught earlier in the routines so that this
73 ! branch should never be entered
74  RETURN
75  ELSE
76 ! the lowest solids phase index of those solids phases that can close
77 ! pack (i.e. close_packed=T) and the index of the solids phase that is
78 ! used to form the solids correction equation.
79  m = mcp
80  ENDIF
81 
82 
83 ! by definition M must be close_packed (this is a redundant check)
84  IF(close_packed(m)) THEN
85 
86 !!$omp parallel do default(shared) &
87 !!$omp private( IJK, DPcoDEPS, Pc, &
88 !!$omp Mu, Mu_b, Mu_zeta, ZETA, N_Pff, &
89 !!$omp F2, DF2oDEPs, Pf, Pfmax, blend )
90 
91  DO ijk = ijkstart3, ijkend3
92  IF(.NOT.wall_at(ijk))THEN
93 
94  IF (friction) THEN
95 
96  IF ((one-ep_g(ijk)).GT.eps_f_min) THEN
97 ! if friction and sufficiently packed to invoke friction
98 ! ---------------------------------------------------------------->>>
99 
100  IF ((one-ep_g(ijk)).GT.(one-ep_star_array(ijk))) THEN
101 
102 ! Linearized form of Pc; this is more stable and provides continuous
103 ! function.
104  dpcodeps = (to_si*fr)*((delta**5)*&
105  (2d0*(one-ep_star_array(ijk)-delta) - &
106  2d0*eps_f_min)+&
107  ((one-ep_star_array(ijk)-delta)-eps_f_min)*&
108  (5*delta**4))/(delta**10)
109 
110  pc = (to_si*fr)*&
111  ( ((one-ep_star_array(ijk)-delta)-&
112  eps_f_min)**n_pc )/(delta**d_pc)
113  pc = pc + dpcodeps*( (one-ep_g(ijk))+delta-&
114  (one-ep_star_array(ijk)))
115 
116 ! Pc = 1d25*( ((ONE-EP_G(IJK)) - &
117 ! (ONE-ep_star_array(ijk)))**10d0)
118 ! DPcoDEPS = 1d26*(((ONE-EP_G(IJK)) - &
119 ! (ONE-ep_star_array(ijk)))**9d0)
120  ELSE
121  pc = fr*(((one-ep_g(ijk)) - eps_f_min)**n_pc)/&
122  (((one-ep_star_array(ijk)) - (one-ep_g(ijk))&
123  + small_number)**d_pc)
124  dpcodeps =&
125  fr*(((one-ep_g(ijk)) - eps_f_min)**(n_pc - one))&
126  *(n_pc*((one-ep_star_array(ijk)) - (one-ep_g(ijk)))&
127  +d_pc*((one-ep_g(ijk)) - eps_f_min))&
128  / (((one-ep_star_array(ijk)) - (one-ep_g(ijk)) + &
129  small_number)**(d_pc + one))
130  ENDIF
131 
132  mu = (5d0*dsqrt(pi*theta_m(ijk,m))&
133 !QX
134  *d_p(ijk,m)*ro_s(ijk,m))/96d0
135 
136  mu_b = (256d0*mu*ep_s(ijk,m)*ep_s(ijk,m)&
137  *g_0(ijk,m,m))/(5d0*pi)
138 
139  IF (savage.EQ.1) THEN
140  mu_zeta =&
141  ((2d0+alpha)/3d0)*((mu/(eta*(2d0-eta)*&
142  g_0(ijk,m,m)))*(1d0+1.6d0*eta*ep_s(ijk,m)*&
143  g_0(ijk,m,m))*(1d0+1.6d0*eta*(3d0*eta-2d0)*&
144  ep_s(ijk,m)*g_0(ijk,m,m))+(0.6d0*mu_b*eta))
145 !QX
146  zeta = ((48d0*eta*(1d0-eta)*ro_s(ijk,m)*ep_s(ijk,m)*&
147  ep_s(ijk,m)*g_0(ijk,m,m)*&
148  (theta_m(ijk,m)**1.5d0))/&
149  (sqrt_pi*d_p(ijk,m)*2d0*mu_zeta))**0.5d0
150 
151  ELSEIF (savage.EQ.0) THEN
152  zeta = (small_number +&
153  trd_s2(ijk,m) - ((trd_s_c(ijk,m)*&
154  trd_s_c(ijk,m))/3.d0))**0.5d0
155 
156  ELSE
157  zeta = ((theta_m(ijk,m)/(d_p(ijk,m)*d_p(ijk,m))) +&
158  (trd_s2(ijk,m) - ((trd_s_c(ijk,m)*&
159  trd_s_c(ijk,m))/3.d0)))**0.5d0
160 
161  ENDIF
162 
163  IF (trd_s_c(ijk,m) .GE. zero) THEN
164  n_pff = dsqrt(3d0)/(2d0*sin_phi) !dilatation
165  ELSE
166  n_pff = n_pf !compaction
167  ENDIF
168 
169  IF ((trd_s_c(ijk,m)/(zeta*n_pff*dsqrt(2d0)*&
170  sin_phi)) .GT. 1d0) THEN
171  f2 = 0d0
172  df2odeps = zero
173  ELSEIF(trd_s_c(ijk,m) == zero) THEN
174  f2 = one
175  df2odeps = zero
176  ELSE
177  f2 = (1d0 - (trd_s_c(ijk,m)/(zeta*n_pff*&
178  dsqrt(2d0)*sin_phi)))**(n_pff-1d0)
179  IF (savage.EQ.1) THEN
180  df2odeps = (n_pff-1d0)*(f2**(n_pff-2d0))*&
181  trd_s_c(ijk,m)&
182  *dzetaodeps(ep_s(ijk,m), ijk, m)&
183  / (zeta*zeta*&
184  n_pff*dsqrt(2d0)*sin_phi)
185  ELSE
186  df2odeps=zero
187  ENDIF
188 
189  pf = pc*f2
190  pfmax = pc*((n_pf/(n_pf-1d0))**(n_pf-1d0))
191 
192  IF (pf> pfmax) THEN
193  f2 = (n_pf/(n_pf-1d0))**(n_pf-1d0)
194  df2odeps = zero
195  ENDIF
196  ENDIF
197 
198 ! Contributions to Kcp(IJK) from kinetic theory have been left out in
199 ! the expressions below as they cause convergence problems at low solids
200 ! volume fraction
201  kcp(ijk) = f2*dpcodeps + pc*df2odeps
202 
203  ELSE
204 ! the solids are not sufficiently packed to invoke friction model
205  kcp(ijk) = zero
206 
207  ENDIF ! end if/else branch (one-ep_g(ijk)>eps_f_min)
208 ! end if friction and sufficiently packed to invoke friction
209 ! ----------------------------------------------------------------<<<
210 
211  ELSE ! FRICTION = .FALSE.
212 
213 
214  IF(ep_g(ijk) .LT. ep_g_blend_end(ijk)) THEN
215 ! not friction but the solids are packed so that the plastic pressure
216 ! model is invoked
217 ! ---------------------------------------------------------------->>>
218 
219  kcp(ijk) = dpodep_s(ep_s(ijk, m),ep_g_blend_end(ijk))
220 
221  IF(blending_stress) THEN
222  blend = blend_function(ijk)
223  kcp(ijk) = (1.0d0-blend) * kcp(ijk)
224  ENDIF
225  ELSE
226 ! the solids are not sufficiently packed to invoke the plastic stress
227 ! model
228  kcp(ijk) = zero
229  ENDIF
230 ! end if not friction but sufficiently packed to invoke plastic pressure
231 ! ----------------------------------------------------------------<<<
232 
233  ENDIF ! end if/else branch if(friction)
234 
235  ELSE ! else branch of if (.not.wall_at(ijk))
236  kcp(ijk) = zero
237  ENDIF ! end if/else (.not.wall_at(ijk))
238 
239  ENDDO ! do ijk=ijkstart3,ijkend3
240  ENDIF ! end if (close_packed(m))
241 
242  CALL send_recv(kcp, 2)
243 
244  RETURN
245  END
246 
247 
248 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
249 ! C
250 ! Function: DZETAoDEPs (EPs,IJK,M) C
251 ! Purpose: Calculate derivative of zeta C
252 ! w.r.t granular volume fraction C
253 ! C
254 ! Author: A. Srivastava Date: 8-JUNE-98 C
255 ! Reviewer: Date: C
256 ! C
257 ! Revision Number: C
258 ! Purpose: C
259 ! Author: Date: dd-mmm-yy C
260 ! Reviewer: Date: dd-mmm-yy C
261 ! C
262 ! Literature/Document References: C
263 ! C
264 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
265 
266  DOUBLE PRECISION FUNCTION dzetaodeps(EPs, IJK, M)
268 !-----------------------------------------------
269 ! Modules
270 !-----------------------------------------------
271  USE compar
272  USE constant
273  USE fldvar
274  USE functions
275  USE geometry
276  USE indices
277  USE param
278  USE param1
279  USE physprop
280  USE pscor
281  USE rdf
282  USE run
283  USE trace
284  USE visc_s
285  IMPLICIT NONE
286 !-----------------------------------------------
287 ! Dummy Arguments
288 !-----------------------------------------------
289 ! solids volume fraction
290  DOUBLE PRECISION, INTENT(IN) :: EPs
291 ! indices
292  INTEGER, INTENT(IN) :: IJK,M
293 !-----------------------------------------------
294 ! Local variables
295 !-----------------------------------------------
296 ! local radial distribution function
297  DOUBLE PRECISION :: g0
298 ! Other variables
299  DOUBLE PRECISION :: Mu, Mu_b, DEPs2G_0oDEPs, F1, DF1oDEPs
300 !-----------------------------------------------
301 
302  g0 = g_0(ijk, m, m)
303 !QX
304  mu = (5d0*dsqrt(pi*theta_m(ijk,m))*d_p(ijk,m)*ro_s(ijk,m))/96d0
305 
306  mu_b = (256d0*mu*eps*eps*g0/(5d0*pi))
307 
308  deps2g_0odeps = eps*eps*dg_0dnu(eps) + 2d0*eps*g0
309 
310  f1 = ((2d0+alpha)/3d0)*((2*mu/(eta*(2d0-eta)*&
311  g0))*(1d0+1.6d0*eta*eps*g0)*(1d0+1.6d0*eta*(3d0*eta-2d0)&
312  *eps*g0)+(1.2d0*mu_b*eta))
313 
314  df1odeps = ((2d0+alpha)/3d0)*((2*mu/(eta*(2d0-eta))*&
315  ((-dg_0dnu(eps)/(g0*g0)) + (1.6d0*eta*(3d0*eta-1d0))&
316  + (64d0*eta*eta*(3d0*eta-2d0)*deps2g_0odeps/25d0))) +&
317  3.2d0*eta*ro_s(ijk,m)*d_p(ijk,m)*((theta_m(ijk,m)/pi)**0.5d0)&
318  *deps2g_0odeps)
319 
320  dzetaodeps = 0.5d0*((48d0*eta*(1d0-eta)*ro_s(ijk,m)*f1*&
321  (theta_m(ijk,m)**1.5d0)/&
322  (sqrt_pi*d_p(ijk,m)*eps*eps*g0))**0.5d0)*&
323  (f1*deps2g_0odeps - eps*eps*g0*df1odeps)/(f1*f1)
324 
325 
326  RETURN
327  END
328 
subroutine calc_k_cp(Kcp)
Definition: calc_k_cp.f:26
double precision to_si
Definition: constant_mod.f:146
double precision, dimension(:,:), allocatable trd_s_c
Definition: trace_mod.f:6
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ep_g
Definition: fldvar_mod.f:15
double precision n_pf
Definition: constant_mod.f:101
double precision function blend_function(IJK)
Definition: physprop_mod.f:244
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
double precision function dg_0dnu(EPS)
Definition: rdf_mod.f:412
double precision, dimension(:,:), allocatable trd_s2
Definition: trace_mod.f:9
logical friction
Definition: run_mod.f:149
double precision function dzetaodeps(EPs, IJK, M)
Definition: calc_k_cp.f:267
double precision n_pc
Definition: constant_mod.f:101
double precision function g_0(IJK, M1, M2)
Definition: rdf_mod.f:240
logical, dimension(dim_m) close_packed
Definition: physprop_mod.f:56
double precision sin_phi
Definition: constant_mod.f:123
double precision, dimension(:), allocatable ep_star_array
Definition: visc_s_mod.f:54
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
double precision, parameter alpha
Definition: constant_mod.f:62
double precision fr
Definition: constant_mod.f:101
double precision, dimension(:), allocatable ep_g_blend_end
Definition: visc_s_mod.f:60
double precision, parameter small_number
Definition: param1_mod.f:24
double precision eta
Definition: constant_mod.f:108
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision eps_f_min
Definition: constant_mod.f:100
Definition: pscor_mod.f:1
integer savage
Definition: run_mod.f:154
Definition: run_mod.f:13
Definition: param_mod.f:2
integer mcp
Definition: pscor_mod.f:38
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
logical blending_stress
Definition: run_mod.f:161
integer ijkstart3
Definition: compar_mod.f:80
integer, parameter undefined_i
Definition: param1_mod.f:19
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
Definition: rdf_mod.f:11
double precision function dpodep_s(XXX, YYY)
double precision, parameter pi
Definition: constant_mod.f:158
Definition: trace_mod.f:1
double precision, parameter sqrt_pi
Definition: constant_mod.f:161
double precision d_pc
Definition: constant_mod.f:101
double precision delta
Definition: constant_mod.f:101
double precision, parameter zero
Definition: param1_mod.f:27