File: N:\mfix\model\qmomk\qmomk_fluxes_mod.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !       Module name:  qmomk_fluxes                                     C
4     !       Purpose: Calculation of the spatial fluxes for QMOM            C
5     !                                                                      C
6     !       Author: A. Passalacqua                      Date: 18-Jun-2008  C
7     !       Reviewer:                                   Date: dd-mmm-yy    C
8     !                                                                      C
9     !       Revision Number:                                               C
10     !       Purpose:                                                       C
11     !       Author:                                     Date: dd-mmm-yy    C
12     !       Reviewer:                                   Date: dd-mmm-yy    C
13     !                                                                      C
14     !       Literature/Document References:                                C
15     !                                                                      C
16     !       Variables referenced:                                          C
17     !       Variables modified:                                            C
18     !                                                                      C
19     !       Local variables:                                               C
20     !                                                                      C
21     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
22     
23     MODULE qmomk_fluxes
24     
25       USE qmomk_parameters
26       USE qmomk_collision
27     
28       IMPLICIT NONE
29     
30       PRIVATE
31     
32       ! Subroutines for kinetic fluxes
33       PUBLIC :: KINETIC_FLUX_X_TWENTY_EIGHT_NODES
34       PUBLIC :: KINETIC_FLUX_Y_TWENTY_EIGHT_NODES
35       PUBLIC :: KINETIC_FLUX_Z_TWENTY_EIGHT_NODES
36     
37     CONTAINS
38     
39       !     Flux calculation in the x direction
40       SUBROUTINE KINETIC_FLUX_X_TWENTY_EIGHT_NODES (Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
41     
42         implicit none
43     
44         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nl
45         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ul
46         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vl
47         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wl
48         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nr
49         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ur
50         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vr
51         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wr
52         DOUBLE PRECISION, INTENT(INOUT), DIMENSION(QMOMK_NMOM) :: f
53     
54         INTEGER :: i
55     
56         f = 0.D0
57     
58         DO i = 1, QMOMK_NN
59            f(1) = f(1) + Nl(i)*MAX(Ul(i),0.D0) &
60                 + Nr(i)*MIN(Ur(i),0.D0)
61     
62            f(2) = f(2) + Nl(i)*Ul(i) *MAX(Ul(i),0.D0) &
63                 + Nr(i)*Ur(i)*MIN(Ur(i),0.D0)
64     
65            f(3) = f(3) + Nl(i)*Vl(i) *MAX(Ul(i),0.D0) &
66                 + Nr(i)*Vr(i)*MIN(Ur(i),0.D0)
67     
68            f(4) = f(4) + Nl(i)*Wl(i)*MAX(Ul(i),0.D0) &
69                 + Nr(i)*Wr(i)*MIN(Ur(i),0.D0)
70     
71            f(5) = f(5) + Nl(i)*(Ul(i)**2)*MAX(Ul(i),0.D0) &
72                 + Nr(i)*(Ur(i)**2)*MIN(Ur(i),0.D0)
73     
74            f(6) = f(6) + Nl(i)*Ul(i)*Vl(i)*MAX(Ul(i),0.D0) &
75                 + Nr(i)*Ur(i)*Vr(i)*MIN(Ur(i),0.D0)
76     
77            f(7) = f(7) + Nl(i)*Ul(i)*Wl(i)*MAX(Ul(i),0.D0) &
78                 + Nr(i)*Ur(i)*Wr(i)*MIN(Ur(i),0.D0)
79     
80            f(8) = f(8) + Nl(i)*(Vl(i)**2)*MAX(Ul(i),0.D0) &
81                 + Nr(i)*(Vr(i)**2)*MIN(Ur(i),0.D0)
82     
83            f(9) = f(9) + Nl(i)*Vl(i)*Wl(i)*MAX(Ul(i),0.D0) &
84                 + Nr(i)*Vr(i)*Wr(i)*MIN(Ur(i),0.D0)
85     
86            f(10)= f(10)+ Nl(i)*(Wl(i)**2) *MAX(Ul(i),0.D0) &
87                 + Nr(i)*(Wr(i)**2)*MIN(Ur(i),0.D0)
88     
89            f(11)= f(11)+ Nl(i)*(Ul(i)**3)*MAX(Ul(i),0.D0) &
90                 + Nr(i)*(Ur(i)**3)*MIN(Ur(i),0.D0)
91     
92            f(12)= f(12)+ Nl(i)*(Ul(i)**2)*Vl(i) *MAX(Ul(i),0.D0) &
93                 + Nr(i)*(Ur(i)**2)*Vr(i) *MIN(Ur(i),0.D0)
94     
95            f(13)= f(13)+ Nl(i)*(Ul(i)**2)*Wl(i) *MAX(Ul(i),0.D0) &
96                 + Nr(i)*(Ur(i)**2)*Wr(i)*MIN(Ur(i),0.D0)
97     
98            f(14)= f(14)+ Nl(i)*Ul(i)*(Vl(i)**2) *MAX(Ul(i),0.D0) &
99                 + Nr(i)*Ur(i)*(Vr(i)**2)*MIN(Ur(i),0.D0)
100     
101            f(15)= f(15)+ Nl(i)*Ul(i)*Vl(i)*Wl(i)*MAX(Ul(i),0.D0) &
102                 + Nr(i)*Ur(i)*Vr(i)*Wr(i)*MIN(Ur(i),0.D0)
103     
104            f(16)= f(14)+ Nl(i)*Ul(i)*(Wl(i)**2)*MAX(Ul(i),0.D0) &
105                 + Nr(i)*Ur(i)*(Wr(i)**2)*MIN(Ur(i),0.D0)
106     
107            f(17)= f(17)+ Nl(i)*(Vl(i)**3)*MAX(Ul(i),0.D0) &
108                 + Nr(i)*(Vr(i)**3)*MIN(Ur(i),0.D0)
109     
110            f(18)= f(18)+ Nl(i)*(Vl(i)**2)*Wl(i)*MAX(Ul(i),0.D0) &
111                 + Nr(i)*(Vr(i)**2)*Wr(i)*MIN(Ur(i),0.D0)
112     
113            f(19)= f(19)+ Nl(i)*Vl(i)*(Wl(i)**2)*MAX(Ul(i),0.D0) &
114                 + Nr(i)*Vr(i)*(Wr(i)**2)*MIN(Ur(i),0.D0)
115     
116            f(20)= f(20)+ Nl(i)*(Wl(i)**3)*MAX(Ul(i),0.D0) &
117                 + Nr(i)*(Wr(i)**3)*MIN(Ur(i),0.D0)
118         END DO
119       END SUBROUTINE KINETIC_FLUX_X_TWENTY_EIGHT_NODES
120     
121       !     Flux calculation in the y direction
122       SUBROUTINE KINETIC_FLUX_Y_TWENTY_EIGHT_NODES (Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
123     
124         IMPLICIT NONE
125     
126         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nl
127         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ul
128         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vl
129         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wl
130         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nr
131         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ur
132         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vr
133         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wr
134         DOUBLE PRECISION, INTENT(INOUT), DIMENSION(QMOMK_NMOM) :: f
135     
136         INTEGER :: i
137     
138         f = 0.D0
139     
140         DO i = 1, QMOMK_NN
141            f(1) = f(1) + Nl(i)*MAX(Vl(i),0.D0) &
142                 + Nr(i)*MIN(Vr(i),0.D0)
143     
144            f(2) = f(2) + Nl(i)*Ul(i)*MAX(Vl(i),0.D0) &
145                 + Nr(i)*Ur(i)*MIN(Vr(i),0.D0)
146     
147            f(3) = f(3) + Nl(i)*Vl(i)*MAX(Vl(i),0.D0) &
148                 + Nr(i)*Vr(i)*MIN(Vr(i),0.D0)
149     
150            f(4) = f(4) + Nl(i)*Wl(i)*MAX(Vl(i),0.D0) &
151                 + Nr(i)*Wr(i)*MIN(Vr(i),0.D0)
152     
153            f(5) = f(5) + Nl(i)*(Ul(i)**2)*MAX(Vl(i),0.D0) &
154                 + Nr(i)*(Ur(i)**2)*MIN(Vr(i),0.D0)
155     
156            f(6) = f(6) + Nl(i)*Ul(i)*Vl(i)*MAX(Vl(i),0.D0) &
157                 + Nr(i)*Ur(i)*Vr(i)*MIN(Vr(i),0.D0)
158     
159            f(7) = f(7) + Nl(i)*Ul(i)*Wl(i)*MAX(Vl(i),0.D0) &
160                 + Nr(i)*Ur(i)*Wr(i)*MIN(Vr(i),0.D0)
161     
162            f(8) = f(8) + Nl(i)*(Vl(i)**2)*MAX(Vl(i),0.D0) &
163                 + Nr(i)*(Vr(i)**2)*MIN(Vr(i),0.D0)
164     
165            f(9) = f(9) + Nl(i)*Vl(i)*Wl(i)*MAX(Vl(i),0.D0) &
166                 + Nr(i)*Vr(i)*Wr(i)*MIN(Vr(i),0.D0)
167     
168            f(10)= f(10)+ Nl(i)*(Wl(i)**2)*MAX(Vl(i),0.D0) &
169                 + Nr(i)*(Wr(i)**2)*MIN(Vr(i),0.D0)
170     
171            f(11)= f(11)+ Nl(i)*(Ul(i)**3)*MAX(Vl(i),0.D0) &
172                 + Nr(i)*(Ur(i)**3)*MIN(Vr(i),0.D0)
173     
174            f(12)= f(12)+ Nl(i)*(Ul(i)**2)*Vl(i)*MAX(Vl(i),0.D0) &
175                 + Nr(i)*(Ur(i)**2)*Vr(i)*MIN(Vr(i),0.D0)
176     
177            f(13)= f(13)+ Nl(i)*(Ul(i)**2)*Wl(i)*MAX(Vl(i),0.D0) &
178                 + Nr(i)*(Ur(i)**2)*Wr(i)*MIN(Vr(i),0.D0)
179     
180            f(14)= f(14)+ Nl(i)*Ul(i)*(Vl(i)**2)*MAX(Vl(i),0.D0) &
181                 + Nr(i)*Ur(i)*(Vr(i)**2)*MIN(Vr(i),0.D0)
182     
183            f(15)= f(15)+ Nl(i)*Ul(i)*Vl(i)*Wl(i)*MAX(Vl(i),0.D0) &
184                 + Nr(i)*Ur(i)*Vr(i)*Wr(i)*MIN(Vr(i),0.D0)
185     
186            f(16)= f(14)+ Nl(i)*Ul(i)*(Wl(i)**2)*MAX(Vl(i),0.D0) &
187                 + Nr(i)*Ur(i)*(Wr(i)**2)*MIN(Vr(i),0.D0)
188     
189            f(17)= f(17)+ Nl(i)*(Vl(i)**3)*MAX(Vl(i),0.D0) &
190                 + Nr(i)*(Vr(i)**3)*MIN(Vr(i),0.D0)
191     
192            f(18)= f(18)+ Nl(i)*(Vl(i)**2)*Wl(i)*MAX(Vl(i),0.D0) &
193                 + Nr(i)*(Vr(i)**2)*Wr(i)*MIN(Vr(i),0.D0)
194     
195            f(19)= f(19)+ Nl(i)*Vl(i)*(Wl(i)**2)*MAX(Vl(i),0.D0) &
196                 + Nr(i)*Vr(i)*(Wr(i)**2)*MIN(Vr(i),0.D0)
197     
198            f(20)= f(20)+ Nl(i)*(Wl(i)**3)*MAX(Vl(i),0.D0) &
199                 + Nr(i)*(Wr(i)**3)*MIN(Vr(i),0.D0)
200     
201         END DO
202       END SUBROUTINE KINETIC_FLUX_Y_TWENTY_EIGHT_NODES
203     
204       !     FLUX CALCULATION IN the z direction
205       SUBROUTINE KINETIC_FLUX_Z_TWENTY_EIGHT_NODES (Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
206     
207         IMPLICIT NONE
208     
209         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nl
210         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ul
211         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vl
212         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wl
213         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Nr
214         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Ur
215         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Vr
216         DOUBLE PRECISION, INTENT(IN), DIMENSION(QMOMK_NN) :: Wr
217         DOUBLE PRECISION, INTENT(INOUT), DIMENSION(QMOMK_NMOM) :: f
218     
219         INTEGER :: i
220     
221         f = 0.D0
222     
223         DO i = 1, QMOMK_NN
224            f(1) = f(1) + Nl(i)*MAX(Wl(i),0.D0) &
225                 + Nr(i)*MIN(Wr(i),0.D0)
226     
227            f(2) = f(2) + Nl(i)*Ul(i)*MAX(Wl(i),0.D0) &
228                 + Nr(i)*Ur(i)*MIN(Wr(i),0.D0)
229     
230            f(3) = f(3) + Nl(i)*Vl(i)*MAX(Wl(i),0.D0) &
231                 + Nr(i)*Vr(i)*MIN(Wr(i),0.D0)
232     
233            f(4) = f(4) + Nl(i)*Wl(i)*MAX(Wl(i),0.D0) &
234                 + Nr(i)*Wr(i)*MIN(Wr(i),0.D0)
235     
236            f(5) = f(5) + Nl(i)*(Ul(i)**2)*MAX(Wl(i),0.D0) &
237                 + Nr(i)*(Ur(i)**2)*MIN(Wr(i),0.D0)
238     
239            f(6) = f(6) + Nl(i)*Ul(i)*Vl(i)*MAX(Wl(i),0.D0) &
240                 + Nr(i)*Ur(i)*Vr(i)*MIN(Wr(i),0.D0)
241     
242            f(7) = f(7) + Nl(i)*Ul(i)*Wl(i)*MAX(Wl(i),0.D0) &
243                 + Nr(i)*Ur(i)*Wr(i)*MIN(Wr(i),0.D0)
244     
245            f(8) = f(8) + Nl(i)*(Vl(i)**2)*MAX(Wl(i),0.D0) &
246                 + Nr(i)*(Vr(i)**2)*MIN(Wr(i),0.D0)
247     
248            f(9) = f(9) + Nl(i)*Vl(i)*Wl(i)*MAX(Wl(i),0.D0) &
249                 + Nr(i)*Vr(i)*Wr(i)*MIN(Wr(i),0.D0)
250     
251            f(10)= f(10)+ Nl(i)*(Wl(i)**2)*MAX(Wl(i),0.D0) &
252                 + Nr(i)*(Wr(i)**2)*MIN(Wr(i),0.D0)
253     
254            f(11)= f(11)+ Nl(i)*(Ul(i)**3)*MAX(Wl(i),0.D0) &
255                 + Nr(i)*(Ur(i)**3)*MIN(Wr(i),0.D0)
256     
257            f(12)= f(12)+ Nl(i)*(Ul(i)**2)*Vl(i)*MAX(Wl(i),0.D0) &
258                 + Nr(i)*(Ur(i)**2)*Vr(i)*MIN(Wr(i),0.D0)
259     
260            f(13)= f(13)+ Nl(i)*(Ul(i)**2)*Wl(i)*MAX(Wl(i),0.D0) &
261                 + Nr(i)*(Ur(i)**2)*Wr(i)*MIN(Wr(i),0.D0)
262     
263            f(14)= f(14)+ Nl(i)*Ul(i)*(Vl(i)**2)*MAX(Wl(i),0.D0) &
264                 + Nr(i)*Ur(i)*(Vr(i)**2)*MIN(Wr(i),0.D0)
265     
266            f(15)= f(15)+ Nl(i)*Ul(i)*Vl(i)*Wl(i)*MAX(Wl(i),0.D0) &
267                 + Nr(i)*Ur(i)*Vr(i)*Wr(i)*MIN(Wr(i),0.D0)
268     
269            f(16)= f(14)+ Nl(i)*Ul(i)*(Wl(i)**2)*MAX(Wl(i),0.D0) &
270                 + Nr(i)*Ur(i)*(Wr(i)**2)*MIN(Wr(i),0.D0)
271     
272            f(17)= f(17)+ Nl(i)*(Vl(i)**3)*MAX(Wl(i),0.D0) &
273                 + Nr(i)*(Vr(i)**3)*MIN(Wr(i),0.D0)
274     
275            f(18)= f(18)+ Nl(i)*(Vl(i)**2)*Wl(i)*MAX(Wl(i),0.D0) &
276                 + Nr(i)*(Vr(i)**2)*Wr(i)*MIN(Wr(i),0.D0)
277     
278            f(19)= f(19)+ Nl(i)*Vl(i)*(Wl(i)**2)*MAX(Wl(i),0.D0) &
279                 + Nr(i)*Vr(i)*(Wr(i)**2)*MIN(Wr(i),0.D0)
280     
281            f(20)= f(20)+ Nl(i)*(Wl(i)**3)*MAX(Wl(i),0.D0) &
282                 + Nr(i)*(Wr(i)**3)*MIN(Wr(i),0.D0)
283     
284         END DO
285       END SUBROUTINE KINETIC_FLUX_Z_TWENTY_EIGHT_NODES
286     
287     END MODULE qmomk_fluxes
288