MFIX  2016-1
get_alpha.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: GET_3D_ALPHA_U_CUT_CELL C
4 ! Purpose: Calculate the correction term alpha_U C
5 ! for U-momentum cut cells, C
6 ! C
7 ! Author: Jeff Dietiker Date: 21-Feb-08 C
8 ! Reviewer: Date: C
9 ! C
10 ! Revision Number # Date: ##-###-## C
11 ! Author: # C
12 ! Purpose: # C
13 ! C
14 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
15  SUBROUTINE get_3d_alpha_u_cut_cell
16 
17  USE bc
19  USE cutcell
20  USE exit, only: mfix_exit
21  USE functions, ONLY: funijk
22  USE geometry, ONLY: do_k, no_k, ayz, ayz_u, flag_e
23  USE indices, ONLY: i_of, j_of, k_of
24  USE param1, ONLY: half, one, undefined, zero
25 
26  IMPLICIT NONE
27  DOUBLE PRECISION:: Xe,Ye,Ze,Xn,Yn,Zn,Xt,Yt,Zt
28  INTEGER :: I,J,K,IM,JM,KM,IP,JP,KP,IJK,IMJK,IJMK,IPJK,IJPK,IJKM,IJKP
29  DOUBLE PRECISION :: Xi
30  DOUBLE PRECISION :: Sx,Sy,Sz
31  DOUBLE PRECISION :: Nx,Ny,Nz
32  DOUBLE PRECISION :: DELH_ec , DELH_e
33  DOUBLE PRECISION :: DELH_nc , DELH_n
34  DOUBLE PRECISION :: DELH_tc , DELH_t
35  LOGICAL :: V_NODE_AT_NE,V_NODE_AT_NW
36  LOGICAL :: W_NODE_AT_TE,W_NODE_AT_TW
37  INTEGER :: BCV
38  INTEGER ::BCT
39 
40  IF(mype == pe_io) THEN
41  WRITE(*,10)'COMPUTING INTERPOLATION FACTORS IN U-MOMENTUM CELLS...'
42  ENDIF
43 10 FORMAT(1x,a)
44 
46 
47  theta_ue = half
53  alpha_ue_c = one
54  noc_u_e = zero
55  theta_un = half
57  alpha_un_c = one
58  noc_u_n = zero
59  theta_ut = half
61  alpha_ut_c = one
62  noc_u_t = zero
63 
64  a_upg_e = ayz_u
65  a_upg_w = ayz_u
66 
67 
68  DO ijk = ijkstart3, ijkend3
69  IF(interior_cell_at(ijk)) THEN
70 
71  i = i_of(ijk)
72  j = j_of(ijk)
73  k = k_of(ijk)
74 
75  im = i - 1
76  jm = j - 1
77  km = k - 1
78 
79  ip = i + 1
80  jp = j + 1
81  kp = k + 1
82 
83  imjk = funijk(im,j,k)
84  ipjk = funijk(ip,j,k)
85  ijmk = funijk(i,jm,k)
86  ijpk = funijk(i,jp,k)
87  ijkm = funijk(i,j,km)
88  ijkp = funijk(i,j,kp)
89 
90  CALL get_cell_node_coordinates(ijk,'U_MOMENTUM')
91 
92 !======================================================================
93 ! Get Interpolation factors at East face
94 !======================================================================
95 
96  theta_ue(ijk) = delx_ue(ijk) / (delx_ue(ijk) + delx_uw(ipjk))
97  theta_ue_bar(ijk) = one - theta_ue(ijk)
98 
99 !======================================================================
100 ! Get Interpolation factors at North face
101 !======================================================================
102 
103  v_node_at_nw = ((.NOT.blocked_v_cell_at(ijk)).AND.(.NOT.wall_v_at(ijk)))
104  v_node_at_ne = ((.NOT.blocked_v_cell_at(ipjk)).AND.(.NOT.wall_v_at(ipjk)))
105 
106  IF(v_node_at_nw.AND.v_node_at_ne) THEN
107  theta_u_ne(ijk) = (x_u_nc(ijk) - x_v(ijk) ) / (x_v(ipjk) - x_v(ijk))
108  theta_u_nw(ijk) = one - theta_u_ne(ijk)
109  ELSE IF (v_node_at_ne.AND.(.NOT.v_node_at_nw)) THEN
110  IF(no_k) THEN
111  xi = xn_u_int(ijk)
112  ELSE
113  xi = half * (xn_u_int(ijk) + xn_u_int(ijkm))
114  ENDIF
115  theta_u_ne(ijk) = (x_u_nc(ijk) - xi) / (x_v(ipjk) - xi)
116  theta_u_nw(ijk) = one - theta_u_ne(ijk)
117  ELSE IF ((.NOT.v_node_at_ne).AND.v_node_at_nw) THEN
118  IF(no_k) THEN
119  xi = xn_u_int(ijk)
120  ELSE
121  xi = half * (xn_u_int(ijk) + xn_u_int(ijkm))
122  ENDIF
123  theta_u_ne(ijk) = (x_u_nc(ijk) - x_v(ijk) ) / (xi - x_v(ijk))
124  theta_u_nw(ijk) = one - theta_u_ne(ijk)
125  ELSE
126  theta_u_ne(ijk) = zero
127  theta_u_nw(ijk) = zero
128  ENDIF
129 
130 
131  IF ((theta_u_ne(ijk)>=one).OR.(theta_u_ne(ijk)<=zero)) THEN
132  theta_u_ne(ijk) = half
133  theta_u_nw(ijk) = half
134  ENDIF
135 
136 !======================================================================
137 ! Get Interpolation factors at Top face
138 !======================================================================
139 
140  IF(do_k) THEN
141 
142  w_node_at_tw = ((.NOT.blocked_w_cell_at(ijk)).AND.(.NOT.wall_w_at(ijk)))
143  w_node_at_te = ((.NOT.blocked_w_cell_at(ipjk)).AND.(.NOT.wall_w_at(ipjk)))
144 
145  IF(w_node_at_tw.AND.w_node_at_te) THEN
146  theta_u_te(ijk) = (x_u_tc(ijk) - x_w(ijk) ) / (x_w(ipjk) - x_w(ijk))
147  theta_u_tw(ijk) = one - theta_u_te(ijk)
148 
149  ELSE IF (w_node_at_te.AND.(.NOT.w_node_at_tw)) THEN
150  xi = half * (xn_u_int(ijk) + xn_u_int(ijmk))
151  theta_u_te(ijk) = (x_u_tc(ijk) - xi) / (x_w(ipjk) - xi)
152  theta_u_tw(ijk) = one - theta_u_te(ijk)
153  ELSE IF ((.NOT.w_node_at_te).AND.w_node_at_tw) THEN
154  xi = half * (xn_u_int(ijk) + xn_u_int(ijmk))
155  theta_u_te(ijk) = (x_u_tc(ijk) - x_w(ijk) ) / (xi - x_w(ijk))
156  theta_u_tw(ijk) = one - theta_u_te(ijk)
157  ELSE
158  theta_u_te(ijk) = zero
159  theta_u_tw(ijk) = zero
160  ENDIF
161 
162  IF ((theta_u_te(ijk)>=one).OR.(theta_u_te(ijk)<=zero)) THEN
163  theta_u_te(ijk) = half
164  theta_u_tw(ijk) = half
165  ENDIF
166  ENDIF
167 
168  bcv = bc_u_id(ijk)
169 
170  IF(bcv>0) THEN
171  bct = bc_type_enum(bcv)
172  ELSE
173  bct = blank
174  ENDIF
175 
176  IF(bct ==cg_nsw.OR.bct ==cg_psw) THEN
177 
178  CALL get_del_h(ijk,'U_MOMENTUM',x_u(ijk),y_u(ijk),z_u(ijk),delh_u(ijk),nx,ny,nz)
179 
180  IF(delh_u(ijk)<zero.AND.(.NOT.wall_u_at(ijk))) THEN
181  WRITE(*,*) 'NEGATIVE DELH-U AT XYZ=', x_u(ijk),y_u(ijk),z_u(ijk)
182  WRITE(*,*) 'DELH_U=', delh_u(ijk)
183  WRITE(*,*) 'AYZ=', ayz(ijk)
184  WRITE(*,*) 'MFIX WILL EXIT NOW.'
185  CALL mfix_exit(mype)
186  ENDIF
187 
188 !======================================================================
189 ! Get Alpha Correction factors at East face
190 !======================================================================
191 
192 ! Location of the interpolated velocity along east face
193 ! Xe has not moved based on definition of Theta_Ue
194 
195  xe = x_node(8)
196  ye = theta_ue_bar(ijk) * y_u(ijk) + theta_ue(ijk) * y_u(ipjk)
197  ze = theta_ue_bar(ijk) * z_u(ijk) + theta_ue(ijk) * z_u(ipjk)
198 
199  CALL get_del_h(ijk,'U_MOMENTUM',x_u_ec(ijk),y_u_ec(ijk),z_u_ec(ijk),delh_ec,nx,ny,nz)
200  CALL get_del_h(ijk,'U_MOMENTUM',xe,ye,ze,delh_e,nx,ny,nz)
201 
202  IF((delh_ec == undefined).OR.(delh_e == undefined)) THEN
203  alpha_ue_c(ijk) = one
204  ELSE
205  alpha_ue_c(ijk) = dmin1(alpha_max , delh_ec / delh_e )
206  ENDIF
207 
208 
209  IF(blocked_u_cell_at(ipjk)) alpha_ue_c(ijk) = zero
210  IF(wall_u_at(ijk).AND.wall_u_at(ipjk)) alpha_ue_c(ijk) = zero
211  IF(i == iend1) alpha_ue_c(ijk) = one
212 
213  IF(alpha_ue_c(ijk)<zero) THEN
214  WRITE(*,*) 'NEGATIVE ALPHA_Ue_c at IJK=',ijk
215  WRITE(*,*) 'MFIX WILL EXIT NOW.'
216  CALL mfix_exit(mype)
217  ENDIF
218 
219 !======================================================================
220 ! Get Non-Ortogonality correction factor at East face
221 !======================================================================
222 
223  sx = x_u(ipjk) - x_u(ijk)
224  sy = y_u(ipjk) - y_u(ijk)
225  sz = z_u(ipjk) - z_u(ijk)
226 
227  noc_u_e(ijk) = (sy * ny + sz * nz)/(sx * delh_e)
228 
229  IF(blocked_u_cell_at(ipjk)) noc_u_e(ijk) = zero
230  IF(wall_u_at(ijk).AND.wall_u_at(ipjk)) noc_u_e(ijk) = zero
231  IF(i == iend1) noc_u_e(ijk) = zero
232 
233 !======================================================================
234 ! Get Alpha Correction factors at North face
235 !======================================================================
236 
237  theta_un(ijk) = dely_un(ijk) / (dely_un(ijk) + dely_us(ijpk))
238  theta_un_bar(ijk) = one - theta_un(ijk)
239 
240  IF ((theta_un(ijk)>=one).OR.(theta_un(ijk)<=zero)) THEN
241  theta_un(ijk) = half
242  theta_un_bar(ijk) = half
243  ENDIF
244 
245 
246 ! Location of the interpolated velocity along North face
247 ! Yn has not moved based on definition of Theta_Un
248 
249 
250  xn = theta_un_bar(ijk) * x_u(ijk) + theta_un(ijk) * x_u(ijpk)
251  yn = y_node(8)
252  zn = theta_un_bar(ijk) * z_u(ijk) + theta_un(ijk) * z_u(ijpk)
253 
254  CALL get_del_h(ijk,'U_MOMENTUM',x_u_nc(ijk),y_u_nc(ijk),z_u_nc(ijk),delh_nc,nx,ny,nz)
255  CALL get_del_h(ijk,'U_MOMENTUM',xn,yn,zn,delh_n,nx,ny,nz)
256 
257  IF((delh_nc == undefined).OR.(delh_n == undefined)) THEN
258  alpha_un_c(ijk) = one
259  ELSE
260  alpha_un_c(ijk) = dmin1(alpha_max , delh_nc / delh_n )
261  ENDIF
262 
263 
264  IF(blocked_u_cell_at(ijpk)) alpha_un_c(ijk) = zero
265  IF(wall_u_at(ijk).AND.wall_u_at(ijpk)) alpha_un_c(ijk) = zero
266  IF(j == jend1) alpha_un_c(ijk) = one
267 
268  IF(alpha_un_c(ijk)<zero) alpha_un_c(ijk) = one
269 
270 !======================================================================
271 ! Get Non-Ortogonality correction factor at North face
272 !======================================================================
273 
274  sx = x_u(ijpk) - x_u(ijk)
275  sy = y_u(ijpk) - y_u(ijk)
276  sz = z_u(ijpk) - z_u(ijk)
277 
278  noc_u_n(ijk) = (sx * nx + sz * nz)/(sy * delh_n)
279 
280  IF(blocked_u_cell_at(ijpk)) noc_u_n(ijk) = zero
281  IF(wall_u_at(ijk).AND.wall_u_at(ijpk)) noc_u_n(ijk) = zero
282  IF(j == jend1) noc_u_n(ijk) = zero
283 
284 
285  IF(do_k) THEN
286 !======================================================================
287 ! Get Alpha Correction factors at Top face
288 !======================================================================
289 
290  theta_ut(ijk) = delz_ut(ijk) / (delz_ut(ijk) + delz_ub(ijkp))
291  theta_ut_bar(ijk) = one - theta_ut(ijk)
292 
293  IF ((theta_ut(ijk)>=one).OR.(theta_ut(ijk)<=zero)) THEN
294  theta_ut(ijk) = half
295  theta_ut_bar(ijk) = half
296  ENDIF
297 
298 
299 ! Location of the interpolated velocity along Top face
300 ! Zt has not moved based on definition of Theta_Ut
301 
302  xt = theta_ut_bar(ijk) * x_u(ijk) + theta_ut(ijk) * x_u(ijkp)
303  yt = theta_ut_bar(ijk) * y_u(ijk) + theta_ut(ijk) * y_u(ijkp)
304  zt = z_node(8)
305 
306  CALL get_del_h(ijk,'U_MOMENTUM',x_u_tc(ijk),y_u_tc(ijk),z_u_tc(ijk),delh_tc,nx,ny,nz)
307  CALL get_del_h(ijk,'U_MOMENTUM',xt,yt,zt,delh_t,nx,ny,nz)
308 
309  IF((delh_tc == undefined).OR.(delh_t == undefined)) THEN
310  alpha_ut_c(ijk) = one
311  ELSE
312  alpha_ut_c(ijk) = dmin1(alpha_max , delh_tc / delh_t )
313  ENDIF
314 
315  IF(blocked_u_cell_at(ijkp)) alpha_ut_c(ijk) = zero
316  IF(wall_u_at(ijk).AND.wall_u_at(ijkp)) alpha_ut_c(ijk) = zero
317  IF(k == kend1) alpha_ut_c(ijk) = one
318 
319  IF(alpha_ut_c(ijk)<zero) alpha_ut_c(ijk) = one
320 
321 !======================================================================
322 ! Get Non-Ortogonality correction factor at Top face
323 !======================================================================
324 
325  sx = x_u(ijkp) - x_u(ijk)
326  sy = y_u(ijkp) - y_u(ijk)
327  sz = z_u(ijkp) - z_u(ijk)
328 
329  noc_u_t(ijk) = (sx * nx + sy * ny)/(sz * delh_t)
330 
331 
332  IF(blocked_u_cell_at(ijkp)) noc_u_t(ijk) = zero
333  IF(wall_u_at(ijk).AND.wall_u_at(ijkp)) noc_u_t(ijk) = zero
334  IF(k == kend1) noc_u_t(ijk) = zero
335 
336  ENDIF
337 
338  ENDIF
339 
340 
341 
342 !======================================================================
343 ! Get Surfaces used to compute pressure gradient
344 !======================================================================
345 
346  IF ( cut_u_cell_at(ijk) ) THEN
347 
348  SELECT CASE (pg_option)
349 
350  CASE(0) ! do nothing
351  ! will be treated below
352 
353  CASE(1)
354 
355  a_upg_e(ijk) = dmax1(ayz_u(ijk),ayz_u(imjk))
356  a_upg_w(ijk) = a_upg_e(ijk)
357 
358  CASE(2)
359 
360  a_upg_e(ijk) = ayz_u(ijk)
361  a_upg_w(ijk) = ayz_u(imjk)
362 
363  CASE DEFAULT
364 
365  WRITE(*,*)'INVALID PRESSURE GRADIENT OPTION:',pg_option
366  WRITE(*,*)'PG_OPTION SHOULD BE SET EQUAL TO 0, 1 OR 2.'
367  WRITE(*,*)'PLEASE VERIFY MFIX.DAT FILE AND TRY AGAIN.'
368  WRITE(*,*) 'MFIX WILL EXIT NOW.'
369  CALL mfix_exit(mype)
370 
371  END SELECT
372 
373 
374  IF (blocked_cell_at(ijk).OR.blocked_cell_at(ipjk)) THEN
375  IF(.NOT.wall_u_at(ijk)) THEN
376  wall_u_at(ijk) = .true.
377  flag_e(ijk) = 0
378  IF(print_warnings) THEN
379  WRITE(*,*) 'WARNING: ONLY ONE PRESSURE NODE DETECTED IN U-MOMENTUM CELL IJK =',ijk
380  WRITE(*,*) 'RESETTING U-MOMENTUM CELL AS U_WALL CELL.'
381  ENDIF
382 ! write(*,*) 'MFiX will exit now.'
383 ! CALL MFIX_EXIT(myPE)
384  ENDIF
385  ENDIF
386 
387  ELSE ! Regular cell
388 
389  a_upg_e(ijk) = ayz_u(ijk)
390  a_upg_w(ijk) = ayz_u(ijk)
391 
392  ENDIF
393 
394  ENDIF
395  END DO
396 
397  IF(pg_option==0) THEN
398  a_upg_e = ayz
399  a_upg_w = ayz
400  ENDIF
401 
402  RETURN
403 
404  END SUBROUTINE get_3d_alpha_u_cut_cell
405 
406 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
407 ! C
408 ! Module name: GET_3D_ALPHA_V_CUT_CELL C
409 ! Purpose: Calculate the correction term alpha_V C
410 ! for V-momentum cut cells, C
411 ! C
412 ! Author: Jeff Dietiker Date: 21-Feb-08 C
413 ! Reviewer: Date: C
414 ! C
415 ! Revision Number # Date: ##-###-## C
416 ! Author: # C
417 ! Purpose: # C
418 ! C
419 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
420  SUBROUTINE get_3d_alpha_v_cut_cell
422  USE bc
423  USE compar, ONLY: iend1, jend1, kend1, ijkstart3, ijkend3, mype, pe_io
424  USE cutcell
425  USE functions, ONLY: funijk
426  USE exit, only: mfix_exit
427  USE geometry, ONLY: do_k, no_k, axz, axz_v, flag_n
428  USE indices, ONLY: i_of, j_of, k_of
429  USE param1, ONLY: half, one, undefined, zero
430 
431  IMPLICIT NONE
432  DOUBLE PRECISION:: Xe,Ye,Ze,Xn,Yn,Zn,Xt,Yt,Zt
433  INTEGER :: I,J,K,IM,JM,KM,IP,JP,KP,IJK,IMJK,IJMK,IPJK,IJPK,IJKM,IJKP
434  DOUBLE PRECISION :: Yi
435  DOUBLE PRECISION :: Sx,Sy,Sz
436  DOUBLE PRECISION :: Nx,Ny,Nz
437  DOUBLE PRECISION :: DELH_ec , DELH_e
438  DOUBLE PRECISION :: DELH_nc , DELH_n
439  DOUBLE PRECISION :: DELH_tc , DELH_t
440  LOGICAL :: U_NODE_AT_NE, U_NODE_AT_SE
441  LOGICAL :: W_NODE_AT_NT, W_NODE_AT_ST
442  INTEGER :: BCV
443  INTEGER ::BCT
444 
445  IF(mype == pe_io) THEN
446  WRITE(*,10)'COMPUTING INTERPOLATION FACTORS IN V-MOMENTUM CELLS...'
447  ENDIF
448 10 FORMAT(1x,a)
449 
450  delh_v = undefined
451 
452  theta_v_ne = half
453  theta_v_se = half
454  theta_vn = half
456  theta_v_nt = half
457  theta_v_st = half
458  theta_ve = half
460  alpha_ve_c = one
461  noc_v_e = zero
462  alpha_vn_c = one
463  noc_v_n = zero
464  theta_vt = half
466  alpha_vt_c = one
467  noc_v_t = zero
468 
469  a_vpg_n = axz_v
470  a_vpg_s = axz_v
471 
472 
473  DO ijk = ijkstart3, ijkend3
474  IF(interior_cell_at(ijk)) THEN
475 
476  i = i_of(ijk)
477  j = j_of(ijk)
478  k = k_of(ijk)
479 
480  im = i - 1
481  jm = j - 1
482  km = k - 1
483 
484  ip = i + 1
485  jp = j + 1
486  kp = k + 1
487 
488  imjk = funijk(im,j,k)
489  ipjk = funijk(ip,j,k)
490  ijmk = funijk(i,jm,k)
491  ijpk = funijk(i,jp,k)
492  ijkm = funijk(i,j,km)
493  ijkp = funijk(i,j,kp)
494 
495  CALL get_cell_node_coordinates(ijk,'V_MOMENTUM')
496 
497 !======================================================================
498 ! Get Interpolation factors at East face
499 !======================================================================
500 
501  u_node_at_ne = ((.NOT.blocked_u_cell_at(ijpk)).AND.(.NOT.wall_u_at(ijpk)))
502  u_node_at_se = ((.NOT.blocked_u_cell_at(ijk)).AND.(.NOT.wall_u_at(ijk)))
503 
504  IF(u_node_at_se.AND.u_node_at_ne) THEN
505  theta_v_ne(ijk) = (y_v_ec(ijk) - y_u(ijk) ) / (y_u(ijpk) - y_u(ijk))
506  theta_v_se(ijk) = one - theta_v_ne(ijk)
507  ELSE IF (u_node_at_se.AND.(.NOT.u_node_at_ne)) THEN
508  IF(no_k) THEN
509  yi = ye_v_int(ijk)
510  ELSE
511  yi = half * (ye_v_int(ijk) + ye_v_int(ijkm))
512  ENDIF
513  theta_v_ne(ijk) = (y_v_ec(ijk) - y_u(ijk) ) / (yi - y_u(ijk))
514  theta_v_se(ijk) = one - theta_v_ne(ijk)
515  ELSE IF ((.NOT.u_node_at_se).AND.u_node_at_ne) THEN
516  IF(no_k) THEN
517  yi = ye_v_int(ijk)
518  ELSE
519  yi = half * (ye_v_int(ijk) + ye_v_int(ijkm))
520  ENDIF
521  theta_v_ne(ijk) = (y_v_ec(ijk) - yi ) / (y_u(ijpk) - yi)
522  theta_v_se(ijk) = one - theta_v_ne(ijk)
523  ELSE
524  theta_v_ne(ijk) = zero
525  theta_v_se(ijk) = zero
526  ENDIF
527 
528  IF ((theta_v_ne(ijk)>=one).OR.(theta_v_ne(ijk)<=zero)) THEN
529  theta_v_ne(ijk) = half
530  theta_v_se(ijk) = half
531  ENDIF
532 
533 !======================================================================
534 ! Get Interpolation factors at North face
535 !======================================================================
536 
537  theta_vn(ijk) = dely_vn(ijk) / (dely_vn(ijk) + dely_vs(ijpk))
538  theta_vn_bar(ijk) = one - theta_vn(ijk)
539 
540  IF ((theta_vn(ijk)>=one).OR.(theta_vn(ijk)<=zero)) THEN
541  theta_vn(ijk) = half
542  theta_vn_bar(ijk) = half
543  ENDIF
544 
545  IF(do_k) THEN
546 !======================================================================
547 ! Get Interpolation factors at Top face
548 !======================================================================
549 
550  w_node_at_nt = ((.NOT.blocked_w_cell_at(ijpk)).AND.(.NOT.wall_w_at(ijpk)))
551  w_node_at_st = ((.NOT.blocked_w_cell_at(ijk)).AND.(.NOT.wall_w_at(ijk)))
552 
553  IF(w_node_at_st.AND.w_node_at_nt) THEN
554  theta_v_nt(ijk) = (y_v_tc(ijk) - y_w(ijk) ) / (y_w(ijpk) - y_w(ijk))
555  theta_v_st(ijk) = one - theta_v_nt(ijk)
556  ELSE IF (w_node_at_st.AND.(.NOT.w_node_at_nt)) THEN
557  yi = half * (ye_v_int(ijk) + ye_v_int(imjk))
558  theta_v_nt(ijk) = (y_v_tc(ijk) - y_w(ijk) ) / (yi - y_w(ijk))
559  theta_v_st(ijk) = one - theta_v_nt(ijk)
560  ELSE IF ((.NOT.w_node_at_st).AND.w_node_at_nt) THEN
561  yi = half * (ye_v_int(ijk) + ye_v_int(imjk))
562  theta_v_nt(ijk) = (y_v_tc(ijk) - yi ) / (y_w(ijpk) - yi)
563  theta_v_st(ijk) = one - theta_v_nt(ijk)
564  ELSE
565  theta_v_nt(ijk) = zero
566  theta_v_st(ijk) = zero
567  ENDIF
568 
569  IF ((theta_v_nt(ijk)>=one).OR.(theta_v_nt(ijk)<=zero)) THEN
570  theta_v_nt(ijk) = half
571  theta_v_st(ijk) = half
572  ENDIF
573 
574  ENDIF
575 
576  bcv = bc_v_id(ijk)
577  IF(bcv>0) THEN
578  bct = bc_type_enum(bcv)
579  ELSE
580  bct = blank
581  ENDIF
582 
583  IF(bct ==cg_nsw.OR.bct ==cg_psw) THEN
584 
585  CALL get_del_h(ijk,'V_MOMENTUM',x_v(ijk),y_v(ijk),z_v(ijk),delh_v(ijk),nx,ny,nz)
586 
587  IF(delh_v(ijk)<zero.AND.(.NOT.wall_v_at(ijk))) THEN
588  WRITE(*,*) 'NEGATIVE DELH-V AT XYZ=', x_v(ijk),y_v(ijk),z_v(ijk)
589  WRITE(*,*) 'DELH_V=', delh_v(ijk)
590  WRITE(*,*) 'AYZ=', axz(ijk)
591  WRITE(*,*) 'MFIX WILL EXIT NOW.'
592  CALL mfix_exit(mype)
593  ENDIF
594 
595 !======================================================================
596 ! Get Alpha Correction factors at East face
597 !======================================================================
598 
599  theta_ve(ijk) = delx_ve(ijk) / (delx_ve(ijk) + delx_vw(ipjk))
600  theta_ve_bar(ijk) = one - theta_ve(ijk)
601 
602  IF ((theta_ve(ijk)>=one).OR.(theta_ve(ijk)<=zero)) THEN
603  theta_ve(ijk) = half
604  theta_ve_bar(ijk) = half
605  ENDIF
606 
607 
608 ! Location of the interpolated velocity along East face
609 ! Xe has not moved based on definition of Theta_Ve
610  xe = x_node(8)
611  ye = theta_ve_bar(ijk) * y_v(ijk) + theta_ve(ijk) * y_v(ipjk)
612  ze = theta_ve_bar(ijk) * z_v(ijk) + theta_ve(ijk) * z_v(ipjk)
613 
614 
615  CALL get_del_h(ijk,'V_MOMENTUM',x_v_ec(ijk),y_v_ec(ijk),z_v_ec(ijk),delh_ec,nx,ny,nz)
616 
617  CALL get_del_h(ijk,'V_MOMENTUM',xe,ye,ze,delh_e,nx,ny,nz)
618 
619  IF((delh_ec == undefined).OR.(delh_e == undefined)) THEN
620  alpha_ve_c(ijk) = one
621  ELSE
622  alpha_ve_c(ijk) = dmin1(alpha_max , delh_ec / delh_e )
623  ENDIF
624 
625 
626  IF(blocked_v_cell_at(ipjk)) alpha_ve_c(ijk) = zero
627  IF(wall_v_at(ijk).AND.wall_v_at(ipjk)) alpha_ve_c(ijk) = zero
628  IF(i == iend1) alpha_ve_c(ijk) = one
629 
630  IF(alpha_ve_c(ijk)<zero) alpha_ve_c(ijk) = one
631 
632 !======================================================================
633 ! Get Non-Ortogonality correction factor at East face
634 !======================================================================
635 
636  sx = x_v(ipjk) - x_v(ijk)
637  sy = y_v(ipjk) - y_v(ijk)
638  sz = z_v(ipjk) - z_v(ijk)
639 
640  noc_v_e(ijk) = (sy * ny + sz * nz)/(sx * delh_e)
641 
642  IF(blocked_v_cell_at(ipjk)) noc_v_e(ijk) = zero
643  IF(wall_v_at(ijk).AND.wall_v_at(ipjk)) noc_v_e(ijk) = zero
644  IF(i == iend1) noc_v_e(ijk) = zero
645 
646 !======================================================================
647 ! Get Alpha Correction factors at North face
648 !======================================================================
649 
650 ! Location of the interpolated velocity along north face
651 ! Yn has not moved based on definition of Theta_V
652 
653  xn = theta_vn_bar(ijk) * x_v(ijk) + theta_vn(ijk) * x_v(ijpk)
654  yn = y_node(8)
655  zn = theta_vn_bar(ijk) * z_v(ijk) + theta_vn(ijk) * z_v(ijpk)
656 
657  CALL get_del_h(ijk,'V_MOMENTUM',x_v_nc(ijk),y_v_nc(ijk),z_v_nc(ijk),delh_nc,nx,ny,nz)
658 
659  CALL get_del_h(ijk,'V_MOMENTUM',xn,yn,zn,delh_n,nx,ny,nz)
660 
661  IF((delh_nc == undefined).OR.(delh_n == undefined)) THEN
662  alpha_vn_c(ijk) = one
663  ELSE
664  alpha_vn_c(ijk) = dmin1(alpha_max , delh_nc / delh_n )
665  ENDIF
666 
667  IF(blocked_v_cell_at(ijpk)) alpha_vn_c(ijk) = zero
668  IF(wall_v_at(ijk).AND.wall_v_at(ijpk)) alpha_vn_c(ijk) = zero
669  IF(j == jend1) alpha_vn_c(ijk) = one
670 
671  IF(alpha_vn_c(ijk)<zero) THEN
672  WRITE(*,*) 'NEGATIVE ALPHA_Vn_c at IJK=',ijk
673  WRITE(*,*) 'MFIX WILL EXIT NOW.'
674  CALL mfix_exit(mype)
675  ENDIF
676 
677 !======================================================================
678 ! Get Non-Ortogonality correction factor at North face
679 !======================================================================
680 
681  sx = x_v(ijpk) - x_v(ijk)
682  sy = y_v(ijpk) - y_v(ijk)
683  sz = z_v(ijpk) - z_v(ijk)
684 
685  noc_v_n(ijk) = (sx * nx + sz * nz)/(sy * delh_n)
686 
687  IF(blocked_v_cell_at(ijpk)) noc_v_n(ijk) = zero
688  IF(wall_v_at(ijk).AND.wall_v_at(ijpk)) noc_v_n(ijk) = zero
689  IF(j == jend1) noc_v_n(ijk) = zero
690 
691  IF(do_k) THEN
692 
693 !======================================================================
694 ! Get Alpha Correction factors at Top face
695 !======================================================================
696 
697  theta_vt(ijk) = delz_vt(ijk) / (delz_vt(ijk) + delz_vb(ijkp))
698  theta_vt_bar(ijk) = one - theta_vt(ijk)
699 
700  IF ((theta_vt(ijk)>=one).OR.(theta_vt(ijk)<=zero)) THEN
701  theta_vt(ijk) = half
702  theta_vt_bar(ijk) = half
703  ENDIF
704 
705 ! Location of the interpolated velocity along Top face
706 ! Zt has not moved based on definition of Theta_Ut
707 
708  xt = theta_vt_bar(ijk) * x_v(ijk) + theta_vt(ijk) * x_v(ijkp)
709  yt = theta_vt_bar(ijk) * y_v(ijk) + theta_vt(ijk) * y_v(ijkp)
710  zt = z_node(8)
711 
712  CALL get_del_h(ijk,'V_MOMENTUM',x_v_tc(ijk),y_v_tc(ijk),z_v_tc(ijk),delh_tc,nx,ny,nz)
713 
714  CALL get_del_h(ijk,'V_MOMENTUM',xt,yt,zt,delh_t,nx,ny,nz)
715 
716  IF((delh_tc == undefined).OR.(delh_t == undefined)) THEN
717  alpha_vt_c(ijk) = one
718  ELSE
719  alpha_vt_c(ijk) = dmin1(alpha_max , delh_tc / delh_t )
720  ENDIF
721 
722  IF(blocked_v_cell_at(ijkp)) alpha_vt_c(ijk) = zero
723  IF(wall_v_at(ijk).AND.wall_v_at(ijkp)) alpha_vt_c(ijk) = zero
724  IF(k == kend1) alpha_vt_c(ijk) = one
725 
726  IF(alpha_vt_c(ijk)<zero) alpha_vt_c(ijk) = one
727 
728 !======================================================================
729 ! Get Non-Ortogonality correction factor at Top face
730 !======================================================================
731 
732  sx = x_v(ijkp) - x_v(ijk)
733  sy = y_v(ijkp) - y_v(ijk)
734  sz = z_v(ijkp) - z_v(ijk)
735 
736  noc_v_t(ijk) = (sx * nx + sy * ny)/(sz * delh_t)
737 
738 
739  IF(blocked_v_cell_at(ijkp)) noc_v_t(ijk) = zero
740  IF(wall_v_at(ijk).AND.wall_v_at(ijkp)) noc_v_t(ijk) = zero
741  IF(k == kend1) noc_v_t(ijk) = zero
742 
743  ENDIF
744 
745  ENDIF
746 
747 !======================================================================
748 ! Get Surfaces used to compute pressure gradient
749 !======================================================================
750 
751  IF ( cut_v_cell_at(ijk) ) THEN
752 
753  SELECT CASE (pg_option)
754 
755  CASE(0) ! do nothing
756  ! will be treated below
757 
758  CASE(1)
759 
760  a_vpg_n(ijk) = dmax1(axz_v(ijk),axz_v(ijmk))
761  a_vpg_s(ijk) = a_vpg_n(ijk)
762 
763  CASE(2)
764 
765  a_vpg_n(ijk) = axz_v(ijk)
766  a_vpg_s(ijk) = axz_v(ijmk)
767 
768 
769  CASE DEFAULT
770 
771  WRITE(*,*)'INVALID PRESSURE GRADIENT OPTION:',pg_option
772  WRITE(*,*)'PG_OPTION SHOULD BE SET EQUAL TO 0, 1 OR 2.'
773  WRITE(*,*)'PLEASE VERIFY MFIX.DAT FILE AND TRY AGAIN.'
774  WRITE(*,*) 'MFIX WILL EXIT NOW.'
775  CALL mfix_exit(mype)
776 
777  END SELECT
778 
779 
780  IF (blocked_cell_at(ijk).OR.blocked_cell_at(ijpk)) THEN
781  IF(.NOT.wall_v_at(ijk)) THEN
782  wall_v_at(ijk) = .true.
783  flag_n(ijk) = 0
784  IF(print_warnings) THEN
785  WRITE(*,*) 'WARNING: ONLY ONE PRESSURE NODE DETECTED IN V-MOMENTUM CELL IJK =',ijk
786  WRITE(*,*) 'RESETTING U-MOMENTUM CELL AS V_WALL CELL.'
787  ENDIF
788 ! write(*,*) 'MFiX will exit now.'
789 ! CALL MFIX_EXIT(myPE)
790  ENDIF
791  ENDIF
792 
793  ELSE
794 
795  a_vpg_n(ijk) = axz_v(ijk)
796  a_vpg_s(ijk) = axz_v(ijk)
797 
798  ENDIF
799 
800  ENDIF
801  END DO
802 
803  IF(pg_option==0) THEN
804  a_vpg_n = axz
805  a_vpg_s = axz
806  ENDIF
807 
808  RETURN
809 
810  END SUBROUTINE get_3d_alpha_v_cut_cell
811 
812 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
813 ! C
814 ! Module name: GET_3D_ALPHA_W_CUT_CELL C
815 ! Purpose: Calculate the correction term alpha_W C
816 ! for W-momentum cut cells, C
817 ! C
818 ! Author: Jeff Dietiker Date: 21-Feb-08 C
819 ! Reviewer: Date: C
820 ! C
821 ! Revision Number # Date: ##-###-## C
822 ! Author: # C
823 ! Purpose: # C
824 ! C
825 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
826  SUBROUTINE get_3d_alpha_w_cut_cell
828  USE bc
829  USE compar, ONLY: iend1, jend1, kend1, ijkstart3, ijkend3, mype, pe_io
830  USE cutcell
831  USE exit, only: mfix_exit
832  USE functions, ONLY: funijk
833  USE geometry, ONLY: axy, axy_w, flag_t
834  USE indices, ONLY: i_of, j_of, k_of
835  USE param1, ONLY: half, one, undefined, zero
836 
837  IMPLICIT NONE
838  DOUBLE PRECISION:: Xe,Ye,Ze,Xn,Yn,Zn,Xt,Yt,Zt
839  INTEGER :: I,J,K,IM,JM,KM,IP,JP,KP,IJK,IMJK,IJMK,IPJK,IJPK,IJKM,IJKP
840  DOUBLE PRECISION :: Zi
841  DOUBLE PRECISION :: Sx,Sy,Sz
842  DOUBLE PRECISION :: Nx,Ny,Nz
843  DOUBLE PRECISION :: DELH_ec , DELH_e
844  DOUBLE PRECISION :: DELH_nc , DELH_n
845  DOUBLE PRECISION :: DELH_tc , DELH_t
846  LOGICAL :: U_NODE_AT_TE, U_NODE_AT_BE
847  LOGICAL :: V_NODE_AT_TN, V_NODE_AT_BN
848  INTEGER :: BCV
849  INTEGER ::BCT
850 
851  IF(mype == pe_io) THEN
852  WRITE(*,10)'COMPUTING INTERPOLATION FACTORS IN W-MOMENTUM CELLS...'
853  ENDIF
854 10 FORMAT(1x,a)
855 
856  delh_w = undefined
857 
858  theta_w_te = half
859  theta_w_be = half
860  theta_w_tn = half
861  theta_w_bn = half
862  theta_wt = half
864  theta_we = half
866  alpha_we_c = one
867  noc_w_e = zero
868  theta_wn = half
870  alpha_wn_c = one
871  noc_w_n = zero
872  alpha_wt_c = one
873  noc_w_t = zero
874  a_wpg_t = axy_w
875  a_wpg_b = axy_w
876 
877  DO ijk = ijkstart3, ijkend3
878  IF(interior_cell_at(ijk)) THEN
879 
880  i = i_of(ijk)
881  j = j_of(ijk)
882  k = k_of(ijk)
883 
884  im = i - 1
885  jm = j - 1
886  km = k - 1
887 
888  ip = i + 1
889  jp = j + 1
890  kp = k + 1
891 
892  imjk = funijk(im,j,k)
893  ipjk = funijk(ip,j,k)
894  ijmk = funijk(i,jm,k)
895  ijpk = funijk(i,jp,k)
896  ijkm = funijk(i,j,km)
897  ijkp = funijk(i,j,kp)
898 
899  CALL get_cell_node_coordinates(ijk,'W_MOMENTUM')
900 
901 !======================================================================
902 ! Get Interpolation factors at East face
903 !======================================================================
904 
905  u_node_at_te = ((.NOT.blocked_u_cell_at(ijkp)).AND.(.NOT.wall_u_at(ijkp)))
906  u_node_at_be = ((.NOT.blocked_u_cell_at(ijk)).AND.(.NOT.wall_u_at(ijk)))
907 
908 
909  IF(u_node_at_te.AND.u_node_at_be) THEN
910  theta_w_te(ijk) = (z_w_ec(ijk) - z_u(ijk) ) / (z_u(ijkp) - z_u(ijk))
911  theta_w_be(ijk) = one - theta_w_te(ijk)
912  ELSE IF (u_node_at_be.AND.(.NOT.u_node_at_te)) THEN
913  zi = half * (zt_w_int(ijk) + zt_w_int(ijmk))
914  theta_w_te(ijk) = (z_w_ec(ijk) - z_u(ijk) ) / (zi - z_u(ijk))
915  theta_w_be(ijk) = one - theta_w_te(ijk)
916  ELSE IF ((.NOT.u_node_at_be).AND.u_node_at_te) THEN
917  zi = half * (zt_w_int(ijk) + zt_w_int(ijmk))
918  theta_w_te(ijk) = (z_w_ec(ijk) - zi) / (z_u(ijkp) - zi)
919  theta_w_be(ijk) = one - theta_w_te(ijk)
920  ELSE
921  theta_w_te(ijk) = zero
922  theta_w_be(ijk) = zero
923  ENDIF
924 
925  IF ((theta_w_te(ijk)>=one).OR.(theta_w_te(ijk)<=zero)) THEN
926  theta_w_te(ijk) = half
927  theta_w_be(ijk) = half
928  ENDIF
929 
930 !======================================================================
931 ! Get Interpolation factors at North face
932 !======================================================================
933 
934  v_node_at_tn = ((.NOT.blocked_v_cell_at(ijkp)).AND.(.NOT.wall_v_at(ijkp)))
935  v_node_at_bn = ((.NOT.blocked_v_cell_at(ijk)).AND.(.NOT.wall_v_at(ijk)))
936 
937 
938  IF(v_node_at_tn.AND.v_node_at_bn) THEN
939  theta_w_tn(ijk) = (z_w_nc(ijk) - z_v(ijk) ) / (z_v(ijkp) - z_v(ijk))
940  theta_w_bn(ijk) = one - theta_w_tn(ijk)
941  ELSE IF (v_node_at_bn.AND.(.NOT.v_node_at_tn)) THEN
942  zi = half * (zt_w_int(ijk) + zt_w_int(imjk))
943  theta_w_tn(ijk) = (z_w_nc(ijk) - z_v(ijk) ) / (zi - z_v(ijk))
944  theta_w_bn(ijk) = one - theta_w_bn(ijk)
945  ELSE IF ((.NOT.v_node_at_bn).AND.v_node_at_tn) THEN
946  zi = half * (zt_w_int(ijk) + zt_w_int(imjk))
947  theta_w_tn(ijk) = (z_w_nc(ijk) - zi) / (z_v(ijkp) - zi)
948  theta_w_bn(ijk) = one - theta_w_bn(ijk)
949  ELSE
950  theta_w_tn(ijk) = zero
951  theta_w_bn(ijk) = zero
952  ENDIF
953 
954  IF ((theta_w_tn(ijk)>=one).OR.(theta_w_tn(ijk)<=zero)) THEN
955  theta_w_tn(ijk) = half
956  theta_w_bn(ijk) = half
957  ENDIF
958 
959 !======================================================================
960 ! Get Interpolation factors at Top face
961 !======================================================================
962 
963  theta_wt(ijk) = delz_wt(ijk) / (delz_wt(ijk) + delz_wb(ijkp))
964  theta_wt_bar(ijk) = one - theta_wt(ijk)
965 
966  IF ((theta_wt(ijk)>=one).OR.(theta_wt(ijk)<=zero)) THEN
967  theta_wt(ijk) = half
968  theta_wt_bar(ijk) = half
969  ENDIF
970 
971  bcv = bc_w_id(ijk)
972  IF(bcv>0) THEN
973  bct = bc_type_enum(bcv)
974  ELSE
975  bct = blank
976  ENDIF
977 
978  IF(bct ==cg_nsw.OR.bct ==cg_psw) THEN
979 
980  CALL get_del_h(ijk,'W_MOMENTUM',x_w(ijk),y_w(ijk),z_w(ijk),delh_w(ijk),nx,ny,nz)
981 
982  IF(delh_w(ijk)<zero.AND.(.NOT.wall_w_at(ijk))) THEN
983  WRITE(*,*) 'NEGATIVE DELH-W AT XYZ=', x_w(ijk),y_w(ijk),z_w(ijk)
984  WRITE(*,*) 'DELH_W=', delh_w(ijk)
985  WRITE(*,*) 'AXY=', axy(ijk)
986  WRITE(*,*) 'MFIX WILL EXIT NOW.'
987  CALL mfix_exit(mype)
988  ENDIF
989 
990 !======================================================================
991 ! Get Alpha Correction factors at East face
992 !======================================================================
993 
994  theta_we(ijk) = delx_we(ijk) / (delx_we(ijk) + delx_ww(ipjk))
995  theta_we_bar(ijk) = one - theta_we(ijk)
996 
997  IF ((theta_we(ijk)>=one).OR.(theta_we(ijk)<=zero)) THEN
998  theta_we(ijk) = half
999  theta_we_bar(ijk) = half
1000  ENDIF
1001 
1002 ! Location of the interpolated velocity along East face
1003 ! Xe has not moved based on definition of Theta_Ve
1004  xe = x_node(8)
1005  ye = theta_we_bar(ijk) * y_w(ijk) +theta_we(ijk) * y_w(ipjk)
1006  ze = theta_we_bar(ijk) * z_w(ijk) +theta_we(ijk) * z_w(ipjk)
1007 
1008  CALL get_del_h(ijk,'W_MOMENTUM',x_w_ec(ijk),y_w_ec(ijk),z_w_ec(ijk),delh_ec,nx,ny,nz)
1009 
1010  CALL get_del_h(ijk,'W_MOMENTUM',xe,ye,ze,delh_e,nx,ny,nz)
1011 
1012 
1013  IF((delh_ec == undefined).OR.(delh_e == undefined)) THEN
1014  alpha_we_c(ijk) = one
1015  ELSE
1016  alpha_we_c(ijk) = dmin1(alpha_max , delh_ec / delh_e )
1017  ENDIF
1018 
1019  IF(blocked_w_cell_at(ipjk)) alpha_we_c(ijk) = zero
1020  IF(wall_w_at(ijk).AND.wall_w_at(ipjk)) alpha_we_c(ijk) = zero
1021  IF(i == iend1) alpha_we_c(ijk) = one
1022 
1023  IF(alpha_we_c(ijk)<zero) alpha_we_c(ijk) = one
1024 
1025 !======================================================================
1026 ! Get Non-Ortogonality correction factor at East face
1027 !======================================================================
1028 
1029  sx = x_w(ipjk) - x_w(ijk)
1030  sy = y_w(ipjk) - y_w(ijk)
1031  sz = z_w(ipjk) - z_w(ijk)
1032 
1033  noc_w_e(ijk) = (sy * ny + sz * nz)/(sx * delh_e)
1034 
1035 
1036  IF(blocked_w_cell_at(ipjk)) noc_w_e(ijk) = zero
1037  IF(wall_w_at(ijk).AND.wall_w_at(ipjk)) noc_w_e(ijk) = zero
1038  IF(i == iend1) noc_w_e(ijk) = zero
1039 
1040 !======================================================================
1041 ! Get Alpha Correction factors at North face
1042 !======================================================================
1043 
1044  theta_wn(ijk) = dely_wn(ijk) / (dely_wn(ijk) + dely_ws(ijpk))
1045  theta_wn_bar(ijk) = one - theta_wn(ijk)
1046 
1047  IF ((theta_wn(ijk)>=one).OR.(theta_wn(ijk)<=zero)) THEN
1048  theta_wn(ijk) = half
1049  theta_wn_bar(ijk) = half
1050  ENDIF
1051 
1052 
1053 ! Location of the interpolated velocity along north face
1054 ! Yn has not moved based on definition of Theta_V
1055 
1056  xn = theta_wn_bar(ijk) * x_w(ijk) + theta_wn(ijk) * x_w(ijpk)
1057  yn = y_node(8)
1058  zn = theta_wn_bar(ijk) * z_w(ijk) + theta_wn(ijk) * z_w(ijpk)
1059 
1060  CALL get_del_h(ijk,'W_MOMENTUM',x_w_nc(ijk),y_w_nc(ijk),z_w_nc(ijk),delh_nc,nx,ny,nz)
1061 
1062  CALL get_del_h(ijk,'W_MOMENTUM',xn,yn,zn,delh_n,nx,ny,nz)
1063 
1064  IF((delh_nc == undefined).OR.(delh_n == undefined)) THEN
1065  alpha_wn_c(ijk) = one
1066  ELSE
1067  alpha_wn_c(ijk) = dmin1(alpha_max , delh_nc / delh_n )
1068  ENDIF
1069 
1070  IF(blocked_w_cell_at(ijpk)) alpha_wn_c(ijk) = zero
1071  IF(wall_w_at(ijk).AND.wall_w_at(ijpk)) alpha_wn_c(ijk) = zero
1072  IF(j == jend1) alpha_wn_c(ijk) = one
1073 
1074  IF(alpha_wn_c(ijk)<zero) alpha_wn_c(ijk) = one
1075 
1076 !======================================================================
1077 ! Get Non-Ortogonality correction factor at North face
1078 !======================================================================
1079 
1080  sx = x_w(ijpk) - x_w(ijk)
1081  sy = y_w(ijpk) - y_w(ijk)
1082  sz = z_w(ijpk) - z_w(ijk)
1083 
1084  noc_w_n(ijk) = (sx * nx + sz * nz)/(sy * delh_n)
1085 
1086  IF(blocked_w_cell_at(ijpk)) noc_w_n(ijk) = zero
1087  IF(wall_w_at(ijk).AND.wall_w_at(ijpk)) noc_w_n(ijk) = zero
1088  IF(j == jend1) noc_w_n(ijk) = zero
1089 
1090 !======================================================================
1091 ! Get Alpha Correction factors at Top face
1092 !======================================================================
1093 
1094 ! Location of the interpolated velocity along Top face
1095 ! Zt has not moved based on definition of Theta_Ut
1096 
1097  xt = theta_wt_bar(ijk) * x_w(ijk) + theta_wt(ijk) * x_w(ijkp)
1098  yt = theta_wt_bar(ijk) * y_w(ijk) + theta_wt(ijk) * y_w(ijkp)
1099  zt = z_node(8)
1100 
1101  CALL get_del_h(ijk,'W_MOMENTUM',x_w_tc(ijk),y_w_tc(ijk),z_w_tc(ijk),delh_tc,nx,ny,nz)
1102 
1103  CALL get_del_h(ijk,'W_MOMENTUM',xt,yt,zt,delh_t,nx,ny,nz)
1104 
1105  IF((delh_tc == undefined).OR.(delh_t == undefined)) THEN
1106  alpha_wt_c(ijk) = one
1107  ELSE
1108  alpha_wt_c(ijk) = dmin1(alpha_max , delh_tc / delh_t )
1109  ENDIF
1110 
1111  IF(blocked_w_cell_at(ijkp)) alpha_wt_c(ijk) = zero
1112  IF(wall_w_at(ijk).AND.wall_w_at(ijkp)) alpha_wt_c(ijk) = zero
1113  IF(k == kend1) alpha_wt_c(ijk) = one
1114 
1115  IF(alpha_wt_c(ijk)<zero) THEN
1116  WRITE(*,*) 'NEGATIVE ALPHA_Wt_c at IJK=',ijk
1117  WRITE(*,*) 'MFIX WILL EXIT NOW.'
1118  CALL mfix_exit(mype)
1119  ENDIF
1120 
1121 !======================================================================
1122 ! Get Non-Ortogonality correction factor at Top face
1123 !======================================================================
1124 
1125  sx = x_w(ijkp) - x_w(ijk)
1126  sy = y_w(ijkp) - y_w(ijk)
1127  sz = z_w(ijkp) - z_w(ijk)
1128 
1129  noc_w_t(ijk) = (sx * nx + sy * ny)/(sz * delh_t)
1130 
1131  IF(blocked_w_cell_at(ijkp)) noc_w_t(ijk) = zero
1132  IF(wall_w_at(ijk).AND.wall_w_at(ijkp)) noc_w_t(ijk) = zero
1133  IF(k == kend1) noc_w_t(ijk) = zero
1134 
1135  ENDIF
1136 
1137 !======================================================================
1138 ! Get Surfaces used to compute pressure gradient
1139 !======================================================================
1140 
1141  IF ( cut_w_cell_at(ijk) ) THEN
1142 
1143  SELECT CASE (pg_option)
1144 
1145  CASE(0) ! do nothing
1146  ! will be treated below
1147 
1148  CASE(1)
1149 
1150  a_wpg_t(ijk) = dmax1(axy_w(ijk),axy_w(ijkm))
1151  a_wpg_b(ijk) = a_wpg_t(ijk)
1152 
1153  CASE(2)
1154 
1155  a_wpg_t(ijk) = axy_w(ijk)
1156  a_wpg_b(ijk) = axy_w(ijkm)
1157 
1158  CASE DEFAULT
1159 
1160  WRITE(*,*)'INVALID PRESSURE GRADIENT OPTION:',pg_option
1161  WRITE(*,*)'PG_OPTION SHOULD BE SET EQUAL TO 0, 1 OR 2.'
1162  WRITE(*,*)'PLEASE VERIFY MFIX.DAT FILE AND TRY AGAIN.'
1163  WRITE(*,*) 'MFIX WILL EXIT NOW.'
1164  CALL mfix_exit(mype)
1165 
1166  END SELECT
1167 
1168  IF (blocked_cell_at(ijk).OR.blocked_cell_at(ijkp)) THEN
1169  IF(.NOT.wall_w_at(ijk)) THEN
1170  wall_w_at(ijk) = .true.
1171  flag_t(ijk) = 0
1172  IF(print_warnings) THEN
1173  WRITE(*,*) 'WARNING: ONLY ONE PRESSURE NODE DETECTED IN W-MOMENTUM CELL IJK =',ijk
1174  WRITE(*,*) 'RESETTING U-MOMENTUM CELL AS W_WALL CELL.'
1175  ENDIF
1176 ! write(*,*) 'MFiX will exit now.'
1177 ! CALL MFIX_EXIT(myPE)
1178  ENDIF
1179  ENDIF
1180 
1181  ELSE
1182 
1183  a_wpg_t(ijk) = axy_w(ijk)
1184  a_wpg_b(ijk) = axy_w(ijk)
1185 
1186  ENDIF
1187 
1188  ENDIF
1189  END DO
1190 
1191  IF(pg_option==0) THEN
1192  a_wpg_t = axy
1193  a_wpg_b = axy
1194  ENDIF
1195 
1196  RETURN
1197 
1198  END SUBROUTINE get_3d_alpha_w_cut_cell
double precision, dimension(:), allocatable theta_wn
Definition: cutcell_mod.f:302
double precision, dimension(:), allocatable delx_we
Definition: cutcell_mod.f:151
double precision, dimension(:), allocatable theta_un
Definition: cutcell_mod.f:222
double precision, dimension(:), allocatable y_v
Definition: cutcell_mod.f:55
double precision, dimension(:), allocatable alpha_ut_c
Definition: cutcell_mod.f:231
double precision, dimension(:), allocatable theta_w_tn
Definition: cutcell_mod.f:290
double precision, dimension(:), allocatable dely_vn
Definition: cutcell_mod.f:146
double precision, dimension(:), allocatable y_v_nc
Definition: cutcell_mod.f:176
double precision, dimension(:), allocatable z_u
Definition: cutcell_mod.f:51
double precision, dimension(:), allocatable noc_v_t
Definition: cutcell_mod.f:270
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable wall_u_at
Definition: cutcell_mod.f:126
logical, dimension(:), allocatable cut_u_cell_at
Definition: cutcell_mod.f:356
integer ijkend3
Definition: compar_mod.f:80
integer kend1
Definition: compar_mod.f:80
double precision, dimension(:), allocatable delx_uw
Definition: cutcell_mod.f:138
double precision, dimension(:), allocatable alpha_vt_c
Definition: cutcell_mod.f:269
double precision, dimension(:), allocatable theta_u_ne
Definition: cutcell_mod.f:213
integer iend1
Definition: compar_mod.f:80
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(:), allocatable dely_ws
Definition: cutcell_mod.f:154
double precision alpha_max
Definition: cutcell_mod.f:386
double precision, dimension(:), allocatable a_wpg_t
Definition: cutcell_mod.f:311
double precision, dimension(:), allocatable x_v_nc
Definition: cutcell_mod.f:175
double precision, dimension(:), allocatable a_vpg_s
Definition: cutcell_mod.f:273
double precision, dimension(:), allocatable z_v_nc
Definition: cutcell_mod.f:177
double precision, dimension(:), allocatable delh_u
Definition: cutcell_mod.f:200
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
double precision, dimension(:), allocatable z_u_nc
Definition: cutcell_mod.f:165
double precision, dimension(:), allocatable noc_w_n
Definition: cutcell_mod.f:306
double precision, dimension(0:15) z_node
Definition: cutcell_mod.f:76
double precision, dimension(:), allocatable x_v_ec
Definition: cutcell_mod.f:171
double precision, dimension(:), allocatable theta_u_nw
Definition: cutcell_mod.f:214
double precision, dimension(:), allocatable x_u
Definition: cutcell_mod.f:49
double precision, dimension(:), allocatable noc_v_n
Definition: cutcell_mod.f:264
subroutine get_3d_alpha_u_cut_cell
Definition: get_alpha.f:16
double precision, dimension(:), allocatable alpha_ve_c
Definition: cutcell_mod.f:260
double precision, dimension(0:15) y_node
Definition: cutcell_mod.f:75
double precision, dimension(:), allocatable theta_w_bn
Definition: cutcell_mod.f:291
subroutine get_3d_alpha_v_cut_cell
Definition: get_alpha.f:421
double precision, dimension(:), allocatable x_w_ec
Definition: cutcell_mod.f:183
logical, dimension(:), allocatable wall_v_at
Definition: cutcell_mod.f:127
logical print_warnings
Definition: cutcell_mod.f:416
subroutine get_3d_alpha_w_cut_cell
Definition: get_alpha.f:827
double precision, dimension(:), allocatable delx_ww
Definition: cutcell_mod.f:152
double precision, dimension(:), allocatable theta_wn_bar
Definition: cutcell_mod.f:303
double precision, dimension(:), allocatable theta_wt
Definition: cutcell_mod.f:293
double precision, dimension(:), allocatable delx_ue
Definition: cutcell_mod.f:137
double precision, dimension(:), allocatable x_v_tc
Definition: cutcell_mod.f:179
double precision, dimension(:), allocatable y_w_ec
Definition: cutcell_mod.f:184
double precision, dimension(:), allocatable z_u_ec
Definition: cutcell_mod.f:161
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
double precision, dimension(:), allocatable noc_u_n
Definition: cutcell_mod.f:226
double precision, dimension(:), allocatable ayz_u
Definition: geometry_mod.f:218
double precision, dimension(:), allocatable z_w_nc
Definition: cutcell_mod.f:189
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(:), allocatable delz_wt
Definition: cutcell_mod.f:155
double precision, dimension(:), allocatable y_w
Definition: cutcell_mod.f:60
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
double precision, dimension(:), allocatable z_v
Definition: cutcell_mod.f:56
double precision, dimension(:), allocatable delh_v
Definition: cutcell_mod.f:238
double precision, dimension(:), allocatable delz_vt
Definition: cutcell_mod.f:148
double precision, dimension(:), allocatable alpha_ue_c
Definition: cutcell_mod.f:219
double precision, dimension(:), allocatable theta_we_bar
Definition: cutcell_mod.f:297
double precision, dimension(:), allocatable dely_vs
Definition: cutcell_mod.f:147
double precision, dimension(:), allocatable theta_ut
Definition: cutcell_mod.f:228
double precision, dimension(:), allocatable x_w_nc
Definition: cutcell_mod.f:187
double precision, dimension(:), allocatable alpha_wt_c
Definition: cutcell_mod.f:308
double precision, dimension(:), allocatable theta_wt_bar
Definition: cutcell_mod.f:294
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:), allocatable dely_wn
Definition: cutcell_mod.f:153
integer pe_io
Definition: compar_mod.f:30
double precision, dimension(:), allocatable alpha_wn_c
Definition: cutcell_mod.f:305
logical, dimension(:), allocatable blocked_w_cell_at
Definition: cutcell_mod.f:366
double precision, dimension(:), allocatable theta_u_tw
Definition: cutcell_mod.f:217
double precision, dimension(:), allocatable theta_vn_bar
Definition: cutcell_mod.f:252
integer, dimension(:), allocatable bc_u_id
Definition: cutcell_mod.f:434
double precision, dimension(:), allocatable noc_w_e
Definition: cutcell_mod.f:300
double precision, dimension(:), allocatable x_w
Definition: cutcell_mod.f:59
double precision, dimension(:), allocatable x_u_tc
Definition: cutcell_mod.f:167
subroutine mfix_exit(myID, normal_termination)
Definition: exit.f:5
double precision, dimension(:), allocatable theta_vt_bar
Definition: cutcell_mod.f:267
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable dely_us
Definition: cutcell_mod.f:140
double precision, dimension(:), allocatable y_u_tc
Definition: cutcell_mod.f:168
double precision, dimension(:), allocatable y_v_ec
Definition: cutcell_mod.f:172
logical, dimension(:), allocatable wall_w_at
Definition: cutcell_mod.f:128
double precision, dimension(:), allocatable theta_v_ne
Definition: cutcell_mod.f:248
double precision, dimension(:), allocatable z_v_ec
Definition: cutcell_mod.f:173
double precision, dimension(:), allocatable x_w_tc
Definition: cutcell_mod.f:191
double precision, dimension(:), allocatable theta_ut_bar
Definition: cutcell_mod.f:229
integer, dimension(:), allocatable bc_w_id
Definition: cutcell_mod.f:436
Definition: exit.f:2
double precision, dimension(:), allocatable alpha_un_c
Definition: cutcell_mod.f:225
subroutine get_cell_node_coordinates(IJK, TYPE_OF_CELL)
double precision, dimension(:), allocatable noc_u_t
Definition: cutcell_mod.f:232
double precision, dimension(:), allocatable delz_wb
Definition: cutcell_mod.f:156
double precision, dimension(:), allocatable z_w_tc
Definition: cutcell_mod.f:193
double precision, dimension(:), allocatable theta_un_bar
Definition: cutcell_mod.f:223
double precision, dimension(:), allocatable y_w_nc
Definition: cutcell_mod.f:188
double precision, dimension(:), allocatable theta_vn
Definition: cutcell_mod.f:251
double precision, dimension(:), allocatable zt_w_int
Definition: cutcell_mod.f:346
logical, dimension(:), allocatable blocked_u_cell_at
Definition: cutcell_mod.f:364
double precision, dimension(:), allocatable alpha_we_c
Definition: cutcell_mod.f:299
integer pg_option
Definition: cutcell_mod.f:393
logical, dimension(:), allocatable cut_w_cell_at
Definition: cutcell_mod.f:358
double precision, dimension(:), allocatable x_u_ec
Definition: cutcell_mod.f:159
double precision, dimension(:), allocatable noc_u_e
Definition: cutcell_mod.f:220
double precision, dimension(:), allocatable theta_ue
Definition: cutcell_mod.f:210
double precision, dimension(:), allocatable x_v
Definition: cutcell_mod.f:54
double precision, parameter half
Definition: param1_mod.f:28
double precision, dimension(:), allocatable theta_v_nt
Definition: cutcell_mod.f:254
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
integer, dimension(:), allocatable bc_v_id
Definition: cutcell_mod.f:435
double precision, dimension(:), allocatable delh_w
Definition: cutcell_mod.f:277
double precision, dimension(:), allocatable theta_v_se
Definition: cutcell_mod.f:249
logical no_k
Definition: geometry_mod.f:28
logical, dimension(:), allocatable cut_v_cell_at
Definition: cutcell_mod.f:357
double precision, dimension(:), allocatable delz_ub
Definition: cutcell_mod.f:142
logical, dimension(:), allocatable interior_cell_at
Definition: cutcell_mod.f:40
double precision, dimension(:), allocatable delx_vw
Definition: cutcell_mod.f:145
double precision, dimension(:), allocatable xn_u_int
Definition: cutcell_mod.f:334
integer, dimension(:), allocatable flag_e
Definition: geometry_mod.f:103
logical do_k
Definition: geometry_mod.f:30
integer mype
Definition: compar_mod.f:24
double precision, dimension(:), allocatable theta_ue_bar
Definition: cutcell_mod.f:211
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable noc_w_t
Definition: cutcell_mod.f:309
double precision, dimension(:), allocatable axy_w
Definition: geometry_mod.f:240
double precision, dimension(:), allocatable theta_w_te
Definition: cutcell_mod.f:287
double precision, dimension(:), allocatable y_w_tc
Definition: cutcell_mod.f:192
double precision, dimension(:), allocatable z_w_ec
Definition: cutcell_mod.f:185
double precision, dimension(:), allocatable y_u_ec
Definition: cutcell_mod.f:160
double precision, dimension(:), allocatable a_upg_w
Definition: cutcell_mod.f:235
double precision, dimension(:), allocatable theta_ve_bar
Definition: cutcell_mod.f:258
double precision, dimension(:), allocatable y_u_nc
Definition: cutcell_mod.f:164
double precision, dimension(:), allocatable theta_w_be
Definition: cutcell_mod.f:288
double precision, dimension(:), allocatable delz_vb
Definition: cutcell_mod.f:149
double precision, dimension(:), allocatable theta_vt
Definition: cutcell_mod.f:266
logical, dimension(:), allocatable blocked_v_cell_at
Definition: cutcell_mod.f:365
double precision, dimension(:), allocatable theta_we
Definition: cutcell_mod.f:296
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 a_vpg_n
Definition: cutcell_mod.f:272
double precision, dimension(:), allocatable z_v_tc
Definition: cutcell_mod.f:181
double precision, dimension(:), allocatable z_w
Definition: cutcell_mod.f:61
double precision, dimension(:), allocatable delz_ut
Definition: cutcell_mod.f:141
logical, dimension(:), allocatable blocked_cell_at
Definition: cutcell_mod.f:361
double precision, dimension(:), allocatable dely_un
Definition: cutcell_mod.f:139
double precision, dimension(:), allocatable a_wpg_b
Definition: cutcell_mod.f:312
double precision, dimension(:), allocatable theta_v_st
Definition: cutcell_mod.f:255
integer, dimension(:), allocatable flag_n
Definition: geometry_mod.f:105
double precision, dimension(:), allocatable theta_u_te
Definition: cutcell_mod.f:216
double precision, dimension(:), allocatable noc_v_e
Definition: cutcell_mod.f:261
double precision, dimension(:), allocatable theta_ve
Definition: cutcell_mod.f:257
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
double precision, dimension(0:15) x_node
Definition: cutcell_mod.f:74
integer jend1
Definition: compar_mod.f:80
double precision, dimension(:), allocatable alpha_vn_c
Definition: cutcell_mod.f:263
double precision, dimension(:), allocatable ye_v_int
Definition: cutcell_mod.f:340
Definition: bc_mod.f:23
integer, dimension(:), allocatable flag_t
Definition: geometry_mod.f:107
double precision, dimension(:), allocatable delx_ve
Definition: cutcell_mod.f:144
double precision, dimension(:), allocatable z_u_tc
Definition: cutcell_mod.f:169
double precision, dimension(:), allocatable a_upg_e
Definition: cutcell_mod.f:234
double precision, dimension(:), allocatable x_u_nc
Definition: cutcell_mod.f:163
double precision, dimension(:), allocatable y_v_tc
Definition: cutcell_mod.f:180