MFIX  2016-1
comp_mean_fields1.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
4  SUBROUTINE comp_mean_fields1
5 
6 !-----------------------------------------------
7 ! Modules
8 !-----------------------------------------------
9  USE param, only: dimension_3
10  USE param1, only: zero, one
11  USE fldvar, only: u_s, v_s, w_s, rop_s, ro_s
12  USE geometry
13  USE indices
14  USE compar
15  USE parallel
16  USE sendrecv
17  USE discretelement
18  use desgrid
19  use desmpi
20  USE mfix_pic
21  USE functions
24  use particle_filter, only: filter_cell
25  use particle_filter, only: filter_size
26  use sendrecvnode, only: des_collect_gdata
27  use physprop, only: mmax
28  use param1, only: small_number
29 
30  IMPLICIT NONE
31 !-----------------------------------------------
32 ! Local variables
33 !-----------------------------------------------
34 ! Loop counters: particles, filter cells, phases
35  INTEGER NP, LC, M, mLB, mUB
36 ! Fluid cell index
37  INTEGER IJK
38 ! Total Mth solids phase volume in IJK
39  DOUBLE PRECISION :: SOLVOLINC(dimension_3,mmax+des_mmax)
40 ! One divided by the total solids volume.
41  DOUBLE PRECISION :: OoSOLVOL
42 ! PVOL times statistical weight, and times filter weight
43  DOUBLE PRECISION :: VOL_WT, VOLxWEIGHT
44 ! Loop bound for filter
45  INTEGER :: LP_BND
46 
47 
48 !-----------------------------------------------
49 
50 
51  solvolinc(:,:) = zero
52 
53  mlb = mmax+1
54  mub = des_mmax+mmax
55 
56  IF(mppic) THEN
57 ! initialize only information related to the discrete 'phases' of these
58 ! continuous variables
59  u_s(:,mlb:mub) = zero
60  v_s(:,mlb:mub) = zero
61  IF(do_k) w_s(:,mlb:mub) = zero
62  ENDIF
63 
64 ! Calculate the gas phase forces acting on each particle.
65 !$omp parallel default(none) &
66 !$omp private(NP, VOL_WT, M, LC, IJK, VOLXWEIGHT) &
67 !$omp shared(MAX_PIP, PVOL, DES_STAT_WT, PIJK, LP_BND, MPPIC, &
68 !$omp FILTER_WEIGHT, SOLVOLINC, U_S, V_S, W_S, DO_K, &
69 !$omp FILTER_CELL, FILTER_SIZE, DES_VEL_NEW)
70 !$omp do
71  do np=1,max_pip
72  IF(.NOT.is_normal(np)) cycle
73 
74  vol_wt = pvol(np)
75  IF(mppic) vol_wt = vol_wt*des_stat_wt(np)
76 ! Particle phase for data binning.
77  m = pijk(np,5)
78 
79  DO lc=1,filter_size
80  ijk = filter_cell(lc,np)
81 ! Particle volume times the weight for this cell.
82  volxweight = vol_wt*filter_weight(lc,np)
83 ! Accumulate total solids volume (by phase)
84 !$omp atomic
85  solvolinc(ijk,m) = solvolinc(ijk,m) + volxweight
86  IF(mppic) THEN
87 ! Accumulate total solids momentum (by phase)
88 !$omp atomic
89  u_s(ijk,1) = u_s(ijk,1) + &
90  des_vel_new(np,1)*volxweight
91 !$omp atomic
92  v_s(ijk,1) = v_s(ijk,1) + &
93  des_vel_new(np,2)*volxweight
94  IF(do_k) THEN
95 !$omp atomic
96  w_s(ijk,1) = w_s(ijk,1) + &
97  des_vel_new(np,3)*volxweight
98  ENDIF
99  ENDIF
100  ENDDO
101  ENDDO
102 !$omp end do
103 !$omp end parallel
104 
105 
106 ! Summ data interpolted into ghost cells into physical cells
107 !---------------------------------------------------------------------//
108  IF(des_interp_on) THEN
109  CALL des_collect_gdata(solvolinc(:,mlb:mub))
110  IF(mppic) THEN
111  CALL des_collect_gdata(u_s(:,1))
112  CALL des_collect_gdata(v_s(:,1))
113  IF(do_k) CALL des_collect_gdata(w_s(:,1))
114  ENDIF
115  ENDIF
116 
117 
118 ! Calculate the cell average solids velocity, the bulk density,
119 ! and the void fraction.
120 !---------------------------------------------------------------------//
121 !$omp parallel do if(ijkend3 .ge. 2000) default(shared) &
122 !$omp private(IJK,M,OoSOLVOL)
123  DO ijk = ijkstart3, ijkend3
124  IF(.NOT.fluid_at(ijk)) cycle
125 
126 ! calculating the bulk density of solids phase
127  rop_s(ijk,mlb:mub) = ro_s(ijk,mlb:mub)*&
128  solvolinc(ijk,mlb:mub)/vol(ijk)
129 
130 ! calculating the cell average solids velocity for each solids phase
131  IF(mppic) THEN
132  oosolvol = sum(solvolinc(ijk,:))
133  IF(oosolvol > small_number) THEN
134  oosolvol = one/oosolvol
135  u_s(ijk,1) = u_s(ijk,1)*oosolvol
136  v_s(ijk,1) = v_s(ijk,1)*oosolvol
137  IF(do_k) w_s(ijk,1) = w_s(ijk,1)*oosolvol
138  ENDIF
139  ENDIF
140  ENDDO
141 !$omp end parallel do
142 
143 
144 ! Halo exchange of solids volume fraction data.
145  calL send_recv(rop_s,2)
146 
147  end SUBROUTINE comp_mean_fields1
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
integer ijkend3
Definition: compar_mod.f:80
integer, dimension(:,:), allocatable filter_cell
double precision, parameter one
Definition: param1_mod.f:29
integer dimension_3
Definition: param_mod.f:11
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
subroutine comp_mean_fields1
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
double precision, dimension(:,:), allocatable filter_weight
integer mmax
Definition: physprop_mod.f:19
double precision, parameter small_number
Definition: param1_mod.f:24
Definition: param_mod.f:2
double precision, dimension(:,:), allocatable ro_s
Definition: fldvar_mod.f:45
logical do_k
Definition: geometry_mod.f:30
integer ijkstart3
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable rop_s
Definition: fldvar_mod.f:51
logical mppic
Definition: mfix_pic_mod.f:14
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
double precision, dimension(:), allocatable des_stat_wt
Definition: mfix_pic_mod.f:54
double precision, parameter zero
Definition: param1_mod.f:27