File: /nfs/home/0/users/jenkins/mfix.git/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 param
30           USE param1
31           USE geometry
32           USE physprop
33           USE indices
34           USE matrix
35           USE corner
36           USE funits
37           USE compar
38           USE functions
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(W) = .TRUE.
84                 ELSE
85                    DIR(W) = .FALSE.
86                 ENDIF
87     !
88                 IF (FLUID_AT(IPJK)) THEN
89                    NUM = NUM + 1
90                    DIR(E) = .TRUE.
91                 ELSE
92                    DIR(E) = .FALSE.
93                 ENDIF
94     !
95                 IF (FLUID_AT(IJMK)) THEN
96                    NUM = NUM + 1
97                    DIR(S) = .TRUE.
98                 ELSE
99                    DIR(S) = .FALSE.
100                 ENDIF
101     !
102                 IF (FLUID_AT(IJPK)) THEN
103                    NUM = NUM + 1
104                    DIR(N) = .TRUE.
105                 ELSE
106                    DIR(N) = .FALSE.
107                 ENDIF
108     !
109                 IF (FLUID_AT(IJKM)) THEN
110                    NUM = NUM + 1
111                    DIR(B) = .TRUE.
112                 ELSE
113                    DIR(B) = .FALSE.
114                 ENDIF
115     !
116                 IF (FLUID_AT(IJKP)) THEN
117                    NUM = NUM + 1
118                    DIR(T) = .TRUE.
119                 ELSE
120                    DIR(T) = .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(W) .AND. DIR(E) .OR. DIR(S) .AND. DIR(N) .OR. DIR(T)&
130                        .AND. DIR(B)) THEN
131     !
132                       IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
133                    ENDIF
134     !
135     !           check for corner cells
136     !
137                    IF (DIR(E)) THEN
138     !
139                       IF (DIR(N)) THEN
140                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
141                       ENDIF
142     !
143                       IF (DIR(S)) THEN
144                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
145                       ENDIF
146     !
147                       IF (DO_K) THEN
148                          IF (DIR(T)) THEN
149                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
150                          ENDIF
151     !
152                          IF (DIR(B)) THEN
153                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
154                          ENDIF
155                       ENDIF
156     !
157                    ENDIF
158     !
159                    IF (DIR(W)) THEN
160     !
161                       IF (DIR(N)) THEN
162                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
163                       ENDIF
164     !
165                       IF (DIR(S)) THEN
166                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
167                       ENDIF
168     !
169                       IF (DO_K) THEN
170                          IF (DIR(T)) THEN
171                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
172                          ENDIF
173     !
174                          IF (DIR(B)) THEN
175                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
176                          ENDIF
177                       ENDIF
178     !
179                    ENDIF
180     !
181                    IF (DIR(N)) THEN
182     !
183     !
184                       IF (DO_K) THEN
185                          IF (DIR(T)) THEN
186                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
187                          ENDIF
188     !
189                          IF (DIR(B)) THEN
190                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
191                          ENDIF
192                       ENDIF
193     !
194                    ENDIF
195     !
196                    IF (DIR(S)) THEN
197     !
198     !
199                       IF (DO_K) THEN
200                          IF (DIR(T)) THEN
201                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
202                          ENDIF
203     !
204                          IF (DIR(B)) 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 param
290           USE param1
291           USE compar
292           IMPLICIT NONE
293     !-----------------------------------------------
294     !   D u m m y   A r g u m e n t s
295     !-----------------------------------------------
296           INTEGER NCORN
297           LOGICAL NOTCORNER
298     !-----------------------------------------------
299     !   L o c a l   P a r a m e t e r s
300     !-----------------------------------------------
301     !-----------------------------------------------
302     !   L o c a l   V a r i a b l e s
303     !-----------------------------------------------
304           CHARACTER(LEN=80) :: LINE
305     !-----------------------------------------------
306     !
307     !                      error message
308     !
309           NCORN = NCORN + 1
310           IF (NCORN > MAX_NCORN) THEN
311              WRITE (LINE, '(A)') 'Error: Increase MAX_NCORN in param1.inc.'
312              CALL WRITE_ERROR ('AddCorn', LINE, 1)
313              CALL MFIX_EXIT(myPE)
314           ENDIF
315     !
316           NOTCORNER = .FALSE.
317     !
318           RETURN
319           END SUBROUTINE ADDCORN
320     
321     !// Comments on the modifications for DMP version implementation
322     !// 001 Include header file and common declarations for parallelization
323     !// 350 Changed do loop limits: 1,ijkmax2-> ijkstart3, ijkend3
324     
325