File: /nfs/home/0/users/jenkins/mfix.git/model/des/set_bc_pic_mi.f
1
2
3
4
5
6
7
8
9 SUBROUTINE SET_BC_PIC_MI
10
11
12
13
14 USE compar
15 USE constant
16 USE bc
17 USE pic_bc
18 USE discretelement
19 USE funits
20 USE geometry
21 USE indices
22 USE param
23 USE param1
24 USE physprop
25 USE run
26
27 USE error_manager
28 USE toleranc
29
30 IMPLICIT NONE
31
32 INTEGER :: BCV
33
34
35
36
37 INTEGER BCV_I
38 INTEGER M
39 INTEGER PHASE_CNT
40 INTEGER PHASE_LIST(DES_MMAX)
41
42
43 DOUBLE PRECISION MAX_DIA
44
45 LOGICAL, parameter :: setDBG = .FALSE.
46 LOGICAL :: dFlag
47
48
49
50 CALL INIT_ERR_MSG("SET_BC_PIC_MI")
51
52 dFlag = (DMP_LOG .AND. setDBG)
53 if(dFlag) write(*,"(2/,2x,'PIC inlet count: ',I4)") PIC_BCMI
54
55 PIC_BCMI_INCL_CUTCELL(:) = .false.
56
57
58 DO BCV_I = 1, PIC_BCMI
59
60
61 = PIC_BCMI_MAP(BCV_I)
62
63 PIC_BCMI_OFFSET (BCV_I,:) = 1
64 PIC_BCMI_NORMDIR(BCV_I,:) = ZERO
65
66 SELECT CASE(BC_PLANE(BCV))
67 CASE('E'); PIC_BCMI_NORMDIR(BCV_I,1) = ONE
68 CASE('W')
69 PIC_BCMI_NORMDIR(BCV_I,1) = -ONE
70 PIC_BCMI_OFFSET (BCV_I,1) = 0
71
72 CASE('N'); PIC_BCMI_NORMDIR(BCV_I,2) = ONE
73 CASE('S')
74 PIC_BCMI_NORMDIR(BCV_I,2) = -ONE
75 PIC_BCMI_OFFSET (BCV_I,2) = 0
76
77 CASE('T'); PIC_BCMI_NORMDIR(BCV_I,3) = ONE
78 CASE('B')
79 PIC_BCMI_NORMDIR(BCV_I,3) = -ONE
80 PIC_BCMI_OFFSET (BCV_I,3) = 0
81 END SELECT
82
83 if(dFlag) write(*,"(2/,'Setting PIC_MI:',I3)") BCV_I
84
85
86
87 = 0
88
89 (:) = -1
90
91 = ZERO
92
93
94 DO M=1, DES_MMAX
95 IF(SOLIDS_MODEL(M) /= 'PIC') CYCLE
96 IF(BC_ROP_s(BCV,M) == UNDEFINED) CYCLE
97 IF(COMPARE(BC_ROP_s(BCV,M),ZERO)) CYCLE
98 PHASE_CNT = PHASE_CNT + 1
99 PHASE_LIST(PHASE_CNT) = M
100 MAX_DIA = MAX(MAX_DIA,DES_D_P0(M))
101 ENDDO
102
103 ENDDO
104
105 CALL SET_PIC_BCMI_IJK
106
107 CALL FINL_ERR_MSG
108
109
110 RETURN
111 END SUBROUTINE SET_BC_PIC_MI
112
113
114
115
116
117
118
119
120
121
122
123
124
125 SUBROUTINE SET_PIC_BCMI_IJK
126 use bc, only: BC_PLANE
127 use bc, only: BC_I_w, BC_I_e, BC_J_s, BC_J_n, BC_K_b, BC_K_t
128
129 use pic_bc, only: PIC_BCMI, PIC_BCMI_MAP, PIC_BCMI_IJK
130 use pic_bc, only: PIC_BCMI_IJKSTART, PIC_BCMI_IJKEND
131 use pic_bc, only: pic_bcmi_cnp
132 use pic_bc, only: pic_bcmi_rnp
133 use pic_bc, only: PIC_BCMI_INCL_CUTCELL
134 USE discretelement, only : DES_MMAX
135 use funits, only: DMP_LOG
136
137 USE cutcell, only: CUT_CELL_AT
138
139 use mpi_utility
140 use error_manager
141 use functions
142
143 IMPLICIT NONE
144
145 INTEGER, ALLOCATABLE :: LOC_PIC_BCMI_IJK(:)
146
147 INTEGER :: BCV, BCV_I
148
149 INTEGER :: LC
150
151 INTEGER :: MAX_CELLS
152
153 INTEGER :: BND1, BND2
154
155 LOGICAL, parameter :: setDBG = .false.
156 LOGICAL :: dFlag
157
158 INTEGER :: I,J,K,IJK
159 INTEGER :: I_w, I_e, J_s, J_n, K_b, K_t
160
161 CALL INIT_ERR_MSG("SET_PIC_BCMI_IJK")
162
163 dFlag = (DMP_LOG .AND. setDBG)
164
165 if(dFlag) write(*,"(2/,2x,'From: SET_PIC_BCMI_IJK')")
166
167
168
169
170
171 = 0
172 DO BCV_I = 1, PIC_BCMI
173 BCV = PIC_BCMI_MAP(BCV_I)
174
175
176 if(dFlag) WRITE(*,"(/2x,'Adding cells for BCV: ',I3)") BCV
177 SELECT CASE (BC_PLANE(BCV))
178 CASE('N','S')
179 BND1 = min(BC_I_e(BCV)+1,IMAX1) - max(BC_I_w(BCV)-1,IMIN1)
180 BND2 = min(BC_K_t(BCV)+1,KMAX1) - max(BC_K_b(BCV)-1,KMIN1)
181
182 CASE('E','W')
183 BND1 = min(BC_J_n(BCV)+1,JMAX1) - max(BC_J_s(BCV)-1,JMIN1)
184 BND2 = min(BC_K_t(BCV)+1,KMAX1) - max(BC_K_b(BCV)-1,KMIN1)
185
186 CASE('T','B')
187 BND1 = min(BC_I_e(BCV)+1,IMAX1) - max(BC_I_w(BCV)-1,IMIN1)
188 BND2 = min(BC_J_n(BCV)+1,JMAX1) - max(BC_J_s(BCV)-1,JMIN1)
189 END SELECT
190
191 MAX_CELLS = MAX_CELLS + (BND1 + 1)*(BND2 + 1)
192 if(dFlag) WRITE(*,"(4x,'Plane: ',A)") BC_PLANE(BCV)
193 if(dFlag) WRITE(*,"(4x,'Cells: ', I8)") (BND1+1)*(BND2+1)
194 ENDDO
195
196 if(dFlag) write(*,"(2x,'Max Cells: ',I8)") MAX_CELLS
197
198
199
200 allocate( LOC_PIC_BCMI_IJK(MAX_CELLS) )
201
202
203
204
205 = 1
206 DO BCV_I = 1, PIC_BCMI
207
208 PIC_BCMI_IJKSTART(BCV_I) = LC
209 BCV = PIC_BCMI_MAP(BCV_I)
210
211 if(dFlag) write(*,"(/2x,'Searching for fluid cells:',I3)") BCV
212
213 I_w = max(BC_I_w(BCV),IMIN1); I_e = min(BC_I_e(BCV),IMAX1)
214 J_s = max(BC_J_s(BCV),JMIN1); J_n = min(BC_J_n(BCV),JMAX1)
215 K_b = max(BC_K_b(BCV),KMIN1); K_t = min(BC_K_t(BCV),KMAX1)
216
217
218
219 SELECT CASE (BC_PLANE(BCV))
220 CASE('N'); J_s = BC_J_s(BCV)+1; J_n = BC_J_n(BCV)+1
221 CASE('S'); J_s = BC_J_s(BCV)-1; J_n = BC_J_n(BCV)-1
222 CASE('E'); I_w = BC_I_w(BCV)+1; I_e = BC_I_e(BCV)+1
223 CASE('W'); I_w = BC_I_w(BCV)-1; I_e = BC_I_e(BCV)-1
224 CASE('T'); K_b = BC_K_b(BCV)+1; K_t = BC_K_t(BCV)+1
225 CASE('B'); K_b = BC_K_b(BCV)-1; K_t = BC_K_t(BCV)-1
226 END SELECT
227
228 if(dFlag) then
229 write(*,"(4x,'Search bounds: ')")
230 write(*,"(6x,'I_w/I_e:',2(2x,I6))") I_w, I_e
231 write(*,"(6x,'J_s/J_n:',2(2x,I6))") J_s, J_n
232 write(*,"(6x,'K_b/K_t:',2(2x,I6))") K_b, K_t
233 endif
234
235
236 DO K = K_b, K_t
237 DO J = J_s, J_n
238 DO I = I_w, I_e
239
240
241 IF(.NOT.IS_ON_myPE_wobnd(I,J,K)) CYCLE
242 IJK = FUNIJK(I,J,K)
243
244 IF(.NOT.FLUID_AT(IJK)) CYCLE
245
246
247
248 IF(CUT_CELL_AT(IJK).AND.(.NOT.PIC_BCMI_INCL_CUTCELL(BCV_I))) CYCLE
249 LOC_PIC_BCMI_IJK(LC) = IJK
250 LC = LC+1
251 ENDDO
252 ENDDO
253 ENDDO
254
255 PIC_BCMI_IJKEND(BCV_I) = LC-1
256
257 IF(dFLAG) write(*,1111) BCV, BCV_I, &
258 PIC_BCMI_IJKSTART(BCV_I), PIC_BCMI_IJKEND(BCV_I)
259
260 ENDDO
261
262 1111 FORMAT(/2x,'PIC Mass Inflow:',/4x,'BC:',I4,3x,'MAP:',I4, &
263 /4x,'IJKSTART:',I6,/4x,'IJKEND: ',I6)
264
265
266
267 IF(LC > 1) THEN
268 allocate( PIC_BCMI_IJK(LC-1) )
269 allocate(pic_bcmi_cnp(LC-1, DES_MMAX))
270 allocate(pic_bcmi_rnp(LC-1, DES_MMAX))
271
272 PIC_BCMI_IJK(1:LC-1) = LOC_PIC_BCMI_IJK(1:LC-1)
273
274 pic_bcmi_cnp(1:LC-1,:) = 0.d0
275 pic_bcmi_rnp(1:LC-1,:) = 0.d0
276 ELSE
277 allocate( PIC_BCMI_IJK(1) )
278 allocate(pic_bcmi_cnp(1,1))
279 allocate(pic_bcmi_rnp(1,1))
280
281 PIC_BCMI_IJK(1) = LOC_PIC_BCMI_IJK(1)
282 ENDIF
283
284 deallocate(LOC_PIC_BCMI_IJK)
285
286
287 CALL FINL_ERR_MSG
288
289
290 RETURN
291 END SUBROUTINE SET_PIC_BCMI_IJK
292