File: /nfs/home/0/users/jenkins/mfix.git/model/des/calc_drag_des.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: CALC_DRAG_DES                                           !
4     !                                                                      !
5     !  Purpose: This subroutine is called from DES routines. It calls      !
6     !  functions that calcultate the drag force acting on particles. No    !
7     !  field variables are updated.                                        !
8     !                                                                      !
9     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
10           SUBROUTINE CALC_DRAG_DES
11     
12           use discretelement, only: DES_CONTINUUM_COUPLED
13           use discretelement, only: DES_CONTINUUM_HYBRID
14     
15           use particle_filter, only: DES_INTERP_SCHEME_ENUM
16           use particle_filter, only: DES_INTERP_NONE
17           use particle_filter, only: DES_INTERP_GARG
18     
19           use discretelement, only: DES_EXPLICITLY_COUPLED
20     
21           use discretelement, only: DRAG_FC, FC, MAX_PIP
22           use discretelement, only: PEA
23     
24           IMPLICIT NONE
25     
26           INTEGER :: II
27     
28     ! Apply the drag force calculated by the gas phase.
29           IF(DES_EXPLICITLY_COUPLED) THEN
30     
31              IF(DES_CONTINUUM_COUPLED) THEN
32     !$omp parallel do default(none) private(II) &
33     !$omp shared(FC, DRAG_FC, MAX_PIP, PEA)
34                 DO II = 1, MAX_PIP
35                    IF(PEA(II,1) .AND. .NOT.any(PEA(II,2:))) &
36                       FC(:,II) = FC(:,II) + DRAG_FC(:,II)
37                 ENDDO
38     !$omp end parallel do
39              ENDIF
40     
41     
42           ELSE
43     
44     ! Calculate gas-solids drag force on particle
45              IF(DES_CONTINUUM_COUPLED) THEN
46                 SELECT CASE(DES_INTERP_SCHEME_ENUM)
47                 CASE(DES_INTERP_GARG) ; CALL DRAG_GS_DES0
48                 CASE DEFAULT; CALL DRAG_GS_DES1
49                 END SELECT
50              ENDIF
51     
52     ! Calculate solids-solids drag force on particle.
53              IF(DES_CONTINUUM_HYBRID) THEN
54                 SELECT CASE(DES_INTERP_SCHEME_ENUM)
55                 CASE DEFAULT; CALL DRAG_SS_DEM_NONINTERP
56                 END SELECT
57              ENDIF
58           ENDIF
59     
60           RETURN
61           END SUBROUTINE CALC_DRAG_DES
62     
63     
64     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
65     !                                                                      !
66     !  Subroutine: DES_DRAG_GS                                             !
67     !                                                                      !
68     !  Purpose: This subroutine is only called from the CONTINUUM side. It !
69     !  calls the correct routine for calculating the gas drag force.       !
70     !                                                                      !
71     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
72           SUBROUTINE CALC_DRAG_DES_2FLUID
73     
74           use discretelement, only: DES_CONTINUUM_COUPLED
75           use discretelement, only: DES_CONTINUUM_HYBRID
76     
77           use particle_filter, only: DES_INTERP_SCHEME_ENUM
78           use particle_filter, only: DES_INTERP_GARG
79     
80           IMPLICIT NONE
81     
82     
83     ! Calculate gas-solids drag force.
84           IF(DES_CONTINUUM_COUPLED) THEN
85              SELECT CASE(DES_INTERP_SCHEME_ENUM)
86              CASE(DES_INTERP_GARG) ; CALL DRAG_GS_GAS0
87              CASE DEFAULT; CALL DRAG_GS_GAS1
88              END SELECT
89           ENDIF
90     
91     ! Calculate solids-solids drag force.
92           IF(DES_CONTINUUM_HYBRID) THEN
93              SELECT CASE(DES_INTERP_SCHEME_ENUM)
94              CASE DEFAULT; CALL DRAG_SS_TFM_NONINTERP
95              END SELECT
96           ENDIF
97     
98           RETURN
99           END SUBROUTINE CALC_DRAG_DES_2FLUID
100     
101     
102     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
103     !                                                                      !
104     !  Subroutine: CALC_DRAG_DES_EXPLICIT                                  !
105     !                                                                      !
106     !  Purpose: This subroutine is only called from the CONTINUUM side.    !
107     !  Moreover, it is only called once per time step so that the total    !
108     !  drag force is calculated explicitly for the fluid phase and DEM     !
109     !  particles. This is done to ensure momentum conservation and reduce  !
110     !  computational overhead.                                             !
111     !                                                                      !
112     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
113           SUBROUTINE CALC_DRAG_DES_EXPLICIT
114     
115           use discretelement, only: DES_CONTINUUM_COUPLED
116           use particle_filter, only: DES_DIFFUSE_MEAN_FIELDS
117     
118     ! Contribution to gas momentum equation due to drag
119           use discretelement, only: DRAG_BM
120     ! Scalar cell center total drag force
121           use discretelement, only: F_GDS
122     ! Flag for 3D simulatoins.
123           use geometry, only: DO_K
124     
125           use rxns
126     
127           IMPLICIT NONE
128     
129     ! Bin particles to the fluid grid.
130           CALL PARTICLES_IN_CELL
131     ! Calculate interpolation weights
132           CALL CALC_INTERP_WEIGHTS
133     ! Calculate mean fields (EPg).
134           CALL COMP_MEAN_FIELDS
135     
136     ! Calculate gas-solids drag force on particle
137           IF(DES_CONTINUUM_COUPLED) CALL DRAG_GS_EXPLICIT1
138     
139     ! Apply the diffusion filter.
140           IF(DES_DIFFUSE_MEAN_FIELDS) THEN
141              CALL DIFFUSE_MEAN_FIELD(F_GDS,'F_GDS')
142              CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,1),'DRAG_BM(1)')
143              CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,2),'DRAG_BM(2)')
144              IF(DO_K) CALL DIFFUSE_MEAN_FIELD(DRAG_BM(:,3),'DRAG_BM(3)')
145           ENDIF
146     
147           RETURN
148           END SUBROUTINE CALC_DRAG_DES_EXPLICIT
149