MFIX  2016-1
dif_v_is.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: DIF_V_IS C
4 ! Purpose: Remove diffusive fluxes across internal surfaces. C
5 ! C
6 ! Author: M. Syamlal Date: 30-APR-97 C
7 ! C
8 ! C
9 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
10  SUBROUTINE dif_v_is(DIF, A_M, M)
11 
12 ! Modules
13 !---------------------------------------------------------------------//
14  USE param
15  USE geometry, only: do_k
16  USE geometry, only: odx_e, ox, odz_t, axy_v, ayz_v
17 
18  USE is, only: is_defined, is_plane
19  USE is, only: is_i_w, is_i_e, is_j_s, is_j_n, is_k_t, is_k_b
20 
21  USE fun_avg, only: avg_x_h, avg_y_h, avg_z_h
22 
23  USE functions, only: funijk, ip_of, kp_of
24  USE functions, only: east_of, north_of, top_of
25  USE functions, only: is_on_mype_plus2layers
26 
27  USE compar, only: dead_cell_at
28  IMPLICIT NONE
29 
30 ! Dummy arguments
31 !---------------------------------------------------------------------//
32 ! Gamma -- diffusion coefficient
33  DOUBLE PRECISION, INTENT(IN) :: Dif(dimension_3)
34 ! Septadiagonal matrix A_m
35  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
36 ! Solids phase
37  INTEGER, INTENT(IN) :: M
38 
39 ! Local variables
40 !---------------------------------------------------------------------//
41 ! Internal surface
42  INTEGER :: L
43 ! Indices
44  INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK
45  INTEGER :: IJKE, IJKN, IJKT, IPJK, IJKP, IJKNE, IJKTN
46 ! Diffusion parameter
47  DOUBLE PRECISION :: D_f
48 !---------------------------------------------------------------------//
49 
50 
51 ! Make user defined internal surfaces non-conducting
52  DO l = 1, dimension_is
53  IF (is_defined(l)) THEN
54  i1 = is_i_w(l)
55  i2 = is_i_e(l)
56  j1 = is_j_s(l)
57  j2 = is_j_n(l)
58  k1 = is_k_b(l)
59  k2 = is_k_t(l)
60 
61  IF (is_plane(l) == 'E') THEN
62  DO k = k1, k2
63  DO j = j1, j2
64  DO i = i1, i2
65  IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
66  IF (dead_cell_at(i,j,k)) cycle ! skip dead cells
67  ijk = funijk(i,j,k)
68  ijke = east_of(ijk)
69  ijkn = north_of(ijk)
70  ijkne = east_of(ijkn)
71  ipjk = ip_of(ijk)
72 
73  d_f = avg_y_h(avg_x_h(dif(ijk),dif(ijke),i),&
74  avg_x_h(dif(ijkn),dif(ijkne),i),j)*&
75  odx_e(i)*ayz_v(ijk)
76 
77  a_m(ijk,east,m) = a_m(ijk,east,m) - d_f
78  a_m(ipjk,west,m) = a_m(ipjk,west,m) - d_f
79  ENDDO
80  ENDDO
81  ENDDO
82 
83  ELSEIF (is_plane(l) == 'T') THEN
84  IF (do_k) THEN
85  DO k = k1, k2
86  DO j = j1, j2
87  DO i = i1, i2
88  IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
89  IF (dead_cell_at(i,j,k)) cycle ! skip dead cells
90  ijk = funijk(i,j,k)
91  ijkn = north_of(ijk)
92  ijkt = top_of(ijk)
93  ijktn = north_of(ijkt)
94  ijkp = kp_of(ijk)
95 
96  d_f = avg_y_h(avg_z_h(dif(ijk),dif(ijkt),k),&
97  avg_z_h(dif(ijkn),dif(ijktn),k),j)*&
98  ox(i)*odz_t(k)*axy_v(ijk)
99 
100  a_m(ijk,top,m) = a_m(ijk,top,m) - d_f
101  a_m(ijkp,bottom,m) = a_m(ijkp,bottom,m) - d_f
102  ENDDO
103  ENDDO
104  ENDDO
105  ENDIF
106  ENDIF
107 
108  ENDIF ! end if is_defined
109  ENDDO ! end do dimension_is
110  RETURN
111  END SUBROUTINE dif_v_is
integer, parameter dimension_is
Definition: param_mod.f:63
integer dimension_3
Definition: param_mod.f:11
integer, dimension(dimension_is) is_i_w
Definition: is_mod.f:45
integer east
Definition: param_mod.f:29
character, dimension(dimension_is) is_plane
Definition: is_mod.f:80
Definition: is_mod.f:11
double precision, dimension(:), allocatable ayz_v
Definition: geometry_mod.f:227
logical, dimension(:,:,:), allocatable dead_cell_at
Definition: compar_mod.f:127
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
double precision, dimension(:), allocatable axy_v
Definition: geometry_mod.f:231
integer, dimension(dimension_is) is_k_b
Definition: is_mod.f:61
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
Definition: param_mod.f:2
logical, dimension(dimension_is) is_defined
Definition: is_mod.f:73
subroutine dif_v_is(DIF, A_M, M)
Definition: dif_v_is.f:11
logical do_k
Definition: geometry_mod.f:30
integer, dimension(dimension_is) is_j_s
Definition: is_mod.f:53
integer west
Definition: param_mod.f:33
integer top
Definition: param_mod.f:45
integer, dimension(dimension_is) is_j_n
Definition: is_mod.f:57
integer, dimension(dimension_is) is_i_e
Definition: is_mod.f:49
integer dimension_m
Definition: param_mod.f:18
double precision, dimension(:), allocatable odz_t
Definition: geometry_mod.f:125
integer bottom
Definition: param_mod.f:49
integer, dimension(dimension_is) is_k_t
Definition: is_mod.f:65