MFIX  2016-1
qmomk_fluxes_mod.f
Go to the documentation of this file.
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 
24 
26  USE qmomk_collision
27 
28  IMPLICIT NONE
29 
30  PRIVATE
31 
32  ! Subroutines for kinetic fluxes
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)
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)
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
subroutine, public kinetic_flux_y_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
subroutine, public kinetic_flux_x_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
subroutine, public kinetic_flux_z_twenty_eight_nodes(Nl, Ul, Vl, Wl, Nr, Ur, Vr, Wr, f)
integer, parameter qmomk_nn