MFIX  2016-1
pic_routines.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! Subroutine: MPPIC_COMP_EULERIAN_VELS_NON_CG !
3 ! Author: R. Garg !
4 ! !
5 ! Purpose: !
6 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
8  USE compar
9  USE constant
10  use desmpi
11  USE discretelement
12  use fldvar, only: u_s, v_s, w_s
13  USE functions
14  USE geometry
15  USE indices
16  USE mfix_pic
17  USE parallel
18  USE param
19  USE param1
20  USE physprop, only: mmax
21  IMPLICIT NONE
22 !-----------------------------------------------
23 ! Local variables
24 !-----------------------------------------------
25 ! general i, j, k indices
26  INTEGER :: I, J, K, IJK, IPJK, IJPK, IJKP
27 
28 ! index of solid phase that particle NP belongs to
29  INTEGER :: M
30  INTEGER :: MMAX_TOT
31 !-----------------------------------------------
32 
33  mmax_tot = mmax+des_mmax
34  DO ijk = ijkstart3, ijkend3
35  i = i_of(ijk)
36  j = j_of(ijk)
37  k = k_of(ijk)
38  !U_so(IJK, :) = U_s(IJK, :)
39  !V_so(IJK, :) = V_s(IJK, :)
40  !W_so(IJK, :) = W_s(IJK, :)
41 ! could these be replaced by u_s, w_s, v_s?
42  pic_u_s(ijk, :) = zero
43  pic_v_s(ijk, :) = zero
44  pic_w_s(ijk, :) = zero
45  IF (.NOT.is_on_mype_plus1layer(i,j,k)) cycle
46  IF(.NOT.fluid_at(ijk)) cycle
47 
48  IF(i.GE.imin1.AND.i.LT.imax1) then !because we don't want to
49  !calculate solids velocity at the wall cells.
50  ipjk = ip_of(ijk)
51  DO m = mmax+1, mmax_tot
52  pic_u_s(ijk,m) = 0.5d0*(u_s(ijk, m) + u_s(ipjk,m))
53  ENDDO
54  ENDIF
55 
56  if(j.GE.jmin1.AND.j.LT.jmax1) then !because we don't want to
57  !calculate solids velocity at the wall cells.
58  ijpk = jp_of(ijk)
59  DO m = mmax+1, mmax_tot
60  pic_v_s(ijk,m) = 0.5d0*(v_s(ijk, m) + v_s(ijpk,m))
61  ENDDO
62  ENDIF
63 
64 
65  if(k.GE.kmin1.AND.k.LT.kmax1.AND.do_k) then !because we don't want to
66  !calculate solids velocity at the wall cells.
67  ijkp = kp_of(ijk)
68  DO m = mmax+1, mmax_tot
69  pic_w_s(ijk,m) = 0.5d0*(w_s(ijk, m) + w_s(ijkp,m))
70  ENDDO
71  ENDIF
72  ENDDO
73  !CALL SET_WALL_BC(IER)
74  !the above routine will apply noslip or free slip BC as per the mfix convention.
75  !currently, this implies NSW or FSW wall BC's will be re-applied to gas-phase
76  !field as well. This can be changed later on to be more specific to MPPIC case
77  !CALL WRITE_MPPIC_VEL_S
78  CALL mppic_bc_u_s
79  CALL mppic_bc_v_s
80  IF(do_k) CALL mppic_bc_w_s
81 
82  END SUBROUTINE mppic_comp_eulerian_vels_non_cg
83 
84 
85 
86 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
87 ! Subroutine: MPPIC_COMP+EULERIAN_VELS_CG !
88 ! Author: R. Garg !
89 ! !
90 ! Puryyse: !
91 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
93  USE compar
94  USE constant
95  USE cutcell
96  USE desmpi
97  USE discretelement
98  use fldvar, only: u_s, v_s, w_s
99  USE functions
100  USE geometry
101  USE indices
102  USE mfix_pic
103  USE parallel
104  USE param
105  USE param1
106  use physprop, only: mmax
107  IMPLICIT NONE
108 !-----------------------------------------------
109 ! Local variables
110 !-----------------------------------------------
111 ! general i, j, k indices
112  INTEGER :: I, J, K, IJK, IPJK, IJPK, IJKP
113 
114 ! index of solid phase that particle NP belongs to
115  INTEGER :: M
116  INTEGER :: MMAX_TOT
117 !-----------------------------------------------
118 
119  mmax_tot = mmax+des_mmax
120  DO ijk = ijkstart3, ijkend3
121  i = i_of(ijk)
122  j = j_of(ijk)
123  k = k_of(ijk)
124  !U_so(IJK, :) = U_s(IJK, :)
125  !V_so(IJK, :) = V_s(IJK, :)
126  !W_so(IJK, :) = W_s(IJK, :)
127  pic_u_s(ijk, :) = zero
128  pic_v_s(ijk, :) = zero
129  pic_w_s(ijk, :) = zero
130 
131  IF (.NOT.is_on_mype_plus1layer(i,j,k)) cycle
132 
133  IF(wall_u_at(ijk)) THEN
134  pic_u_s(ijk, :) = zero
135  !currently only No slip BC is being set on this mean
136  !solid's velocity field. Later this wall part can be
137  !treated separately and U_S set only for scalar cells
138  !where FLUID_AT(IJK) is true.
139  ELSE
140  if(.not.fluid_at(ijk)) cycle
141 
142  ipjk = ip_of(ijk)
143  IF(fluid_at(ipjk)) THEN
144  DO m = mmax+1, mmax_tot
145  pic_u_s(ijk,m) = 0.5d0*(u_s(ijk, m) + u_s(ipjk,m))
146  ENDDO
147  ELSE
148  pic_u_s(ijk,:) = u_s(ijk, :)
149  ENDIF
150  ENDIF
151 
152  IF(wall_v_at(ijk)) THEN
153  pic_v_s(ijk, :) = zero
154  ELSE
155  if(.not.fluid_at(ijk)) cycle
156  ijpk = jp_of(ijk)
157  IF(fluid_at(ijpk)) THEN
158  DO m = mmax+1, mmax_tot
159  pic_v_s(ijk,m) = 0.5d0*(v_s(ijk, m) + v_s(ijpk,m))
160  ENDDO
161  ELSE
162  pic_v_s(ijk,:) = v_s(ijk, :)
163  ENDIF
164  ENDIF
165 
166  IF(do_k) THEN
167  IF(wall_w_at(ijk)) THEN
168  pic_w_s(ijk, :) = zero
169  ELSE
170  if(.not.fluid_at(ijk)) cycle
171  ijkp = kp_of(ijk)
172  IF(fluid_at(ijkp)) THEN
173  DO m = mmax+1, mmax_tot
174  pic_w_s(ijk,m) = 0.5d0*(w_s(ijk, m) + w_s(ijkp,m))
175  ENDDO
176  ELSE
177  pic_w_s(ijk,:) = w_s(ijk, :)
178  ENDIF
179  ENDIF
180  ENDIF
181  ENDDO
182 
183  END SUBROUTINE mppic_comp_eulerian_vels_cg
184 
185 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
186 ! Subroutine: MPPIC_APPLY_PS_GRAD_PART !
187 ! Author: R. Garg !
188 ! !
189 ! Purpose: !
190 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
191  SUBROUTINE mppic_apply_ps_grad_part(L)
193  USE param
194  USE param1
195  USE parallel
196  USE constant
197  USE discretelement
198  USE mpi_utility
199  USE mfix_pic
200  USE cutcell
201  USE fldvar, only: ep_g, u_s, v_s, w_s
202  USE fun_avg
203  USE functions
204  IMPLICIT NONE
205  INTEGER, INTENT(IN) :: L
206 !-----------------------------------------------
207 ! Local Variables
208 !-----------------------------------------------
209  INTEGER M, IDIM
210  INTEGER IJK, IJK_C
211 
212  DOUBLE PRECISION COEFF_EN, COEFF_EN2
213 
214  DOUBLE PRECISION DELUP(dimn), PS_FORCE(dimn), VEL_ORIG(dimn)
215 
216 ! dt's in each direction based on cfl_pic for the mppic case
217 
218  DOUBLE PRECISION :: MEANUS(dimn, dimension_m)
219  DOUBLE PRECISION :: RELVEL(dimn)
220  DOUBLE PRECISION :: MEANVEL(dimn)
221  DOUBLE PRECISION :: VEL_NEW(dimn)
222 ! INTEGER :: TOT_CASE, case1_count, case2_count, case3_count, case4_count
223 
224  LOGICAL :: INSIDE_DOMAIN
225 !-----------------------------------------------
226 
227  m = pijk(l,5)
228  ijk = pijk(l,4)
229  coeff_en = mppic_coeff_en1
230  coeff_en2 = mppic_coeff_en2
231 
232  vel_orig(1:dimn) = des_vel_new(l,:)
233  vel_new(1:dimn) = des_vel_new(l,:)
234  !IF(L.eq.1) WRITE(*,*) 'MPPIC COEFFS = ', COEFF_EN, COEFF_EN2
235  IF(l.EQ.focus_particle) THEN
236 
237  WRITE(*,'(A20,2x,3(2x,i4))') 'CELL ID = ', pijk(l,1:3)
238  WRITE(*,'(A20,2x,3(2x,g17.8))') 'EPS = ', 1.d0 - ep_g(pijk(l,4))
239  WRITE(*,'(A20,2x,3(2x,g17.8))') 'DES_VEL ORIG = ', des_vel_new(l,:)
240 
241  WRITE(*,'(A20,2x,3(2x,g17.8))') 'FC = ', fc(l,:)
242  ENDIF
243 
244  meanvel(1) = u_s(ijk,m)
245  meanvel(2) = v_s(ijk,m)
246  IF(do_k) meanvel(3) = w_s(ijk,m)
247 
248  ps_force(:) = ps_grad(:,l)
249  !IF(ABS(PS_FORCE(2)).GT.ZERO) WRITE(*,*) 'PS_FORCE = ', PS_FORCE
250  delup(:) = -ps_force(:)
251 
252  meanus(:,m) = avgsolvel_p(:,l)
253  !MEANUS(:,M) = MEANVEL(:)
254  relvel(:) = des_vel_new(l,:) - meanus(:,m)
255 
256  !IF(EPg_P(L).gt.1.2d0*ep_star) RETURN
257 
258  DO idim = 1, dimn
259 
260  IF(abs(ps_force(idim)).eq.zero) cycle
261 
262  IF(vel_orig(idim)*meanus(idim,m).GT.zero) THEN
263 
264  IF(vel_orig(idim)*delup(idim).GT.zero) THEN
265 
266  IF(abs(meanus(idim,m)) .GT. abs(vel_orig(idim))) THEN
267  ijk_c = ijk
268  IF(idim.eq.1) then
269  if(vel_orig(idim).LT.zero) ijk_c = im_of(ijk)
270  if(vel_orig(idim).GT.zero) ijk_c = ip_of(ijk)
271  ELSEIF(idim.eq.2) then
272  if(vel_orig(idim).LT.zero) ijk_c = jm_of(ijk)
273  if(vel_orig(idim).GT.zero) ijk_c = jp_of(ijk)
274  ELSEIF(idim.eq.3) then
275  if(vel_orig(idim).LT.zero) ijk_c = km_of(ijk)
276  if(vel_orig(idim).GT.zero) ijk_c = kp_of(ijk)
277  ENDIF
278  inside_domain = .false.
279  inside_domain = fluid_at(ijk_c)!and.(.not.cut_cell_at(IJK_C))
280 
281  if(inside_domain) then
282  vel_new(idim) = meanus(idim,m) - coeff_en*relvel(idim)
283  endif
284 ! case4_count = case4_count + 1
285  ELSE
286  !do nothing
287  ENDIF
288  ELSE
289  IF(abs(vel_orig(idim)).GT.abs(meanus(idim,m))) then
290  !VEL_NEW(IDIM) = MEANUS(IDIM,M) - COEFF_EN*RELVEL(IDIM)
291  ijk_c = ijk
292  IF(idim.eq.1) then
293  if(vel_orig(idim).LT.zero) ijk_c = im_of(ijk)
294  if(vel_orig(idim).GT.zero) ijk_c = ip_of(ijk)
295  ELSEIF(idim.eq.2) then
296  if(vel_orig(idim).LT.zero) ijk_c = jm_of(ijk)
297  if(vel_orig(idim).GT.zero) ijk_c = jp_of(ijk)
298  ELSEIF(idim.eq.3) then
299  if(vel_orig(idim).LT.zero) ijk_c = km_of(ijk)
300  if(vel_orig(idim).GT.zero) ijk_c = kp_of(ijk)
301  ENDIF
302  !VEL_NEW(IDIM) = (MEANUS(IDIM,M) - COEFF_EN*RELVEL(IDIM))
303 
304  inside_domain = .false.
305  inside_domain = fluid_at(ijk_c)!.and.(.not.cut_cell_at(IJK_C))
306 
307  if(inside_domain) then
308  vel_new(idim) = (meanus(idim,m) - coeff_en*relvel(idim))
309  else
310  vel_new(idim) = -coeff_en*vel_orig(idim)
311  endif
312 
313  ijk_c = ijk
314  IF(idim.eq.1) then
315  if(vel_new(idim).LT.zero) ijk_c = im_of(ijk)
316  if(vel_new(idim).GT.zero) ijk_c = ip_of(ijk)
317  ELSEIF(idim.eq.2) then
318  if(vel_new(idim).LT.zero) ijk_c = jm_of(ijk)
319  if(vel_new(idim).GT.zero) ijk_c = jp_of(ijk)
320  ELSEIF(idim.eq.3) then
321  if(vel_new(idim).LT.zero) ijk_c = km_of(ijk)
322  if(vel_new(idim).GT.zero) ijk_c = kp_of(ijk)
323  ENDIF
324  inside_domain = .false.
325  inside_domain = fluid_at(ijk_c) !.and.(.not.cut_cell_at(IJK_C))
326 
327  !if(.not.INSIDE_DOMAIN) then
328  ! VEL_NEW(IDIM) = -COEFF_EN*VEL_ORIG(IDIM)
329  !ENDIF
330 
331 ! case1_count = case1_count + 1
332  ELSE
333  !do nothing
334  vel_new(idim) = coeff_en2 * vel_orig(idim)
335  !turning on the above would make the model uncondtionally stable
336 ! case1_count = case1_count + 1
337 
338  ENDIF
339  ENDIF
340  ELSE
341  IF(meanus(idim,m)*delup(idim).GT.zero) THEN
342  vel_new(idim) = meanus(idim,m) - coeff_en*relvel(idim)
343 ! case2_count = case2_count + 1
344  ELSE
345 ! case3_count = case3_count + 1
346  !DO NOTHING
347  ENDIF
348  ENDIF
349 
350  IF(mppic_grav_treatment) THEN
351  IF(delup(idim)*grav(idim).LT.zero.AND.vel_orig(idim)*grav(idim).GT.zero) THEN
352  vel_new(idim) = -coeff_en*vel_orig(idim)
353  ENDIF
354  ENDIF
355  des_vel_new( l,idim) = vel_new(idim)
356  ENDDO
357 
358  !
359  if(l.eq.focus_particle) THEN
360  !iF((IJK.eq.epg_min_loc(1).or.IJK_OLD.eq.epg_min_loc(1)).and.epg_min2.lt.0.38) then
361  !if(j.ne.2) cycle
362 
363  WRITE(*,'(A20,2x,3(2x,i5))') 'PIJK I, J, K =', i_of(ijk),j_of(ijk),k_of(ijk)
364  WRITE(*,'(A20,2x,3(2x,g17.8))') 'DES_VEL ORIG = ', vel_orig(:)
365  WRITE(*,'(A20,2x,3(2x,g17.8))') 'DES_VEL NEW = ', des_vel_new(l,:)
366  WRITE(*,'(A20,2x,3(2x,g17.8))') 'MEANUS = ', meanus(:,1)
367  WRITE(*,'(A20,2x,3(2x,g17.8))') 'DES_POS_NEW = ', des_pos_new(l,:)
368  WRITE(*,'(A20,2x,3(2x,g17.8))') 'GRAD PS = ', ps_force(:)
369  WRITE(*,'(A20,2x,3(2x,g17.8))') 'DELUP = ', delup(:)
370 
371  !WRITE(*,'(A20,2x,3(2x,g17.8))') 'UPRIMETAU_INT = ', UPRIMETAU_INT(:)
372  !WRITE(*,'(A20,2x,3(2x,g17.8))') 'UPRIMETAU = ', UPRIMETAU(:)
373  !IF(UPRIMEMOD*DTSOLID.GT.MEAN_FREE_PATH) WRITE(*,'(A20,2x,3(2x,g17.8))') 'U*DT, MFP =', UPRIMEMOD*DTSOLID, MEAN_FREE_PATH
374  read(*,*)
375  ENDIF
376 
377  !TOT_CASE = case1_count + case2_count + case3_count + case4_count
378  !IF(TOT_CASE.GT.0) THEN
379  !WRITE(*,'(A, 4(2x,i10))') 'CASE COUNT NUMBERS = ', case1_count ,case2_count ,case3_count ,case4_count
380  !WRITE(*,'(A, 4(2x,g12.7))') 'CASE COUNT %AGE = ', real(case1_count)*100./real(tot_case), &
381  ! real(case2_count)*100./real(tot_case), real(case3_count)*100./real(tot_case), real(case4_count)*100./real(tot_case)
382  !ENDIF
383  RETURN
384 
385  !MEANUS(:,M) = MEANVEL(:)
386  !RELVEL(:) = DES_VEL_NEW(L,:) - MEANUS(:,M)
387  !DO IDIM = 1, DIMN
388  ! IF(ABS(PS_FORCE(IDIM)).eq.zero) cycle
389 
390  ! IF(RELVEL(IDIM)*DELUP(IDIM).GT.ZERO) THEN
391  !do nothing
392  ! ELSE
393  ! DES_VEL_NEW(L,IDIM) = MEANUS(IDIM,M) - 0.4d0*RELVEL(IDIM)
394 
395  !IF(DES_VEL_NEW(L,IDIM)*DELUP(IDIM).LT.ZERO) DES_VEL_NEW(L,IDIM) = -0.5d0*DES_VEL_NEW(L,IDIM)
396  ! ENDIF
397  ! ENDDO
398  ! CYCLE
399 
400 
401  END SUBROUTINE mppic_apply_ps_grad_part
402 
403 
404 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
405 ! !
406 ! Subroutine: MPPIC_BC_U_S !
407 ! Purpose: !
408 ! !
409 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
410  SUBROUTINE mppic_bc_u_s
412 !-----------------------------------------------
413 ! Modules
414 !-----------------------------------------------
415  USE parallel
416  USE constant
417  USE geometry
418  USE indices
419  USE compar
420  USE mfix_pic
421  USE functions
422  IMPLICIT NONE
423 !-----------------------------------------------
424 ! Local variables
425 !-----------------------------------------------
426 ! Indices
427  INTEGER :: I1, J1, K1, IJK,&
428  IJK_WALL
429 !-----------------------------------------------
430 
431 ! Set the default boundary conditions
432  IF (do_k) THEN
433  k1 = 1
434  DO j1 = jmin3,jmax3
435  DO i1 = imin3, imax3
436  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
437  ijk_wall = funijk(i1,j1,k1)
438  ijk = funijk(i1,j1,k1+1)
439  pic_u_s(ijk_wall, :) = pic_u_s(ijk,:)
440  END DO
441  END DO
442 
443  k1 = kmax2
444  DO j1 = jmin3,jmax3
445  DO i1 = imin3, imax3
446  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
447  ijk_wall = funijk(i1,j1,k1)
448  ijk = funijk(i1,j1,k1-1)
449  pic_u_s(ijk_wall, :) = pic_u_s(ijk,:)
450  END DO
451  END DO
452  ENDIF
453 
454  j1 = 1
455  DO k1 = kmin3, kmax3
456  DO i1 = imin3, imax3
457  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
458  ijk_wall = funijk(i1,j1,k1)
459  ijk = funijk(i1,j1+1,k1)
460  pic_u_s(ijk_wall, :) = pic_u_s(ijk,:)
461  END DO
462  END DO
463  j1 = jmax2
464  DO k1 = kmin3, kmax3
465  DO i1 = imin3, imax3
466  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
467  ijk_wall = funijk(i1,j1,k1)
468  ijk = funijk(i1,j1-1,k1)
469  pic_u_s(ijk_wall, :) = pic_u_s(ijk,:)
470  END DO
471  END DO
472 
473  RETURN
474  END SUBROUTINE mppic_bc_u_s
475 
476 
477 
478 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
479 ! !
480 ! Subroutine: MPPIC_BC_V_S !
481 ! Purpose: !
482 ! !
483 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
484  SUBROUTINE mppic_bc_v_s
486 
487 !-----------------------------------------------
488 ! Modules
489 !-----------------------------------------------
490  USE parallel
491  USE constant
492  USE geometry
493  USE indices
494  USE compar
495  USE mfix_pic
496  USE functions
497  IMPLICIT NONE
498 !-----------------------------------------------
499 ! Local variables
500 !-----------------------------------------------
501 ! Indices
502  INTEGER I1, J1, K1, IJK,&
503  IJK_WALL
504 !-----------------------------------------------
505 
506 ! Set the default boundary conditions
507  IF (do_k) THEN
508  k1 = 1
509  DO j1 = jmin3,jmax3
510  DO i1 = imin3, imax3
511  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
512  ijk_wall = funijk(i1,j1,k1)
513  ijk = funijk(i1,j1,k1+1)
514  pic_v_s(ijk_wall, :) = pic_v_s(ijk,:)
515  END DO
516  END DO
517  k1 = kmax2
518  DO j1 = jmin3,jmax3
519  DO i1 = imin3, imax3
520  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
521  ijk_wall = funijk(i1,j1,k1)
522  ijk = funijk(i1,j1,k1-1)
523  pic_v_s(ijk_wall, :) = pic_v_s(ijk,:)
524  END DO
525  END DO
526  ENDIF
527 
528  i1 = 1
529  DO k1 = kmin3, kmax3
530  DO j1 = jmin3, jmax3
531  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
532  ijk_wall = funijk(i1,j1,k1)
533  ijk = funijk(i1+1,j1,k1)
534  pic_v_s(ijk_wall, :) = pic_v_s(ijk,:)
535 
536  END DO
537  END DO
538  i1 = imax2
539  DO k1 = kmin3, kmax3
540  DO j1 = jmin3, jmax3
541  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
542  ijk_wall = funijk(i1,j1,k1)
543  ijk = funijk(i1-1,j1,k1)
544  pic_v_s(ijk_wall, :) = pic_v_s(ijk,:)
545 
546  END DO
547  END DO
548  END SUBROUTINE mppic_bc_v_s
549 
550 
551 
552 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
553 ! !
554 ! Subroutine: MPPIC_BC_W_S !
555 ! Purpose: !
556 ! !
557 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
558  SUBROUTINE mppic_bc_w_s
560 !-----------------------------------------------
561 ! Modules
562 !-----------------------------------------------
563  USE parallel
564  USE constant
565  USE geometry
566  USE indices
567  USE compar
568  USE mfix_pic
569  USE functions
570  IMPLICIT NONE
571 !-----------------------------------------------
572 ! Local variables
573 !-----------------------------------------------
574 ! Indices
575  INTEGER :: I1, J1, K1, IJK,&
576  IJK_WALL
577 !-----------------------------------------------
578 
579 ! Set the default boundary conditions
580  j1 = 1
581  DO k1 = kmin3,kmax3
582  DO i1 = imin3,imax3
583  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
584  ijk = funijk(i1,j1+1,k1)
585  ijk_wall = funijk(i1,j1,k1)
586  pic_w_s(ijk_wall,:) = pic_w_s(ijk,:)
587  END DO
588  END DO
589  j1 = jmax2
590  DO k1 = kmin3, kmax3
591  DO i1 = imin3, imax3
592  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
593  ijk = funijk(i1,j1-1,k1)
594  ijk_wall = funijk(i1,j1,k1)
595  pic_w_s(ijk_wall,:) = pic_w_s(ijk,:)
596  END DO
597  END DO
598  i1 = 1
599  DO k1 = kmin3, kmax3
600  DO j1 = jmin3, jmax3
601  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
602  ijk = funijk(i1+1,j1,k1)
603  ijk_wall = funijk(i1,j1,k1)
604  pic_w_s(ijk_wall,:) = pic_w_s(ijk,:)
605  END DO
606  END DO
607  i1 = imax2
608  DO k1 = kmin3,kmax3
609  DO j1 = jmin3,jmax3
610  IF (.NOT.is_on_mype_owns(i1,j1,k1)) cycle
611  ijk = funijk(i1-1,j1,k1)
612  ijk_wall = funijk(i1,j1,k1)
613  pic_w_s(ijk_wall,:) = pic_w_s(ijk,:)
614  END DO
615  END DO
616 
617 
618  END SUBROUTINE mppic_bc_w_s
619 
620 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
621 ! Subroutine: WRITE_NODEDATA !
622 ! Author: R. Garg !
623 ! !
624 ! Purpose: !
625 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
626  SUBROUTINE write_nodedata(funit)
627  USE param
628  USE param1
629  USE parallel
630  USE constant
631  USE run
632  USE geometry
633  USE indices
634  USE compar
635  USE discretelement
636  use desmpi
637  USE functions
638  USE fun_avg
639 
640  IMPLICIT NONE
641  integer, intent(in) :: funit
642 
643  integer :: ijk, i, j,k
644 
645  write(funit,*)'VARIABLES= ',' "I" ',' "J" ',' "K" ',&
646  ' "DES_ROPS_NODE" '
647 
648  write(funit, *)'ZONE F=POINT, I=', (iend1-istart2)+1, ', J=', &
649  jend1-jstart2+1, ', K=', kend1-kstart2 + 1
650 
651  DO k = kstart2, kend1
652  DO j = jstart2, jend1
653  DO i = istart2, iend1
654  ijk = funijk(i, j, k)
655  !WRITE(*,*) 'IJK = ', IJK, I, J, K , SIZE(BUFIN,1)
656 
657  WRITE(funit, '(3(2x, i10), 3x, g17.8)') i, j, k,&
658  des_rops_node(ijk,1)
659  ENDDO
660  ENDDO
661  ENDDO
662  CLOSE(funit, status = 'keep')
663  end SUBROUTINE write_nodedata
664 
665 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
666 ! Subroutine: WRITE_MPPIC_VEL_S !
667 ! Author: R. Garg !
668 ! !
669 ! Purpose: !
670 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
671  SUBROUTINE write_mppic_vel_s
672  USE param
673  USE param1
674  USE parallel
675  USE constant
676  USE run
677  USE geometry
678  USE indices
679  USE compar
680  USE fldvar, only : ep_g, u_s, v_s, w_s
681  use physprop, only: mmax
682  USE discretelement
683  USE mfix_pic
684  USE functions
685  implicit none
686  integer :: i, j, k, ijk, fluid_ind, LL, PC, IDIM
687  double precision :: zcor
688  character(LEN=255) :: filename
689 
690  WRITE(filename,'(A,"_",I5.5,".dat")') trim(run_name)//'_U_S_',mype
691  OPEN(1000, file = trim(filename), form ='formatted', &
692  status='unknown',convert='BIG_ENDIAN')
693  IF(dimn.eq.2) then
694  write(1000,*)'VARIABLES= ',' "X" ',' "Y" ',' "Z" ', &
695  ' "EP_s " ', ' "pU_S" ', ' "pV_S" ',' "dU_s" ',&
696  ' "dV_s" '!, ' "P_S_FOR1" ', ' "P_S_FOR2" '
697  write(1000,*)'ZONE F=POINT, I=', (iend3-istart3)+1, ', J=',&
698  jend3-jstart3+1, ', K=', kend3-kstart3 + 1
699  else
700  write(1000,*)'VARIABLES= ',' "X" ',' "Y" ',' "Z" ', &
701  ' "EP_s " ', ' "pU_S" ', ' "pV_S" ', ' "pW_S" ',&
702  ' "dU_s" ', ' "dV_s" ', ' "dW_s" '!, &
703  ! & ' "P_S_FOR1" ', ' "P_S_FOR2" ', ' "P_S_FOR3" '
704  write(1000,*)'ZONE F=POINT, I=', (iend3-istart3)+1, ', J=',&
705  jend3-jstart3+1, ', K=', kend3-kstart3 + 1
706  ENDIF
707  DO k=kstart3, kend3
708  DO j=jstart3, jend3
709  DO i=istart3, iend3
710  ijk = funijk(i,j,k)
711  IF(fluid_at(ijk)) THEN
712  fluid_ind = 1
713  ELSE
714  fluid_ind = 0
715  END IF
716  IF(dimn.EQ.2) THEN
717  zcor = zt(k)
718  WRITE(1000,'(3(2X,G17.8),4( 2X, G17.8))') &
719  xe(i-1)+dx(i), yn(j-1)+dy(j), zcor, 1.d0-ep_g(ijk),&
720  pic_u_s(ijk,mmax+1), pic_v_s(ijk,mmax+1),&
721  u_s(ijk,mmax+1), v_s(ijk,mmax+1) !, PS_FORCE_PIC(1,IJK), PS_FORCE_PIC(2,IJK)
722  ELSE
723  zcor = zt(k-1) + dz(k)
724  WRITE(1000,'(3(2X,G17.8),4( 2X, G17.8))') xe(i-1)+dx(i),&
725  yn(j-1)+dy(j), zcor, 1.d0-ep_g(ijk), &
726  pic_u_s(ijk,mmax+1), pic_v_s(ijk,mmax+1), pic_w_s(ijk,mmax+1),&
727  u_s(ijk,mmax+1), v_s(ijk,mmax+1), w_s(ijk,mmax+1)!, PS_FORCE_PIC(1,IJK), PS_FORCE_PIC(2,IJK), PS_FORCE_PIC(3,IJK)
728  ENDIF
729  ENDDO
730  ENDDO
731  ENDDO
732  CLOSE(1000, status='KEEP')
733 
734  return
735 
736  WRITE(filename,'(A,"_",I5.5,".DAT")') &
737  trim(run_name)//'_PS_FORCE_',mype
738  OPEN(1000, file = trim(filename), form ='formatted',&
739  status='unknown',convert='BIG_ENDIAN')
740 
741  IF(dimn.eq.3) write(1000,*)'VARIABLES= ',' "X" ',' "Y" ',' "Z" ',&
742  ' "DELPX" ', '"DELPY"', '"DELPZ" ',&
743  ' "US_part" ', '"VS_part"' , '"WS_part"', '"EP_s_part"'
744  IF(dimn.eq.2) write(1000,*)'VARIABLES= ',' "X" ',' "Y" ', &
745  ' "DELPX" ', '"DELPY"', ' "US_part" ', '"VS_part"' , &
746  '"EP_S_part"'
747 
748  pc = 1
749  DO ll = 1, max_pip
750 
751  IF(pc .GT. pip) EXIT
752  IF(is_nonexistent(ll)) cycle
753  pc = pc+1
754  IF(is_ghost(ll) .OR. is_entering_ghost(ll) .OR. &
755  is_exiting_ghost(ll)) cycle
756 
757  WRITE(1000,'(10( 2x, g17.8))') &
758  (des_pos_new(ll,idim), idim=1,dimn), &
759  (ps_grad(idim,ll), idim=1,dimn), &
760  (avgsolvel_p(idim,ll),idim=1,dimn), 1-epg_p(ll)
761  ENDDO
762  close(1000, status='keep')
763 
764  !write(*,*) 'want to quit ?', LL, mAX_PIP, PIP
765  !read(*,*) finish
766  !if(finish) STOp
767  END SUBROUTINE write_mppic_vel_s
integer iend3
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer imax2
Definition: geometry_mod.f:61
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable wall_u_at
Definition: cutcell_mod.f:126
integer jstart3
Definition: compar_mod.f:80
integer ijkend3
Definition: compar_mod.f:80
integer kend1
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ep_g
Definition: fldvar_mod.f:15
double precision, dimension(:,:), allocatable avgsolvel_p
Definition: mfix_pic_mod.f:28
double precision, dimension(:,:), allocatable ps_grad
Definition: mfix_pic_mod.f:74
integer iend1
Definition: compar_mod.f:80
integer imax3
Definition: geometry_mod.f:91
integer istart2
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
character(len=60) run_name
Definition: run_mod.f:24
logical, dimension(:), allocatable wall_v_at
Definition: cutcell_mod.f:127
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
integer kstart3
Definition: compar_mod.f:80
subroutine mppic_bc_w_s
Definition: pic_routines.f:559
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
integer imin3
Definition: geometry_mod.f:90
double precision, dimension(:,:), allocatable pic_v_s
Definition: mfix_pic_mod.f:85
integer kstart2
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
integer kend3
Definition: compar_mod.f:80
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision mppic_coeff_en2
Definition: mfix_pic_mod.f:42
integer kmax1
Definition: geometry_mod.f:58
integer mmax
Definition: physprop_mod.f:19
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
integer imax1
Definition: geometry_mod.f:54
logical, dimension(:), allocatable wall_w_at
Definition: cutcell_mod.f:128
integer jend3
Definition: compar_mod.f:80
subroutine mppic_bc_u_s
Definition: pic_routines.f:411
integer jmax2
Definition: geometry_mod.f:63
subroutine mppic_comp_eulerian_vels_non_cg
Definition: pic_routines.f:8
integer jstart2
Definition: compar_mod.f:80
integer jmax3
Definition: geometry_mod.f:91
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
integer kmax2
Definition: geometry_mod.f:65
integer jmax1
Definition: geometry_mod.f:56
Definition: run_mod.f:13
double precision, dimension(:,:), allocatable pic_w_s
Definition: mfix_pic_mod.f:87
Definition: param_mod.f:2
integer jmin3
Definition: geometry_mod.f:90
subroutine mppic_comp_eulerian_vels_cg
Definition: pic_routines.f:93
integer jmin1
Definition: geometry_mod.f:42
integer kmax3
Definition: geometry_mod.f:91
logical do_k
Definition: geometry_mod.f:30
integer mype
Definition: compar_mod.f:24
subroutine write_nodedata(funit)
Definition: pic_routines.f:627
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable epg_p
Definition: mfix_pic_mod.f:31
integer kmin3
Definition: geometry_mod.f:90
subroutine write_mppic_vel_s
Definition: pic_routines.f:672
double precision mppic_coeff_en1
Definition: mfix_pic_mod.f:42
double precision, dimension(:,:), allocatable pic_u_s
Definition: mfix_pic_mod.f:83
subroutine mppic_apply_ps_grad_part(L)
Definition: pic_routines.f:192
integer imin1
Definition: geometry_mod.f:40
subroutine mppic_bc_v_s
Definition: pic_routines.f:485
integer istart3
Definition: compar_mod.f:80
integer dimension_m
Definition: param_mod.f:18
integer kmin1
Definition: geometry_mod.f:44
logical mppic_grav_treatment
Definition: mfix_pic_mod.f:58
double precision, parameter zero
Definition: param1_mod.f:27
integer jend1
Definition: compar_mod.f:80