MFIX  2016-1
adjust_a_u_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: ADJUST_A_U_s C
4 ! Purpose: Handle the special case of the center coefficient in C
5 ! U_s momentum eq. becoming zero. C
6 ! C
7 ! Author: M. Syamlal Date: 2-AUG-96 C
8 ! Reviewer: Date: C
9 ! C
10 ! Literature/Document References: C
11 ! C
12 ! C
13 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
14 
15  SUBROUTINE adjust_a_u_s(A_M, B_M)
16 
17 !-----------------------------------------------
18 ! Modules
19 !-----------------------------------------------
20  USE param
21  USE param1
22  USE parallel
23  USE fldvar
24  USE physprop
25  USE geometry
26  USE run
27  USE indices
28  USE compar
29  USE sendrecv
30  USE fun_avg
31  USE functions
32  IMPLICIT NONE
33 !-----------------------------------------------
34 ! Dummy Arguments
35 !-----------------------------------------------
36 ! Septadiagonal matrix A_m
37  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
38 ! Vector b_m
39  DOUBLE PRECISION, INTENT(INOUT) :: B_m(dimension_3, 0:dimension_m)
40 !-----------------------------------------------
41 ! Local Variables
42 !-----------------------------------------------
43 ! Indices
44  INTEGER :: I, IP, IJK, IJKE, IMJK
45 ! Phase index
46  INTEGER :: M
47 !-----------------------------------------------
48 
49  DO m = 1, mmax
50  IF (drag_type_enum == ghd_2007 .AND. m /= mmax) cycle
51  IF (momentum_x_eq(m)) THEN
52 
53 !!$omp parallel do private(I, IP, IJK, IJKE, IMJK )
54 
55  DO ijk = ijkstart3, ijkend3
56  IF (abs(a_m(ijk,0,m)) < small_number) THEN
57  a_m(ijk,east,m) = zero
58  a_m(ijk,west,m) = zero
59  a_m(ijk,north,m) = zero
60  a_m(ijk,south,m) = zero
61  a_m(ijk,top,m) = zero
62  a_m(ijk,bottom,m) = zero
63  a_m(ijk,0,m) = -one
64  IF (b_m(ijk,m) < zero) THEN
65  ijke = east_of(ijk)
66  ip = ip1(i_of(ijk))
67  IF (rop_s(ijke,m)*ayz_u(ijk) > small_number) THEN
68  b_m(ijk,m) = sqrt((-b_m(ijk,m)/(rop_s(ijke,m)*&
69  avg_x_e(one,zero,ip)*ayz_u(ijk))))
70  ELSE
71  b_m(ijk,m) = zero
72  ENDIF
73  ELSEIF (b_m(ijk,m) > zero) THEN
74  i = i_of(ijk)
75  imjk = im_of(ijk)
76  IF (rop_s(ijk,m)*ayz_u(imjk) > small_number) THEN
77  b_m(ijk,m) = sqrt(b_m(ijk,m)/(rop_s(ijk,m)*&
78  avg_x_e(zero,one,i)*ayz_u(imjk)))
79  ELSE
80  b_m(ijk,m) = zero
81  ENDIF
82  ENDIF
83  ENDIF ! end if (abs(a_m(ijk,0,m))<small_number)
84  ENDDO ! end do loop (ijk=ijkstart3,ijkend3)
85 
86  ENDIF ! end if (momentum_x_eq(m))
87  ENDDO ! end do loop (m=1,mmax)
88 
89  RETURN
90  END SUBROUTINE adjust_a_u_s
integer, dimension(:), allocatable ip1
Definition: indices_mod.f:50
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
logical, dimension(0:dim_m) momentum_x_eq
Definition: run_mod.f:74
subroutine adjust_a_u_s(A_M, B_M)
Definition: adjust_a_u_s.f:16
double precision, dimension(:), allocatable ayz_u
Definition: geometry_mod.f:218
integer east
Definition: param_mod.f:29
integer mmax
Definition: physprop_mod.f:19
double precision, parameter small_number
Definition: param1_mod.f:24
integer north
Definition: param_mod.f:37
integer south
Definition: param_mod.f:41
Definition: run_mod.f:13
Definition: param_mod.f:2
integer ijkstart3
Definition: compar_mod.f:80
integer west
Definition: param_mod.f:33
integer top
Definition: param_mod.f:45
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
integer dimension_m
Definition: param_mod.f:18
integer bottom
Definition: param_mod.f:49
double precision, parameter zero
Definition: param1_mod.f:27