MFIX  2016-1
corner.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: GET_CORNER_CELLS(IER) C
4 ! Purpose: Identify wall cells with more than one fulid cell as C
5 ! a neighbor. No heat mass, momentum, or energy transfer C is allowed to such cells to avoid ambiguity.
6 ! C
7 ! Author: M. Syamlal Date: 08-JUL-98 C
8 ! Reviewer: Date: C
9 ! C
10 ! C
11 ! Literature/Document References: C
12 ! C
13 ! Variables referenced: C
14 ! Variables modified: C
15 ! C
16 ! Local variables: C
17 ! C
18 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
19 !
20  SUBROUTINE get_corner_cells()
21 !...Translated by Pacific-Sierra Research VAST-90 2.06G5 12:17:31 12/09/98
22 !...Switches: -xf
23 !
24 ! Include param.inc file to specify parameter values
25 !
26 !-----------------------------------------------
27 ! M o d u l e s
28 !-----------------------------------------------
29  USE compar
30  USE corner
31  USE functions
32  USE funits
33  USE geometry
34  USE indices
35  USE machine, only: start_log, end_log
36  USE param
37  USE param1
38  USE physprop
39  IMPLICIT NONE
40 !-----------------------------------------------
41 ! G l o b a l P a r a m e t e r s
42 !-----------------------------------------------
43 !-----------------------------------------------
44 ! L o c a l P a r a m e t e r s
45 !-----------------------------------------------
46 !-----------------------------------------------
47 ! L o c a l V a r i a b l e s
48 !-----------------------------------------------
49 !
50 ! Loop index
51  INTEGER L
52 
53 !
54 ! indices
55  INTEGER IJK, IMJK, IJMK, IJKM, IPJK, IJPK, &
56  IJKP
57 !
58 ! number of faces adjacent to a fluid cell
59  INTEGER NUM
60 !
61 ! fluid face location, whether not a corner
62  LOGICAL dir(-3:3), NotCorner
63 !
64 !-----------------------------------------------
65 
66  ncorn = 0
67 !
68  DO ijk = ijkstart3, ijkend3
69  IF (wall_at(ijk).AND..NOT.cyclic_at(ijk)) THEN
70 !
71 !----------------------------------------------------------------
72  imjk = im_of(ijk)
73  ijmk = jm_of(ijk)
74  ijkm = km_of(ijk)
75  ipjk = ip_of(ijk)
76  ijpk = jp_of(ijk)
77  ijkp = kp_of(ijk)
78 !----------------------------------------------------------------
79  num = 0
80 !
81  IF (fluid_at(imjk)) THEN
82  num = num + 1
83  dir(west) = .true.
84  ELSE
85  dir(west) = .false.
86  ENDIF
87 !
88  IF (fluid_at(ipjk)) THEN
89  num = num + 1
90  dir(east) = .true.
91  ELSE
92  dir(east) = .false.
93  ENDIF
94 !
95  IF (fluid_at(ijmk)) THEN
96  num = num + 1
97  dir(south) = .true.
98  ELSE
99  dir(south) = .false.
100  ENDIF
101 !
102  IF (fluid_at(ijpk)) THEN
103  num = num + 1
104  dir(north) = .true.
105  ELSE
106  dir(north) = .false.
107  ENDIF
108 !
109  IF (fluid_at(ijkm)) THEN
110  num = num + 1
111  dir(bottom) = .true.
112  ELSE
113  dir(bottom) = .false.
114  ENDIF
115 !
116  IF (fluid_at(ijkp)) THEN
117  num = num + 1
118  dir(top) = .true.
119  ELSE
120  dir(top) = .false.
121  ENDIF
122 !
123  IF (num > 1) THEN
124 !
125 !
126  notcorner = .true.
127 !
128 ! check for single cell thick internal walls
129  IF (dir(west) .AND. dir(east) .OR. dir(south) .AND. dir(north) .OR. dir(top)&
130  .AND. dir(bottom)) THEN
131 !
132  IF (notcorner) CALL addcorn (notcorner, ncorn)
133  ENDIF
134 !
135 ! check for corner cells
136 !
137  IF (dir(east)) THEN
138 !
139  IF (dir(north)) THEN
140  IF (notcorner) CALL addcorn (notcorner, ncorn)
141  ENDIF
142 !
143  IF (dir(south)) THEN
144  IF (notcorner) CALL addcorn (notcorner, ncorn)
145  ENDIF
146 !
147  IF (do_k) THEN
148  IF (dir(top)) THEN
149  IF (notcorner) CALL addcorn (notcorner, ncorn)
150  ENDIF
151 !
152  IF (dir(bottom)) THEN
153  IF (notcorner) CALL addcorn (notcorner, ncorn)
154  ENDIF
155  ENDIF
156 !
157  ENDIF
158 !
159  IF (dir(west)) THEN
160 !
161  IF (dir(north)) THEN
162  IF (notcorner) CALL addcorn (notcorner, ncorn)
163  ENDIF
164 !
165  IF (dir(south)) THEN
166  IF (notcorner) CALL addcorn (notcorner, ncorn)
167  ENDIF
168 !
169  IF (do_k) THEN
170  IF (dir(top)) THEN
171  IF (notcorner) CALL addcorn (notcorner, ncorn)
172  ENDIF
173 !
174  IF (dir(bottom)) THEN
175  IF (notcorner) CALL addcorn (notcorner, ncorn)
176  ENDIF
177  ENDIF
178 !
179  ENDIF
180 !
181  IF (dir(north)) THEN
182 !
183 !
184  IF (do_k) THEN
185  IF (dir(top)) THEN
186  IF (notcorner) CALL addcorn (notcorner, ncorn)
187  ENDIF
188 !
189  IF (dir(bottom)) THEN
190  IF (notcorner) CALL addcorn (notcorner, ncorn)
191  ENDIF
192  ENDIF
193 !
194  ENDIF
195 !
196  IF (dir(south)) THEN
197 !
198 !
199  IF (do_k) THEN
200  IF (dir(top)) THEN
201  IF (notcorner) CALL addcorn (notcorner, ncorn)
202  ENDIF
203 !
204  IF (dir(bottom)) THEN
205  IF (notcorner) CALL addcorn (notcorner, ncorn)
206  ENDIF
207  ENDIF
208 !
209  ENDIF
210 !
211  IF (.NOT.notcorner) THEN
212  ijk_corn(ncorn) = ijk
213 !
214  axz(ijk) = zero
215  axz(ijmk) = zero
216  ayz(ijk) = zero
217  ayz(imjk) = zero
218  axy(ijk) = zero
219  axy(ijkm) = zero
220 !
221  axz_u(im_of(ijmk)) = zero
222  axz_u(ijmk) = zero
223  axz_u(imjk) = zero
224  axz_u(ijk) = zero
225 !
226  axy_u(im_of(ijkm)) = zero
227  axy_u(ijkm) = zero
228  axy_u(imjk) = zero
229  axy_u(ijk) = zero
230 !
231  ayz_v(jm_of(imjk)) = zero
232  ayz_v(imjk) = zero
233  ayz_v(ijmk) = zero
234  ayz_v(ijk) = zero
235 !
236  axy_v(jm_of(ijkm)) = zero
237  axy_v(ijkm) = zero
238  axy_v(ijmk) = zero
239  axy_v(ijk) = zero
240 !
241  ayz_w(km_of(imjk)) = zero
242  ayz_w(imjk) = zero
243  ayz_w(ijkm) = zero
244  ayz_w(ijk) = zero
245 !
246  axz_w(km_of(ijmk)) = zero
247  axz_w(ijmk) = zero
248  axz_w(ijkm) = zero
249  axz_w(ijk) = zero
250  ENDIF
251 !
252  ENDIF
253 !
254  ENDIF
255  END DO
256  IF (ncorn > 0) THEN
257  CALL start_log
258  IF(dmp_log)WRITE (unit_log, 1000)
259 !
260  DO l = 1, ncorn
261  ijk = ijk_corn(l)
262  IF(dmp_log)WRITE (unit_log, 1100) ijk, i_of(ijk), j_of(ijk), k_of(ijk)
263  END DO
264  IF(dmp_log)WRITE (unit_log, 1300)
265  CALL end_log
266  ENDIF
267 !
268  RETURN
269 !
270  1000 FORMAT(/1x,70('*')//' From: Get_Corner_Cells',/&
271  ' Warning: The following wall-cells are adjacent to two or',/,&
272  ' more fluid-cells. Mass, momentum, and energy transfer ',/,&
273  ' to these wall-cells have been set to zero.',/,&
274  ' IJK I J K')
275  1100 FORMAT(3x,i6,2x,i4,2x,i4,2x,i4)
276 !
277  1300 FORMAT(/1x,70('*')/)
278  END SUBROUTINE get_corner_cells
279 !
280  SUBROUTINE addcorn(NOTCORNER, NCORN)
281 !...Translated by Pacific-Sierra Research VAST-90 2.06G5 12:17:31 12/09/98
282 !...Switches: -xf
283 !
284 ! Include param.inc file to specify parameter values
285 !
286 !-----------------------------------------------
287 ! M o d u l e s
288 !-----------------------------------------------
289  USE compar
290  USE exit, only: mfix_exit
291  USE param
292  USE param1
293  IMPLICIT NONE
294 !-----------------------------------------------
295 ! D u m m y A r g u m e n t s
296 !-----------------------------------------------
297  INTEGER NCORN
298  LOGICAL NOTCORNER
299 !-----------------------------------------------
300 ! L o c a l P a r a m e t e r s
301 !-----------------------------------------------
302 !-----------------------------------------------
303 ! L o c a l V a r i a b l e s
304 !-----------------------------------------------
305  CHARACTER(LEN=80) :: LINE
306 !-----------------------------------------------
307 !
308 ! error message
309 !
310  ncorn = ncorn + 1
311  IF (ncorn > max_ncorn) THEN
312  WRITE (line, '(A)') 'Error: Increase MAX_NCORN in param1.inc.'
313  CALL write_error ('AddCorn', line, 1)
314  CALL mfix_exit(mype)
315  ENDIF
316 !
317  notcorner = .false.
318 !
319  RETURN
320  END SUBROUTINE addcorn
321 
322 !// Comments on the modifications for DMP version implementation
323 !// 001 Include header file and common declarations for parallelization
324 !// 350 Changed do loop limits: 1,ijkmax2-> ijkstart3, ijkend3
325 
logical dmp_log
Definition: funits_mod.f:6
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
subroutine get_corner_cells()
Definition: corner.f:21
subroutine write_error(NAME, LINE, LMAX)
Definition: write_error.f:21
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
integer east
Definition: param_mod.f:29
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
double precision, dimension(:), allocatable ayz_v
Definition: geometry_mod.f:227
double precision, dimension(:), allocatable axz_u
Definition: geometry_mod.f:220
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
subroutine mfix_exit(myID, normal_termination)
Definition: exit.f:5
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable axy_v
Definition: geometry_mod.f:231
subroutine addcorn(NOTCORNER, NCORN)
Definition: corner.f:281
Definition: exit.f:2
integer north
Definition: param_mod.f:37
integer south
Definition: param_mod.f:41
integer, parameter unit_log
Definition: funits_mod.f:21
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
double precision, dimension(:), allocatable ayz_w
Definition: geometry_mod.f:236
Definition: param_mod.f:2
logical do_k
Definition: geometry_mod.f:30
integer mype
Definition: compar_mod.f:24
double precision, dimension(:), allocatable axz_w
Definition: geometry_mod.f:238
integer, parameter max_ncorn
Definition: param1_mod.f:10
integer ijkstart3
Definition: compar_mod.f:80
integer west
Definition: param_mod.f:33
integer top
Definition: param_mod.f:45
subroutine start_log
Definition: machine_mod.f:182
integer, dimension(max_ncorn) ijk_corn
Definition: corner_mod.f:6
integer ncorn
Definition: corner_mod.f:9
double precision, dimension(:), allocatable axy_u
Definition: geometry_mod.f:222
integer bottom
Definition: param_mod.f:49
double precision, dimension(:), allocatable x
Definition: geometry_mod.f:129
double precision, parameter zero
Definition: param1_mod.f:27
subroutine end_log
Definition: machine_mod.f:208