File: RELATIVE:/../../../mfix.git/model/des/mass_outflow_dem.f
1
2
3
4
5
6
7
8
9
10 SUBROUTINE MASS_OUTFLOW_DEM(FORCE_NSEARCH)
11
12 use discretelement
13 use des_bc
14 use bc
15 use functions
16
17 use mpi_utility, only: GLOBAL_ALL_OR
18
19 implicit none
20
21 LOGICAL, INTENT(INOUT) :: FORCE_NSEARCH
22
23 INTEGER :: IJK
24 INTEGER :: LC, LP, NP, M
25 INTEGER :: BCV, BCV_I, IDX
26
27 DOUBLE PRECISION :: SGN
28 DOUBLE PRECISION :: DIST
29
30 LOGICAL :: FREEZE_VEL
31 DOUBLE PRECISION :: FREEZE(3)
32
33 DO BCV_I = 1, DEM_BCMO
34
35 BCV = DEM_BCMO_MAP(BCV_I)
36
37 FREEZE_VEL = (BC_TYPE(BCV) /= 'MASS_OUTFLOW')
38
39 SELECT CASE (BC_PLANE(BCV))
40 CASE('N'); FREEZE = (/0.0d0, 1.0d0, 0.0d0/); IDX=2; SGN=-1.0d0
41 CASE('S'); FREEZE = (/0.0d0, 1.0d0, 0.0d0/); IDX=2; SGN= 1.0d0
42 CASE('E'); FREEZE = (/1.0d0, 0.0d0, 0.0d0/); IDX=1; SGN=-1.0d0
43 CASE('W'); FREEZE = (/1.0d0, 0.0d0, 0.0d0/); IDX=1; SGN= 1.0d0
44 CASE('T'); FREEZE = (/0.0d0, 0.0d0, 1.0d0/); IDX=3; SGN=-1.0d0
45 CASE('B'); FREEZE = (/0.0d0, 0.0d0, 1.0d0/); IDX=3; SGN= 1.0d0
46 END SELECT
47
48 DO LC=DEM_BCMO_IJKSTART(BCV_I), DEM_BCMO_IJKEND(BCV_I)
49 IJK = DEM_BCMO_IJK(LC)
50 DO LP= 1,DG_PIC(IJK)%ISIZE
51
52 NP = DG_PIC(IJK)%P(LP)
53
54 IF(IS_NONEXISTENT(NP)) CYCLE
55 IF(IS_ANY_GHOST(NP)) CYCLE
56 IF(IS_ENTERING(NP)) CYCLE
57
58 SELECT CASE (BC_PLANE(BCV))
59 CASE('S'); DIST = YN(BC_J_s(BCV)-1) - DES_POS_NEW(2,NP)
60 CASE('N'); DIST = DES_POS_NEW(2,NP) - YN(BC_J_s(BCV))
61 CASE('W'); DIST = XE(BC_I_w(BCV)-1) - DES_POS_NEW(1,NP)
62 CASE('E'); DIST = DES_POS_NEW(1,NP) - XE(BC_I_w(BCV))
63 CASE('B'); DIST = ZT(BC_K_b(BCV)-1) - DES_POS_NEW(3,NP)
64 CASE('T'); DIST = DES_POS_NEW(3,NP) - ZT(BC_K_b(BCV))
65 END SELECT
66
67
68 IF(DIST > DES_RADIUS(NP)) THEN
69 CALL SET_NORMAL(NP)
70
71
72 ELSEIF(DIST > ZERO) THEN
73
74
75
76
77 IF(FREEZE_VEL) THEN
78
79
80
81 IF(DES_VEL_NEW(IDX,NP)*SGN > 0.0d0) THEN
82 DES_VEL_NEW(:,NP) = DES_VEL_NEW(:,NP)*FREEZE(:)
83
84 IF (IS_GHOST(NP)) THEN
85 CALL SET_EXITING_GHOST(NP)
86 ELSE
87 CALL SET_EXITING(NP)
88 ENDIF
89 ENDIF
90
91
92
93
94 ELSE
95 M = PIJK(NP,5)
96 DES_VEL_NEW(1,NP) = BC_U_s(BCV,M)
97 DES_VEL_NEW(2,NP) = BC_V_s(BCV,M)
98 DES_VEL_NEW(3,NP) = BC_W_s(BCV,M)
99
100 IF (IS_GHOST(NP)) THEN
101 CALL SET_EXITING_GHOST(NP)
102 ELSE
103 CALL SET_EXITING(NP)
104 ENDIF
105 ENDIF
106
107
108 ELSE
109 CALL DELETE_PARTICLE(NP)
110 FORCE_NSEARCH = .TRUE.
111 ENDIF
112
113 ENDDO
114 ENDDO
115 ENDDO
116
117
118
119
120 RETURN
121 END SUBROUTINE MASS_OUTFLOW_DEM
122
123
124
125
126
127
128
129
130
131
132
133
134 SUBROUTINE DELETE_PARTICLE(NP)
135
136 USE compar
137 USE constant
138 USE des_bc
139 USE discretelement
140 USE funits
141 USE geometry
142 USE indices
143 USE param1
144 USE physprop
145 USE functions
146
147 IMPLICIT NONE
148
149 INTEGER, INTENT(IN) :: NP
150
151
152
153
154
155 (NP) = -1
156 CALL SET_NONEXISTENT(NP)
157
158 DES_POS_NEW(:,NP) = ZERO
159 DES_VEL_NEW(:,NP) = ZERO
160 OMEGA_NEW(:,NP) = ZERO
161
162 IF(PARTICLE_ORIENTATION) ORIENTATION(1:3,NP) = INIT_ORIENTATION
163
164 IF (DO_OLD) THEN
165 DES_POS_OLD(:,NP) = ZERO
166 DES_VEL_OLD(:,NP) = ZERO
167 OMEGA_OLD(:,NP) = ZERO
168 ENDIF
169
170 DES_RADIUS(NP) = ZERO
171 PMASS(NP) = ZERO
172 PVOL(NP) = ZERO
173 RO_Sol(NP) = ZERO
174 OMOI(NP) = ZERO
175
176 FC(:,NP) = ZERO
177 TOW(:,NP) = ZERO
178
179 PPOS(:,NP) = ZERO
180
181 WALL_COLLISION_FACET_ID(:,NP) = -1
182
183 PIP = PIP - 1
184
185 RETURN
186 END SUBROUTINE DELETE_PARTICLE
187