MFIX  2016-1
tau_w_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_Tau_W_s C
4 ! Purpose: Cross terms in the gradient of stress in W_s momentum c
5 ! C
6 ! Author: M. Syamlal Date: 19-DEC-96 C
7 ! C
8 ! C
9 ! Comments: This routine calculates the components of the solids C
10 ! phase viscous stress tensor of the w-momentum equation that cannot C
11 ! be cast in the form: mu.grad(w). These components are stored in the C
12 ! passed variable, which is then used as a source of the w-momentum C
13 ! equation. C
14 ! For greater details see calc_tau_w_g. C
15 ! C
16 ! C
17 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
18  SUBROUTINE calc_tau_w_s(lTAU_W_S)
19 
20 ! Modules
21 !---------------------------------------------------------------------//
22  USE param, only: dimension_3, dimension_m
23  USE param1, only: zero
24  USE physprop, only: smax, mmax
25  USE fldvar, only: ep_s
26  USE toleranc, only: dil_ep_s
27  USE run, only: kt_type_enum, ghd_2007
29 
30  USE functions
31  USE fun_avg
32  USE compar
33  USE geometry
34  USE indices
35  USE sendrecv
36  IMPLICIT NONE
37 
38 ! Dummy arguments
39 !---------------------------------------------------------------------//
40 ! TAU_W_s
41  DOUBLE PRECISION, INTENT(OUT) :: lTAU_W_s(dimension_3, dimension_m)
42 
43 ! Local Variables
44 !---------------------------------------------------------------------//
45 ! Indices
46  INTEGER :: IJK, K, IJKT
47 ! Phase index
48  INTEGER :: M, L
49 ! Average volume fraction
50  DOUBLE PRECISION :: EPSA, EPStmp
51 ! Source terms (Surface)
52  DOUBLE PRECISION :: Sbv, Ssx, Ssy, Ssz
53 ! Cylindrical source terms (Volumetric)
54  DOUBLE PRECISION :: Vxz
55 !---------------------------------------------------------------------//
56 
57  DO m = 1, mmax
58  IF(kt_type_enum == ghd_2007 .AND. m /= mmax) cycle
59 
60 !!$omp parallel do &
61 !!$omp private(IJK, K, IJKT, &
62 !!$omp& EPSA, EPStmp, SSX, SSY, SSZ, SBV, VXZ) &
63 !!$omp& schedule(static)
64 
65  DO ijk = ijkstart3, ijkend3
66 
67 ! Skip walls where some values are undefined.
68  IF(wall_at(ijk)) cycle
69 
70  k = k_of(ijk)
71  ijkt = top_of(ijk)
72 
73  IF (kt_type_enum == ghd_2007) THEN
74  epstmp = zero
75  DO l = 1, smax
76  epstmp = epstmp + avg_z(ep_s(ijk,l),ep_s(ijkt,l),k)
77  ENDDO
78  epsa = epstmp
79  ELSE
80  epsa = avg_z(ep_s(ijk,m),ep_s(ijkt,m),k)
81  ENDIF
82 
83  IF ( .NOT.sip_at_t(ijk) .AND. epsa>dil_ep_s) THEN
84 
85  IF((.NOT.cartesian_grid).OR.(cg_safe_mode(5)==1)) THEN
86  CALL calc_reg_tau_w_s(ijk, m, ssx, ssy, ssz, sbv, vxz)
87  ELSE
88  vxz = zero
89  CALL calc_cg_tau_w_s(ijk, m, ssx, ssy, ssz, sbv)
90  ENDIF
91 
92 ! Add the terms
93  ltau_w_s(ijk,m) = sbv + ssx + ssy + ssz + vxz*vol_w(ijk)
94  ELSE
95  ltau_w_s(ijk,m) = zero
96  ENDIF ! end if/else .not.sip_at_t .and. epsa>dil_ep_s
97 
98  ENDDO ! end do ijk
99 !!$omp end parallel do
100 
101  ENDDO ! end do m=1,mmax
102 
103  call send_recv(ltau_w_s,2)
104  RETURN
105  END SUBROUTINE calc_tau_w_s
106 
107 
108 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
109 ! C
110 ! Subroutine: calc_reg_tau_w_s C
111 ! Purpose: Cross terms in the gradient of stress in W_s momentum C
112 ! based on NON cartesian grid cut cell. C
113 ! C
114 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
115  SUBROUTINE calc_reg_tau_w_s(IJK, M, SSX, SSY, SSZ, SBV, VXZ)
117 ! Modules
118 !---------------------------------------------------------------------//
119  USE param1, only: zero, half, one, undefined
120  USE fldvar, only: u_s, v_s, w_s
121  USE visc_s, only: epmu_s, eplambda_s
122  USE visc_s, only: trd_s
123 
124  USE functions
125  USE fun_avg
126  USE compar
127  USE geometry
128  USE indices
129  IMPLICIT NONE
130 
131 ! Dummy arguments
132 !---------------------------------------------------------------------//
133 ! current ijk index
134  INTEGER, INTENT(IN) :: IJK
135 ! solids phase index
136  INTEGER, INTENT(IN) :: M
137 ! Source terms (surface)
138  DOUBLE PRECISION, INTENT(OUT) :: SSX
139  DOUBLE PRECISION, INTENT(OUT) :: SSY
140  DOUBLE PRECISION, INTENT(OUT) :: SSZ
141  DOUBLE PRECISION, INTENT(OUT) :: SBV
142 ! Cylindrical source terms
143  DOUBLE PRECISION, INTENT(OUT) :: VXZ
144 
145 ! Local Variables
146 !---------------------------------------------------------------------//
147 ! Indices
148  INTEGER :: I, J, K, IM, JM, KP
149  INTEGER :: IJKP, IMJK, IJMK, IJKM
150  INTEGER :: IJKE, IJKW, IJKN, IJKS, IJKT
151  INTEGER :: IJKNT, IJKST, IJKTE, IJKTW
152  INTEGER :: IJMKP, IMJKP
153 ! Average velocity gradients
154  DOUBLE PRECISION :: duodz
155 !---------------------------------------------------------------------//
156 
157  k = k_of(ijk)
158  j = j_of(ijk)
159  i = i_of(ijk)
160  im = im1(i)
161  jm = jm1(j)
162  kp = kp1(k)
163 
164  ijkp = kp_of(ijk)
165  imjk = im_of(ijk)
166  ijmk = jm_of(ijk)
167  ijkm = km_of(ijk)
168  ijmkp = jm_of(ijkp)
169  imjkp = kp_of(imjk)
170 
171  ijkt = top_of(ijk)
172  ijkn = north_of(ijk)
173  ijknt = top_of(ijkn)
174  ijks = south_of(ijk)
175  ijkst = top_of(ijks)
176  ijke = east_of(ijk)
177  ijkte = east_of(ijkt)
178  ijkw = west_of(ijk)
179  ijktw = west_of(ijkt)
180 
181 ! Surface forces
182 
183 ! bulk viscosity term
184 ! part of 1/x d/dz (tau_zz) xdxdydz =>
185 ! 1/x d/dz (lambda.trcD) xdxdydz=>
186 ! delta (lambda.trcD)Ap |T-B : at (i, j, k+1 - k-1)
187  sbv = (eplambda_s(ijkt,m)*trd_s(ijkt,m)-&
188  eplambda_s(ijk,m)*trd_s(ijk,m))*axy(ijk)
189 
190 ! shear stress terms
191 ! part of 1/x^2 d/dx (x^2 tau_xz) xdxdydz => or equivalently
192 ! part of (tau_xz/x + 1/x d/dx (x tau_xz) ) xdxdydz =>
193 ! 1/x d/dx(mu.du/dz) xdxdydz =>
194 ! delta (mu/x du/dz)Ayz |E-W : at (i+1/2-i-1/2, j, k+1/2)
195  ssx = avg_z_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
196  avg_x_h(epmu_s(ijkt,m),epmu_s(ijkte,m),i),k)*&
197  (u_s(ijkp,m)-u_s(ijk,m))*ox_e(i)*odz_t(k)*ayz_w(ijk) - &
198  avg_z_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
199  avg_x_h(epmu_s(ijktw,m),epmu_s(ijkt,m),im),k)*&
200  (u_s(imjkp,m)-u_s(imjk,m))*odz_t(k)*dy(j)*(half*(dz(k)+dz(kp)))
201 ! Same as oX_E(IM)*AYZ_W(IMJK), but avoids singularity
202 
203 ! part of d/dy (tau_zy) xdxdydz =>
204 ! d/dy (mu/x dv/dz) xdxdydz =>
205 ! delta (mu/x dv/dz)Axz |N-S : at (i, j+1/2 - j-1/2, k+1/2)
206  ssy = avg_z_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
207  avg_y_h(epmu_s(ijkt,m),epmu_s(ijknt,m),j),k)*&
208  (v_s(ijkp,m)-v_s(ijk,m))*ox(i)*odz_t(k)*axz_w(ijk) - &
209  avg_z_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
210  avg_y_h(epmu_s(ijkst,m),epmu_s(ijkt,m),jm),k)*&
211  (v_s(ijmkp,m)-v_s(ijmk,m))*ox(i)*odz_t(k)*axz_w(ijmk)
212 
213 ! part of 1/x d/dz (tau_zz) xdxdydz =>
214 ! 1/x d/dz (mu/x dw/dz) xdxdydz =>
215 ! delta (mu/x dw/dz)Axy |T-B : at (i, j, k+1 - k-1)
216  ssz = epmu_s(ijkt,m)*(w_s(ijkp,m)-w_s(ijk,m))*&
217  ox(i)*odz(kp)*axy_w(ijk) - &
218  epmu_s(ijk,m)*(w_s(ijk,m)-w_s(ijkm,m))*&
219  ox(i)*odz(k)* axy_w(ijkm)
220 
221 ! Special terms for cylindrical coordinates
222  vxz = zero
223  IF (cylindrical) THEN
224 
225 ! part of 1/x d/dz (tau_zz) xdxdydz =>
226 ! 1/x d/dz (2.mu/x u) xdxdydz =>
227 ! delta (2.mu/x u)Axy |T-B : at (i, j, k+1 - k-1)
228  ssz = ssz + &
229  epmu_s(ijkt,m)*(u_s(ijkp,m)+u_s(imjkp,m))*ox(i)*axy_w(ijk) - &
230  epmu_s(ijk,m)*(u_s(ijk,m)+u_s(imjk,m))*ox(i)*axy_w(ijkm)
231 
232 ! part of 1/x^2 d/dx (x^2 tau_xz) xdxdydz => or equivalently
233 ! part of (tau_xz/x + 1/x d/dx (x tau_xz)) xdxdydz =>
234 ! 1/x (mu/x du/dz) xdxdydz =>
235 ! delta (1/x mu/x du/dz)Vp : at (i, j, k+1/2)
236  IF (ox_e(im) /= undefined) THEN
237  duodz = (u_s(imjkp,m)-u_s(imjk,m))*ox_e(im)*odz_t(k)
238  ELSE
239  duodz = zero
240  ENDIF
241  vxz = avg_z(epmu_s(ijk,m),epmu_s(ijkt,m),k)*ox(i)*half*&
242  ((u_s(ijkp,m)-u_s(ijk,m))*ox_e(i)*odz_t(k)+duodz)
243  ENDIF
244 
245  RETURN
246  END SUBROUTINE calc_reg_tau_w_s
247 
248 
249 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
250 ! C
251 ! Subroutine: calc_cg_tau_w_s C
252 ! Purpose: Cross terms in the gradient of stress in W_s momentum C
253 ! based on cartesian grid cut cell. C
254 ! C
255 ! Author: Jeff Dietiker Date: 01-Jul-09 C
256 ! C
257 ! C
258 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
259  SUBROUTINE calc_cg_tau_w_s(IJK, M, SSX, SSY, SSZ, SBV)
261 ! Modules
262 !---------------------------------------------------------------------//
263  USE param1, only: zero, half, one, undefined
264  USE fldvar, only: u_s, v_s, w_s
265  USE visc_s, only: epmu_s, eplambda_s
266  USE visc_s, only: trd_s
267 
268  USE functions
269  USE fun_avg
270  USE compar
271  USE geometry
272  USE indices
273  USE sendrecv
274 
275 ! for cutcell:
276 ! wall velocity for slip conditions
277  USE bc, only: bc_hw_s, bc_uw_s, bc_vw_s, bc_ww_s
278  USE bc
279  USE quadric
280  USE cutcell
281  IMPLICIT NONE
282 
283 ! Dummy arguments
284 !---------------------------------------------------------------------//
285 ! current ijk index
286  INTEGER, INTENT(IN) :: IJK
287 ! solids phase index
288  INTEGER, INTENT(IN) :: M
289 ! Source terms (surface)
290  DOUBLE PRECISION, INTENT(OUT) :: SSX
291  DOUBLE PRECISION, INTENT(OUT) :: SSY
292  DOUBLE PRECISION, INTENT(OUT) :: SSZ
293  DOUBLE PRECISION, INTENT(OUT) :: SBV
294 
295 ! Local Variables
296 !---------------------------------------------------------------------//
297 ! Indices
298  INTEGER :: I, J, K, IM, JM, KP
299  INTEGER :: IJKP, IMJK, IJMK, IJKM
300  INTEGER :: IJKE, IJKW, IJKN, IJKS, IJKT
301  INTEGER :: IJKNT, IJKST, IJKTE, IJKTW
302  INTEGER :: IJMKP, IMJKP
303 
304 ! for cartesian grid implementation:
305  DOUBLE PRECISION :: DEL_H, Nx, Ny, Nz
306  LOGICAL :: U_NODE_AT_ET, U_NODE_AT_EB, U_NODE_AT_WT, U_NODE_AT_WB
307  LOGICAL :: V_NODE_AT_NT, V_NODE_AT_NB, V_NODE_AT_ST, V_NODE_AT_SB
308  DOUBLE PRECISION :: dudz_at_E, dudz_at_W
309  DOUBLE PRECISION :: dvdz_at_N, dvdz_at_S
310  DOUBLE PRECISION :: MU_S_CUT, SSX_CUT, SSY_CUT
311  DOUBLE PRECISION :: Xi, Yi, Zi, Ui, Vi, Sx, Sy, Sz
312  DOUBLE PRECISION :: UW_s, VW_s, WW_s
313  INTEGER :: BCV
314  INTEGER :: BCT
315 !---------------------------------------------------------------------//
316 
317  k = k_of(ijk)
318  j = j_of(ijk)
319  i = i_of(ijk)
320  im = im1(i)
321  jm = jm1(j)
322  kp = kp1(k)
323 
324  ijkp = kp_of(ijk)
325  imjk = im_of(ijk)
326  ijmk = jm_of(ijk)
327  ijkm = km_of(ijk)
328  ijmkp = jm_of(ijkp)
329  imjkp = kp_of(imjk)
330 
331  ijkt = top_of(ijk)
332  ijkn = north_of(ijk)
333  ijknt = top_of(ijkn)
334  ijks = south_of(ijk)
335  ijkst = top_of(ijks)
336  ijke = east_of(ijk)
337  ijkte = east_of(ijkt)
338  ijkw = west_of(ijk)
339  ijktw = west_of(ijkt)
340 
341 ! Surface forces
342 ! bulk viscosity term
343  sbv = (eplambda_s(ijkt,m)*trd_s(ijkt,m)) * axy_w(ijk) - &
344  (eplambda_s(ijk,m) *trd_s(ijk,m) ) * axy_w(ijkm)
345 
346 ! shear stress terms
347  IF(.NOT.cut_w_cell_at(ijk)) THEN
348  ssx = avg_z_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
349  avg_x_h(epmu_s(ijkt,m),epmu_s(ijkte,m),i),k)*&
350  (u_s(ijkp,m)-u_s(ijk,m))*oneodz_t_u(ijk)*ayz_w(ijk) - &
351  avg_z_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
352  avg_x_h(epmu_s(ijktw,m),epmu_s(ijkt,m),im),k)*&
353  (u_s(imjkp,m)-u_s(imjk,m))*oneodz_t_u(imjk)*ayz_w(imjk)
354  ssy = avg_z_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
355  avg_y_h(epmu_s(ijkt,m),epmu_s(ijknt,m),j),k)*&
356  (v_s(ijkp,m)-v_s(ijk,m))*oneodz_t_v(ijk)*axz_w(ijk) - &
357  avg_z_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
358  avg_y_h(epmu_s(ijkst,m),epmu_s(ijkt,m),jm),k)*&
359  (v_s(ijmkp,m)-v_s(ijmk,m))*oneodz_t_v(ijmk)*axz_w(ijmk)
360  ssz = epmu_s(ijkt,m)*(w_s(ijkp,m)-w_s(ijk,m))*&
361  oneodz_t_w(ijk)*axy_w(ijk) - &
362  epmu_s(ijk,m)*(w_s(ijk,m)-w_s(ijkm,m))*&
363  oneodz_t_w(ijkm)*axy_w(ijkm)
364 
365 ! cut cell modifications
366 !---------------------------------------------------------------------//
367  ELSE
368 
369  bcv = bc_w_id(ijk)
370  IF(bcv > 0 ) THEN
371  bct = bc_type_enum(bcv)
372  ELSE
373  bct = none
374  ENDIF
375 
376  SELECT CASE (bct)
377  CASE (cg_nsw,cg_mi)
378  cut_tau_ws = .true.
379  noc_ws = .true.
380  uw_s = zero
381  vw_s = zero
382  ww_s = zero
383  CASE (cg_fsw)
384  cut_tau_ws = .false.
385  noc_ws = .false.
386  uw_s = zero
387  vw_s = zero
388  ww_s = zero
389  CASE(cg_psw)
390  IF(bc_hw_s(bc_w_id(ijk),m)==undefined) THEN ! same as NSW
391  cut_tau_ws = .true.
392  noc_ws = .true.
393  uw_s = bc_uw_s(bcv,m)
394  vw_s = bc_vw_s(bcv,m)
395  ww_s = bc_ww_s(bcv,m)
396  ELSEIF(bc_hw_s(bc_w_id(ijk),m)==zero) THEN ! same as FSW
397  cut_tau_ws = .false.
398  noc_ws = .false.
399  uw_s = zero
400  vw_s = zero
401  ww_s = zero
402  ELSE ! partial slip
403  cut_tau_ws = .false.
404  noc_ws = .false.
405  ENDIF
406  CASE (none)
407 ! equivalent of setting tau_w_s to zero at this ijk cell
408  ssx = zero
409  ssy = zero
410  ssz = zero
411  sbv = zero
412  RETURN
413  END SELECT
414 
415  IF(cut_tau_ws) THEN
416  mu_s_cut = (vol(ijk)*epmu_s(ijk,m) + &
417  vol(ijkp)*epmu_s(ijkt,m))/(vol(ijk) + vol(ijkp))
418  ELSE
419  mu_s_cut = zero
420  ENDIF
421 
422 ! SSX:
423  u_node_at_et = ((.NOT.blocked_u_cell_at(ijkp)).AND.&
424  (.NOT.wall_u_at(ijkp)))
425  u_node_at_eb = ((.NOT.blocked_u_cell_at(ijk)).AND.&
426  (.NOT.wall_u_at(ijk)))
427  u_node_at_wt = ((.NOT.blocked_u_cell_at(imjkp)).AND.&
428  (.NOT.wall_u_at(imjkp)))
429  u_node_at_wb = ((.NOT.blocked_u_cell_at(imjk)).AND.&
430  (.NOT.wall_u_at(imjk)))
431 
432  IF(u_node_at_et.AND.u_node_at_eb) THEN
433  ui = half * (u_s(ijkp,m) + u_s(ijk,m))
434  xi = half * (x_u(ijkp) + x_u(ijk))
435  yi = half * (y_u(ijkp) + y_u(ijk))
436  zi = half * (z_u(ijkp) + z_u(ijk))
437  sx = x_u(ijkp) - x_u(ijk)
438  sy = y_u(ijkp) - y_u(ijk)
439  sz = z_u(ijkp) - z_u(ijk)
440  CALL get_del_h(ijk, 'W_MOMENTUM', xi, yi, zi, del_h, &
441  nx, ny, nz)
442  dudz_at_e = (u_s(ijkp,m) - u_s(ijk,m)) * oneodz_t_u(ijk)
443  IF(noc_ws) dudz_at_e = dudz_at_e - ((ui-uw_s) * &
444  oneodz_t_u(ijk)/del_h*(sx*nx+sy*ny))
445  ELSE
446  dudz_at_e = zero
447  ENDIF
448 
449  IF(u_node_at_wt.AND.u_node_at_wb) THEN
450  ui = half * (u_s(imjkp,m) + u_s(imjk,m))
451  xi = half * (x_u(imjkp) + x_u(imjk))
452  yi = half * (y_u(imjkp) + y_u(imjk))
453  zi = half * (z_u(imjkp) + z_u(imjk))
454  sx = x_u(imjkp) - x_u(imjk)
455  sy = y_u(imjkp) - y_u(imjk)
456  sz = z_u(imjkp) - z_u(imjk)
457  CALL get_del_h(ijk, 'W_MOMENTUM', xi, yi, zi, del_h, &
458  nx, ny, nz)
459  dudz_at_w = (u_s(imjkp,m) - u_s(imjk,m)) * oneodz_t_u(imjk)
460  IF(noc_ws) dudz_at_w = dudz_at_w - ((ui-uw_s) * &
461  oneodz_t_u(imjk)/del_h*(sx*nx+sy*ny))
462  ELSE
463  dudz_at_w = zero
464  ENDIF
465 
466  IF(u_node_at_eb) THEN
467  CALL get_del_h(ijk, 'W_MOMENTUM', x_u(ijk), y_u(ijk), &
468  z_u(ijk), del_h, nx, ny, nz)
469  ssx_cut = -mu_s_cut * (u_s(ijk,m) - uw_s) / del_h * &
470  (nz*nx) * area_w_cut(ijk)
471  ELSE
472  ssx_cut = zero
473  ENDIF
474 
475  ssx = avg_z_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
476  avg_x_h(epmu_s(ijkt,m),epmu_s(ijkte,m),i),k)*&
477  dudz_at_e*ayz_w(ijk) - &
478  avg_z_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
479  avg_x_h(epmu_s(ijktw,m),epmu_s(ijkt,m),im),k)*&
480  dudz_at_w*ayz_w(imjk) + ssx_cut
481 
482 ! SSY:
483  v_node_at_nt = ((.NOT.blocked_v_cell_at(ijkp)).AND.&
484  (.NOT.wall_v_at(ijkp)))
485  v_node_at_nb = ((.NOT.blocked_v_cell_at(ijk)).AND.&
486  (.NOT.wall_v_at(ijk)))
487  v_node_at_st = ((.NOT.blocked_v_cell_at(ijmkp)).AND.&
488  (.NOT.wall_v_at(ijmkp)))
489  v_node_at_sb = ((.NOT.blocked_v_cell_at(ijmk)).AND.&
490  (.NOT.wall_v_at(ijmk)))
491 
492  IF(v_node_at_nt.AND.v_node_at_nb) THEN
493  vi = half * (v_s(ijkp,m) + v_s(ijk,m))
494  xi = half * (x_v(ijkp) + x_v(ijk))
495  yi = half * (y_v(ijkp) + y_v(ijk))
496  zi = half * (z_v(ijkp) + z_v(ijk))
497  sx = x_v(ijkp) - x_v(ijk)
498  sy = y_v(ijkp) - y_v(ijk)
499  sz = z_v(ijkp) - z_v(ijk)
500  CALL get_del_h(ijk, 'W_MOMENTUM', xi, yi, zi, del_h, &
501  nx, ny, nz)
502  dvdz_at_n = (v_s(ijkp,m) - v_s(ijk,m)) * oneodz_t_v(ijk)
503  IF(noc_ws) dvdz_at_n = dvdz_at_n - ((vi-vw_s) * &
504  oneodz_t_v(ijk)/del_h*(sx*nx+sy*ny))
505  ELSE
506  dvdz_at_n = zero
507  ENDIF
508 
509  IF(v_node_at_st.AND.v_node_at_sb) THEN
510  vi = half * (v_s(ijmkp,m) + v_s(ijmk,m))
511  xi = half * (x_v(ijmkp) + x_v(ijmk))
512  yi = half * (y_v(ijmkp) + y_v(ijmk))
513  zi = half * (z_v(ijmkp) + z_v(ijmk))
514  sx = x_v(ijmkp) - x_v(ijmk)
515  sy = y_v(ijmkp) - y_v(ijmk)
516  sz = z_v(ijmkp) - z_v(ijmk)
517  CALL get_del_h(ijk, 'W_MOMENTUM', xi, yi, zi, del_h, &
518  nx, ny, nz)
519  dvdz_at_s = (v_s(ijmkp,m) - v_s(ijmk,m)) * oneodz_t_v(ijmk)
520  IF(noc_ws) dvdz_at_s = dvdz_at_s - ((vi-vw_s) * &
521  oneodz_t_v(ijmk)/del_h*(sx*nx+sy*ny))
522  ELSE
523  dvdz_at_s = zero
524  ENDIF
525 
526  IF(v_node_at_nb) THEN
527  CALL get_del_h(ijk, 'W_MOMENTUM', x_v(ijk), y_v(ijk),&
528  z_v(ijk), del_h, nx, ny, nz)
529  ssy_cut = -mu_s_cut * (v_s(ijk,m) - vw_s) / del_h * &
530  (nz*ny) * area_w_cut(ijk)
531  ELSE
532  ssy_cut = zero
533  ENDIF
534 
535  ssy = avg_z_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
536  avg_y_h(epmu_s(ijkt,m),epmu_s(ijknt,m),j),k)*&
537  dvdz_at_n*axz_w(ijk) - &
538  avg_z_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
539  avg_y_h(epmu_s(ijkst,m),epmu_s(ijkt,m),jm),k)*&
540  dvdz_at_s*axz_w(ijmk) + ssy_cut
541 
542 ! SSZ:
543  CALL get_del_h(ijk, 'W_MOMENTUM', x_w(ijk), y_w(ijk), &
544  z_w(ijk), del_h, nx, ny, nz)
545  ssz = epmu_s(ijkt,m)*(w_s(ijkp,m)-w_s(ijk,m))*&
546  oneodz_t_w(ijk)*axy_w(ijk) - &
547  epmu_s(ijk,m)*(w_s(ijk,m)-w_s(ijkm,m))*&
548  ox(i)*oneodz_t_w(ijkm)*axy_w(ijkm) &
549  -mu_s_cut * (w_s(ijk,m) - ww_s) / del_h * &
550  (nz**2) * area_w_cut(ijk)
551 
552  ENDIF ! end if/else cut_cell
553 
554  RETURN
555  END SUBROUTINE calc_cg_tau_w_s
double precision, dimension(:,:), allocatable trd_s
Definition: visc_s_mod.f:63
double precision, dimension(dimension_bc, dim_m) bc_ww_s
Definition: bc_mod.f:328
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
double precision, dimension(:), allocatable y_v
Definition: cutcell_mod.f:55
double precision, dimension(:), allocatable vol_w
Definition: geometry_mod.f:242
logical noc_ws
Definition: cutcell_mod.f:389
double precision, dimension(:), allocatable z_u
Definition: cutcell_mod.f:51
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable wall_u_at
Definition: cutcell_mod.f:126
double precision, dimension(dimension_bc, dim_m) bc_uw_s
Definition: bc_mod.f:322
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ox_e
Definition: geometry_mod.f:143
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
subroutine calc_tau_w_s(lTAU_W_S)
Definition: tau_w_s.f:19
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
double precision, dimension(:), allocatable oneodz_t_w
Definition: cutcell_mod.f:326
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision, dimension(:), allocatable x_u
Definition: cutcell_mod.f:49
integer, dimension(:), allocatable im1
Definition: indices_mod.f:50
integer, dimension(10) cg_safe_mode
Definition: cutcell_mod.f:415
logical, dimension(:), allocatable wall_v_at
Definition: cutcell_mod.f:127
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(:), allocatable y_w
Definition: cutcell_mod.f:60
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
double precision, dimension(:), allocatable z_v
Definition: cutcell_mod.f:56
double precision, dimension(:,:), allocatable epmu_s
Definition: visc_s_mod.f:9
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:,:), allocatable eplambda_s
Definition: visc_s_mod.f:35
double precision, dimension(:), allocatable x_w
Definition: cutcell_mod.f:59
integer mmax
Definition: physprop_mod.f:19
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
subroutine calc_reg_tau_w_s(IJK, M, SSX, SSY, SSZ, SBV, VXZ)
Definition: tau_w_s.f:116
integer, dimension(:), allocatable jm1
Definition: indices_mod.f:51
integer, dimension(:), allocatable bc_w_id
Definition: cutcell_mod.f:436
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
logical, dimension(:), allocatable blocked_u_cell_at
Definition: cutcell_mod.f:364
double precision, dimension(dimension_bc, dim_m) bc_hw_s
Definition: bc_mod.f:310
logical, dimension(:), allocatable cut_w_cell_at
Definition: cutcell_mod.f:358
integer, dimension(:), allocatable kp1
Definition: indices_mod.f:52
double precision, dimension(:), allocatable x_v
Definition: cutcell_mod.f:54
subroutine calc_cg_tau_w_s(IJK, M, SSX, SSY, SSZ, SBV)
Definition: tau_w_s.f:260
double precision, parameter half
Definition: param1_mod.f:28
Definition: run_mod.f:13
double precision, dimension(:), allocatable ayz_w
Definition: geometry_mod.f:236
double precision, dimension(:), allocatable oneodz_t_u
Definition: cutcell_mod.f:317
Definition: param_mod.f:2
double precision, parameter dil_ep_s
Definition: toleranc_mod.f:24
logical cartesian_grid
Definition: cutcell_mod.f:13
double precision, dimension(:), allocatable axz_w
Definition: geometry_mod.f:238
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 axy_w
Definition: geometry_mod.f:240
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
double precision, dimension(:), allocatable area_w_cut
Definition: cutcell_mod.f:134
integer smax
Definition: physprop_mod.f:22
logical, dimension(:), allocatable blocked_v_cell_at
Definition: cutcell_mod.f:365
double precision, dimension(:), allocatable oneodz_t_v
Definition: cutcell_mod.f:322
subroutine get_del_h(IJK, TYPE_OF_CELL, X0, Y0, Z0, Del_H, Nx, Ny, Nz)
Definition: get_delh.f:19
double precision, dimension(:), allocatable z_w
Definition: cutcell_mod.f:61
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
integer dimension_m
Definition: param_mod.f:18
double precision, dimension(:), allocatable odz_t
Definition: geometry_mod.f:125
double precision, dimension(dimension_bc, dim_m) bc_vw_s
Definition: bc_mod.f:325
double precision, dimension(:), allocatable y_u
Definition: cutcell_mod.f:50
double precision, parameter zero
Definition: param1_mod.f:27
Definition: bc_mod.f:23