MFIX  2016-1
tau_u_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_Tau_U_s C
4 ! Purpose: Cross terms in the gradient of stress in U_s momentum C
5 ! C
6 ! Comments: This routine calculates the components of the solids C
7 ! phase viscous stress tensor of the u-momentum equation that cannot C
8 ! be cast in the form: mu.grad(u). These components are stored in the C
9 ! passed variable, which is then used as a source of the u-momentum C
10 ! equation. C
11 ! For greater details see calc_tau_u_g. C
12 ! C
13 ! C
14 ! Author: M. Syamlal Date: 19-DEC-96 C
15 ! Reviewer: Date: C
16 ! C
17 ! C
18 ! C
19 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
20  SUBROUTINE calc_tau_u_s(lTAU_U_S)
21 
22 ! Modules
23 !---------------------------------------------------------------------//
24  USE param, only: dimension_3, dimension_m
25  USE param1, only: zero
26  USE physprop, only: smax, mmax
27  USE fldvar, only: v_s
28  USE fldvar, only: ep_s
29  USE toleranc, only: dil_ep_s
30  USE run, only: kt_type_enum, ghd_2007
31  USE run, only: shear
32  USE vshear, only: vsh
34 
35  USE compar
36  USE geometry
37  USE indices
38  USE functions
39  USE sendrecv
40  USE fun_avg
41  IMPLICIT NONE
42 
43 ! Dummy arguments
44 !---------------------------------------------------------------------//
45 ! TAU_U_s
46  DOUBLE PRECISION, INTENT(OUT) :: lTAU_U_s(dimension_3, dimension_m)
47 
48 ! Local variables
49 !---------------------------------------------------------------------//
50 ! Indices
51  INTEGER :: IJK, I, IJKE
52 ! Phase index
53  INTEGER :: M, L
54 ! Average volume fraction
55  DOUBLE PRECISION :: EPSA, EPStmp
56 ! Source terms (Surface)
57  DOUBLE PRECISION :: Sbv, Ssx, Ssy, Ssz
58 ! Cylindrical source terms
59  DOUBLE PRECISION :: Vtzb
60 !---------------------------------------------------------------------//
61 
62 
63  DO m = 1, mmax
64  IF(kt_type_enum == ghd_2007 .AND. m /= mmax) cycle
65 
66  IF (shear) THEN
67 !!$omp parallel do private(IJK)
68  DO ijk = ijkstart3, ijkend3
69  IF (fluid_at(ijk)) THEN
70  v_s(ijk,m)=v_s(ijk,m)+vsh(ijk)
71  ENDIF
72  ENDDO
73  ENDIF
74 
75 !!$omp parallel do &
76 !!$omp private(I, IJK, IJKE, &
77 !!$omp& EPSA, EPStmp, SSX, SSY, SSZ, SBV, VTZB) &
78 !!$omp& schedule(static)
79  DO ijk = ijkstart3, ijkend3
80 
81 ! Skip walls where some values are undefined.
82  IF(wall_at(ijk)) cycle
83  i = i_of(ijk)
84  ijke = east_of(ijk)
85 
86  IF (kt_type_enum == ghd_2007) THEN
87  epstmp = zero
88  DO l = 1, smax
89  epstmp = epstmp + avg_x(ep_s(ijk,l),ep_s(ijke,l),i)
90  ENDDO
91  epsa = epstmp
92  ELSE
93  epsa = avg_x(ep_s(ijk,m),ep_s(ijke,m),i)
94  ENDIF
95 
96  IF ( .NOT.sip_at_e(ijk) .AND. epsa>dil_ep_s) THEN
97 
98  IF ((.NOT.cartesian_grid) .OR. cg_safe_mode(3) ==1) THEN
99  CALL calc_reg_tau_u_s(ijk, m, ssx, ssy, ssz, sbv, vtzb)
100  ELSE
101  vtzb = zero ! no cylindrical terms in CG
102  CALL calc_cg_tau_u_s(ijk, m, ssx, ssy, ssz, sbv)
103  ENDIF
104 
105 ! Add the terms
106  ltau_u_s(ijk,m) = sbv + ssx + ssy + ssz + vtzb*vol_u(ijk)
107  ELSE
108  ltau_u_s(ijk,m) = zero
109  ENDIF ! end if/else .not.sip_at_e .and. epsa>dil_ep_s
110  ENDDO ! end do ijk
111 !!$omp end parallel do
112 
113  IF (shear) THEN
114 !!$omp parallel do private(IJK)
115  DO ijk = ijkstart3, ijkend3
116  IF (fluid_at(ijk)) THEN
117  v_s(ijk,m)=v_s(ijk,m)-vsh(ijk)
118  ENDIF
119  ENDDO
120  ENDIF
121 
122  ENDDO ! end do m=1,mmax
123 
124  call send_recv(ltau_u_s,2)
125  RETURN
126  END SUBROUTINE calc_tau_u_s
127 
128 
129 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
130 ! C
131 ! Subroutine: calc_reg_tau_u_s C
132 ! Purpose: Cross terms in the gradient of stress in U_s momentum C
133 ! based on NON cartesian grid cut cell. C
134 ! C
135 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
136  SUBROUTINE calc_reg_tau_u_s(IJK, M, SSX, SSY, SSZ, SBV, VTZB)
138 ! Modules
139 !---------------------------------------------------------------------//
140  USE param1, only: zero, half
141  USE fldvar, only: u_s, v_s, w_s
142  USE visc_s, only: epmu_s, eplambda_s
143  USE visc_s, only: trd_s
144 
145  USE compar
146  USE geometry
147  USE indices
148  USE functions
149  USE fun_avg
150 
151  IMPLICIT NONE
152 
153 ! Dummy arguments
154 !---------------------------------------------------------------------//
155 ! current ijk index
156  INTEGER, INTENT(IN) :: IJK
157 ! solids phase index
158  INTEGER, INTENT(IN) :: M
159 ! Source terms (surface)
160  DOUBLE PRECISION, INTENT(OUT) :: SSX
161  DOUBLE PRECISION, INTENT(OUT) :: SSY
162  DOUBLE PRECISION, INTENT(OUT) :: SSZ
163  DOUBLE PRECISION, INTENT(OUT) :: SBV
164 ! Cylindrical source terms
165  DOUBLE PRECISION, INTENT(OUT) :: VTZB
166 
167 ! Local variables
168 !---------------------------------------------------------------------//
169 ! Indices
170  INTEGER :: I, J, K, JM, KM, IP
171  INTEGER :: IJKE, IJKN, IJKS, IJKT, IJKB
172  INTEGER :: IJKNE, IJKSE, IJKTE, IJKBE
173  INTEGER :: IPJK, IMJK, IJKM, IJMK
174  INTEGER :: IPJMK, IPJKM
175 ! Average viscosity
176  DOUBLE PRECISION :: MU_ste, MU_sbe, MUSA
177 ! Average dW/Xdz
178  DOUBLE PRECISION :: dWoXdz
179 !---------------------------------------------------------------------//
180 
181  i = i_of(ijk)
182  ip = ip1(i)
183  j = j_of(ijk)
184  jm = jm1(j)
185  k = k_of(ijk)
186  km = km1(k)
187 
188  ipjk = ip_of(ijk)
189  imjk = im_of(ijk)
190  ijmk = jm_of(ijk)
191  ijkm = km_of(ijk)
192  ipjkm = ip_of(ijkm)
193  ipjmk = jm_of(ipjk)
194 
195  ijke = east_of(ijk)
196  ijkn = north_of(ijk)
197  ijkne = east_of(ijkn)
198  ijks = south_of(ijk)
199  ijkse = east_of(ijks)
200  ijkt = top_of(ijk)
201  ijkte = east_of(ijkt)
202  ijkb = bottom_of(ijk)
203  ijkbe = east_of(ijkb)
204 
205 ! Surface forces at i+1/2, j, k
206 ! bulk viscosity term
207 ! combines part of 1/x d/dx (x.tau_xx) xdxdydz and -tau_zz/x xdxdydz =>
208 ! combines 1/x d/dx (x.lambda.trcD) xdxdydz - (lambda/x.trcD) xdxdydz =>
209 ! d/dx (lambda.trcD) xdxdydz
210 ! delta (lambda.trcD)Ap |E-W : at (i+1 - i-1), j, k
211  sbv = (eplambda_s(ijke,m)*trd_s(ijke,m)-&
212  eplambda_s(ijk,m)*trd_s(ijk,m))*ayz(ijk)
213 
214 ! shear stress terms at i+1/2, j, k
215 ! part of 1/x d/dx(x.tau_xx) xdxdydz =>
216 ! 1/x d/dx (x.mu.du/dx) xdxdydz =>
217 ! delta (mu du/dx)Ayz |E-W : at (i+1 - i-1), j, k
218  ssx = epmu_s(ijke,m)*(u_s(ipjk,m)-u_s(ijk,m))*&
219  odx(ip)*ayz_u(ijk) - &
220  epmu_s(ijk,m)*(u_s(ijk,m)-u_s(imjk,m))*&
221  odx(i)*ayz_u(imjk)
222 
223 ! part of d/dy (tau_xy) xdxdydz =>
224 ! d/dy (mu.dv/dx) xdxdydz =>
225 ! delta (mu.dv/dx)Axz |N-S : at i+1/2, (j+1/2 - j-1/2), k
226  ssy = avg_x_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
227  avg_y_h(epmu_s(ijke,m),epmu_s(ijkne,m),j),i)*&
228  (v_s(ipjk,m)-v_s(ijk,m))*odx_e(i)*axz_u(ijk) - &
229  avg_x_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
230  avg_y_h(epmu_s(ijkse,m),epmu_s(ijke,m),jm),i)*&
231  (v_s(ipjmk,m)-v_s(ijmk,m))*odx_e(i)*axz_u(ijmk)
232 
233 ! part of 1/x d/dz (tau_xz) xdxdydz =>
234 ! 1/x d/dz (mu.dw/dx) xdxdydz =>
235 ! delta (mu.dw/dx)Axy |T-B : at i+1/2, j, (k+1/2 - k-1/2)
236  mu_ste = avg_x_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
237  avg_z_h(epmu_s(ijke,m),epmu_s(ijkte,m),k),i)
238  mu_sbe = avg_x_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
239  avg_z_h(epmu_s(ijkbe,m),epmu_s(ijke,m),km),i)
240  ssz = mu_ste*(w_s(ipjk,m)-w_s(ijk,m))*odx_e(i)*&
241  axy_u(ijk) - &
242  mu_sbe*(w_s(ipjkm,m)-w_s(ijkm,m))*odx_e(i)*&
243  axy_u(ijkm)
244 
245 
246 ! Special terms for cylindrical coordinates
247  IF (cylindrical) THEN
248 ! part of 1/x d/dz (tau_xz) xdxdydz =>
249 ! 1/x d/dz (mu.(-w/x)) xdxdydz =>
250 ! delta (mu(-w/x))Axy |T-B : at i+1/2, j, (k+1/2- k-1/2)
251  ssz = ssz - (&
252  mu_ste*(half*(w_s(ipjk,m)+w_s(ijk,m))*&
253  ox_e(i))*axy_u(ijk)-&
254  mu_sbe*(half*(w_s(ipjkm,m)+w_s(ijkm,m))*&
255  ox_e(i))*axy_u(ijkm))
256 
257 ! part of -tau_zz/x xdxdydz =>
258 ! -(2.mu/x).(1/x).dw/dz xdxdydz
259 ! delta (2.mu/x.1/x.dw/dz)Vp |p : at i+1/2, j, k
260  musa = avg_x(epmu_s(ijk,m),epmu_s(ijke,m),i)
261  dwoxdz = half*&
262  ((w_s(ijk,m)-w_s(ijkm,m))*ox(i)*odz(k)+&
263  (w_s(ipjk,m)-w_s(ipjkm,m))*ox(ip)*odz(k))
264  vtzb = -2.d0*musa*ox_e(i)*dwoxdz
265  ELSE
266  vtzb = zero
267  ENDIF
268 
269  RETURN
270  END SUBROUTINE calc_reg_tau_u_s
271 
272 
273 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
274 ! C
275 ! Subroutine: calc_cg_tau_u_s C
276 ! Purpose: Cross terms in the gradient of stress in U_s momentum C
277 ! based on cartesian grid cut cell. C
278 ! C
279 ! Author: Jeff Dietiker Date: 01-Jul-09 C
280 ! C
281 ! C
282 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
283  SUBROUTINE calc_cg_tau_u_s(IJK, M, SSX, SSY, SSZ, SBV)
285 ! Modules
286 !---------------------------------------------------------------------//
287 
288  USE compar
289  USE fldvar, only: u_s, v_s, w_s
290  USE fun_avg
291  USE functions
292  USE geometry
293  USE indices
294  USE param1, only: zero, half, undefined
295  USE visc_s, only: epmu_s, eplambda_s
296  USE visc_s, only: trd_s
297 
298 ! for cutcell:
299 ! wall velocity for slip conditions
300  USE bc, only: bc_hw_s, bc_uw_s, bc_vw_s, bc_ww_s, cg_nsw, cg_fsw, cg_psw, cg_mi, none, bc_type_enum
301  USE quadric
302  USE cutcell
303 
304 ! Dummy arguments
305 !---------------------------------------------------------------------//
306 ! current ijk index
307  INTEGER, INTENT(IN) :: IJK
308 ! solids phase index
309  INTEGER, INTENT(IN) :: M
310 ! Source terms (surface)
311  DOUBLE PRECISION, INTENT(OUT) :: SSX
312  DOUBLE PRECISION, INTENT(OUT) :: SSY
313  DOUBLE PRECISION, INTENT(OUT) :: SSZ
314  DOUBLE PRECISION, INTENT(OUT) :: SBV
315 
316 ! Local variables
317 !---------------------------------------------------------------------//
318 ! Indices
319  INTEGER :: I, J, K, JM, KM, IP
320  INTEGER :: IJKE, IJKN, IJKS, IJKT, IJKB
321  INTEGER :: IJKNE, IJKSE, IJKTE, IJKBE
322  INTEGER :: IPJK, IMJK, IJKM, IJMK
323  INTEGER :: IPJMK, IPJKM
324 ! Average viscosity
325  DOUBLE PRECISION :: MU_ste, MU_sbe
326 
327 ! for cartesian grid implementation:
328  DOUBLE PRECISION :: DEL_H,Nx,Ny,Nz
329  LOGICAL :: V_NODE_AT_NE, V_NODE_AT_NW, V_NODE_AT_SE, V_NODE_AT_SW
330  LOGICAL :: W_NODE_AT_TE, W_NODE_AT_TW, W_NODE_AT_BE, W_NODE_AT_BW
331  DOUBLE PRECISION :: dvdx_at_N, dvdx_at_S
332  DOUBLE PRECISION :: dwdx_at_T, dwdx_at_B
333  DOUBLE PRECISION :: Xi, Yi, Zi, Vi, Wi, Sx, Sy, Sz
334  DOUBLE PRECISION :: MU_S_CUT, SSY_CUT, SSZ_CUT
335  DOUBLE PRECISION :: UW_s, VW_s, WW_s
336  INTEGER :: BCV
337  INTEGER :: BCT
338 !---------------------------------------------------------------------//
339 
340  i = i_of(ijk)
341  ip = ip1(i)
342  j = j_of(ijk)
343  jm = jm1(j)
344  k = k_of(ijk)
345  km = km1(k)
346 
347  ipjk = ip_of(ijk)
348  imjk = im_of(ijk)
349  ijmk = jm_of(ijk)
350  ijkm = km_of(ijk)
351  ipjkm = ip_of(ijkm)
352  ipjmk = jm_of(ipjk)
353 
354  ijke = east_of(ijk)
355  ijkn = north_of(ijk)
356  ijkne = east_of(ijkn)
357  ijks = south_of(ijk)
358  ijkse = east_of(ijks)
359  ijkt = top_of(ijk)
360  ijkte = east_of(ijkt)
361  ijkb = bottom_of(ijk)
362  ijkbe = east_of(ijkb)
363 
364 
365 ! bulk viscosity term
366  sbv = (eplambda_s(ijke,m)*trd_s(ijke,m)) * ayz_u(ijk) - &
367  (eplambda_s(ijk,m) *trd_s(ijk,m) ) * ayz_u(imjk)
368 
369 ! shear stress terms
370  IF(.NOT.cut_u_cell_at(ijk)) THEN
371  ssx = epmu_s(ijke,m)*(u_s(ipjk,m)-u_s(ijk,m))*&
372  oneodx_e_u(ijk)*ayz_u(ijk) - &
373  epmu_s(ijk,m)*(u_s(ijk,m)-u_s(imjk,m))*&
374  oneodx_e_u(imjk)*ayz_u(imjk)
375  ssy = avg_x_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
376  avg_y_h(epmu_s(ijke,m),epmu_s(ijkne,m),j),i)*&
377  (v_s(ipjk,m)-v_s(ijk,m))*&
378  oneodx_e_v(ijk)*axz_u(ijk) - &
379  avg_x_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
380  avg_y_h(epmu_s(ijkse,m),epmu_s(ijke,m),jm),i)*&
381  (v_s(ipjmk,m)-v_s(ijmk,m))*&
382  oneodx_e_v(ijmk)*axz_u(ijmk)
383  IF(do_k) THEN
384  mu_ste = avg_x_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
385  avg_z_h(epmu_s(ijke,m),epmu_s(ijkte,m),k),i)
386  mu_sbe = avg_x_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
387  avg_z_h(epmu_s(ijkbe,m),epmu_s(ijke,m),km),i)
388  ssz = mu_ste*(w_s(ipjk,m)-w_s(ijk,m))*&
389  oneodx_e_w(ijk)*axy_u(ijk) - &
390  mu_sbe*(w_s(ipjkm,m)-w_s(ijkm,m))*&
391  oneodx_e_w(ijkm)*axy_u(ijkm)
392  ELSE
393  ssz = zero
394  ENDIF
395 
396 ! cut cell modifications
397 !---------------------------------------------------------------------//
398  ELSE
399 
400  bcv = bc_u_id(ijk)
401  IF(bcv > 0 ) THEN
402  bct = bc_type_enum(bcv)
403  ELSE
404  bct = none
405  ENDIF
406 
407  SELECT CASE (bct)
408  CASE (cg_nsw,cg_mi)
409  cut_tau_us = .true.
410  noc_us = .true.
411  uw_s = zero
412  vw_s = zero
413  ww_s = zero
414  CASE (cg_fsw)
415  cut_tau_us = .false.
416  noc_us = .false.
417  uw_s = zero
418  vw_s = zero
419  ww_s = zero
420  CASE(cg_psw)
421  IF(bc_hw_s(bc_u_id(ijk),m)==undefined) THEN ! same as NSW
422  cut_tau_us = .true.
423  noc_us = .true.
424  uw_s = bc_uw_s(bcv,m)
425  vw_s = bc_vw_s(bcv,m)
426  ww_s = bc_ww_s(bcv,m)
427  ELSEIF(bc_hw_s(bc_u_id(ijk),m)==zero) THEN ! same as FSW
428  cut_tau_us = .false.
429  noc_us = .false.
430  uw_s = zero
431  vw_s = zero
432  ww_s = zero
433  ELSE ! partial slip
434  cut_tau_us = .false.
435  noc_us = .false.
436  ENDIF
437  CASE (none)
438 ! equivalent of setting tau_u_s to zero at this ijk cell
439  ssx = zero
440  ssy = zero
441  ssz = zero
442  sbv = zero
443  RETURN
444  END SELECT
445 
446  IF(cut_tau_us) THEN
447  mu_s_cut = (vol(ijk)*epmu_s(ijk,m) + &
448  vol(ipjk)*epmu_s(ijke,m))/&
449  (vol(ijk) + vol(ipjk))
450  ELSE
451  mu_s_cut = zero
452  ENDIF
453 
454 
455 ! SSX:
456  CALL get_del_h(ijk, 'U_MOMENTUM', x_u(ijk), &
457  y_u(ijk), z_u(ijk), del_h, nx, ny, nz)
458  ssx = epmu_s(ijke,m)*(u_s(ipjk,m)-u_s(ijk,m))*&
459  oneodx_e_u(ijk)*ayz_u(ijk) - &
460  epmu_s(ijk,m)*(u_s(ijk,m)-u_s(imjk,m))*&
461  oneodx_e_u(imjk)*ayz_u(imjk) - &
462  mu_s_cut * (u_s(ijk,m) - uw_s) / del_h * &
463  (nx**2) * area_u_cut(ijk)
464 
465 ! SSY:
466  v_node_at_ne = ((.NOT.blocked_v_cell_at(ipjk)).AND.&
467  (.NOT.wall_v_at(ipjk)))
468  v_node_at_nw = ((.NOT.blocked_v_cell_at(ijk)).AND.&
469  (.NOT.wall_v_at(ijk)))
470  v_node_at_se = ((.NOT.blocked_v_cell_at(ipjmk)).AND.&
471  (.NOT.wall_v_at(ipjmk)))
472  v_node_at_sw = ((.NOT.blocked_v_cell_at(ijmk)).AND.&
473  (.NOT.wall_v_at(ijmk)))
474 
475  IF(v_node_at_ne.AND.v_node_at_nw) THEN
476  vi = half * (v_s(ipjk,m) + v_s(ijk,m))
477  xi = half * (x_v(ipjk) + x_v(ijk))
478  yi = half * (y_v(ipjk) + y_v(ijk))
479  zi = half * (z_v(ipjk) + z_v(ijk))
480  sx = x_v(ipjk) - x_v(ijk)
481  sy = y_v(ipjk) - y_v(ijk)
482  sz = z_v(ipjk) - z_v(ijk)
483  CALL get_del_h(ijk, 'U_MOMENTUM', xi, yi, zi, &
484  del_h, nx, ny, nz)
485  dvdx_at_n = (v_s(ipjk,m) - v_s(ijk,m)) * &
486  oneodx_e_v(ijk)
487  IF(noc_us) dvdx_at_n = dvdx_at_n - ((vi-vw_s) *&
488  oneodx_e_v(ijk) /del_h*(sy*ny+sz*nz))
489  ELSE
490  dvdx_at_n = zero
491  ENDIF
492 
493  IF(v_node_at_se.AND.v_node_at_sw) THEN
494  vi = half * (v_s(ipjmk,m) + v_s(ijmk,m))
495  xi = half * (x_v(ipjmk) + x_v(ijmk))
496  yi = half * (y_v(ipjmk) + y_v(ijmk))
497  zi = half * (z_v(ipjmk) + z_v(ijmk))
498  sx = x_v(ipjmk) - x_v(ijmk)
499  sy = y_v(ipjmk) - y_v(ijmk)
500  sz = z_v(ipjmk) - z_v(ijmk)
501  CALL get_del_h(ijk, 'U_MOMENTUM', xi, yi, zi, &
502  del_h, nx, ny, nz)
503  dvdx_at_s = (v_s(ipjmk,m)-v_s(ijmk,m))*oneodx_e_v(ijmk)
504  IF(noc_us) dvdx_at_s = dvdx_at_s - ((vi-vw_s) * &
505  oneodx_e_v(ijmk)/del_h*(sy*ny+sz*nz))
506  ELSE
507  dvdx_at_s = zero
508  ENDIF
509 
510  IF(v_node_at_nw) THEN
511  CALL get_del_h(ijk, 'U_MOMENTUM', x_v(ijk), &
512  y_v(ijk), z_v(ijk), del_h, nx, ny, nz)
513  ssy_cut = -mu_s_cut * (v_s(ijk,m) - vw_s)/del_h*&
514  (nx*ny) * area_u_cut(ijk)
515  ELSE
516  ssy_cut = zero
517  ENDIF
518 
519  ssy = avg_x_h(avg_y_h(epmu_s(ijk,m),epmu_s(ijkn,m),j),&
520  avg_y_h(epmu_s(ijke,m),epmu_s(ijkne,m),j),i)*&
521  dvdx_at_n*axz_u(ijk) - &
522  avg_x_h(avg_y_h(epmu_s(ijks,m),epmu_s(ijk,m),jm),&
523  avg_y_h(epmu_s(ijkse,m),epmu_s(ijke,m),jm),i)*&
524  dvdx_at_s*axz_u(ijmk) + ssy_cut
525 
526 ! SSZ:
527  IF(do_k) THEN
528  w_node_at_te = ((.NOT.blocked_w_cell_at(ipjk)).AND.&
529  (.NOT.wall_w_at(ipjk)))
530  w_node_at_tw = ((.NOT.blocked_w_cell_at(ijk)).AND.&
531  (.NOT.wall_w_at(ijk)))
532  w_node_at_be = ((.NOT.blocked_w_cell_at(ipjkm)).AND.&
533  (.NOT.wall_w_at(ipjkm)))
534  w_node_at_bw = ((.NOT.blocked_w_cell_at(ijkm)).AND.&
535  (.NOT.wall_w_at(ijkm)))
536 
537  IF(w_node_at_te.AND.w_node_at_tw) THEN
538  wi = half * (w_s(ipjk,m) + w_s(ijk,m))
539  xi = half * (x_w(ipjk) + x_w(ijk))
540  yi = half * (y_w(ipjk) + y_w(ijk))
541  zi = half * (z_w(ipjk) + z_w(ijk))
542  sx = x_w(ipjk) - x_w(ijk)
543  sy = y_w(ipjk) - y_w(ijk)
544  sz = z_w(ipjk) - z_w(ijk)
545  CALL get_del_h(ijk, 'U_MOMENTUM', xi, yi, zi, &
546  del_h, nx, ny, nz)
547  dwdx_at_t = (w_s(ipjk,m) - w_s(ijk,m)) * &
548  oneodx_e_w(ijk)
549  IF(noc_us) dwdx_at_t = dwdx_at_t - ((wi-ww_s)*&
550  oneodx_e_w(ijk)/del_h*(sy*ny+sz*nz))
551  ELSE
552  dwdx_at_t = zero
553  ENDIF
554 
555  IF(w_node_at_be.AND.w_node_at_bw) THEN
556  wi = half * (w_s(ipjkm,m) + w_s(ijkm,m))
557  xi = half * (x_w(ipjkm) + x_w(ijkm))
558  yi = half * (y_w(ipjkm) + y_w(ijkm))
559  zi = half * (z_w(ipjkm) + z_w(ijkm))
560  sx = x_w(ipjkm) - x_w(ijkm)
561  sy = y_w(ipjkm) - y_w(ijkm)
562  sz = z_w(ipjkm) - z_w(ijkm)
563  CALL get_del_h(ijk, 'U_MOMENTUM', xi, yi, &
564  zi, del_h, nx, ny, nz)
565  dwdx_at_b = (w_s(ipjkm,m) - w_s(ijkm,m)) * &
566  oneodx_e_w(ijkm)
567  IF(noc_us) dwdx_at_b = dwdx_at_b - ((wi-ww_s)*&
568  oneodx_e_w(ijkm)/del_h*(sy*ny+sz*nz))
569  ELSE
570  dwdx_at_b = zero
571  ENDIF
572 
573  IF(w_node_at_tw) THEN
574  CALL get_del_h(ijk, 'U_MOMENTUM', x_w(ijk), &
575  y_w(ijk), z_w(ijk), del_h, nx, ny, nz)
576  ssz_cut = -mu_s_cut * (w_s(ijk,m) - ww_s) / &
577  del_h * (nx*nz) * area_u_cut(ijk)
578  ELSE
579  ssz_cut = zero
580  ENDIF
581 
582  mu_ste = avg_x_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
583  avg_z_h(epmu_s(ijke,m),epmu_s(ijkte,m),k),i)
584  mu_sbe = avg_x_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
585  avg_z_h(epmu_s(ijkbe,m),epmu_s(ijke,m),km),i)
586  ssz = mu_ste*dwdx_at_t*axy_u(ijk) - &
587  mu_sbe*dwdx_at_b*axy_u(ijkm) + ssz_cut
588  ELSE
589  ssz = zero
590  ENDIF ! end if do_k
591 
592  ENDIF ! end if/else cut_cell
593 
594  RETURN
595  END SUBROUTINE calc_cg_tau_u_s
integer, dimension(:), allocatable ip1
Definition: indices_mod.f:50
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 z_u
Definition: cutcell_mod.f:51
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable cut_u_cell_at
Definition: cutcell_mod.f:356
double precision, dimension(:), allocatable oneodx_e_w
Definition: cutcell_mod.f:324
double precision, dimension(dimension_bc, dim_m) bc_uw_s
Definition: bc_mod.f:322
integer ijkend3
Definition: compar_mod.f:80
subroutine calc_tau_u_s(lTAU_U_S)
Definition: tau_u_s.f:21
subroutine calc_cg_tau_u_s(IJK, M, SSX, SSY, SSZ, SBV)
Definition: tau_u_s.f:284
double precision, dimension(:), allocatable ox_e
Definition: geometry_mod.f:143
double precision, dimension(:), allocatable oneodx_e_v
Definition: cutcell_mod.f:320
logical shear
Definition: run_mod.f:175
double precision, dimension(:), allocatable odx
Definition: geometry_mod.f:114
subroutine calc_reg_tau_u_s(IJK, M, SSX, SSY, SSZ, SBV, VTZB)
Definition: tau_u_s.f:137
integer dimension_3
Definition: param_mod.f:11
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision, dimension(:), allocatable x_u
Definition: cutcell_mod.f:49
integer, dimension(10) cg_safe_mode
Definition: cutcell_mod.f:415
logical, dimension(:), allocatable wall_v_at
Definition: cutcell_mod.f:127
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
double precision, dimension(:), allocatable ayz_u
Definition: geometry_mod.f:218
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(:), allocatable y_w
Definition: cutcell_mod.f:60
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
logical cut_tau_us
Definition: cutcell_mod.f:390
double precision, dimension(:), allocatable z_v
Definition: cutcell_mod.f:56
double precision, dimension(:,:), allocatable epmu_s
Definition: visc_s_mod.f:9
logical noc_us
Definition: cutcell_mod.f:389
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:), allocatable axz_u
Definition: geometry_mod.f:220
double precision, dimension(:), allocatable vsh
Definition: vshear_mod.f:3
double precision, dimension(:), allocatable oneodx_e_u
Definition: cutcell_mod.f:315
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:,:), allocatable eplambda_s
Definition: visc_s_mod.f:35
logical, dimension(:), allocatable blocked_w_cell_at
Definition: cutcell_mod.f:366
integer, dimension(:), allocatable bc_u_id
Definition: cutcell_mod.f:434
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
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
integer, dimension(:), allocatable jm1
Definition: indices_mod.f:51
logical, dimension(:), allocatable wall_w_at
Definition: cutcell_mod.f:128
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
double precision, dimension(dimension_bc, dim_m) bc_hw_s
Definition: bc_mod.f:310
double precision, dimension(:), allocatable x_v
Definition: cutcell_mod.f:54
double precision, parameter half
Definition: param1_mod.f:28
Definition: run_mod.f:13
Definition: param_mod.f:2
double precision, parameter dil_ep_s
Definition: toleranc_mod.f:24
logical cartesian_grid
Definition: cutcell_mod.f:13
logical do_k
Definition: geometry_mod.f:30
integer, dimension(:), allocatable km1
Definition: indices_mod.f:52
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 function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
double precision, dimension(:), allocatable vol_u
Definition: geometry_mod.f:224
integer smax
Definition: physprop_mod.f:22
double precision, dimension(:), allocatable area_u_cut
Definition: cutcell_mod.f:132
logical, dimension(:), allocatable blocked_v_cell_at
Definition: cutcell_mod.f:365
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
double precision, dimension(:), allocatable axy_u
Definition: geometry_mod.f:222
integer dimension_m
Definition: param_mod.f:18
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