MFIX  2016-1
dif_w_is.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Subroutine: DIF_W_IS C
4 ! Purpose: Remove diffusive fluxes across internal surfaces. C
5 ! (Make user defined internal surfaces non-conducting) C
6 ! C
7 ! Author: M. Syamlal Date: 30-APR-97 C
8 ! C
9 ! C
10 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
11  SUBROUTINE dif_w_is(DIF, A_M, M)
12 
13 ! Modules
14 !---------------------------------------------------------------------//
15  USE param
16  USE geometry, only: odx_e, ody_n, axz_w, ayz_w
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, jp_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 ! Dummy arguments
30 !---------------------------------------------------------------------//
31 ! Gamma -- diffusion coefficient
32  DOUBLE PRECISION, INTENT(IN) :: Dif(dimension_3)
33 ! Septadiagonal matrix A_m
34  DOUBLE PRECISION, INTENT(INOUT) :: A_m(dimension_3, -3:3, 0:dimension_m)
35 ! Solids phase
36  INTEGER, INTENT(IN) :: M
37 
38 ! Local variables
39 !---------------------------------------------------------------------//
40 ! Diffusion parameter
41  DOUBLE PRECISION :: D_f
42 ! Internal surface
43  INTEGER :: L
44 ! Indices
45  INTEGER :: I, J, K, I1, I2, J1, J2, K1, K2, IJK
46  INTEGER :: IJKE, IJKN, IJKT, IJPK, IPJK, IJKTN, IJKTE
47 !---------------------------------------------------------------------//
48 
49 
50  DO l = 1, dimension_is
51  IF (is_defined(l)) THEN
52  i1 = is_i_w(l)
53  i2 = is_i_e(l)
54  j1 = is_j_s(l)
55  j2 = is_j_n(l)
56  k1 = is_k_b(l)
57  k2 = is_k_t(l)
58 
59  IF (is_plane(l) == 'N') THEN
60  DO k = k1, k2
61  DO j = j1, j2
62  DO i = i1, i2
63  IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
64  IF (dead_cell_at(i,j,k)) cycle ! skip dead cells
65  ijk = funijk(i,j,k)
66  ijkt = top_of(ijk)
67  ijkn = north_of(ijk)
68  ijktn = top_of(ijkn)
69  ijpk = jp_of(ijk)
70 
71  d_f = avg_z_h(avg_y_h(dif(ijk),dif(ijkn),j),&
72  avg_y_h(dif(ijkt),dif(ijktn),j),k)*&
73  ody_n(j)*axz_w(ijk)
74 
75  a_m(ijk,north,m) = a_m(ijk,north,m) - d_f
76  a_m(ijpk,south,m) = a_m(ijpk,south,m) - d_f
77  ENDDO
78  ENDDO
79  ENDDO
80 
81  ELSEIF (is_plane(l) == 'E') THEN
82  DO k = k1, k2
83  DO j = j1, j2
84  DO i = i1, i2
85  IF (.NOT.is_on_mype_plus2layers(i,j,k)) cycle
86  IF (dead_cell_at(i,j,k)) cycle ! skip dead cells
87  ijk = funijk(i,j,k)
88  ijke = east_of(ijk)
89  ijkt = top_of(ijk)
90  ijkte = east_of(ijkt)
91  ipjk = ip_of(ijk)
92 
93  d_f = avg_z_h(avg_x_h(dif(ijk),dif(ijke),i),&
94  avg_x_h(dif(ijkt),dif(ijkte),i),k)*&
95  odx_e(i)*ayz_w(ijk)
96 
97  a_m(ijk,east,m) = a_m(ijk,east,m) - d_f
98  a_m(ipjk,west,m) = a_m(ipjk,west,m) - d_f
99  ENDDO
100  ENDDO
101  ENDDO
102  ENDIF
103 
104  ENDIF ! end if is_defined
105  ENDDO ! end do dimension_is
106  RETURN
107  END SUBROUTINE dif_w_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 ody_n
Definition: geometry_mod.f:123
logical, dimension(:,:,:), allocatable dead_cell_at
Definition: compar_mod.f:127
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
integer, dimension(dimension_is) is_k_b
Definition: is_mod.f:61
integer north
Definition: param_mod.f:37
subroutine dif_w_is(DIF, A_M, M)
Definition: dif_w_is.f:12
integer south
Definition: param_mod.f:41
double precision, dimension(:), allocatable ayz_w
Definition: geometry_mod.f:236
Definition: param_mod.f:2
logical, dimension(dimension_is) is_defined
Definition: is_mod.f:73
integer, dimension(dimension_is) is_j_s
Definition: is_mod.f:53
double precision, dimension(:), allocatable axz_w
Definition: geometry_mod.f:238
integer west
Definition: param_mod.f:33
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
integer, dimension(dimension_is) is_k_t
Definition: is_mod.f:65