MFIX  2016-1
tau_v_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: CALC_Tau_V_s C
4 ! Purpose: Cross terms in the gradient of stress in V_s momentum C
5 ! C
6 ! C
7 ! Comments: This routine calculates the components of the solids C
8 ! phase viscous stress tensor of the v-momentum equation that cannot C
9 ! be cast in the form: mu.grad(v). These components are stored in the C
10 ! passed variable, which is then used as a source of the v-momentum C
11 ! equation. C
12 ! For greater details see calc_tau_v_g. C
13 ! C
14 ! Author: M. Syamlal Date: 19-DEC-96 C
15 ! Reviewer: Date: C
16 ! C
17 ! C
18 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
19  SUBROUTINE calc_tau_v_s(lTAU_V_S)
20 
21 ! Modules
22 !---------------------------------------------------------------------//
23  USE param, only: dimension_3, dimension_m
24  USE param1, only: zero
25  USE physprop, only: smax, mmax
26  USE fldvar, only: ep_s
27  USE visc_s, only: epmu_s
28  USE toleranc, only: dil_ep_s
29  USE run, only: kt_type_enum, ghd_2007
30  USE run, only: shear, v_sh
32 
33  USE compar
34  USE geometry
35  USE indices
36  USE functions
37  USE fun_avg
38  USE sendrecv
39  IMPLICIT NONE
40 
41 ! Dummy arguments
42 !---------------------------------------------------------------------//
43 ! TAU_V_s
44  DOUBLE PRECISION, INTENT(OUT) :: lTAU_V_s(dimension_3, dimension_m)
45 
46 ! Local Variables
47 !---------------------------------------------------------------------//
48 ! Indices
49  INTEGER :: IJK, J, IJKN
50 ! Additional indices needed for shear case
51  INTEGER :: I, IJKE, IJKW, IJKNE, IJKNW
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 ! Shearing variables
59  DOUBLE PRECISION :: Source_diff, Diffco_e, Diffco_w
60 !---------------------------------------------------------------------//
61 
62  DO m = 1, mmax
63  IF(kt_type_enum == ghd_2007 .AND. m /= mmax) cycle
64 
65 !!$omp parallel do &
66 !!$omp private(J, IJK, IJKN, I, IJKE, IJKW, IJKNE, IJKNW, &
67 !!$omp& EPSA, EPStmp, SSX, SSY, SSZ, SBV, &
68 !!$omp& Source_diff, Diffco_e, Diffco_w)
69 !!$omp& schedule(static)
70  DO ijk = ijkstart3, ijkend3
71 
72 ! Skip walls where some values are undefined.
73  IF(wall_at(ijk)) cycle
74  j = j_of(ijk)
75  ijkn = north_of(ijk)
76 
77  IF (kt_type_enum == ghd_2007) THEN
78  epstmp = zero
79  DO l = 1, smax
80  epstmp = epstmp + avg_y(ep_s(ijk,l),ep_s(ijkn,l),j)
81  ENDDO
82  epsa = epstmp
83  ELSE
84  epsa = avg_y(ep_s(ijk,m),ep_s(ijkn,m),j)
85  ENDIF
86 
87  IF ( .NOT.sip_at_n(ijk) .AND. epsa>dil_ep_s) THEN
88 
89  IF((.NOT.cartesian_grid).OR.(cg_safe_mode(4)==1)) THEN
90  CALL calc_reg_tau_v_s(ijk, m, ssx, ssy, ssz, sbv)
91  ELSE
92  CALL calc_cg_tau_v_s(ijk, m, ssx, ssy, ssz, sbv)
93  ENDIF
94 
95 
96 ! Source terms from shear stress
97  IF (shear) THEN
98  i = i_of(ijk)
99  ijke = east_of(ijk)
100  ijkn = north_of(ijk)
101  ijkne = east_of(ijkn)
102  ijkw = west_of(ijk)
103  ijknw = north_of(ijkw)
104  diffco_e = avg_y_h((avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i)),&
105  (avg_x_h(epmu_s(ijkn,m),epmu_s(ijkne,m),i)),j)*ayz_v(ijk)
106  diffco_w=avg_y_h((avg_x_h(epmu_s(ijk,m),epmu_s(ijkw,m),i)),&
107  (avg_x_h(epmu_s(ijkn,m),epmu_s(ijknw,m),i)),j)*ayz_v(ijkw)
108  source_diff=(2d0*v_sh/xlength)*(diffco_e-diffco_w)
109  ELSE
110  source_diff=0d0
111  ENDIF
112 
113 ! Add the terms
114  ltau_v_s(ijk,m) = sbv + ssx + ssy + ssz + source_diff
115  ELSE
116  ltau_v_s(ijk,m) = zero
117  ENDIF ! end if/else .not.sip_at_n .and. epsa>dil_ep_s
118  ENDDO ! end do ijk
119 !!$omp end parallel do
120 
121  ENDDO ! end do m=1,mmax
122 
123  call send_recv(ltau_v_s,2)
124  RETURN
125  END SUBROUTINE calc_tau_v_s
126 
127 
128 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
129 ! C
130 ! Subroutine: calc_reg_tau_v_s C
131 ! Purpose: Cross terms in the gradient of stress in V_s momentum C
132 ! based on NON cartesian grid cut cell. C
133 ! C
134 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
135  SUBROUTINE calc_reg_tau_v_s(IJK, M, SSX, SSY, SSZ, SBV)
137 ! Modules
138 !---------------------------------------------------------------------//
139  USE fldvar, only: u_s, v_s, w_s
140  USE visc_s, only: epmu_s, eplambda_s
141  USE visc_s, only: trd_s
142 
143  USE fun_avg
144  USE compar
145  USE geometry
146  USE indices
147  USE functions
148  IMPLICIT NONE
149 
150 ! Dummy arguments
151 !---------------------------------------------------------------------//
152 ! current ijk index
153  INTEGER, INTENT(IN) :: IJK
154 ! solids phase index
155  INTEGER, INTENT(IN) :: M
156 ! Source terms (surface)
157  DOUBLE PRECISION, INTENT(OUT) :: SSX
158  DOUBLE PRECISION, INTENT(OUT) :: SSY
159  DOUBLE PRECISION, INTENT(OUT) :: SSZ
160  DOUBLE PRECISION, INTENT(OUT) :: SBV
161 
162 ! Local variables
163 !---------------------------------------------------------------------//
164 ! Indices
165  INTEGER :: I, J, K, IM, KM, JP
166  INTEGER :: IJKE, IJKW, IJKN, IJKT, IJKB
167  INTEGER :: IJKNE, IJKNW, IJKTN, IJKBN
168  INTEGER :: IJPK, IJMK, IMJK, IJKM
169  INTEGER :: IMJPK, IJPKM
170 !---------------------------------------------------------------------//
171 
172  j = j_of(ijk)
173  jp = jp1(j)
174  i = i_of(ijk)
175  im = im1(i)
176  k = k_of(ijk)
177  km = km1(k)
178 
179  ijpk = jp_of(ijk)
180  ijmk = jm_of(ijk)
181  ijkm = km_of(ijk)
182  imjk = im_of(ijk)
183  imjpk = im_of(ijpk)
184  ijpkm = jp_of(ijkm)
185 
186  ijke = east_of(ijk)
187  ijkn = north_of(ijk)
188  ijkne = east_of(ijkn)
189  ijkw = west_of(ijk)
190  ijknw = north_of(ijkw)
191  ijkt = top_of(ijk)
192  ijktn = north_of(ijkt)
193  ijkb = bottom_of(ijk)
194  ijkbn = north_of(ijkb)
195 
196 ! Surface forces
197 
198 ! bulk viscosity term
199 ! part of d/dy (tau_yy) xdxdydz =>
200 ! d/dy (lambda.trcD) xdxdydz =>
201 ! delta (lambda.trcD)Ap|N-S : at (i, j+1 - j-1, k)
202  sbv = (eplambda_s(ijkn,m)*trd_s(ijkn,m)-&
203  eplambda_s(ijk,m)*trd_s(ijk,m))*axz(ijk)
204 
205 ! shear stress terms at i, j+1/2, k
206 ! part of 1/x d/dx(x.tau_xy) xdxdydz =>
207 ! 1/x d/dx (x.mu.du/dy) xdxdydz =>
208 ! delta (x.mu.du/dy)Ayz |E-W : at (i+1/2 - i-1/2, j+1/2, k)
209  ssx = avg_y_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
210  avg_x_h(epmu_s(ijkn,m),epmu_s(ijkne,m),i),j)*&
211  (u_s(ijpk,m)-u_s(ijk,m))*ody_n(j)*ayz_v(ijk) - &
212  avg_y_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
213  avg_x_h(epmu_s(ijknw,m),epmu_s(ijkn,m),im),j)*&
214  (u_s(imjpk,m)-u_s(imjk,m))*ody_n(j)*ayz_v(imjk)
215 
216 ! part of d/dy (tau_xy) xdxdydz =>
217 ! d/dy (mu.dv/dy) xdxdydz =>
218 ! delta (mu.dv/dx)Axz |N-S : at (i, j+1 - j-1, k)
219  ssy = epmu_s(ijkn,m)*(v_s(ijpk,m)-v_s(ijk,m))*ody(jp)*axz_v(ijk) - &
220  epmu_s(ijk,m)*(v_s(ijk,m)-v_s(ijmk,m))*ody(j)*axz_v(ijmk)
221 
222 ! part of 1/x d/dz (tau_xz) xdxdydz =>
223 ! 1/x d/dz (mu.dw/dy) xdxdydz =>
224 ! delta (mu.dw/dx)Axy |T-B : at (i, j+1/2, k+1/2 - k-1/2)
225  ssz = avg_y_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
226  avg_z_h(epmu_s(ijkn,m),epmu_s(ijktn,m),k),j)*&
227  (w_s(ijpk,m)-w_s(ijk,m))*ody_n(j)*axy_v(ijk) - &
228  avg_y_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
229  avg_z_h(epmu_s(ijkbn,m),epmu_s(ijkn,m),km),j)*&
230  (w_s(ijpkm,m)-w_s(ijkm,m))*ody_n(j)*axy_v(ijkm)
231 
232  RETURN
233  END SUBROUTINE calc_reg_tau_v_s
234 
235 
236 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
237 ! C
238 ! Subroutine: calc_cg_tau_v_s C
239 ! Purpose: Cross terms in the gradient of stress in V_s momentum C
240 ! based on cartesian grid cut cell. C
241 ! C
242 ! Author: Jeff Dietiker Date: 01-Jul-09 C
243 ! C
244 ! C
245 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
246  SUBROUTINE calc_cg_tau_v_s(IJK, M, SSX, SSY, SSZ, SBV)
248 ! Modules
249 !---------------------------------------------------------------------//
250  USE param1, only: zero, half, undefined
251  USE fldvar, only: u_s, v_s, w_s
252  USE visc_s, only: epmu_s, eplambda_s
253  USE visc_s, only: trd_s
254 
255  USE fun_avg
256  USE compar
257  USE geometry
258  USE indices
259  USE functions
260 
261 ! for cutcell:
262 ! wall velocity for slip conditions
263  USE bc, only: bc_hw_s, bc_uw_s, bc_vw_s, bc_ww_s
264  USE bc
265  USE quadric
266  USE cutcell
267  IMPLICIT NONE
268 
269 ! Dummy arguments
270 !---------------------------------------------------------------------//
271 ! current ijk index
272  INTEGER, INTENT(IN) :: IJK
273 ! solids phase index
274  INTEGER, INTENT(IN) :: M
275 ! Source terms (surface)
276  DOUBLE PRECISION, INTENT(OUT) :: SSX
277  DOUBLE PRECISION, INTENT(OUT) :: SSY
278  DOUBLE PRECISION, INTENT(OUT) :: SSZ
279  DOUBLE PRECISION, INTENT(OUT) :: SBV
280 
281 ! Local variables
282 !---------------------------------------------------------------------//
283 ! Indices
284  INTEGER :: I, J, K, IM, KM, JP
285  INTEGER :: IJKE, IJKW, IJKN, IJKT, IJKB
286  INTEGER :: IJKNE, IJKNW, IJKTN, IJKBN
287  INTEGER :: IJPK, IJMK, IMJK, IJKM
288  INTEGER :: IMJPK, IJPKM
289 
290 ! for cartesian grid implementation:
291  DOUBLE PRECISION :: DEL_H,Nx,Ny,Nz
292  LOGICAL :: U_NODE_AT_NE,U_NODE_AT_NW,U_NODE_AT_SE,U_NODE_AT_SW
293  LOGICAL :: W_NODE_AT_TN,W_NODE_AT_TS,W_NODE_AT_BN,W_NODE_AT_BS
294  DOUBLE PRECISION :: dudy_at_E,dudy_at_W
295  DOUBLE PRECISION :: dwdy_at_T,dwdy_at_B
296  DOUBLE PRECISION :: Xi,Yi,Zi,Ui,Wi,Sx,Sy,Sz
297  DOUBLE PRECISION :: MU_S_CUT,SSX_CUT,SSZ_CUT
298  DOUBLE PRECISION :: UW_s,VW_s,WW_s
299  INTEGER :: BCV
300  INTEGER :: BCT
301 !---------------------------------------------------------------------//
302 
303  j = j_of(ijk)
304  jp = jp1(j)
305  i = i_of(ijk)
306  im = im1(i)
307  k = k_of(ijk)
308  km = km1(k)
309 
310  ijpk = jp_of(ijk)
311  ijmk = jm_of(ijk)
312  ijkm = km_of(ijk)
313  imjk = im_of(ijk)
314  imjpk = im_of(ijpk)
315  ijpkm = jp_of(ijkm)
316 
317  ijke = east_of(ijk)
318  ijkn = north_of(ijk)
319  ijkne = east_of(ijkn)
320  ijkw = west_of(ijk)
321  ijknw = north_of(ijkw)
322  ijkt = top_of(ijk)
323  ijktn = north_of(ijkt)
324  ijkb = bottom_of(ijk)
325  ijkbn = north_of(ijkb)
326 
327 ! Surface forces
328 ! bulk viscosity term
329  sbv = (eplambda_s(ijkn,m)*trd_s(ijkn,m)) * axz_v(ijk) - &
330  (eplambda_s(ijk,m) *trd_s(ijk,m) ) * axz_v(ijmk)
331 
332 ! shear stress terms
333  IF(.NOT.cut_v_cell_at(ijk)) THEN
334  ssx = avg_y_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
335  avg_x_h(epmu_s(ijkn,m),epmu_s(ijkne,m),i),j)*&
336  (u_s(ijpk,m)-u_s(ijk,m))*oneody_n_u(ijk)*ayz_v(ijk) - &
337  avg_y_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
338  avg_x_h(epmu_s(ijknw,m),epmu_s(ijkn,m),im),j)*&
339  (u_s(imjpk,m)-u_s(imjk,m))*oneody_n_u(imjk)*ayz_v(imjk)
340  ssy = epmu_s(ijkn,m)*(v_s(ijpk,m)-v_s(ijk,m))*&
341  oneody_n_v(ijk)*axz_v(ijk) - &
342  epmu_s(ijk,m)*(v_s(ijk,m)-v_s(ijmk,m))*&
343  oneody_n_v(ijmk)*axz_v(ijmk)
344  IF(do_k) THEN
345  ssz = avg_y_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
346  avg_z_h(epmu_s(ijkn,m),epmu_s(ijktn,m),k),j)*&
347  (w_s(ijpk,m)-w_s(ijk,m))*oneody_n_w(ijk)*axy_v(ijk) - &
348  avg_y_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
349  avg_z_h(epmu_s(ijkbn,m),epmu_s(ijkn,m),km),j)*&
350  (w_s(ijpkm,m)-w_s(ijkm,m))*oneody_n_w(ijkm)*axy_v(ijkm)
351  ELSE
352  ssz = zero
353  ENDIF
354 
355 ! cut cell modifications
356 !---------------------------------------------------------------------//
357  ELSE
358  bcv = bc_v_id(ijk)
359  IF(bcv > 0 ) THEN
360  bct = bc_type_enum(bcv)
361  ELSE
362  bct = none
363  ENDIF
364 
365  SELECT CASE (bct)
366  CASE (cg_nsw,cg_mi)
367  cut_tau_vs = .true.
368  noc_vs = .true.
369  uw_s = zero
370  vw_s = zero
371  ww_s = zero
372  CASE (cg_fsw)
373  cut_tau_vs = .false.
374  noc_vs = .false.
375  uw_s = zero
376  vw_s = zero
377  ww_s = zero
378  CASE(cg_psw)
379  IF(bc_hw_s(bc_v_id(ijk),m)==undefined) THEN ! same as NSW
380  cut_tau_vs = .true.
381  noc_vs = .true.
382  uw_s = bc_uw_s(bcv,m)
383  vw_s = bc_vw_s(bcv,m)
384  ww_s = bc_ww_s(bcv,m)
385  ELSEIF(bc_hw_s(bc_v_id(ijk),m)==zero) THEN ! same as FSW
386  cut_tau_vs = .false.
387  noc_vs = .false.
388  uw_s = zero
389  vw_s = zero
390  ww_s = zero
391  ELSE ! partial slip
392  cut_tau_vs = .false.
393  noc_vs = .false.
394  ENDIF
395  CASE (none)
396 ! equivalent of setting tau_v_s to zero at this ijk cell
397  ssx = zero
398  ssy = zero
399  ssz = zero
400  sbv = zero
401  RETURN
402  END SELECT
403 
404  IF(cut_tau_vs) THEN
405  mu_s_cut = (vol(ijk)*epmu_s(ijk,m) + &
406  vol(ijpk)*epmu_s(ijkn,m))/&
407  (vol(ijk) + vol(ijpk))
408  ELSE
409  mu_s_cut = zero
410  ENDIF
411 
412 ! SSX:
413  u_node_at_ne = ((.NOT.blocked_u_cell_at(ijpk)).AND.&
414  (.NOT.wall_u_at(ijpk)))
415  u_node_at_se = ((.NOT.blocked_u_cell_at(ijk)).AND.&
416  (.NOT.wall_u_at(ijk)))
417  u_node_at_nw = ((.NOT.blocked_u_cell_at(imjpk)).AND.&
418  (.NOT.wall_u_at(imjpk)))
419  u_node_at_sw = ((.NOT.blocked_u_cell_at(imjk)).AND.&
420  (.NOT.wall_u_at(imjk)))
421 
422  IF(u_node_at_ne.AND.u_node_at_se) THEN
423  ui = half * (u_s(ijpk,m) + u_s(ijk,m))
424  xi = half * (x_u(ijpk) + x_u(ijk))
425  yi = half * (y_u(ijpk) + y_u(ijk))
426  zi = half * (z_u(ijpk) + z_u(ijk))
427  sx = x_u(ijpk) - x_u(ijk)
428  sy = y_u(ijpk) - y_u(ijk)
429  sz = z_u(ijpk) - z_u(ijk)
430  CALL get_del_h(ijk, 'V_MOMENTUM', xi, yi, zi, del_h, &
431  nx, ny, nz)
432  dudy_at_e = (u_s(ijpk,m) - u_s(ijk,m)) * oneody_n_u(ijk)
433  IF(noc_vs) dudy_at_e = dudy_at_e - ((ui-uw_s) * &
434  oneody_n_u(ijk)/del_h*(sx*nx+sz*nz))
435  ELSE
436  dudy_at_e = zero
437  ENDIF
438 
439  IF(u_node_at_nw.AND.u_node_at_sw) THEN
440  ui = half * (u_s(imjpk,m) + u_s(imjk,m))
441  xi = half * (x_u(imjpk) + x_u(imjk))
442  yi = half * (y_u(imjpk) + y_u(imjk))
443  zi = half * (z_u(imjpk) + z_u(imjk))
444  sx = x_u(imjpk) - x_u(imjk)
445  sy = y_u(imjpk) - y_u(imjk)
446  sz = z_u(imjpk) - z_u(imjk)
447  CALL get_del_h(ijk, 'V_MOMENTUM', xi, yi, zi, del_h, &
448  nx, ny, nz)
449  dudy_at_w = (u_s(imjpk,m)-u_s(imjk,m))*oneody_n_u(imjk)
450  IF(noc_vs) dudy_at_w = dudy_at_w - ((ui-uw_s) * &
451  oneody_n_u(imjk)/del_h*(sx*nx+sz*nz))
452  ELSE
453  dudy_at_w = zero
454  ENDIF
455 
456  IF(u_node_at_se) THEN
457  CALL get_del_h(ijk, 'V_MOMENTUM', x_u(ijk), y_u(ijk), &
458  z_u(ijk), del_h, nx, ny, nz)
459  ssx_cut = -mu_s_cut * (u_s(ijk,m) - uw_s) / &
460  del_h * (ny*nx) * area_v_cut(ijk)
461  ELSE
462  ssx_cut = zero
463  ENDIF
464 
465  ssx = avg_y_h(avg_x_h(epmu_s(ijk,m),epmu_s(ijke,m),i),&
466  avg_x_h(epmu_s(ijkn,m),epmu_s(ijkne,m),i),j)*&
467  dudy_at_e*ayz_v(ijk) - &
468  avg_y_h(avg_x_h(epmu_s(ijkw,m),epmu_s(ijk,m),im),&
469  avg_x_h(epmu_s(ijknw,m),epmu_s(ijkn,m),im),j)*&
470  dudy_at_w*ayz_v(imjk) + ssx_cut
471 
472 ! SSY:
473  CALL get_del_h(ijk,'V_MOMENTUM', x_v(ijk), y_v(ijk),&
474  z_v(ijk), del_h, nx, ny, nz)
475  ssy = epmu_s(ijkn,m)*(v_s(ijpk,m)-v_s(ijk,m))*&
476  oneody_n_v(ijk)*axz_v(ijk) - &
477  epmu_s(ijk,m)*(v_s(ijk,m)-v_s(ijmk,m))*&
478  oneody_n_v(ijmk)*axz_v(ijmk) -&
479  mu_s_cut * (v_s(ijk,m) - vw_s)/del_h * &
480  (ny**2) * area_v_cut(ijk)
481 
482 ! SSZ:
483  IF(do_k) THEN
484  w_node_at_tn = ((.NOT.blocked_w_cell_at(ijpk)).AND.&
485  (.NOT.wall_w_at(ijpk)))
486  w_node_at_ts = ((.NOT.blocked_w_cell_at(ijk)).AND.&
487  (.NOT.wall_w_at(ijk)))
488  w_node_at_bn = ((.NOT.blocked_w_cell_at(ijpkm)).AND.&
489  (.NOT.wall_w_at(ijpkm)))
490  w_node_at_bs = ((.NOT.blocked_w_cell_at(ijkm)).AND.&
491  (.NOT.wall_w_at(ijkm)))
492 
493  IF(w_node_at_tn.AND.w_node_at_ts) THEN
494  wi = half * (w_s(ijpk,m) + w_s(ijk,m))
495  xi = half * (x_w(ijpk) + x_w(ijk))
496  yi = half * (y_w(ijpk) + y_w(ijk))
497  zi = half * (z_w(ijpk) + z_w(ijk))
498  sx = x_w(ijpk) - x_w(ijk)
499  sy = y_w(ijpk) - y_w(ijk)
500  sz = z_w(ijpk) - z_w(ijk)
501  CALL get_del_h(ijk, 'V_MOMENTUM', xi, yi, zi, del_h, &
502  nx, ny, nz)
503  dwdy_at_t = (w_s(ijpk,m) - w_s(ijk,m)) * oneody_n_w(ijk)
504  IF(noc_vs) dwdy_at_t = dwdy_at_t - ((wi-ww_s) * &
505  oneody_n_w(ijk)/del_h*(sx*nx+sz*nz))
506  ELSE
507  dwdy_at_t = zero
508  ENDIF
509 
510  IF(w_node_at_bn.AND.w_node_at_bs) THEN
511  wi = half * (w_s(ijpkm,m) + w_s(ijkm,m))
512  xi = half * (x_w(ijpkm) + x_w(ijkm))
513  yi = half * (y_w(ijpkm) + y_w(ijkm))
514  zi = half * (z_w(ijpkm) + z_w(ijkm))
515  sx = x_w(ijpkm) - x_w(ijkm)
516  sy = y_w(ijpkm) - y_w(ijkm)
517  sz = z_w(ijpkm) - z_w(ijkm)
518  CALL get_del_h(ijk, 'V_MOMENTUM', xi, yi, zi, del_h, &
519  nx, ny, nz)
520  dwdy_at_b = (w_s(ijpkm,m)-w_s(ijkm,m)) * oneody_n_w(ijkm)
521  IF(noc_vs) dwdy_at_b = dwdy_at_b - ((wi-ww_s) * &
522  oneody_n_w(ijkm)/del_h*(sx*nx+sz*nz))
523  ELSE
524  dwdy_at_b = zero
525  ENDIF
526 
527  IF(w_node_at_ts) THEN
528  CALL get_del_h(ijk, 'V_MOMENTUM', x_w(ijk), y_w(ijk), &
529  z_w(ijk), del_h, nx, ny, nz)
530  ssz_cut = -mu_s_cut * (w_s(ijk,m) - ww_s) / &
531  del_h * (ny*nz) * area_v_cut(ijk)
532  ELSE
533  ssz_cut = zero
534  ENDIF
535 
536  ssz = avg_y_h(avg_z_h(epmu_s(ijk,m),epmu_s(ijkt,m),k),&
537  avg_z_h(epmu_s(ijkn,m),epmu_s(ijktn,m),k),j)*&
538  dwdy_at_t*axy_v(ijk) - &
539  avg_y_h(avg_z_h(epmu_s(ijkb,m),epmu_s(ijk,m),km),&
540  avg_z_h(epmu_s(ijkbn,m),epmu_s(ijkn,m),km),j)*&
541  dwdy_at_b*axy_v(ijkm) + ssz_cut
542  ELSE
543  ssz = zero
544  ENDIF ! end if do_k
545 
546  ENDIF ! end if/else cut_cell
547 
548  RETURN
549  END SUBROUTINE calc_cg_tau_v_s
550 
551 
552 
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 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 ody
Definition: geometry_mod.f:116
logical shear
Definition: run_mod.f:175
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(:), allocatable im1
Definition: indices_mod.f:50
integer, dimension(10) cg_safe_mode
Definition: cutcell_mod.f:415
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(:), allocatable z_v
Definition: cutcell_mod.f:56
double precision, dimension(:), allocatable oneody_n_u
Definition: cutcell_mod.f:316
double precision, dimension(:,:), allocatable epmu_s
Definition: visc_s_mod.f:9
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:), allocatable ayz_v
Definition: geometry_mod.f:227
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 ody_n
Definition: geometry_mod.f:123
logical, dimension(:), allocatable blocked_w_cell_at
Definition: cutcell_mod.f:366
subroutine calc_cg_tau_v_s(IJK, M, SSX, SSY, SSZ, SBV)
Definition: tau_v_s.f:247
double precision, dimension(:), allocatable x_w
Definition: cutcell_mod.f:59
double precision, dimension(:), allocatable area_v_cut
Definition: cutcell_mod.f:133
integer mmax
Definition: physprop_mod.f:19
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
logical, dimension(:), allocatable wall_w_at
Definition: cutcell_mod.f:128
double precision, dimension(:), allocatable axy_v
Definition: geometry_mod.f:231
integer, dimension(:), allocatable jp1
Definition: indices_mod.f:51
double precision, dimension(:), allocatable oneody_n_v
Definition: cutcell_mod.f:321
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
double precision, dimension(:), allocatable x_v
Definition: cutcell_mod.f:54
double precision xlength
Definition: geometry_mod.f:33
double precision, parameter half
Definition: param1_mod.f:28
Definition: run_mod.f:13
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
integer, dimension(:), allocatable bc_v_id
Definition: cutcell_mod.f:435
subroutine calc_reg_tau_v_s(IJK, M, SSX, SSY, SSZ, SBV)
Definition: tau_v_s.f:136
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, dimension(:), allocatable cut_v_cell_at
Definition: cutcell_mod.f:357
logical do_k
Definition: geometry_mod.f:30
integer, dimension(:), allocatable km1
Definition: indices_mod.f:52
integer ijkstart3
Definition: compar_mod.f:80
double precision function ep_s(IJK, xxM)
Definition: fldvar_mod.f:178
integer smax
Definition: physprop_mod.f:22
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 oneody_n_w
Definition: cutcell_mod.f:325
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
integer dimension_m
Definition: param_mod.f:18
double precision, dimension(dimension_bc, dim_m) bc_vw_s
Definition: bc_mod.f:325
logical noc_vs
Definition: cutcell_mod.f:389
logical cut_tau_vs
Definition: cutcell_mod.f:390
double precision, dimension(:), allocatable axz_v
Definition: geometry_mod.f:229
double precision, dimension(:), allocatable y_u
Definition: cutcell_mod.f:50
double precision, parameter zero
Definition: param1_mod.f:27
subroutine calc_tau_v_s(lTAU_V_S)
Definition: tau_v_s.f:20
Definition: bc_mod.f:23
double precision v_sh
Definition: run_mod.f:177