MFIX  2016-1
set_index1a.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: SET_INDEX1A(I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, C
4 ! IJKM, IJKP, IJKW, IJKE, IJKS, IJKN, C
5 ! IJKB, IJKT) C
6 ! Purpose: Set the indices of the neighbors of cell ijk (brute force) C
7 ! C
8 ! Author: M. Syamlal Date: 21-JAN-92 C
9 ! Reviewer:M. Syamlal, S. Venkatesan, P. Nicoletti, Date: 29-JAN-92 C
10 ! W. Rogers C
11 ! C
12 ! Revision Number: 1 C
13 ! Purpose: Modify index computations for K for setting periodic C
14 ! boundary conditions in a cylindrical geometry where z goes C
15 ! from 0 to 2 pi C
16 ! Author: M. Syamlal Date: 10-MAR-92 C
17 ! Revision Number: 2 C
18 ! Purpose: Calculate only the nearest neighbor indices.( for code C
19 ! optimization) C
20 ! Author: M. Syamlal Date: 23-SEP-92 C
21 ! Reviewer: M. Syamlal Date: 11-DEC-92 C
22 ! C
23 ! Literature/Document References: C
24 ! C
25 ! Variables referenced: I, J, K, IJK C
26 ! C
27 ! Variables modified: IJKM, IJMK, IMJK, IPJK, IJPK, IJKP, IJKW, IJKE, C
28 ! IJKS, IJKN, IJKB, IJKT C
29 ! C
30 ! Local variables: None C
31 ! C
32 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
33 !
34  SUBROUTINE set_index1a(I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP, &
35  ijkw, ijke, ijks, ijkn, ijkb, ijkt)
36 !...Translated by Pacific-Sierra Research VAST-90 2.06G5 12:17:31 12/09/98
37 !...Switches: -xf
38 !
39 ! Include param.inc file to specify parameter values
40 !
41 !-----------------------------------------------
42 ! M o d u l e s
43 !-----------------------------------------------
44  USE param
45  USE param1
46  USE physprop
47  USE geometry
48  USE compar
49  USE fldvar
50  USE indices
51  USE functions
52  IMPLICIT NONE
53 !-----------------------------------------------
54 ! G l o b a l P a r a m e t e r s
55 !-----------------------------------------------
56 !-----------------------------------------------
57 ! D u m m y A r g u m e n t s
58 !-----------------------------------------------
59  INTEGER I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM, IJKP, IJKW, IJKE, &
60  IJKS, IJKN, IJKB, IJKT
61 !-----------------------------------------------
62 ! L o c a l P a r a m e t e r s
63 !-----------------------------------------------
64 !-----------------------------------------------
65 ! L o c a l V a r i a b l e s
66 !-----------------------------------------------
67  LOGICAL :: TRUE_CORNER
68 !-----------------------------------------------
69 
70  imjk = undefined_i
71  ipjk = undefined_i
72  ijmk = undefined_i
73  ijpk = undefined_i
74  ijkm = undefined_i
75  ijkp = undefined_i
76  ijkw = undefined_i
77  ijke = undefined_i
78  ijks = undefined_i
79  ijkn = undefined_i
80  ijkb = undefined_i
81  ijkt = undefined_i
82  true_corner = .false.
83 
84 
85  IF(im1(i).NE.undefined_i) THEN
86 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IM1(I),JM1(J),K)).OR.&
87 ! WALL_AT(BOUND_FUNIJK(IM1(I),J,KM1(K))))
88 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IM1(I),JP1(J),K)).OR.&
89 ! WALL_AT(BOUND_FUNIJK(IM1(I),J,KP1(K))))
90 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
91  true_corner = .false.
92  true_corner = true_corner.OR.i_of(ijk).EQ.imin1
93  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
94  imjk = ijk
95  ELSE
96  imjk = bound_funijk(im1(i),j,k)
97  ENDIF
98 !
99 ! IJKW
100 !
101  IF (wall_at(imjk)) THEN
102  ijkw = ijk
103  ELSE
104  ijkw = imjk
105  ENDIF
106  ENDIF
107 
108  IF(ip1(i).NE.undefined_i) THEN
109 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IP1(I),JM1(J),K)).OR.&
110 ! WALL_AT(BOUND_FUNIJK(IP1(I),J,KM1(K))))
111 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IP1(I),JP1(J),K)).OR.&
112 ! WALL_AT(BOUND_FUNIJK(IP1(I),J,KP1(K))))
113 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
114  true_corner = .false.
115  true_corner = true_corner.OR.i_of(ijk).EQ.imax1
116  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
117  ipjk = ijk
118  ELSE
119  ipjk = bound_funijk(ip1(i),j,k)
120  ENDIF
121 !
122 ! IJKE
123 !
124  IF (wall_at(ipjk)) THEN
125  ijke = ijk
126  ELSE
127  ijke = ipjk
128  ENDIF
129  ENDIF
130 
131  IF(jm1(j).NE.undefined_i) THEN
132 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IM1(I),JM1(J),K)).OR.&
133 ! WALL_AT(BOUND_FUNIJK(I,JM1(J),KM1(K))))
134 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IP1(I),JM1(J),K)).OR.&
135 ! WALL_AT(BOUND_FUNIJK(I,JM1(J),KP1(K))))
136 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
137  true_corner = .false.
138  true_corner = true_corner.OR.j_of(ijk).EQ.jmin1
139  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
140  ijmk = ijk
141  ELSE
142  ijmk = bound_funijk(i,jm1(j),k)
143  ENDIF
144 !
145 ! IJKS
146 !
147  IF (wall_at(ijmk)) THEN
148  ijks = ijk
149  ELSE
150  ijks = ijmk
151  ENDIF
152  ENDIF
153 
154  IF(jp1(j).NE.undefined_i) THEN
155 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IM1(I),JP1(J),K)).OR.&
156 ! WALL_AT(BOUND_FUNIJK(I,JP1(J),KM1(K))))
157 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IP1(I),JP1(J),K)).OR.&
158 ! WALL_AT(BOUND_FUNIJK(I,JP1(J),KP1(K))))
159 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
160  true_corner = .false.
161  true_corner = true_corner.OR.j_of(ijk).EQ.jmax1
162  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
163  ijpk = ijk
164  ELSE
165  ijpk = bound_funijk(i,jp1(j),k)
166  ENDIF
167 !
168 ! IJKN
169 !
170  IF (wall_at(ijpk)) THEN
171  ijkn = ijk
172  ELSE
173  ijkn = ijpk
174  ENDIF
175  ENDIF
176 
177  IF(km1(k).NE.undefined_i) THEN
178 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IM1(I),J,KM1(K))).OR.&
179 ! WALL_AT(BOUND_FUNIJK(I,JM1(J),KM1(K))))
180 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IP1(I),J,KM1(K))).OR.&
181 ! WALL_AT(BOUND_FUNIJK(I,JP1(J),KM1(K))))
182 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
183  true_corner = .false.
184  true_corner = true_corner.OR.k_of(ijk).EQ.kmin1
185  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
186  ijkm = ijk
187  ELSE
188  ijkm = bound_funijk(i,j,km1(k))
189  ENDIF
190 !
191 ! IJKB
192 !
193  IF (wall_at(ijkm)) THEN
194  ijkb = ijk
195  ELSE
196  ijkb = ijkm
197  ENDIF
198  ENDIF
199 
200  IF(kp1(k).NE.undefined_i) THEN
201 ! TRUE_CORNER_1 = (WALL_AT(BOUND_FUNIJK(IM1(I),J,KP1(K))).OR.&
202 ! WALL_AT(BOUND_FUNIJK(I,JM1(J),KP1(K))))
203 ! TRUE_CORNER_2 = (WALL_AT(BOUND_FUNIJK(IP1(I),J,KP1(K))).OR.&
204 ! WALL_AT(BOUND_FUNIJK(I,JP1(J),KP1(K))))
205 ! TRUE_CORNER = TRUE_CORNER_1.OR.TRUE_CORNER_2
206  true_corner = .false.
207  true_corner = true_corner.OR.k_of(ijk).EQ.kmax1
208  IF((wall_at(ijk).OR.flow_at(ijk)).AND.true_corner) THEN
209  ijkp = ijk
210  ELSE
211  ijkp = bound_funijk(i,j,kp1(k))
212  ENDIF
213 !
214 ! IJKT
215 !
216  IF (wall_at(ijkp)) THEN
217  ijkt = ijk
218  ELSE
219  ijkt = ijkp
220  ENDIF
221  ENDIF
222 !
223  RETURN
224  END SUBROUTINE set_index1a
225 
226 !// Comments on the modifications for DMP version implementation
227 !// Modified calls to BOUND_FUNIJK to have a self consistent formulation
integer, dimension(:), allocatable ip1
Definition: indices_mod.f:50
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer, dimension(:), allocatable im1
Definition: indices_mod.f:50
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
integer kmax1
Definition: geometry_mod.f:58
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
integer, dimension(:), allocatable jm1
Definition: indices_mod.f:51
integer imax1
Definition: geometry_mod.f:54
integer, dimension(:), allocatable jp1
Definition: indices_mod.f:51
integer, dimension(:), allocatable kp1
Definition: indices_mod.f:52
integer jmax1
Definition: geometry_mod.f:56
Definition: param_mod.f:2
integer jmin1
Definition: geometry_mod.f:42
integer, dimension(:), allocatable km1
Definition: indices_mod.f:52
integer, parameter undefined_i
Definition: param1_mod.f:19
integer imin1
Definition: geometry_mod.f:40
integer kmin1
Definition: geometry_mod.f:44
subroutine set_index1a(I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM,
Definition: set_index1a.f:35