File: N:\mfix\model\des\cfassign.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SUBROUTINE CFASSIGN
21
22
23
24
25 USE param1
26 USE constant, only : GRAVITY_X, GRAVITY_Y, GRAVITY_Z
27 USE discretelement
28 USE mfix_pic
29 use error_manager
30
31 use run, only: DEM_SOLIDS
32
33 use run, only: PIC_SOLIDS
34
35 IMPLICIT NONE
36
37
38
39
40 CALL INIT_ERR_MSG("CFASSIGN")
41
42
43
44
45 (1) = GRAVITY_X
46 GRAV(2) = GRAVITY_Y
47 GRAV(3) = GRAVITY_Z
48 GRAV_MAG = sqrt(dot_product(GRAV,GRAV))
49
50 IF(DEM_SOLIDS) CALL CFASSIGN_DEM
51 IF(PIC_SOLIDS) CALL CFASSIGN_PIC
52
53
54 CALL FINL_ERR_MSG
55
56 RETURN
57 END SUBROUTINE CFASSIGN
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 SUBROUTINE CFASSIGN_PIC
74
75
76
77
78
79 USE discretelement, only: des_mmax, dtsolid
80 use param1, only: large_number
81 USE physprop, only: MU_g0, mmax, d_p0, ro_s0
82 USE mfix_pic, only : dtpic_taup, des_tau_p
83 USE mfix_pic, only: MPPIC_PDRAG_IMPLICIT
84 use error_manager
85 IMPLICIT NONE
86
87
88
89 INTEGER :: M, MMAX_TOT
90
91
92 CALL INIT_ERR_MSG("CFASSIGN_PIC")
93
94 MMAX_TOT = DES_MMAX+MMAX
95 DO M = MMAX+1, MMAX_TOT
96
97 (M) = RO_S0(M)*(D_P0(M)**2.d0)/(18.d0*MU_g0)
98 WRITE(err_msg,'(/A,I2,A,G17.8)') &
99 'TAU_P FOR ', M,'th SOLID PHASE= ', DES_TAU_P(M)
100 CALL FLUSH_ERR_MSG (Header = .false., Footer = .false.)
101
102 ENDDO
103
104 DTSOLID = MINVAL(DES_TAU_P(MMAX+1:MMAX_TOT))
105 DTPIC_TAUP = DTSOLID
106 if(MPPIC_PDRAG_IMPLICIT) DTPIC_TAUP = LARGE_NUMBER
107
108 WRITE(ERR_MSG, 1000) DTSolid
109 CALL FLUSH_ERR_MSG(Header = .false.)
110
111 1000 format('MPPIC: Point-particle ',&
112 'approximation for particle-particle and ', /, &
113 'particle-wall collisions', /, &
114 'DTSOLID based on particle time response Taup', /, &
115 'DTSOLID = ', 2x, E17.10)
116
117
118 CALL FINL_ERR_MSG
119
120 END SUBROUTINE CFASSIGN_PIC
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138 SUBROUTINE CFASSIGN_DEM
139
140
141
142
143
144 USE param1
145 USE discretelement
146 use error_manager
147 IMPLICIT NONE
148
149
150
151
152 CALL INIT_ERR_MSG("CFASSIGN_DEM")
153
154
155
156
157
158 CALL FINL_ERR_MSG
159 END SUBROUTINE CFASSIGN_DEM
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 SUBROUTINE compute_volume_of_nodes
182
183
184
185
186 USE param
187 USE param1
188 USE parallel
189 USE physprop
190 USE fldvar
191 USE run
192 USE geometry
193 USE indices
194 USE bc
195 USE compar
196 USE sendrecv
197 USE discretelement
198 USE cutcell
199 USE functions
200 implicit none
201
202
203
204
205 integer :: ijk, iraw, jraw, kraw
206
207
208 INTEGER :: I, J, K, ip, jp, kp
209 integer :: ipjk, ijpk, ipjpk, ijkp, ipjkp, ijpkp, ipjpkp
210
211 double precision :: vol_ijk, vol_ipjk, vol_ijpk, vol_ipjpk
212 double precision :: vol_ijkp, vol_ipjkp, vol_ijpkp, vol_ipjpkp
213 double precision :: vol_node_count, vol_node_actual_count
214
215 double precision :: avg_factor
216
217 double precision :: vol_node_uncorr
218
219
220 = merge(0.25d0, 0.125d0, NO_K)
221
222
223
224 = merge(4., 8., NO_K)
225
226 DO ijk = ijkstart3,ijkend3
227 des_vol_node(ijk) = zero
228 iraw = i_of(ijk)
229 jraw = j_of(ijk)
230 kraw = k_of(ijk)
231
232
233
234
235
236
237
238
239
240
241
242 IF(iraw.LT.istart2 .OR. iraw.GT.iend1) CYCLE
243 IF(jraw.LT.jstart2 .OR. jraw.GT.jend1) CYCLE
244 IF(kraw.LT.kstart2 .OR. kraw.GT.kend1) CYCLE
245
246
247
248
249
250 = imap_c(iraw)
251 J = jmap_c(jraw)
252 K = kmap_c(kraw)
253 IP = imap_c(iraw+1)
254 JP = jmap_c(jraw+1)
255
256
257
258
259
260 = funijk(IP,J,K)
261 ijpk = funijk(I,JP,K)
262 ipjpk = funijk(IP,JP,K)
263
264
265
266 = dx(I) *dy(J) *dz(K)
267 vol_ipjk = dx(IP)*dy(J) *dz(K)
268 vol_ijpk = dx(I) *dy(JP)*dz(K)
269 vol_ipjpk = dx(IP)*dy(JP)*dz(K)
270
271 vol_node_uncorr = avg_factor*(vol_ijk + vol_ipjk + vol_ijpk + vol_ipjpk)
272 vol_node_actual_count = vol_node_count
273
274 IF(.NOT.FLUID_AT(ijk)) THEN
275 vol_node_actual_count = vol_node_actual_count - 1
276 vol_ijk = zero
277 ENDIF
278
279 IF(.NOT.FLUID_AT(ipjk)) THEN
280 vol_node_actual_count = vol_node_actual_count - 1
281 vol_ipjk = zero
282 ENDIF
283
284 IF(.NOT.FLUID_AT(ijpk)) THEN
285 vol_node_actual_count = vol_node_actual_count - 1
286 vol_ijpk = zero
287 ENDIF
288
289 IF(.NOT.FLUID_AT(ipjpk)) THEN
290 vol_node_actual_count = vol_node_actual_count - 1
291 vol_ipjpk = zero
292 ENDIF
293
294
295
296 (ijk) = avg_factor*(vol_ijk + vol_ipjk + &
297 vol_ijpk + vol_ipjpk)
298
299 IF (DO_K) THEN
300 KP = kmap_c(kraw+1)
301 ijkp = funijk(I, J, KP)
302 ipjkp = funijk(IP,J, KP)
303 ijpkp = funijk(I, JP,KP)
304 ipjpkp = funijk(IP,JP,KP)
305
306 vol_ijkp = dx(I) *dy(J) *dz(KP)
307 vol_ipjkp = dx(IP)*dy(J) *dz(KP)
308 vol_ijpkp = dx(I) *dy(JP)*dz(KP)
309 vol_ipjpkp = dx(IP)*dy(JP)*dz(KP)
310
311 vol_node_uncorr = avg_factor*(vol_node_uncorr + vol_ijkp + &
312 vol_ipjkp + vol_ijpkp + vol_ipjpkp)
313
314 IF(.NOT.FLUID_AT(ijkp)) THEN
315 vol_node_actual_count = vol_node_actual_count - 1
316 vol_ijkp = zero
317 ENDIF
318
319 IF(.NOT.FLUID_AT(ipjkp)) THEN
320 vol_node_actual_count = vol_node_actual_count - 1
321 vol_ipjkp = zero
322 ENDIF
323
324 IF(.NOT.FLUID_AT(ijpkp)) THEN
325 vol_node_actual_count = vol_node_actual_count - 1
326 vol_ijpkp = zero
327 ENDIF
328
329 IF(.NOT.FLUID_AT(ipjpkp)) THEN
330 vol_node_actual_count = vol_node_actual_count - 1
331 vol_ipjpkp = zero
332 ENDIF
333
334 des_vol_node(ijk) = des_vol_node(ijk) + avg_factor*&
335 (vol_ijkp + vol_ipjpkp + vol_ijpkp + vol_ipjkp)
336
337 ENDIF
338
339
340 ENDDO
341
342 RETURN
343 RETURN
344 END SUBROUTINE compute_volume_of_nodes
345
346