MFIX  2016-1
source_population_eq.f
Go to the documentation of this file.
1 
2  SUBROUTINE source_population_eq(x,y,dydx)
3 
4  use param1, only: zero, small_number
5  USE constant
6  USE fldvar
7  USE physprop
8  USE rdf
9  USE scalars
10 
11  IMPLICIT NONE
12 
13  double precision x,y(*),dydx(*)
14  double precision K_v
15  double precision m1,m2, dav,theta,c11
16  double precision epstotal
17  integer L,n,np,i,j,k,IJK
18 
19  k_v=pi/6
20  epstotal=0.0
21  theta=0.0
22 
23 
24  DO i=1,nscalar
25  a(i)= 0.0
26  omega(i)=y(i)/(k_v*(y(nscalar+i)**3))
27  ENDDO
28 
29  n=2*nscalar
30  np=2*nscalar
31 
32  ijk=ijk_index
33 
34 ! initinalize variables
35  DO i=1,n
36  DO j=1,n
37  matrix_a(i,j)=zero
38  matrix_b(i,j)=zero
39  matrix_c(i,j)=zero
40  inv_a(i,j)=zero
41  ENDDO
42  ENDDO
43 
44  DO i=1,n
45  dydx(i)=zero
46  ENDDO
47 
48  DO i=0,2*nscalar-1
49  s_bar(i)=zero
50  ENDDO
51 
52 ! calculate BETA_A(I,J) and A(I)
53 
54  DO i=1, nscalar
55  epstotal=rop_s(ijk,i)/ro_s(ijk,i)+epstotal
56  ENDDO
57 
58  If(epstotal>=small_number) THEN
59  Do j=1,nscalar
60  theta= theta+(rop_s(ijk,j)/ro_s(ijk,j))*theta_m(ijk,j)
61  ENDDO
62  theta= theta/epstotal
63  else
64  theta=0.0
65  endif
66 
67 
68  DO i=1,nscalar
69  DO j=1,nscalar
70 
71  m1=pi*(scalar(ijk,i)**3)*ro_s(ijk,i)/6.0
72  m2=pi*(scalar(ijk,j)**3)*ro_s(ijk,j)/6.0
73  dav=(scalar(ijk,i)+scalar(ijk,j))/2.0
74  c11=((theta*(m1+m2)**2)/(4*pi*m1*m2))**(0.5)*(4.0/dav)
75  beta_a(i,j)=aggregation_eff*pi*(dav**3)*g_0(ijk,i,j)*c11
76  a(i)=a(i)+pi*(dav**3)*g_0(ijk,i,j)*c11*omega(j)*breakage_eff
77 
78  ENDDO
79  ENDDO
80 
81 
82 ! calculate S_bar
83 !
84  DO l=0,2*nscalar-1
85  DO i=1,nscalar
86  DO j=1,nscalar
87  If(y(i)<=1.0e-6) THEN
88  IF(y(j)<=1.0e-6) THEN
89  s_bar(l)=s_bar(l)+0.0
90  ELSE
91  s_bar(l)=s_bar(l)+&
92  beta_a(i,j)*(1.0/2.0)*omega(i)*omega(j)*&
93  ((y(nscalar+j)**3)**(l/3.0))
94  ENDIF
95  ELSE
96  IF(y(j)<=1.0e-6)THEN
97  s_bar(l)=s_bar(l)+&
98  beta_a(i,j)*(1.0/2.0)*omega(i)*omega(j)*&
99  ((y(nscalar+i)**3)**(l/3.0))-&
100  beta_a(i,j)*(y(nscalar+i)**l)*omega(i)*omega(j)
101  ELSE
102  s_bar(l)=s_bar(l)+&
103  beta_a(i,j)*(1.0/2.0)*omega(i)*omega(j)*&
104  (((y(nscalar+i)**3)+(y(nscalar+j)**3))**(l/3.0))-&
105  beta_a(i,j)*(y(nscalar+i)**l)*omega(i)*omega(j)
106  ENDIF
107  ENDIF
108  ENDDO
109  ENDDO
110 
111  DO i=1,nscalar
112  IF(y(i)<1.0e-6) THEN
113  s_bar(l)=s_bar(l)+0.0
114  ELSE
115  s_bar(l)=s_bar(l)+&
116  a(i)*(2**((3.0-l)/3.0))*(y(nscalar+i)**l)*omega(i)-&
117  a(i)*(y(nscalar+i)**l)*omega(i)
118  ENDIF
119  ENDDO
120  ENDDO
121 
122 ! calcalute inv(A)
123 
124 
125  IF(nscalar==2) THEN
126  IF(abs(y(3)-y(4))<=1.0e-4) THEN
127  y(3)=y(3)*0.999
128  y(4)=y(4)*1.001
129  ENDIF
130  ENDIF
131 
132  IF(nscalar==3) THEN
133  IF(abs(y(4)-y(5))<=1.0e-4) THEN
134  y(4)=y(4)*0.999
135  y(5)=y(4)*1.001
136  ENDIF
137  IF(abs(y(5)-y(6))<=1.0e-4) THEN
138  y(5)=y(5)*0.999
139  y(6)=y(5)*1.001
140  ENDIF
141  IF(abs(y(4)-y(6))<=1.0e-4) THEN
142  y(4)=y(4)*0.999
143  y(6)=y(4)*1.001
144  ENDIF
145  ENDIF
146 
147  DO j=1,nscalar
148  matrix_a(1,j)=1.0
149  matrix_a(2,j)=0.0
150  ENDDO
151 
152  DO j=nscalar+1,n
153  matrix_a(1,j)=0.0
154  matrix_a(2,j)=1.0
155  ENDDO
156 
157  DO i=3,n
158  DO j=1,nscalar
159  matrix_a(i,j)=(1.0-i+1.0)*(y(j+nscalar)**((i-1)*1.0))
160  ENDDO
161 
162  DO j=nscalar+1,n
163  matrix_a(i,j)=(i-1.0)*(y(j)**((i-2)*1.0))
164  ENDDO
165  ENDDO
166 
167 
168 
169 
170  DO i=1,n
171  inv_a(i,i)=1.0
172  ENDDO
173 
174  call gaussj(matrix_a,n,np,inv_a,n,n)
175 
176  DO i=1,n
177  IF(i<=nscalar) THEN
178  IF(y(i)>1.0e-3) matrix_c(i,i)=-2*(y(i+nscalar)**3)
179  ELSE
180  IF(y(i-nscalar)>1.0e-3) matrix_c(i,i)= 4*(y(i)**3)
181  ENDIF
182  ENDDO
183 
184  DO i=1,nscalar
185  IF(y(i)>1.0e-3) THEN
186  matrix_c(i,i+nscalar)=3*(y(i+nscalar)**2)
187  matrix_c(i+nscalar,i)=-3*(y(i+nscalar)**4)
188  ENDIF
189  ENDDO
190 
191 
192  DO i = 1, n
193  DO j = 1, n
194  DO k = 1, n
195  matrix_b(i,j) = matrix_b(i,j) + &
196  matrix_c(i,k)*inv_a(k,j)
197  ENDDO
198  ENDDO
199  ENDDO
200 
201  DO i=1,nscalar
202  DO j=1,n
203  dydx(i)=dydx(i)+k_v*matrix_b(i,j)*s_bar(j-1)
204  ENDDO
205  ENDDO
206 
207  DO i=nscalar+1,n
208  IF(y(i-nscalar)>1.0e-6) THEN
209  dydx(i)=-dydx(i-nscalar)*y(i)/y(i-nscalar)
210  ELSE
211  dydx(i)=dydx(i)+0.0
212  ENDIF
213  DO j=1,n
214  IF(y(i-nscalar)>1.0e-6) THEN
215  dydx(i)=dydx(i)+(k_v/y(i-nscalar))*(matrix_b(i,j)*s_bar(j-1))
216  ELSE
217  dydx(i)=dydx(i)+0.0
218  ENDIF
219  ENDDO
220  ENDDO
221 
222 
223  return
224  END
225 
226 
227 
228 
integer ijk_index
Definition: scalars_mod.f:31
subroutine gaussj(a, n, np, b, m, mp)
Definition: gaussj.f:2
double precision, dimension(:,:), allocatable matrix_a
Definition: scalars_mod.f:24
double precision, dimension(:,:), allocatable scalar
Definition: fldvar_mod.f:155
double precision function g_0(IJK, M1, M2)
Definition: rdf_mod.f:240
double precision, dimension(:), allocatable a
Definition: scalars_mod.f:29
double precision aggregation_eff
Definition: constant_mod.f:142
double precision, parameter small_number
Definition: param1_mod.f:24
double precision, dimension(:), allocatable omega
Definition: scalars_mod.f:23
double precision breakage_eff
Definition: constant_mod.f:143
double precision, dimension(:,:), allocatable theta_m
Definition: fldvar_mod.f:149
double precision, dimension(:,:), allocatable matrix_c
Definition: scalars_mod.f:26
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
subroutine source_population_eq(x, y, dydx)
double precision, dimension(:,:), allocatable beta_a
Definition: scalars_mod.f:30
integer nscalar
Definition: scalars_mod.f:7
double precision, dimension(:,:), allocatable matrix_b
Definition: scalars_mod.f:25
Definition: rdf_mod.f:11
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
double precision, parameter pi
Definition: constant_mod.f:158
double precision, dimension(:), allocatable s_bar
Definition: scalars_mod.f:22
double precision, dimension(:,:), allocatable inv_a
Definition: scalars_mod.f:27
double precision, parameter zero
Definition: param1_mod.f:27