MFIX  2016-1
k_epsilon_prop.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: K_Epsilon_PROP C
4 ! Purpose: Calculate diffusion coefficeint and sources for K & C
5 ! Epsilon equations C
6 ! C
7 ! Author: Date: C
8 ! Modified: S. Benyahia Date:May-13-04 C
9 ! C
10 ! C
11 ! Literature/Document References: C
12 ! Wilcox, D.C., Turbulence Modeling for CFD. DCW Industries, Inc. C
13 ! La Canada, Ca. 1994. C
14 ! C
15 ! C
16 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
17  SUBROUTINE k_epsilon_prop()
18 
19 ! Modules
20 !---------------------------------------------------------------------//
21  USE param
22  USE param1
23  USE parallel
24  USE physprop
25  USE drag
26  USE run
27  USE output
28  USE geometry
29  USE fldvar
30  USE visc_g
31  USE visc_s
32  USE trace
33  USE indices
34  USE constant
35  Use vshear
36  USE turb
37  USE toleranc
38  USE compar
39  USE tau_g
40  USE sendrecv
41 
42  USE cutcell
43  USE fun_avg
44  USE functions
45 
46  IMPLICIT NONE
47 
48 ! Dummy arguments
49 !---------------------------------------------------------------------//
50 
51 ! Local parameters
52 !---------------------------------------------------------------------//
53  DOUBLE PRECISION, PARAMETER :: F2O3 = 2.d0/3.d0
54 
55 ! Local variables
56 !---------------------------------------------------------------------//
57 ! Indices
58  INTEGER :: I, J, K, IJK
59  INTEGER :: IMJK, IPJK, IJMK, IJPK, IJKM, IJKP
60 ! Loop indices
61  INTEGER :: I1, J1, K1
62 ! Solids phase index
63  INTEGER :: M
64 ! U_g at the east (i+1/2, j, k) and west face (i-1/2, j, k)
65  DOUBLE PRECISION :: UgE, UgW
66 ! U_g at the north (i, j+1/2, k) and south face (i, j-1/2, k)
67  DOUBLE PRECISION :: UgN, UgS
68 ! U_g at the top (i, j, k+1/2) and bottom face (i, j, k-1/2)
69  DOUBLE PRECISION :: UgT, UgB
70 ! U_g at the center of a scalar cell (i, j, k)
71 ! Calculated for Cylindrical coordinates only.
72  DOUBLE PRECISION :: UgcC
73 ! Cell center value of U_g
74  DOUBLE PRECISION UGC
75 ! V_g at the east (i+1/2, j, k) and west face (i-1/2, j, k)
76  DOUBLE PRECISION :: VgE, VgW
77 ! V_g at the north (i, j+1/2, k) and south face (i, j-1/2, k)
78  DOUBLE PRECISION :: VgN, VgS
79 ! V_g at the top (i, j, k+1/2) and bottom face (i, j, k-1/2)
80  DOUBLE PRECISION :: VgT, VgB
81 ! Cell center value of V_g
82  DOUBLE PRECISION VGC
83 ! W_g at the east (i+1/2, j, k) and west face (i-1/2, j, k)
84  DOUBLE PRECISION :: WgE, WgW
85 ! W_g at the north (i, j+1/2, k) and south face (i, j-1/2, k)
86  DOUBLE PRECISION :: WgN, WgS
87 ! W_g at the top (i, j, k+1/2) and bottom face (i, j, k-1/2)
88  DOUBLE PRECISION :: WgT, WgB
89 ! W_g at the center of a scalar cell (i, j, k).
90 ! Calculated for Cylindrical coordinates only.
91  DOUBLE PRECISION :: WgcC
92 ! Cell center value of W_g
93  DOUBLE PRECISION WGC
94 ! trace_g and eddy viscosity
95  DOUBLE PRECISION :: Trace_G, Mu_gas_t
96  DOUBLE PRECISION :: C_Eps_Pope, Xsi_Pope
97 ! gradient of velocity
98  DOUBLE PRECISION :: DelV_G(3,3)
99 ! rate of strain tensor
100  DOUBLE PRECISION :: D_g(3,3)
101 
102 ! Production of Turb. Due to shear, Turb Visc, and Constants.
103 ! See Wilcox PP. 89
104  DOUBLE PRECISION Tauij_gDUi_gODxj, C_MU, Sigma_k, Sigma_E, Kappa
105  DOUBLE PRECISION Pos_Tauij_gDUi_gODxj, Neg_Tauij_gDUi_gODxj
106  DOUBLE PRECISION Ceps_1, Ceps_2, C_Eps_3, Check_Log
107  DOUBLE PRECISION Pos_PI_kq_2, Neg_PI_kq_2
108 ! Modif. for Sof Local Var.
109  INTEGER :: P,Q
110 !---------------------------------------------------------------------//
111 
112  IF( .NOT. k_epsilon) RETURN
113 
114 ! M should be forced to be equal to one to get some info.
115 ! from solids phase.
116  m = 1
117 
118 ! Add constants. Most of these constants have the same names and values
119 ! as the ones defined in Wilcox book (turbulence modeling for CFD).
120 ! Some are necessary only for Simonin turbulence model
121 
122  c_mu = 9.0d-02
123  kappa = 0.42d+0
124  sigma_k = 1.0d0
125  sigma_e = 1.3d0
126  ceps_1 = 1.44d0 !should be 1.6 for axisymmetric cases with no Pope Correction.
127  ceps_2 = 1.92d0
128  c_eps_3 = 1.2d0 ! for Simonin model
129  c_eps_pope = 0.79d0 ! for Pope Correction.
130 
131 !!!$omp parallel do private(ijk, L)
132  DO ijk = ijkstart3, ijkend3
133  IF (fluid_at(ijk)) THEN
134  i = i_of(ijk)
135  j = j_of(ijk)
136  k = k_of(ijk)
137 
138 ! Velocity components at the scalar faces
139  CALL get_face_vel_gas(ijk, uge, ugw, ugn, ugs, ugt, ugb, ugcc, &
140  vge, vgw, vgn, vgs, vgt, vgb, &
141  wge, wgw, wgn, wgs, wgt, wgb, wgcc)
142 
143 ! Velocity derivatives (gradient and rate of strain tensor)
144  CALL calc_deriv_vel_gas(ijk, delv_g, d_g)
145 
146 ! Value of trace is also available via trd_g but the latter is
147 ! calculated only once per time step
148  trace_g = d_g(1,1) + d_g(2,2) + d_g(3,3)
149 
150 ! Pope's correction in 2-D to the Epsilon Equation for a round-Jet
151 ! from Wilcox book, Page 103.
152  xsi_pope = zero
153  DO i1 = 1,3
154  DO j1 = 1,3
155  DO k1 = 1,3
156  xsi_pope = xsi_pope + (delv_g(i1,j1) - delv_g(j1,i1))* &
157  (delv_g(j1,k1) - delv_g(k1,j1))*&
158  (delv_g(k1,i1) + delv_g(i1,k1))
159  ENDDO
160  ENDDO
161  ENDDO
162  xsi_pope = xsi_pope/6. * k_turb_g(ijk)**2/(e_turb_g(ijk)+small_number)
163 
164 ! This IF statment is to ensure that we are using the turbulent viscosity
165 ! and NOT the effective viscosity.
166  IF (mu_gt(ijk) .GE. mu_g(ijk)) THEN
167  mu_gas_t = mu_gt(ijk) - mu_g(ijk)
168  ELSE
169  mu_gas_t = zero
170  ENDIF
171 
172 ! Calculate Tau(i,j)*dUi/dXj (production term in the K Equation
173  IF(.NOT.cut_cell_at(ijk)) THEN
174  tauij_gdui_godxj = 2d0*mu_gas_t*( &
175  d_g(1,1) * d_g(1,1) + &
176  d_g(1,2) * (ugn-ugs)*ody(j) + &
177  d_g(1,3) * ((ugt-ugb)*(ox(i)*odz(k))-wgcc*ox(i)) + &
178  d_g(2,1) * (vge-vgw)*odx(i) + &
179  d_g(2,2) * d_g(2,2) + &
180  d_g(2,3) * (vgt-vgb)*(ox(i)*odz(k)) + &
181  d_g(3,1) * (wge-wgw)*odx(i) + &
182  d_g(3,2) * (wgn-wgs)*ody(j) + &
183  d_g(3,3) * d_g(3,3)) - &
184  f2o3 * ro_g(ijk) * k_turb_g(ijk)*trace_g - &
185  f2o3 * mu_gas_t * trace_g**2
186 
187  ELSE ! CUT_CELL
188 ! This is actually not used because of wall functions in cut cells
189 ! Tauij_gDUi_gODxj = 2D0*Mu_gas_t*( &
190 ! D_G(1,1) * UG(1,1) + &
191 ! D_G(1,2) * UG(1,2) + &
192 ! D_G(1,3) * UG(1,3) + &
193 ! D_G(2,1) * UG(2,1) + &
194 ! D_G(2,2) * UG(2,2) + &
195 ! D_G(2,3) * UG(2,3) + &
196 ! D_G(3,1) * UG(3,1) + &
197 ! D_G(3,2) * UG(3,2) + &
198 ! D_G(3,3) * UG(3,3)) - &
199 ! F2O3 * RO_G(IJK) * K_Turb_G(IJK)*Trace_g- &
200 ! F2O3 * Mu_gas_t * Trace_g**2
201  ENDIF
202 
203 
204 ! To avoid very small negative numbers
205  IF (tauij_gdui_godxj .GE. zero) THEN
206  pos_tauij_gdui_godxj = tauij_gdui_godxj
207  neg_tauij_gdui_godxj = zero
208  ELSE
209  pos_tauij_gdui_godxj = zero
210  neg_tauij_gdui_godxj = tauij_gdui_godxj
211  ENDIF
212 
213 
214 ! Interaction terms in the K-Epsilon equations FOR USE Simonin and Ahmadi models
215  IF(simonin) THEN
216  pos_pi_kq_2 = f_gs(ijk,1)*k_12(ijk)
217  neg_pi_kq_2 = f_gs(ijk,1)*2.0d0* k_turb_g(ijk)
218  ELSE IF(ahmadi) THEN
219  pos_pi_kq_2 = f_gs(ijk,1)*3.0d0*theta_m(ijk,m)
220  neg_pi_kq_2 = f_gs(ijk,1)*2.0d0* k_turb_g(ijk)
221  c_eps_3 = zero ! no extra terms in epsilon equation for Ahmadi model !
222  ELSE
223  pos_pi_kq_2 = zero
224  neg_pi_kq_2 = zero
225  ENDIF
226 
227 
228  IF(k_turb_g(ijk) > small_number .AND. &
229  e_turb_g(ijk) > small_number) THEN
230 
231 ! Start Adding source terms to the K equation
232  k_turb_g_c(ijk) = (ep_g(ijk)*pos_tauij_gdui_godxj + &
233  pos_pi_kq_2 )
234  k_turb_g_p(ijk) =(-ep_g(ijk)*neg_tauij_gdui_godxj + &
235  ep_g(ijk)*ro_g(ijk)*e_turb_g(ijk)+neg_pi_kq_2)/ &
236  k_turb_g(ijk)
237 
238 
239 ! Calculate velocity components at i, j, k to be used in wall functions
240  imjk = im_of(ijk)
241  ipjk = ip_of(ijk)
242  ijmk = jm_of(ijk)
243  ijpk = jp_of(ijk)
244  ijkm = km_of(ijk)
245  ijkp = kp_of(ijk)
246  ugc = avg_x_e(u_g(imjk),u_g(ijk),i)
247  vgc = avg_y_n(v_g(ijmk),v_g(ijk))
248  wgc = avg_z_t(w_g(ijkm),w_g(ijk))
249 
250 ! Implementing wall functions targeted to fluid cells next to walls...
251 ! Setting Source and sink terms in the K equation since the production
252 ! in the K eq. due to shear should include the LOG law of the wall.
253 ! North/South wall
254  IF(wall_at(ijpk).OR.wall_at(ijmk)) THEN
255  check_log = log(9.81*c_mu**0.25* &
256  ro_g(ijk)*sqrt(k_turb_g(ijk))*dy(j)/2.0d+0/ &
257  mu_g(ijk))
258  IF(check_log .LE. zero) THEN
259  k_turb_g_c(ijk) = zero
260  k_turb_g_p(ijk) = zero
261  ELSE
262  k_turb_g_c(ijk) = sqrt(c_mu) * 2.d+0/dy(j)* &
263  max(abs(ugc),abs(wgc))*ep_g(ijk)*ro_g(ijk)* &
264  k_turb_g(ijk)/check_log
265  k_turb_g_p(ijk) = ((ep_g(ijk)*ro_g(ijk)* &
266  c_mu**0.75*k_turb_g(ijk)**1.5/dy(j)* &
267  2.0d+0/kappa))/k_turb_g(ijk)
268  ENDIF !for check_log less than zero
269 ! Top/Bottom wall
270  ELSEIF(wall_at(ijkp).OR.wall_at(ijkm)) THEN
271  check_log = log(9.81*c_mu**0.25* &
272  ro_g(ijk)*sqrt(k_turb_g(ijk))/ &
273  (odz(k)*ox(i)*2.0d+0)/mu_g(ijk))
274  IF(check_log .LE. zero) THEN
275  k_turb_g_c(ijk) = zero
276  k_turb_g_p(ijk) = zero
277  ELSE
278  k_turb_g_c(ijk) = sqrt(c_mu)*(odz(k)*ox(i)* &
279  2.0d+0)* max(abs(ugc),abs(vgc))*ep_g(ijk)* &
280  ro_g(ijk)*k_turb_g(ijk)/check_log
281  k_turb_g_p(ijk) = ((ep_g(ijk)*ro_g(ijk)* &
282  c_mu**0.75*k_turb_g(ijk)**1.5/kappa* &
283  (odz(k)*ox(i)*2.0d+0)))/k_turb_g(ijk)
284  ENDIF !for check_log less than zero
285  ENDIF !For walls
286 
287 ! For Cylindrical cases, wall_at (IP) is a wall cell, but wall_at (IM) is
288 ! the axis of symmetry where wall functions obviously don't apply.
289  IF(cylindrical) THEN
290  IF (wall_at(ipjk)) THEN
291  check_log = log(9.81*c_mu**0.25* ro_g(ijk)* &
292  sqrt(k_turb_g(ijk))*dx(i)/2.0d+0/mu_g(ijk))
293  IF(check_log .LE. zero) THEN
294  k_turb_g_c(ijk) = zero
295  k_turb_g_p(ijk) = zero
296  ELSE
297  k_turb_g_c(ijk) = sqrt(c_mu)*2.d+0/dx(i)* &
298  max(abs(vgc),abs(wgc)) *ep_g(ijk)*ro_g(ijk)*&
299  k_turb_g(ijk)/check_log
300  k_turb_g_p(ijk) = ((ep_g(ijk)*ro_g(ijk)* &
301  c_mu**0.75*k_turb_g(ijk)**1.5/dx(i)* &
302  2.0d+0/kappa))/ k_turb_g(ijk)
303  ENDIF !for check_log less than zero
304  ENDIF ! for wall cells in I direction
305 ! East/West wall
306  ELSEIF (wall_at(ipjk).OR.wall_at(imjk)) THEN
307  check_log = log(9.81*c_mu**0.25*ro_g(ijk)* &
308  sqrt(k_turb_g(ijk))*dx(i)/2.0d+0/mu_g(ijk))
309  IF(check_log .LE. zero) THEN
310  k_turb_g_c(ijk) = zero
311  k_turb_g_p(ijk) = zero
312  ELSE
313  k_turb_g_c(ijk) = sqrt(c_mu)*2.d+0/dx(i)* &
314  max(abs(vgc),abs(wgc))*ep_g(ijk)*ro_g(ijk)* &
315  k_turb_g(ijk)/check_log
316  k_turb_g_p(ijk) = ((ep_g(ijk)*ro_g(ijk)* &
317  c_mu**0.75*k_turb_g(ijk)**1.5/dx(i)* &
318  2.0d+0/kappa))/k_turb_g(ijk)
319  ENDIF !for check_log less than zero
320  ENDIF ! for cylindrical
321 
322  IF(cut_cell_at(ijk)) THEN
323  check_log = log(9.81*c_mu**0.25* ro_g(ijk)* &
324  sqrt(k_turb_g(ijk))*delh_scalar(ijk)/mu_g(ijk))
325  IF(check_log .LE. zero) THEN
326  k_turb_g_c(ijk) = zero
327  k_turb_g_p(ijk) = zero
328  ELSE
329 ! K_Turb_G_c (IJK) = SQRT(C_mu)/DELH_Scalar(IJK)* &
330 ! MAX(ABS(UGC),ABS(VGC),ABS(WGC))* &
331 ! EP_g(IJK)*RO_G(IJK)*K_Turb_G(IJK) /Check_Log
332  k_turb_g_c(ijk) = sqrt(c_mu)/delh_scalar(ijk)* &
333  dsqrt(ugc**2 + vgc**2 + wgc**2) * &
334  ep_g(ijk)*ro_g(ijk)*k_turb_g(ijk)/check_log
335 
336  k_turb_g_p(ijk) = (ep_g(ijk)*ro_g(ijk)* &
337  c_mu**0.75*k_turb_g(ijk)**1.5)/ &
338  (delh_scalar(ijk)*kappa)/k_turb_g(ijk)
339  ENDIF !for check_log less than zero
340  ENDIF
341 
342 
343 ! Diffusion coefficient for turbulent kinetic energy (K)
344  dif_k_turb_g(ijk) = ep_g(ijk)* &
345  (mu_g(ijk) + mu_gas_t /sigma_k)
346 
347 ! Add here Dissipation of Turbulence source terms
348  e_turb_g_c(ijk) = (ceps_1 *&
349  ep_g(ijk)*pos_tauij_gdui_godxj* &
350  e_turb_g(ijk)/k_turb_g(ijk) + &
351  c_eps_3*pos_pi_kq_2*e_turb_g(ijk)/k_turb_g(ijk))
352 
353 ! Pope Correction in Xsi_Pope, Add it to E_Turb_G_c to use this option.
354  ! + C_Eps_Pope*RO_G(IJK)*EP_g(IJK)*&
355  ! ZMAX(Xsi_Pope)
356 
357  e_turb_g_p(ijk) = -ceps_1 * &
358  ep_g(ijk)*neg_tauij_gdui_godxj /k_turb_g(ijk) + &
359  ceps_2 * ep_g(ijk) *ro_g(ijk)* &
360  e_turb_g(ijk)/k_turb_g(ijk) + &
361  c_eps_3*(neg_pi_kq_2)/k_turb_g(ijk)
362 
363 ! Diffusion coefficient for Dissipation of turbulent energy (Epsilon)
364  dif_e_turb_g(ijk) =ep_g(ijk)* &
365  (mu_g(ijk) + mu_gas_t /sigma_e)
366 
367  ELSE
368  k_turb_g_c(ijk) = zero
369  k_turb_g_p(ijk) = zero
370  e_turb_g_c(ijk) = zero
371  e_turb_g_p(ijk) = zero
372  dif_k_turb_g(ijk) = zero
373  dif_e_turb_g(ijk) = zero
374  ENDIF !for K_turb_G and E_Turb_G having very small numbers
375  ENDIF
376  ENDDO
377 
378  RETURN
379  END SUBROUTINE k_epsilon_prop
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ep_g
Definition: fldvar_mod.f:15
double precision, dimension(:), allocatable k_turb_g
Definition: fldvar_mod.f:161
double precision, dimension(:), allocatable ody
Definition: geometry_mod.f:116
double precision, dimension(:), allocatable odx
Definition: geometry_mod.f:114
subroutine k_epsilon_prop()
double precision, dimension(:), allocatable e_turb_g_c
Definition: turb_mod.f:8
subroutine get_face_vel_gas(IJK, uge, ugw, ugn, ugs, ugt, ugb, ugc
Definition: calc_trd_g.f:291
double precision, dimension(:), allocatable mu_gt
Definition: visc_g_mod.f:8
Definition: drag_mod.f:11
double precision, dimension(:), allocatable dif_e_turb_g
Definition: turb_mod.f:13
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
double precision, dimension(:), allocatable k_12
Definition: turb_mod.f:17
Definition: turb_mod.f:2
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
subroutine calc_deriv_vel_gas(IJK, lVelGradG, lRateStrainG)
Definition: calc_trd_g.f:431
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
Definition: tau_g_mod.f:1
double precision, parameter small_number
Definition: param1_mod.f:24
logical simonin
Definition: run_mod.f:143
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision, dimension(:), allocatable dif_k_turb_g
Definition: turb_mod.f:12
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
Definition: run_mod.f:13
Definition: param_mod.f:2
double precision, dimension(:), allocatable delh_scalar
Definition: cutcell_mod.f:196
logical ahmadi
Definition: run_mod.f:146
double precision, dimension(:), allocatable k_turb_g_p
Definition: turb_mod.f:7
logical, dimension(:), allocatable cut_cell_at
Definition: cutcell_mod.f:355
logical k_epsilon
Definition: run_mod.f:97
double precision, dimension(:), allocatable mu_g
Definition: physprop_mod.f:68
double precision, dimension(:), allocatable odz
Definition: geometry_mod.f:118
logical cylindrical
Definition: geometry_mod.f:168
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
double precision, dimension(:,:), allocatable f_gs
Definition: drag_mod.f:14
double precision, dimension(:), allocatable e_turb_g_p
Definition: turb_mod.f:9
Definition: trace_mod.f:1
double precision, dimension(:), allocatable e_turb_g
Definition: fldvar_mod.f:162
double precision, dimension(:), allocatable ro_g
Definition: fldvar_mod.f:32
double precision, dimension(:), allocatable k_turb_g_c
Definition: turb_mod.f:6
double precision, parameter zero
Definition: param1_mod.f:27