File: RELATIVE:/../../../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 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 matrix
37           USE param
38           USE param1
39           USE physprop
40           IMPLICIT NONE
41     !-----------------------------------------------
42     !   G l o b a l   P a r a m e t e r s
43     !-----------------------------------------------
44     !-----------------------------------------------
45     !   L o c a l   P a r a m e t e r s
46     !-----------------------------------------------
47     !-----------------------------------------------
48     !   L o c a l   V a r i a b l e s
49     !-----------------------------------------------
50     !
51     !                      Loop index
52           INTEGER          L
53     
54     !
55     !                      indices
56           INTEGER          IJK, IMJK, IJMK, IJKM, IPJK, IJPK, &
57                           IJKP
58     !
59     !                      number of faces adjacent to a fluid cell
60           INTEGER          NUM
61     !
62     !                      fluid face location, whether not a corner
63           LOGICAL          dir(-3:3), NotCorner
64     !
65     !-----------------------------------------------
66     
67           NCORN = 0
68     !
69           DO IJK = ijkstart3, ijkend3
70              IF (WALL_AT(IJK).AND..NOT.CYCLIC_AT(IJK)) THEN
71     !
72     !----------------------------------------------------------------
73                 IMJK = IM_OF(IJK)
74                 IJMK = JM_OF(IJK)
75                 IJKM = KM_OF(IJK)
76                 IPJK = IP_OF(IJK)
77                 IJPK = JP_OF(IJK)
78                 IJKP = KP_OF(IJK)
79     !----------------------------------------------------------------
80                 NUM = 0
81     !
82                 IF (FLUID_AT(IMJK)) THEN
83                    NUM = NUM + 1
84                    DIR(W) = .TRUE.
85                 ELSE
86                    DIR(W) = .FALSE.
87                 ENDIF
88     !
89                 IF (FLUID_AT(IPJK)) THEN
90                    NUM = NUM + 1
91                    DIR(E) = .TRUE.
92                 ELSE
93                    DIR(E) = .FALSE.
94                 ENDIF
95     !
96                 IF (FLUID_AT(IJMK)) THEN
97                    NUM = NUM + 1
98                    DIR(S) = .TRUE.
99                 ELSE
100                    DIR(S) = .FALSE.
101                 ENDIF
102     !
103                 IF (FLUID_AT(IJPK)) THEN
104                    NUM = NUM + 1
105                    DIR(N) = .TRUE.
106                 ELSE
107                    DIR(N) = .FALSE.
108                 ENDIF
109     !
110                 IF (FLUID_AT(IJKM)) THEN
111                    NUM = NUM + 1
112                    DIR(B) = .TRUE.
113                 ELSE
114                    DIR(B) = .FALSE.
115                 ENDIF
116     !
117                 IF (FLUID_AT(IJKP)) THEN
118                    NUM = NUM + 1
119                    DIR(T) = .TRUE.
120                 ELSE
121                    DIR(T) = .FALSE.
122                 ENDIF
123     !
124                 IF (NUM > 1) THEN
125     !
126     !
127                    NOTCORNER = .TRUE.
128     !
129     !           check for single cell thick internal walls
130                    IF (DIR(W) .AND. DIR(E) .OR. DIR(S) .AND. DIR(N) .OR. DIR(T)&
131                        .AND. DIR(B)) THEN
132     !
133                       IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
134                    ENDIF
135     !
136     !           check for corner cells
137     !
138                    IF (DIR(E)) THEN
139     !
140                       IF (DIR(N)) THEN
141                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
142                       ENDIF
143     !
144                       IF (DIR(S)) THEN
145                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
146                       ENDIF
147     !
148                       IF (DO_K) THEN
149                          IF (DIR(T)) THEN
150                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
151                          ENDIF
152     !
153                          IF (DIR(B)) THEN
154                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
155                          ENDIF
156                       ENDIF
157     !
158                    ENDIF
159     !
160                    IF (DIR(W)) THEN
161     !
162                       IF (DIR(N)) THEN
163                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
164                       ENDIF
165     !
166                       IF (DIR(S)) THEN
167                          IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
168                       ENDIF
169     !
170                       IF (DO_K) THEN
171                          IF (DIR(T)) THEN
172                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
173                          ENDIF
174     !
175                          IF (DIR(B)) THEN
176                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
177                          ENDIF
178                       ENDIF
179     !
180                    ENDIF
181     !
182                    IF (DIR(N)) THEN
183     !
184     !
185                       IF (DO_K) THEN
186                          IF (DIR(T)) THEN
187                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
188                          ENDIF
189     !
190                          IF (DIR(B)) THEN
191                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
192                          ENDIF
193                       ENDIF
194     !
195                    ENDIF
196     !
197                    IF (DIR(S)) THEN
198     !
199     !
200                       IF (DO_K) THEN
201                          IF (DIR(T)) THEN
202                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
203                          ENDIF
204     !
205                          IF (DIR(B)) THEN
206                             IF (NOTCORNER) CALL ADDCORN (NOTCORNER, NCORN)
207                          ENDIF
208                       ENDIF
209     !
210                    ENDIF
211     !
212                    IF (.NOT.NOTCORNER) THEN
213                       IJK_CORN(NCORN) = IJK
214     !
215                       AXZ(IJK) = ZERO
216                       AXZ(IJMK) = ZERO
217                       AYZ(IJK) = ZERO
218                       AYZ(IMJK) = ZERO
219                       AXY(IJK) = ZERO
220                       AXY(IJKM) = ZERO
221     !
222                       AXZ_U(IM_OF(IJMK)) = ZERO
223                       AXZ_U(IJMK) = ZERO
224                       AXZ_U(IMJK) = ZERO
225                       AXZ_U(IJK) = ZERO
226     !
227                       AXY_U(IM_OF(IJKM)) = ZERO
228                       AXY_U(IJKM) = ZERO
229                       AXY_U(IMJK) = ZERO
230                       AXY_U(IJK) = ZERO
231     !
232                       AYZ_V(JM_OF(IMJK)) = ZERO
233                       AYZ_V(IMJK) = ZERO
234                       AYZ_V(IJMK) = ZERO
235                       AYZ_V(IJK) = ZERO
236     !
237                       AXY_V(JM_OF(IJKM)) = ZERO
238                       AXY_V(IJKM) = ZERO
239                       AXY_V(IJMK) = ZERO
240                       AXY_V(IJK) = ZERO
241     !
242                       AYZ_W(KM_OF(IMJK)) = ZERO
243                       AYZ_W(IMJK) = ZERO
244                       AYZ_W(IJKM) = ZERO
245                       AYZ_W(IJK) = ZERO
246     !
247                       AXZ_W(KM_OF(IJMK)) = ZERO
248                       AXZ_W(IJMK) = ZERO
249                       AXZ_W(IJKM) = ZERO
250                       AXZ_W(IJK) = ZERO
251                    ENDIF
252     !
253                 ENDIF
254     !
255              ENDIF
256           END DO
257           IF (NCORN > 0) THEN
258                 CALL START_LOG
259                 IF(DMP_LOG)WRITE (UNIT_LOG, 1000)
260     !
261              DO L = 1, NCORN
262                 IJK = IJK_CORN(L)
263                 IF(DMP_LOG)WRITE (UNIT_LOG, 1100) IJK, I_OF(IJK), J_OF(IJK), K_OF(IJK)
264              END DO
265              IF(DMP_LOG)WRITE (UNIT_LOG, 1300)
266              CALL END_LOG
267           ENDIF
268     !
269           RETURN
270     !
271      1000 FORMAT(/1X,70('*')//' From: Get_Corner_Cells',/&
272              ' Warning: The following wall-cells are adjacent to two or',/,&
273              ' more fluid-cells.  Mass, momentum, and energy transfer ',/,&
274              ' to these wall-cells have been set to zero.',/,&
275              '     IJK     I     J     K')
276      1100 FORMAT(3X,I6,2X,I4,2X,I4,2X,I4)
277     !
278      1300 FORMAT(/1X,70('*')/)
279           END SUBROUTINE GET_CORNER_CELLS
280     !
281           SUBROUTINE ADDCORN(NOTCORNER, NCORN)
282     !...Translated by Pacific-Sierra Research VAST-90 2.06G5  12:17:31  12/09/98
283     !...Switches: -xf
284     !
285     !  Include param.inc file to specify parameter values
286     !
287     !-----------------------------------------------
288     !   M o d u l e s
289     !-----------------------------------------------
290           USE param
291           USE param1
292           USE compar
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