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

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: CALC_DES_2FLUID                                         !
4     !                                                                      !
5     !  Purpose: This subroutine is only called from the CONTINUUM side. It !
6     !  is only called at the start of each time step for explicitly coupled!
7     !  cases. Otherwise, it called every iteration.                        !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE CALC_DES_2FLUID
10     
11           use discretelement, only: DES_CONTINUUM_COUPLED
12           use discretelement, only: DES_CONTINUUM_HYBRID
13           use discretelement, only: DES_EXPLICITLY_COUPLED
14     
15           use particle_filter, only: DES_INTERP_SCHEME_ENUM
16           use particle_filter, only: DES_INTERP_GARG
17     
18           use discretelement, only: DES_CONTINUUM_COUPLED
19           use particle_filter, only: DES_DIFFUSE_MEAN_FIELDS
20     
21     ! Contribution to gas momentum equation due to drag
22           use discretelement, only: DRAG_BM
23     ! Scalar cell center total drag force
24           use discretelement, only: F_GDS
25     ! Flag for 3D simulatoins.
26           use geometry, only: DO_K
27           use run, only: ANY_SPECIES_EQ
28     
29           use des_thermo, only: CALC_CONV_DES
30           use rxns, only: RRATE
31     
32           IMPLICIT NONE
33     
34           IF(.NOT.DES_CONTINUUM_COUPLED) RETURN
35     
36           IF(DES_EXPLICITLY_COUPLED) THEN
37     ! Bin particles to the fluid grid.
38              CALL PARTICLES_IN_CELL
39     ! Calculate interpolation weights
40              CALL CALC_INTERP_WEIGHTS
41     ! Calculate mean fields (EPg).
42              CALL COMP_MEAN_FIELDS
43     
44     ! Calculate gas phase source terms: gas-solids heat transfer
45              IF(CALC_CONV_DES) CALL CONV_GS_GAS1
46     ! Calculate gas phase source terms: gas-solids mass transfer
47              IF(RRATE) CALL RXNS_GS_GAS1
48           ENDIF
49     
50     ! Calculate gas phase source terms: gas-solids drag force.
51           SELECT CASE(DES_INTERP_SCHEME_ENUM)
52           CASE(DES_INTERP_GARG) ; CALL DRAG_GS_GAS0
53           CASE DEFAULT; CALL DRAG_GS_GAS1
54           END SELECT
55     
56     ! Calculate solids phase source terms: solids-solids drag force.
57           IF(DES_CONTINUUM_HYBRID) THEN
58              SELECT CASE(DES_INTERP_SCHEME_ENUM)
59              CASE DEFAULT; CALL DRAG_SS_TFM_NONINTERP
60              END SELECT
61           ENDIF
62     
63     ! Apply the diffusion filter.
64           IF(DES_DIFFUSE_MEAN_FIELDS) THEN
65              CALL DIFFUSE_MEAN_FIELD(F_GDS,'F_GDS')
66              CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,1),'DRAG_BM(1)')
67              CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,2),'DRAG_BM(2)')
68              IF(DO_K) CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,3),'DRAG_BM(3)')
69     !         IF(ENERGY_EQ) THEN
70     !            CALL DIFFUSE_MEAN_FIELD(CONV_Sc,'CONV_Sc')
71     !            CALL DIFFUSE_MEAN_FIELD(CONV_Sp,'CONV_Sp')
72     !         ENDIF
73           ENDIF
74     
75           RETURN
76           END SUBROUTINE CALC_DES_2FLUID
77     
78     
79     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
80     !  Subroutine: DES_2FLUID_CONV                                         !
81     !  Author: J.Musser                                   Date: 15-Jan-11  !
82     !                                                                      !
83     !  Purpose: This routine is called from the continuum phase and        !
84     !  calculates the source term from the particles to the fluid.         !
85     !                                                                      !
86     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
87           SUBROUTINE  DES_2FLUID_CONV(S_P, S_C)
88     
89           Use discretelement, only: DES_EXPLICITLY_COUPLED
90           Use des_thermo, only: CONV_Sp, CONV_Sc
91           USE geometry, only: FLAG
92           Use param, only: DIMENSION_3
93     
94           use run, only: ODT
95     ! Flag: Gas sees the effect of particles in gas/solids flows.
96           use discretelement, only: DES_ONEWAY_COUPLED
97     
98           IMPLICIT NONE
99     
100     ! Passed Variables
101     !---------------------------------------------------------------------//
102     ! Source term on LHS
103           DOUBLE PRECISION, INTENT(INOUT) :: S_P(DIMENSION_3)
104     ! Source term on RHS
105           DOUBLE PRECISION, INTENT(INOUT) :: S_C(DIMENSION_3)
106     
107     ! Local variables
108     !---------------------------------------------------------------------//
109           IF(DES_ONEWAY_COUPLED) RETURN
110     
111           IF(DES_EXPLICITLY_COUPLED) THEN
112              WHERE(FLAG==1)
113                 S_P = S_P + CONV_Sp ! GAMMA
114                 S_C = S_C + CONV_Sc ! GAMMA*Tp
115              END WHERE
116     
117     ! Redistribute the energy over the fluid time step. Note that by the
118     ! time this routine is called, S_C and S_P have already been multiplied
119     ! by the fluid cell volume. Thus, the mapping should result in units
120     ! of energy per time.
121           ELSE
122              WHERE(FLAG==1) &
123                 S_C = S_C + oDT*CONV_Sc ! GAMMA*(Tg-Ts)
124           ENDIF
125     
126           RETURN
127           END SUBROUTINE  DES_2FLUID_CONV
128     
129     
130     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
131     !  Subroutine: DES_2FLUID_RXNS                                         !
132     !  Author: J.Musser                                   Date: 15-Jan-11  !
133     !                                                                      !
134     !  Purpose: This routine is called from the continuum phase and        !
135     !  calculates the source term from the particles to the fluid.         !
136     !                                                                      !
137     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
138           SUBROUTINE  DES_2FLUID_RXNS
139     
140           Use discretelement, only: DES_EXPLICITLY_COUPLED
141           Use des_thermo, only: CONV_Sp, CONV_Sc
142           USE geometry, only: FLAG
143           Use param, only: DIMENSION_3
144           USE rxns, only : RRATE
145           USE rxns
146           USE des_rxns
147           USE energy, only: HOR_g
148           use fldvar, only: X_g
149           use run, only: DT
150           use param1, only: ZERO, SMALL_NUMBER, ONE
151           use stiff_chem, only: STIFF_CHEMISTRY
152           use compar, only: IJKSTART3, IJKEND3
153           use geometry, only: VOL
154           use functions, only: FLUID_AT
155           use toleranc, only: ZERO_X_gs
156     ! Flag: Gas sees the effect of particles in gas/solids flows.
157           use discretelement, only: DES_ONEWAY_COUPLED
158     ! Flag to use stiff chemistry solver
159           use stiff_chem, only: stiff_chemistry
160     
161           IMPLICIT NONE
162     
163     ! Passed Variables
164     !---------------------------------------------------------------------//
165     ! Source term on LHS
166     !      DOUBLE PRECISION, INTENT(INOUT) :: S_P(DIMENSION_3)
167     ! Source term on RHS
168     !      DOUBLE PRECISION, INTENT(INOUT) :: S_C(DIMENSION_3)
169     
170     ! Local variables
171     !---------------------------------------------------------------------//
172           INTEGER :: IJK
173           DOUBLE PRECISION :: toTFM, lDT
174     
175           IF(DES_ONEWAY_COUPLED) RETURN
176           IF(STIFF_CHEMISTRY) RETURN
177     
178     ! For DEM simulations that do not have a homogeneous gas phase reaction,
179     ! the gas phase arrays need to be cleared.
180           IF(.NOT.RRATE .OR. STIFF_CHEMISTRY) THEN
181              SUM_R_G = ZERO
182              HOR_G = ZERO
183              R_GP = ZERO
184              ROX_GC = ZERO
185              R_PHASE = ZERO
186           ENDIF
187     
188     ! Redistribute the energy over the fluid time step. Note that by the
189     ! time this routine is called, S_C and S_P have already been multiplied
190     ! by the fluid cell volume. Thus, the mapping should result in units
191     ! of energy per time.
192           lDT = merge(ONE, DT, DES_EXPLICITLY_COUPLED)
193     
194           DO IJK=IJKSTART3,IJKEND3
195           IF(.NOT.FLUID_AT(IJK)) CYCLE
196              toTFM = ONE/(lDT * VOL(IJK))
197              R_gp(IJK,:) = R_gp(IJK,:) + DES_R_gp(IJK,:)*toTFM
198              R_PHASE(IJK,:) = R_PHASE(IJK,:) + DES_R_PHASE(IJK,:)*toTFM
199              SUM_R_g(IJK) = SUM_R_g(IJK) + DES_SUM_R_g(IJK)*toTFM
200              HOR_g(IJK) = HOR_g(IJK) + DES_HOR_g(IJK)*toTFM
201              WHERE(X_g(IJK,:) > ZERO_X_gs) RoX_gc(IJK,:) = &
202                 RoX_gc(IJK,:)+DES_R_gc(IJK,:)*toTFM/X_g(IJK,:)
203           ENDDO
204     
205           RETURN
206           END SUBROUTINE  DES_2FLUID_RXNS
207