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