File: N:\mfix\model\corner.f

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     
326