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