File: /nfs/home/0/users/jenkins/mfix.git/model/conv_rop.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Module name: CONV_ROP(IER)                                          C
4     !  Purpose: Calculate the face value of density used for calculating   C
5     !           convection fluxes. Master routine.                         C
6     !                                                                      C
7     !  Author: M. Syamlal                                 Date: 31-MAY-05  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 CONV_ROP(IER)
21     !
22     !-----------------------------------------------
23     !   M o d u l e s
24     !-----------------------------------------------
25           USE param
26           USE param1
27           USE fldvar
28           USE mflux
29           USE physprop
30           USE run
31           IMPLICIT NONE
32     !-----------------------------------------------
33     !   G l o b a l   P a r a m e t e r s
34     !-----------------------------------------------
35     !-----------------------------------------------
36     !   D u m m y   A r g u m e n t s
37     !-----------------------------------------------
38     !
39     !
40     !
41     !                      Error index
42           INTEGER          IER
43     !
44     !                      solids phase index
45           INTEGER          M
46     !
47     !
48     !
49     !
50           IF (DISCRETIZE(1) == 0) THEN               ! 0 & 1 => first order upwinding
51              CALL CONV_ROP0 (ROP_g, U_g, V_g, W_g, ROP_gE, ROP_gN, ROP_gT, IER)
52           ELSE
53              CALL CONV_ROP1 (DISCRETIZE(1), ROP_g, U_g, V_g, W_g, ROP_gE, ROP_gN, ROP_gT, IER)
54           ENDIF
55     
56           IF (DISCRETIZE(2) == 0) THEN               ! 0 & 1 => first order upwinding
57             DO M = 1, MMAX
58               CALL CONV_ROP0 (ROP_s(1, M), U_s(1, M), V_s(1, M), W_s(1, M), &
59                               ROP_sE(1, M), ROP_sN(1, M), ROP_sT(1, M), IER)
60             ENDDO
61           ELSE
62             DO M = 1, MMAX
63               CALL CONV_ROP1 (DISCRETIZE(2), ROP_s(1, M), U_s(1, M), V_s(1, M), W_s(1, M), &
64                               ROP_sE(1, M), ROP_sN(1, M), ROP_sT(1, M), IER)
65             ENDDO
66           ENDIF
67     
68           RETURN
69           END SUBROUTINE CONV_ROP
70     !
71     !
72     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
73     !                                                                      C
74     !                                                                      C
75     !  Module name: CONV_ROP0(ROP, U, V, W, ROP_E, ROP_N, ROP_T, IER)      C
76     !  Purpose: Calculate the face value of density used for calculating   C
77     !           convection fluxes. FOU routine.                            C
78     !                                                                      C
79     !  Author: M. Syamlal                                 Date: 31-MAY-05  C
80     !  Reviewer:                                          Date:            C
81     !                                                                      C
82     !                                                                      C
83     !  Literature/Document References:                                     C
84     !                                                                      C
85     !  Variables referenced:                                               C
86     !  Variables modified:                                                 C
87     !                                                                      C
88     !  Local variables:                                                    C
89     !                                                                      C
90     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
91     !
92           SUBROUTINE CONV_ROP0(ROP, U, V, W, ROP_E, ROP_N, ROP_T, IER)
93     !
94     !-----------------------------------------------
95     !   M o d u l e s
96     !-----------------------------------------------
97           USE param
98           USE param1
99           USE run
100           USE parallel
101           USE physprop
102           USE geometry
103           USE indices
104           USE compar
105           USE functions
106           IMPLICIT NONE
107     !-----------------------------------------------
108     !   G l o b a l   P a r a m e t e r s
109     !-----------------------------------------------
110     !-----------------------------------------------
111     !   D u m m y   A r g u m e n t s
112     !-----------------------------------------------
113     !
114     !
115     !
116     !                      macroscopic density (rho_prime)
117           DOUBLE PRECISION ROP(DIMENSION_3)
118     !
119     !                      Velocity components
120           DOUBLE PRECISION U(DIMENSION_3), V(DIMENSION_3), W(DIMENSION_3)
121     !
122     !                      Face value of density (for calculating convective fluxes)
123           DOUBLE PRECISION ROP_E(DIMENSION_3), ROP_N(DIMENSION_3), ROP_T(DIMENSION_3)
124     !
125     !                      Error index
126           INTEGER          IER
127     !
128     !                      Indices
129           INTEGER          IJK, IJKE, IJKN, IJKT
130           INTEGER          IJKW, IJKS, IJKB, IMJK, IJMK, IJKM
131     !-----------------------------------------------
132     
133     !
134     !  Interpolate the face value of density for calculating the convection fluxes
135     !$omp  parallel do default(none) private( IJK, IJKE, IJKN, IJKT, IJKW, IJKS, IJKB, IMJK, IJMK, IJKM) &
136     !$omp              shared(ijkstart3, ijkend3, u, v, w, do_k, rop, rop_e, rop_n, rop_t)
137           DO IJK = ijkstart3, ijkend3
138     !
139              IF (FLUID_AT(IJK)) THEN
140                 IJKE = EAST_OF(IJK)
141                 IJKN = NORTH_OF(IJK)
142                 IJKT = TOP_OF(IJK)
143     !
144     !         East face (i+1/2, j, k)
145                 IF (U(IJK) >= ZERO) THEN
146                    ROP_E(IJK) = ROP(IJK)
147                 ELSE
148                    ROP_E(IJK) = ROP(IJKE)
149                 ENDIF
150     !
151     !         North face (i, j+1/2, k)
152                 IF (V(IJK) >= ZERO) THEN
153                    ROP_N(IJK) = ROP(IJK)
154                 ELSE
155                    ROP_N(IJK) = ROP(IJKN)
156                 ENDIF
157     !
158     !         Top face (i, j, k+1/2)
159                 IF (DO_K) THEN
160                    IF (W(IJK) >= ZERO) THEN
161                       ROP_T(IJK) = ROP(IJK)
162                    ELSE
163                       ROP_T(IJK) = ROP(IJKT)
164                    ENDIF
165                 ENDIF
166     !
167     !         West face (i-1/2, j, k)
168                 IMJK = IM_OF(IJK)
169                 IF (.NOT.FLUID_AT(IMJK)) THEN
170                    IJKW = WEST_OF(IJK)
171                    IF (U(IMJK) >= ZERO) THEN
172                       ROP_E(IMJK) = ROP(IJKW)
173                    ELSE
174                       ROP_E(IMJK) = ROP(IJK)
175                    ENDIF
176                 ENDIF
177     !
178     !         South face (i, j-1/2, k)
179                 IJMK = JM_OF(IJK)
180                 IF (.NOT.FLUID_AT(IJMK)) THEN
181                    IJKS = SOUTH_OF(IJK)
182                    IF (V(IJMK) >= ZERO) THEN
183                      ROP_N(IJMK) = ROP(IJKS)
184                    ELSE
185                      ROP_N(IJMK) = ROP(IJK)
186                    ENDIF
187                 ENDIF
188     !
189     !         Bottom face (i, j, k-1/2)
190                 IF (DO_K) THEN
191                    IJKM = KM_OF(IJK)
192                    IF (.NOT.FLUID_AT(IJKM)) THEN
193                       IJKB = BOTTOM_OF(IJK)
194                       IF (W(IJKM) >= ZERO) THEN
195                          ROP_T(IJKM) = ROP(IJKB)
196                       ELSE
197                          ROP_T(IJKM) = ROP(IJK)
198                       ENDIF
199                    ENDIF
200                 ENDIF
201              ENDIF
202           END DO
203     
204           RETURN
205           END SUBROUTINE CONV_ROP0
206     !
207     !
208     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
209     !                                                                      C
210     !                                                                      C
211     !  Module name: CONV_ROP1(DISC, ROP, U, V, W, ROP_E, ROP_N, ROP_T, IER)C
212     !  Purpose: Calculate the face value of density used for calculating   C
213     !           convection fluxes. HR routine.                             C
214     !                                                                      C
215     !  Author: M. Syamlal                                 Date: 31-MAY-05  C
216     !  Reviewer:                                          Date:            C
217     !  Reviewer:                                          Date:            C
218     !                                                                      C
219     !                                                                      C
220     !  Literature/Document References:                                     C
221     !                                                                      C
222     !  Variables referenced:                                               C
223     !  Variables modified:                                                 C
224     !                                                                      C
225     !  Local variables:                                                    C
226     !                                                                      C
227     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
228     !
229           SUBROUTINE CONV_ROP1(DISC, ROP, U, V, W, ROP_E, ROP_N, ROP_T, IER)
230     !
231     !
232     !-----------------------------------------------
233     !   M o d u l e s
234     !-----------------------------------------------
235           USE param
236           USE param1
237           USE run
238           USE parallel
239           USE physprop
240           USE geometry
241           USE indices
242           USE xsi
243           USE xsi_array
244           USE compar
245           USE functions
246           IMPLICIT NONE
247     !-----------------------------------------------
248     !   G l o b a l   P a r a m e t e r s
249     !-----------------------------------------------
250     !-----------------------------------------------
251     !   D u m m y   A r g u m e n t s
252     !-----------------------------------------------
253     !
254     !
255     !
256     !
257     !                      Discretization scheme
258           INTEGER          DISC
259     !
260     !                      macroscopic density (rho_prime)
261           DOUBLE PRECISION ROP(DIMENSION_3)
262     !
263     !                      Velocity components
264           DOUBLE PRECISION U(DIMENSION_3), V(DIMENSION_3), W(DIMENSION_3)
265     !
266     !                      Face value of density (for calculating convective fluxes)
267           DOUBLE PRECISION ROP_E(DIMENSION_3), ROP_N(DIMENSION_3), ROP_T(DIMENSION_3)
268     !
269     !                      Error index
270           INTEGER          IER
271     !
272     !                      Indices
273           INTEGER          IJK, IJKE, IJKN, IJKT
274           INTEGER          IJKW, IJKS, IJKB, IMJK, IJMK, IJKM
275     
276           Integer          incr
277     !-----------------------------------------------
278     
279           call lock_xsi_array
280     !
281     !  Calculate convection factors
282     !
283     
284            incr=0
285            CALL CALC_XSI (DISC, ROP, U, V, W, XSI_E, XSI_N, XSI_T,incr)
286     !
287     !
288     !  Calculate convection fluxes through each of the faces
289     !
290     !!!$omp  parallel do private(IJK, IJKE, IJKN, IJKT, IJKW, IJKS, IJKB, IMJK, IJMK, IJKM) &
291     !!!$omp&  schedule(static)
292           DO IJK = ijkstart3, ijkend3
293     !
294              IF (FLUID_AT(IJK)) THEN
295                 IJKE = EAST_OF(IJK)
296                 IJKN = NORTH_OF(IJK)
297                 IJKT = TOP_OF(IJK)
298     !
299     !         East face (i+1/2, j, k)
300                 ROP_E(IJK) = ((ONE-XSI_E(IJK))*ROP(IJK)+XSI_E(IJK)*ROP(IJKE))
301     !
302     !         North face (i, j+1/2, k)
303                 ROP_N(IJK) = ((ONE-XSI_N(IJK))*ROP(IJK)+XSI_N(IJK)*ROP(IJKN))
304     !
305     !         Top face (i, j, k+1/2)
306                 IF (DO_K) THEN
307                    ROP_T(IJK) = ((ONE - XSI_T(IJK))*ROP(IJK)+XSI_T(IJK)*ROP(IJKT))
308                 ENDIF
309     !
310     !         West face (i-1/2, j, k)
311                 IMJK = IM_OF(IJK)
312                 IF (.NOT.FLUID_AT(IMJK)) THEN
313                    IJKW = WEST_OF(IJK)
314                    ROP_E(IMJK) = ((ONE - XSI_E(IMJK))*ROP(IJKW)+XSI_E(IMJK)*ROP(IJK))
315                 ENDIF
316     !
317     !         South face (i, j-1/2, k)
318                 IJMK = JM_OF(IJK)
319                 IF (.NOT.FLUID_AT(IJMK)) THEN
320                    IJKS = SOUTH_OF(IJK)
321                    ROP_N(IJMK) = ((ONE - XSI_N(IJMK))*ROP(IJKS)+XSI_N(IJMK)*ROP(IJK))
322                 ENDIF
323     !
324     !         Bottom face (i, j, k-1/2)
325                 IF (DO_K) THEN
326                    IJKM = KM_OF(IJK)
327                    IF (.NOT.FLUID_AT(IJKM)) THEN
328                       IJKB = BOTTOM_OF(IJK)
329                       ROP_T(IJKM) = ((ONE - XSI_T(IJKM))*ROP(IJKB)+XSI_T(IJKM)*ROP(IJK))
330                    ENDIF
331                 ENDIF
332              ENDIF
333           END DO
334     
335           call unlock_xsi_array
336     
337     
338           RETURN
339           END SUBROUTINE CONV_ROP1
340