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