MFIX  2016-1
source_ghd_granular_energy.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: SOURCE_GHD_GRANULAR_ENERGY(sourcelhs,sourcerhs,IJK,IER)
4 ! Purpose: Calculate the source terms in the granular energy equation C
5 ! for GHD theory C
6 ! C
7 ! Author: S. Benyahia, J. Galvin, C. Hrenya Date: 22-JAN-09 C
8 ! Reviewer: Date: C
9 ! C
10 ! Literature/Document References: C
11 ! C. Hrenya handnotes and Garzo, Hrenya, Dufty papers (PRE, 2007) C
12 ! C
13 ! Variables referenced: C
14 ! C
15 ! Variables modified: C
16 ! C
17 ! Local variables: sourcelhs, sourcerhs C
18 ! C
19 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
20  SUBROUTINE source_ghd_granular_energy(SOURCELHS, SOURCERHS, IJK)
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 parallel
32  USE physprop
33  USE run
34  USE drag
35  USE geometry
36  USE fldvar
37  USE visc_s
38  USE ghdtheory
39  USE trace
40  USE indices
41  USE constant
42  USE toleranc
43  USE compar !//d
44  USE fun_avg
45  USE functions
46  IMPLICIT NONE
47 !-----------------------------------------------
48 ! G l o b a l P a r a m e t e r s
49 !-----------------------------------------------
50 !-----------------------------------------------
51 ! D u m m y A r g u m e n t s
52 !-----------------------------------------------
53 !
54 ! Indices
55  INTEGER IJK, I, J, K, IM, JM, KM, IMJK, IJMK, IJKM,&
56  IJKE, IJKW, IJKN, IJKS, IJKT, IJKB
57 !
58 ! number densities
59  DOUBLE PRECISION NiE, NiW, NiN, NiS, NiT,&
60  NiB, Nip, Ntotal
61 !
62 ! mass of particles & non-zero gran. temp.
63  DOUBLE PRECISION Mi, NonZeroTheta
64 !
65 ! Thermal mobility-related source terms
66  DOUBLE PRECISION ThermMobilityX, ThermMobilityY, ThermMobilityZ
67 !
68 ! del.Joi and Fi.Joi terms
69  DOUBLE PRECISION DelDotJoi, FiDotJoi, JoiXC, JoiYC, JoiZC
70  DOUBLE PRECISION FiXC, FiYC, FiZC,ni(smax), SIGMAI(smax)
71 !
72 ! phase index
73  INTEGER M, L
74 !
75 ! Dufour-related source terms
76  DOUBLE PRECISION DufourX, DufourY, DufourZ, DijQTerm, &
77  DijQTermE, DijQTermW, DijQTermN, DijQTermS, DijQTermT, DijQTermB,&
78  LijTermW,LijTermE,LijTermN,LijTermS,LijTermT,LijTermB
79 
80  DOUBLE PRECISION DijQTermE_H,DijQTermE_A,DijQTermW_H,DijQTermW_A,DijQTermN_H,DijQTermN_A,DijQTermS_H,&
81  DijQTermS_A,DijQTermT_H,DijQTermT_A,DijQTermB_H,DijQTermB_A,LijTermE_H,LijTermE_A, &
82  LijTermW_H,LijTermW_A,LijTermN_H,LijTermN_A,LijTermS_H,LijTermS_A,LijTermT_H, &
83  LijTermT_A,LijTermB_H,LijTermB_A
84 !
85 ! Source terms to be kept on RHS
86  DOUBLE PRECISION SOURCERHS, PressureRhs, ShearProduction, BulkViscRhs, DissDivURhs, phi_tot, &
87  SOURCE_FLUID,SINK_FLUID
88 ! DOUBLE PRECISION chi_ij
89 !
90 ! Source terms to be kept on LHS
91  DOUBLE PRECISION SOURCELHS, PressureLhs, CollDissipation, BulkViscLhs, DissDivULhs,VSLIP
92  DOUBLE PRECISION UGC, USCM, VGC, VSCM, WGC, WSCM
93 
94  i = i_of(ijk)
95  j = j_of(ijk)
96  k = k_of(ijk)
97  im = im1(i)
98  jm = jm1(j)
99  km = km1(k)
100  imjk = im_of(ijk)
101  ijmk = jm_of(ijk)
102  ijkm = km_of(ijk)
103  ijke = east_of(ijk)
104  ijkw = west_of(ijk)
105  ijkn = north_of(ijk)
106  ijks = south_of(ijk)
107  ijkt = top_of(ijk)
108  ijkb = bottom_of(ijk)
109 
110  nonzerotheta = max(theta_m(ijk,mmax), small_number)
111 
112  ntotal = zero
113  phi_tot = zero
114  DO m = 1,smax
115  ntotal = ntotal + rop_s(ijk,m)*6.d0/(pi*d_p(ijk,m)**3 * ro_s(ijk,m))
116  ni(m) = rop_s(ijk,m)*6.d0/(pi*d_p(ijk,m)**3 * ro_s(ijk,m))
117  phi_tot = phi_tot + rop_s(ijk,m)/ro_s(ijk,m)
118  sigmai(m) = d_p(ijk,m)
119  ENDDO
120 
121 ! Production by shear: (S:grad(v))
122 ! p_s*tr(D)
123  pressurerhs = p_s_c(ijk,mmax)*zmax(( -trd_s_c(ijk,mmax) ))
124  pressurelhs = p_s_c(ijk,mmax)*zmax(( trd_s_c(ijk,mmax) ))
125 
126 ! mu_s*tr(D^2)
127  shearproduction = 2d0*mu_s_c(ijk,mmax)*trd_s2(ijk,mmax)
128 
129 ! lambda_s*tr(D)^2
130  bulkviscrhs = zmax( lambda_s_c(ijk,mmax) ) * trd_s_c(ijk,mmax)**2
131  bulkvisclhs = zmax( -lambda_s_c(ijk,mmax) ) * trd_s_c(ijk,mmax)**2
132 
133 
134 ! Energy dissipation by collisions: (3/2)*n*T*zeta
135 ! (3/2)*n*T*zeta0; zeroth order cooling rate term
136  colldissipation = 1.5d0*ntotal*zeta0(ijk)
137 ! (3/2)*n*T*zetaU*div(U) :
138  dissdivurhs = 1.5d0*ntotal*theta_m(ijk,mmax)* zmax( -zetau(ijk)*trd_s_c(ijk,mmax) )
139  dissdivulhs = 1.5d0*ntotal* zmax( zetau(ijk)*trd_s_c(ijk,mmax) )
140 
141 
142  dufourx = zero
143  dufoury = zero
144  dufourz = zero
145  thermmobilityx = zero
146  thermmobilityy = zero
147  thermmobilityz = zero
148  deldotjoi = zero
149  fidotjoi = zero
150  source_fluid = zero
151  sink_fluid = zero
152  DO m = 1,smax
153 
154 ! Part of heat flux: div (q)
155 ! Sum_ij [ div( T^2*DijQ/nj*grad(nj)) ] -> Dufour term
156 
157  DO l = 1,smax
158  mi = (pi/6.d0)*d_p(ijk,l)**3 * ro_s(ijk,l)
159 
160  nip = rop_s(ijk,l) /mi
161  nie = rop_s(ijke,l)/mi
162  niw = rop_s(ijkw,l)/mi
163  nin = rop_s(ijkn,l)/mi
164  nis = rop_s(ijks,l)/mi
165 
166  dijqterm = zero
167  dijqterme = zero
168  dijqtermw = zero
169  dijqtermn = zero
170  dijqterms = zero
171 
172  if(rop_s(ijk,l)/ro_s(ijk,l) > dil_ep_s) dijqterm = theta_m(ijk,mmax)**2*dijq(ijk,m,l) / nip
173  if(rop_s(ijke,l)/ro_s(ijke,l) > dil_ep_s) dijqterme =theta_m(ijke,mmax)**2*dijq(ijke,m,l) / nie
174  if(rop_s(ijkw,l)/ro_s(ijkw,l) > dil_ep_s) dijqtermw =theta_m(ijkw,mmax)**2*dijq(ijkw,m,l) / niw
175  if(rop_s(ijkn,l)/ro_s(ijkn,l) > dil_ep_s) dijqtermn =theta_m(ijkn,mmax)**2*dijq(ijkn,m,l) / nin
176  if(rop_s(ijks,l)/ro_s(ijks,l) > dil_ep_s) dijqterms =theta_m(ijks,mmax)**2*dijq(ijks,m,l) / nis
177 
178  dijqterme_h = avg_x_s(dijqterm, dijqterme, i)
179  dijqterme_a = avg_x(dijqterm, dijqterme, i)
180  IF(abs(dijqterme_h) .le. abs(dijqterme_a))THEN
181  dijqterme = dijqterme_h
182  ELSE
183  dijqterme = dijqterme_a
184  ENDIF
185 
186  dijqtermw_h = avg_x_s(dijqtermw, dijqterm, im)
187  dijqtermw_a = avg_x(dijqtermw, dijqterm, im)
188  IF(abs(dijqtermw_h) .le. abs(dijqtermw_a))THEN
189  dijqtermw = dijqtermw_h
190  ELSE
191  dijqtermw = dijqtermw_a
192  ENDIF
193 
194  dijqtermn_h = avg_y_s(dijqterm, dijqtermn, j)
195  dijqtermn_a = avg_y(dijqterm, dijqtermn, j)
196  IF(abs(dijqtermn_h) .le. abs(dijqtermn_a))THEN
197  dijqtermn = dijqtermn_h
198  ELSE
199  dijqtermn = dijqtermn_a
200  ENDIF
201 
202  dijqterms_h = avg_y_s(dijqterms, dijqterm, jm)
203  dijqterms_a = avg_y(dijqterms, dijqterm, jm)
204  IF(abs(dijqterms_h) .le. abs(dijqterms_a))THEN
205  dijqterms = dijqterms_h
206  ELSE
207  dijqterms = dijqterms_a
208  ENDIF
209 
210  dufourx = dufourx + ( dijqterme*(nie-nip)*odx_e(i) - &
211  dijqtermw*(nip-niw)*odx_e(im) )*ayz(ijk)
212  dufoury = dufoury + ( dijqtermn*(nin-nip)*ody_n(j) - &
213  dijqterms*(nip-nis)*ody_n(jm) )*axz(ijk)
214 
215  IF(.NOT. no_k) THEN
216  nit = rop_s(ijkt,l)/mi
217  nib = rop_s(ijkb,l)/mi
218 
219  dijqtermt = zero
220  dijqtermb = zero
221 
222  if(rop_s(ijkt,l)/ro_s(ijkt,l) > dil_ep_s) dijqtermt = theta_m(ijk,mmax)**2*dijq(ijk,m,l) / nit
223  if(rop_s(ijkb,l)/ro_s(ijkb,l) > dil_ep_s) dijqtermb = theta_m(ijk,mmax)**2*dijq(ijk,m,l) / nib
224 
225  dijqtermt_h = avg_z_s(dijqterm , dijqtermt, k)
226  dijqtermt_a = avg_z(dijqterm , dijqtermt, k)
227 
228  IF(abs(dijqtermt_h) .le. abs(dijqtermt_a))THEN
229  dijqtermt=dijqtermt_h
230  ELSE
231  dijqtermt=dijqtermt_a
232  ENDIF
233 
234  dijqtermb_h = avg_z_s(dijqtermb, dijqterm, km)
235  dijqtermb_a = avg_z(dijqtermb, dijqterm, km)
236 
237  IF(abs(dijqtermb_h) .le. abs(dijqtermb_a))THEN
238  dijqtermb=dijqtermb_h
239  ELSE
240  dijqtermb=dijqtermb_a
241  ENDIF
242 
243  dufourz = dufourz + ( dijqtermt*(nit-nip)*odz_t(k)*ox(i) - &
244  dijqtermb*(nip-nib)*odz_t(km)*ox(i) )*axy(ijk)
245  ENDIF
246 
247 ! Sum_ij [ div( Lij*Fj) ]; thermal mobility term
248 ! Where Fj = Body Force
249 
250  lijtermw_h = avg_x_s(lij(ijkw,m,l),lij(ijk,m,l),im)
251  lijtermw_a = avg_x(lij(ijkw,m,l),lij(ijk,m,l),im)
252  IF(abs(lijtermw_h) .le. abs(lijtermw_a))THEN
253  lijtermw = lijtermw_h
254  ELSE
255  lijtermw = lijtermw_a
256  ENDIF
257 
258  lijterme_h = avg_x_s(lij(ijk,m,l),lij(ijke,m,l),i)
259  lijterme_a = avg_x(lij(ijk,m,l),lij(ijke,m,l),i)
260 
261  IF(abs(lijterme_h) .le. abs(lijterme_a))THEN
262  lijterme = lijterme_h
263  ELSE
264  lijterme = lijterme_a
265  ENDIF
266 
267  lijtermn_h = avg_y_s(lij(ijk,m,l),lij(ijkn,m,l),j)
268  lijtermn_a = avg_y(lij(ijk,m,l),lij(ijkn,m,l),j)
269  IF(abs(lijtermn_h) .le. abs(lijtermn_a))THEN
270  lijtermn = lijtermn_h
271  ELSE
272  lijtermn = lijtermn_a
273  ENDIF
274 
275  lijterms_h = avg_y_s(lij(ijks,m,l),lij(ijk,m,l),jm)
276  lijterms_a = avg_y(lij(ijks,m,l),lij(ijk,m,l),jm)
277  IF(abs(lijterms_h) .le. abs(lijterms_a))THEN
278  lijterms = lijterms_h
279  ELSE
280  lijterms = lijterms_a
281  ENDIF
282 
283  thermmobilityx = thermmobilityx + ( &
284  fix(ijk,l) *lijterme - fix(imjk,l)*lijtermw )*ayz(ijk)
285 
286  thermmobilityy = thermmobilityy + ( &
287  fiy(ijk,l) *lijtermn - fiy(ijmk,l)*lijterms )*axz(ijk)
288 
289  IF(.NOT. no_k) THEN
290 
291  lijtermt_h = avg_z_s(lij(ijk,m,l),lij(ijkt,m,l),k)
292  lijtermt_a = avg_z(lij(ijk,m,l),lij(ijkt,m,l),k)
293  IF(abs(lijtermt_h) .le. abs(lijtermt_a))THEN
294  lijtermt = lijtermt_h
295  ELSE
296  lijtermt = lijtermt_a
297  ENDIF
298 
299  lijtermb_h = avg_z_s(lij(ijkb,m,l),lij(ijk,m,l),km)
300  lijtermb_a = avg_z(lij(ijkb,m,l),lij(ijk,m,l),km)
301  IF(abs(lijtermb_h) .le. abs(lijtermb_a))THEN
302  lijtermb = lijtermb_h
303  ELSE
304  lijtermb = lijtermb_a
305  ENDIF
306 
307  thermmobilityz = thermmobilityz + ( &
308  fiz(ijk,l) *lijtermt - fiz(ijkm,l)*lijtermb )*axy(ijk)
309  ENDIF
310  ENDDO ! for L = 1, smax
311 
312 ! Additional term arising from subtraction of 3/2*T*continuity
313 ! + (3/2)*T* Sum_i [ div (joi/mi) ]
314 
315  mi = (pi/6.d0)*d_p(ijk,m)**3 * ro_s(ijk,m)
316 
317  deldotjoi = deldotjoi + 1.5d0*theta_m(ijk,mmax)/mi * ( &
318  (joix(ijk,m) - joix(imjk,m))*ayz(ijk) + &
319  (joiy(ijk,m) - joiy(ijmk,m))*axz(ijk) + &
320  (joiz(ijk,m) - joiz(ijkm,m))*axy(ijk) )
321 
322 
323 ! Species force dot species mass flux
324 ! Sum_i [ Fi dot joi/mi ]
325 
326 ! Calculate species mass flux components at cell center
327  joixc = avg_x_e(joix(imjk,m),joix(ijk,m),i)
328  joiyc = avg_y_n(joiy(ijmk,m),joiy(ijk,m))
329  joizc = avg_z_t(joiz(ijkm,m),joiz(ijk,m))
330 
331 ! external forces evaluated at cell center
332  fixc = avg_x_e(fix(imjk,m),fix(ijk,m),i)
333  fiyc = avg_y_n(fiy(ijmk,m),fiy(ijk,m))
334  fizc = avg_z_t(fiz(ijkm,m),fiz(ijk,m))
335 
336  fidotjoi = fidotjoi + ( joixc*fixc + joiyc*fiyc + joizc*fizc ) / mi
337 
338 
339  IF(switch > zero .AND. abs(ro_g0) .gt. zero) THEN ! do nothing for gran. flow
340  ugc = avg_x_e(u_g(imjk),u_g(ijk),i)
341  vgc = avg_y_n(v_g(ijmk),v_g(ijk))
342  wgc = avg_z_t(w_g(ijkm),w_g(ijk))
343  uscm = avg_x_e(u_s(imjk,m),u_s(ijk,m),i)
344  vscm = avg_y_n(v_s(ijmk,m),v_s(ijk,m))
345  wscm = avg_z_t(w_s(ijkm,m),w_s(ijk,m))
346 
347  vslip = (uscm-ugc)**2 + (vscm-vgc)**2 + (wscm-wgc)**2
348  vslip = dsqrt(vslip)
349 
350 ! Source/Sink due to fluid do not work well with fluid-solids cases that we run
351 ! uncomment the lines of code below to use (W. Holloway and S. Benyahia).
352 !
353 ! call chi_ij_GHD(smax,M,M,SIGMAi,phi_tot,ni,chi_ij)
354 
355 ! SOURCE_FLUID = SOURCE_FLUID + (81D0*EP_S(IJK,M)*(MU_G(IJK)*VSLIP)**2D0/ &
356 ! (chi_ij*(D_P(IJK,M)**3D0*RO_S(IJK,M)*THETA_M(IJK,M))**0.5D0))*VOL(IJK)
357 
358 ! SINK_FLUID = SINK_FLUID + 3.d0*F_GS(IJK,M)*THETA_M(IJK,M)/Mi
359  ENDIF
360 
361  ENDDO ! for M = 1, smax
362 
363  sink_fluid = sink_fluid/nonzerotheta
364 
365  sourcerhs = (pressurerhs + shearproduction + bulkviscrhs + dissdivurhs)*vol(ijk) &
366  + zmax(dufourx)+zmax(dufoury)+zmax(dufourz) &
367  + zmax(thermmobilityx)+zmax(thermmobilityy)+zmax(thermmobilityz) &
368  + zmax(deldotjoi) + zmax(fidotjoi)*vol(ijk)
369 
370  sourcerhs = sourcerhs + source_fluid
371 
372  sourcelhs = ( (pressurelhs + bulkvisclhs)/nonzerotheta + &
373  (colldissipation + dissdivulhs + sink_fluid) ) * vol(ijk) + &
374  ( zmax(-dufourx)+zmax(-dufoury)+zmax(-dufourz) + &
375  zmax(-thermmobilityx)+zmax(-thermmobilityy)+zmax(-thermmobilityz) + &
376  zmax(-deldotjoi) + zmax(-fidotjoi)*vol(ijk) )/ nonzerotheta
377 
378  RETURN
379  END SUBROUTINE source_ghd_granular_energy
double precision, dimension(:,:), allocatable joix
Definition: ghdtheory_mod.f:30
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
double precision, dimension(:,:), allocatable trd_s_c
Definition: trace_mod.f:6
double precision, dimension(:,:), allocatable mu_s_c
Definition: visc_s_mod.f:28
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision, dimension(:,:), allocatable trd_s2
Definition: trace_mod.f:9
integer, dimension(:), allocatable im1
Definition: indices_mod.f:50
double precision, parameter switch
Definition: constant_mod.f:53
Definition: drag_mod.f:11
double precision, dimension(:,:), allocatable fix
Definition: ghdtheory_mod.f:39
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:,:), allocatable lambda_s_c
Definition: visc_s_mod.f:51
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:,:), allocatable fiz
Definition: ghdtheory_mod.f:45
double precision, dimension(:), allocatable ody_n
Definition: geometry_mod.f:123
double precision, dimension(:,:), allocatable p_s_c
Definition: fldvar_mod.f:127
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
integer mmax
Definition: physprop_mod.f:19
double precision, dimension(:,:,:), allocatable lij
Definition: ghdtheory_mod.f:21
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
integer, dimension(:), allocatable jm1
Definition: indices_mod.f:51
double precision ro_g0
Definition: physprop_mod.f:59
subroutine source_ghd_granular_energy(SOURCELHS, SOURCERHS, IJK)
double precision, parameter small_number
Definition: param1_mod.f:24
double precision, dimension(:), allocatable ox
Definition: geometry_mod.f:140
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision, dimension(:,:), allocatable joiy
Definition: ghdtheory_mod.f:33
double precision, dimension(:), allocatable zetau
Definition: ghdtheory_mod.f:12
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
Definition: run_mod.f:13
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
Definition: param_mod.f:2
double precision, parameter dil_ep_s
Definition: toleranc_mod.f:24
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
logical no_k
Definition: geometry_mod.f:28
integer, dimension(:), allocatable km1
Definition: indices_mod.f:52
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
integer smax
Definition: physprop_mod.f:22
double precision, dimension(:,:), allocatable fiy
Definition: ghdtheory_mod.f:42
double precision, dimension(:), allocatable zeta0
Definition: ghdtheory_mod.f:9
double precision, parameter pi
Definition: constant_mod.f:158
Definition: trace_mod.f:1
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
double precision, dimension(:,:,:), allocatable dijq
Definition: ghdtheory_mod.f:27
double precision, dimension(:), allocatable odz_t
Definition: geometry_mod.f:125
double precision, parameter zero
Definition: param1_mod.f:27
double precision, dimension(:,:), allocatable joiz
Definition: ghdtheory_mod.f:36