File: N:\mfix\model\des\comp_mean_fields1.f

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
22           use particle_filter, only: DES_INTERP_ON
23           use particle_filter, only: FILTER_WEIGHT
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
148