MFIX  2016-1
adjust_a_w_s.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: ADJUST_A_W_s C
4 ! Purpose: Handle the special case of the center coefficient in C
5 ! W_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_w_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 :: IJK, IJKT, IJKM
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_z_eq(m)) THEN
52 
53 !!$omp parallel do private(IJK,IJKT,IJKM)
54  DO ijk = ijkstart3, ijkend3
55  IF (abs(a_m(ijk,0,m)) < small_number) THEN
56  a_m(ijk,east,m) = zero
57  a_m(ijk,west,m) = zero
58  a_m(ijk,north,m) = zero
59  a_m(ijk,south,m) = zero
60  a_m(ijk,top,m) = zero
61  a_m(ijk,bottom,m) = zero
62  a_m(ijk,0,m) = -one
63  IF (b_m(ijk,m) < zero) THEN
64  ijkt = top_of(ijk)
65  IF (rop_s(ijkt,m)*axy_w(ijk) > small_number) THEN
66  b_m(ijk,m) = sqrt((-b_m(ijk,m)/(rop_s(ijkt,m)*&
67  avg_z_t(one,zero)*axy_w(ijk))))
68  ELSE
69  b_m(ijk,m) = zero
70  ENDIF
71  ELSE IF (b_m(ijk,m) > zero) THEN
72  ijkm = km_of(ijk)
73  IF (rop_s(ijk,m)*axy_w(ijkm) > small_number) THEN
74  b_m(ijk,m) = sqrt(b_m(ijk,m)/(rop_s(ijk,m)*&
75  avg_z_t(zero,one)*axy_w(ijkm)))
76  ELSE
77  b_m(ijk,m) = zero
78  ENDIF
79  ENDIF
80  ENDIF ! end if (abs(a_m(ijk,0,m))<small_number)
81  ENDDO ! end do loop (ijk=ijkstart3,ijkend3)
82 
83  ENDIF ! end if (momentum_z_eq(m))
84  ENDDO ! end do loop (m=1,mmax)
85 
86  RETURN
87  END SUBROUTINE adjust_a_w_s
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_z_eq
Definition: run_mod.f:80
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
double precision, dimension(:), allocatable axy_w
Definition: geometry_mod.f:240
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
subroutine adjust_a_w_s(A_M, B_M)
Definition: adjust_a_w_s.f:16