MFIX  2016-1
calc_external_forces.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: calc_external_forces(IER) C
4 ! Purpose: Calculate the 3-components of external forces at cell C
5 ! faces C
6 ! C
7 ! Author: S. Benyahia Date: 13-MAY-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: JoiX JoiY JoiZ C
16 ! C
17 ! Local variables: all terms in mass flux C
18 ! C
19 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
20 !
21  SUBROUTINE calc_external_forces()
22 !
23 !-----------------------------------------------
24 ! Modules
25 !-----------------------------------------------
26  USE param
27  USE param1
28  USE geometry
29  USE compar
30  USE fldvar
31  USE indices
32  USE ghdtheory
33  USE physprop
34  USE run
35  USE constant
36  USE drag
37  USE bc
38  use scales
39  use bodyforce
40  USE fun_avg
41  USE functions
42  IMPLICIT NONE
43 !-----------------------------------------------
44 ! Local variables
45 !-----------------------------------------------
46 ! Index
47  INTEGER IJK, I, J, K
48 !
49 ! Index
50  INTEGER IJKE, IJKN, IJKT
51 !
52 ! Solids phase
53  INTEGER M ,IM
54 !
55 ! number densities to compute del(Nj)
56  DOUBLE PRECISION NjC, NjE, NjN, NjT
57 !
58 ! mass, volume of species
59  DOUBLE PRECISION Mj, Vj
60 !
61 ! drag force on a particle
62  DOUBLE PRECISION dragFc, dragFe, dragFn, dragFt
63 !
64 ! pressure terms in mass mobility
65  DOUBLE PRECISION PGE, PGN, PGT, SDPx, SDPy, SDPz
66 
67 ! off-diagonal terms for HYS drag relation
68  DOUBLE PRECISION avgDragx, avgDragy, avgDragz
69 !
70 !-----------------------------------------------
71 ! Function subroutines
72 !-----------------------------------------------
73 
74  DO 200 ijk = ijkstart3, ijkend3
75  i = i_of(ijk)
76  j = j_of(ijk)
77  k = k_of(ijk)
78 
79 
80  IF ( fluid_at(ijk) ) THEN
81 
82  ijke = east_of(ijk)
83  ijkn = north_of(ijk)
84  ijkt = top_of(ijk)
85 
86 ! pressure term (no need to have it inside smax loop)
87  pge = p_g(ijke)
88  pgn = p_g(ijkn)
89  pgt = p_g(ijkt)
90  IF (cyclic_x_pd) THEN
91  IF (cyclic_at_e(ijk)) pge = p_g(ijke) - delp_x
92  ENDIF
93  IF (cyclic_y_pd) THEN
94  IF (cyclic_at_n(ijk)) pgn = p_g(ijkn) - delp_y
95  ENDIF
96  IF (cyclic_z_pd) THEN
97  IF (cyclic_at_t(ijk)) pgt = p_g(ijkt) - delp_z
98  ENDIF
99  sdpx = -p_scale*(pge - p_g(ijk)) * odx_e(i)
100  sdpy = -p_scale*(pgn - p_g(ijk)) * ody_n(j)
101  sdpz = -p_scale*(pgt - p_g(ijk)) * (ox_e(i)*odz_t(k))
102 
103  DO m = 1, smax
104  vj = (pi/6.d0)*d_p(ijk,m)**3 ! particle volume
105  mj = vj * ro_s(ijk,m) ! particle mass
106 
107  njc = rop_s(ijk,m) / mj
108  nje = rop_s(ijke,m) / mj
109  njn = rop_s(ijkn,m) / mj
110  njt = rop_s(ijkt,m) / mj
111 
112 ! drag force on a particle in -x -y -z directions
113  dragfc = zero
114  dragfe = zero
115  dragfn = zero
116  dragft = zero
117  if(njc > zero) dragfc = f_gs(ijk ,m)/njc
118  if(nje > zero) dragfe = f_gs(ijke,m)/nje
119  if(njn > zero) dragfn = f_gs(ijkn,m)/njn
120  if(njt > zero) dragft = f_gs(ijkt,m)/njt
121 
122  dragfxflux(ijk,m) = avg_x(dragfc,dragfe,i) * (u_g(ijk) - u_s(ijk,m))
123  dragfyflux(ijk,m) = avg_y(dragfc,dragfn,j) * (v_g(ijk) - v_s(ijk,m))
124  dragfzflux(ijk,m) = avg_z(dragfc,dragft,k) * (w_g(ijk) - w_s(ijk,m))
125 
126  dragfx(ijk,m) = avg_x(dragfc,dragfe,i) * (u_g(ijk))
127  dragfy(ijk,m) = avg_y(dragfc,dragfn,j) * (v_g(ijk))
128  dragfz(ijk,m) = avg_z(dragfc,dragft,k) * (w_g(ijk))
129 
130  beta_cell_x(ijk,m)=avg_x(dragfc,dragfe,i)
131  beta_cell_y(ijk,m)=avg_y(dragfc,dragfn,j)
132  beta_cell_z(ijk,m)=avg_z(dragfc,dragft,k)
133 
134  IF(drag_type_enum == hys)THEN
135  DO im=1,smax
136  IF(im /= m)THEN
137 
138 ! HYS additional drag force on a particle in -x -y -z directions
139  dragfc = zero
140  dragfe = zero
141  dragfn = zero
142  dragft = zero
143  if(njc > zero) dragfc = beta_ij(ijk,m,im) /njc
144  if(nje > zero) dragfe = beta_ij(ijke,m,im)/nje
145  if(njn > zero) dragfn = beta_ij(ijkn,m,im)/njn
146  if(njt > zero) dragft = beta_ij(ijkt,m,im)/njt
147 
148  avgdragx = avg_x(dragfc,dragfe,i)
149  dragfx(ijk,m) = dragfx(ijk,m) - avgdragx*(u_g(ijk))
150  dragfxflux(ijk,m) = dragfxflux(ijk,m) - avgdragx*(u_g(ijk) - u_s(ijk,im))
151  beta_ij_cell_x(ijk,m,im)= avg_x(dragfc,dragfe,i)
152 
153  avgdragy = avg_y(dragfc,dragfn,j)
154  dragfy(ijk,m) = dragfy(ijk,m) - avgdragy*(v_g(ijk))
155  dragfyflux(ijk,m) = dragfyflux(ijk,m) - avgdragy*(v_g(ijk) - v_s(ijk,im))
156  beta_ij_cell_y(ijk,m,im)=avg_y(dragfc,dragfn,j)
157 
158  avgdragz = avg_z(dragfc,dragft,k)
159  dragfz(ijk,m) = dragfz(ijk,m) - avgdragz*(w_g(ijk))
160  dragfzflux(ijk,m) = dragfzflux(ijk,m) - avgdragz*(w_g(ijk) - w_s(ijk,im))
161  beta_ij_cell_z(ijk,m,im)=avg_z(dragfc,dragft,k)
162 
163  ENDIF
164  ENDDO
165  ENDIF
166 
167 
168  fixvel(ijk,m) = (mj * bfx_s(ijk,m)+dragfx(ijk,m) +vj*sdpx)
169  fiyvel(ijk,m) = (mj * bfy_s(ijk,m)+dragfy(ijk,m) +vj*sdpy)
170  fizvel(ijk,m) = (mj * bfz_s(ijk,m)+dragfz(ijk,m) +vj*sdpz)
171 
172  fix(ijk,m) = (mj * bfx_s(ijk,m)+dragfxflux(ijk,m) +vj*sdpx)
173  fiy(ijk,m) = (mj * bfy_s(ijk,m)+dragfyflux(ijk,m) +vj*sdpy)
174  fiz(ijk,m) = (mj * bfz_s(ijk,m)+dragfzflux(ijk,m) +vj*sdpz)
175 
176  fiminusdragx(ijk,m) = (mj * bfx_s(ijk,m) + vj*sdpx)
177  fiminusdragy(ijk,m) = (mj * bfy_s(ijk,m) + vj*sdpy)
178  fiminusdragz(ijk,m) = (mj * bfz_s(ijk,m) + vj*sdpz)
179  ENDDO
180  ENDIF ! Fluid_at
181  200 CONTINUE ! outer IJK loop
182 
183  RETURN
184  END SUBROUTINE calc_external_forces
double precision, dimension(:,:,:), allocatable beta_ij_cell_z
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
integer ijkend3
Definition: compar_mod.f:80
double precision, dimension(:,:,:), allocatable beta_ij_cell_x
double precision, dimension(:), allocatable ox_e
Definition: geometry_mod.f:143
double precision, dimension(:,:,:), allocatable beta_ij_cell_y
double precision delp_z
Definition: bc_mod.f:278
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
double precision p_scale
Definition: scales_mod.f:13
double precision, dimension(:,:), allocatable fiminusdragy
Definition: ghdtheory_mod.f:63
double precision delp_x
Definition: bc_mod.f:272
Definition: drag_mod.f:11
double precision, dimension(:,:), allocatable dragfyflux
Definition: ghdtheory_mod.f:99
double precision, dimension(:), allocatable p_g
Definition: fldvar_mod.f:26
double precision, dimension(:,:), allocatable fix
Definition: ghdtheory_mod.f:39
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
logical cyclic_z_pd
Definition: geometry_mod.f:159
double precision, dimension(:,:), allocatable beta_cell_x
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:,:), allocatable fiz
Definition: ghdtheory_mod.f:45
double precision function bfx_s(IJK, M)
Definition: bodyforce_mod.f:41
double precision, dimension(:), allocatable ody_n
Definition: geometry_mod.f:123
double precision, dimension(:,:), allocatable d_p
Definition: fldvar_mod.f:57
double precision, dimension(:,:), allocatable fixvel
Definition: ghdtheory_mod.f:48
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable odx_e
Definition: geometry_mod.f:121
logical cyclic_y_pd
Definition: geometry_mod.f:157
double precision, dimension(:,:), allocatable dragfx
Definition: ghdtheory_mod.f:88
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision, dimension(:,:), allocatable beta_cell_y
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
Definition: run_mod.f:13
Definition: param_mod.f:2
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
double precision, dimension(:,:), allocatable dragfy
Definition: ghdtheory_mod.f:91
logical cyclic_x_pd
Definition: geometry_mod.f:155
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable dragfz
Definition: ghdtheory_mod.f:94
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
double precision delp_y
Definition: bc_mod.f:275
double precision, dimension(:,:), allocatable f_gs
Definition: drag_mod.f:14
double precision, dimension(:,:), allocatable fiminusdragx
Definition: ghdtheory_mod.f:57
double precision, dimension(:,:), allocatable dragfxflux
Definition: ghdtheory_mod.f:96
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 function bfz_s(IJK, M)
Definition: bodyforce_mod.f:55
double precision, dimension(:,:), allocatable fiyvel
Definition: ghdtheory_mod.f:51
double precision, dimension(:,:), allocatable dragfzflux
double precision, dimension(:,:,:), allocatable beta_ij
Definition: drag_mod.f:20
double precision, dimension(:,:), allocatable beta_cell_z
double precision, dimension(:,:), allocatable fizvel
Definition: ghdtheory_mod.f:54
double precision, parameter pi
Definition: constant_mod.f:158
subroutine calc_external_forces()
double precision, dimension(:), allocatable odz_t
Definition: geometry_mod.f:125
double precision function bfy_s(IJK, M)
Definition: bodyforce_mod.f:48
double precision, parameter zero
Definition: param1_mod.f:27
Definition: bc_mod.f:23
double precision, dimension(:,:), allocatable fiminusdragz
Definition: ghdtheory_mod.f:69