MFIX  2016-1
get_master.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: GET_U_MASTER_CELLS C
4 ! Purpose: Identify master cells for wall U-Momentum cells C
5 ! C
6 ! Author: Jeff Dietiker Date: 21-Feb-08 C
7 ! Reviewer: Date: C
8 ! C
9 ! Revision Number # Date: ##-###-## C
10 ! Author: # C
11 ! Purpose: # C
12 ! C
13 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
14  SUBROUTINE get_u_master_cells
15 
16  USE param
17  USE param1
18  USE parallel
19  USE constant
20  USE run
21  USE toleranc
22  USE geometry
23  USE indices
24  USE compar
25  USE sendrecv
26  USE bc
27  USE quadric
28  USE cutcell
29  USE functions
30 
31  IMPLICIT NONE
32  INTEGER :: IJK,I,J,K,IJKC,D,DIR(18),DMAX
33  LOGICAL :: U_NODE,V_NODE,W_NODE,VEL_NODE,MASTER_FOUND
34  INTEGER :: NC,L,BCV
35 
36  IF(mype == pe_io) THEN
37  WRITE(*,*)'FINDING MASTER CELLS FOR U-MOMENTUM CELLS...'
38  ENDIF
39 10 FORMAT(1x,a)
40 
41 !======================================================================
42 ! Loop though all BC's and create a default NSW BC in case it is needed
43 ! when the search for a master cell fails
44 !======================================================================
45  DO l = 1, dimension_bc
46  IF (.NOT. (bc_defined(l).OR.is_cg(bc_type_enum(l)))) THEN
47  bc_type_enum(l)=cg_nsw
48  nsw_ghost_bc_id = l
49  EXIT
50  ENDIF
51  ENDDO
52 
53 !======================================================================
54 ! For each wall_u_cell: Probe neighboors and identify the master cell
55 ! as the first one having all velocity components available
56 ! A velocity component is available is the cell is not blocked nor a wall cell
57 !======================================================================
58 
59  nc = 0
60 
61  DO ijk = ijkstart3, ijkend3
62 
63  IF(wall_u_at(ijk)) THEN
64 
65  master_found = .false.
66  nc = nc + 1
67 
68  i = i_of(ijk)
69  j = j_of(ijk)
70  k = k_of(ijk)
71 
72  dir(1) = east_of(ijk)
73  dir(2) = west_of(ijk)
74 
75  dir(3) = north_of(ijk)
76  dir(4) = south_of(ijk)
77 
78 
79  dir(5) = east_of(dir(3)) ! NORTH-EAST
80  dir(6) = east_of(dir(4)) ! SOUTH-EAST
81 
82  dir(7) = west_of(dir(3)) ! NORTH-WEST
83  dir(8) = west_of(dir(4)) ! SOUTH-WEST
84 
85  dir(9) = top_of(ijk)
86  dir(10) = bottom_of(ijk)
87 
88  dir(11) = north_of(dir(9)) ! NORTH-TOP
89  dir(12) = south_of(dir(9)) ! SOUTH-TOP
90 
91  dir(13) = north_of(dir(10)) ! NORTH-BOTTOM
92  dir(14) = south_of(dir(10)) ! SOUTH-BOTTOM
93 
94  dir(15) = east_of(dir(9)) ! EAST-TOP
95  dir(16) = west_of(dir(9)) ! WEST-TOP
96 
97  dir(17) = east_of(dir(10)) ! EAST-BOTTOM
98  dir(18) = west_of(dir(10)) ! WEST-BOTTOM
99 
100  IF(no_k) THEN
101  dmax = 4 !8 ! In 2D, probe E,W,N,S,NE,SE,NW,SW
102  ELSE
103  dmax = 18 ! In 3D, probe T,B,NT,ST,NB,SB,ET,WT,EB,WB as well
104  ENDIF
105 
106  DO d = 1,dmax
107 
108  ijkc = dir(d)
109 
110  u_node = ((.NOT.blocked_u_cell_at(ijkc)).AND.(.NOT.wall_u_at(ijkc)))
111  v_node = ((.NOT.blocked_v_cell_at(ijkc)).AND.(.NOT.wall_v_at(ijkc)))
112 
113  IF(no_k) THEN
114  vel_node = ((u_node).AND.(v_node))
115  ELSE
116  w_node = ((.NOT.blocked_w_cell_at(ijkc)).AND.(.NOT.wall_w_at(ijkc)))
117  vel_node = ((u_node).AND.(v_node).AND.(w_node))
118  ENDIF
119 
120  IF(u_node) THEN
121  u_master_of(ijk) = ijkc
122  master_found = .true.
123  EXIT
124  ENDIF
125  ENDDO
126 
127  IF(.NOT.master_found) THEN
128  bcv = bc_u_id(ijk)
129  IF(bcv>0) THEN
130  IF(bc_type_enum(bcv) == cg_fsw) THEN
131  WRITE(*,*) ' WARNING IN SUBROUTINE: GET_U_MASTER_CELLS:'
132  WRITE(*,*) ' NO MASTER CELL FOUND FOR U_MOMENTUM WALL CELL:', ijk,i,j,k
133  WRITE(*,*) ' REVERTING TO NO SLIP WALL BOUNDARY CONDITION IN THIS CELL'
134  bc_u_id(ijk) = nsw_ghost_bc_id
135  WRITE(*,*) ' BC_U_ID(IJK) = ', bc_u_id(ijk)
136  ENDIF
137 ! WRITE(*,*) ' ERROR IN SUBROUTINE: GET_U_MASTER_CELLS:'
138 ! WRITE(*,*) ' NO MASTER CELL FOUND FOR U_MOMENTUM WALL CELL:', IJK,I,J,K
139 ! WRITE(*,*) ' MFIX WILL EXIT NOW.'
140 ! CALL MFIX_EXIT(myPE)
141 
142  ENDIF
143  ENDIF
144  ENDIF
145 
146  END DO
147 
148 
149 
150  RETURN
151 
152  END SUBROUTINE get_u_master_cells
153 
154 
155 
156 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
157 ! C
158 ! Module name: GET_V_MASTER_CELLS C
159 ! Purpose: Identify master cells for wall V-Momentum cells C
160 ! C
161 ! Author: Jeff Dietiker Date: 21-Feb-08 C
162 ! Reviewer: Date: C
163 ! C
164 ! Revision Number # Date: ##-###-## C
165 ! Author: # C
166 ! Purpose: # C
167 ! C
168 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
169  SUBROUTINE get_v_master_cells
171  USE param
172  USE param1
173  USE parallel
174  USE constant
175  USE run
176  USE toleranc
177  USE geometry
178  USE indices
179  USE compar
180  USE sendrecv
181  USE bc
182  USE quadric
183  USE cutcell
184  USE functions
185 
186  IMPLICIT NONE
187  INTEGER :: IJK,I,J,K,IJKC,D,DIR(18),DMAX
188  LOGICAL :: U_NODE,V_NODE,W_NODE,VEL_NODE,MASTER_FOUND
189  INTEGER :: NC,BCV
190 
191  IF(mype == pe_io) THEN
192  WRITE(*,10)'FINDING MASTER CELLS FOR V-MOMENTUM CELLS...'
193  ENDIF
194 10 FORMAT(1x,a)
195 
196 !======================================================================
197 ! For each wall_v_cell: Probe neighboors and identify the master cell
198 ! as the first one having all velocity components available
199 ! A velocity component is available is the cell is not blocked nor a wall cell
200 !======================================================================
201 
202  nc = 0
203 
204  DO ijk = ijkstart3, ijkend3
205 
206  IF(wall_v_at(ijk)) THEN
207 
208  master_found = .false.
209  nc = nc + 1
210 
211  i = i_of(ijk)
212  j = j_of(ijk)
213  k = k_of(ijk)
214 
215 
216  dir(1) = east_of(ijk)
217  dir(2) = west_of(ijk)
218 
219  dir(3) = north_of(ijk)
220  dir(4) = south_of(ijk)
221 
222 
223  dir(5) = east_of(dir(3)) ! NORTH-EAST
224  dir(6) = east_of(dir(4)) ! SOUTH-EAST
225 
226  dir(7) = west_of(dir(3)) ! NORTH-WEST
227  dir(8) = west_of(dir(4)) ! SOUTH-WEST
228 
229  dir(9) = top_of(ijk)
230  dir(10) = bottom_of(ijk)
231 
232  dir(11) = north_of(dir(9)) ! NORTH-TOP
233  dir(12) = south_of(dir(9)) ! SOUTH-TOP
234 
235  dir(13) = north_of(dir(10)) ! NORTH-BOTTOM
236  dir(14) = south_of(dir(10)) ! SOUTH-BOTTOM
237 
238  dir(15) = east_of(dir(9)) ! EAST-TOP
239  dir(16) = west_of(dir(9)) ! WEST-TOP
240 
241  dir(17) = east_of(dir(10)) ! EAST-BOTTOM
242  dir(18) = west_of(dir(10)) ! WEST-BOTTOM
243 
244  IF(no_k) THEN
245  dmax = 4 !8 ! In 2D, probe E,W,N,S,NE,SE,NW,SW
246  ELSE
247  dmax = 18 ! In 3D, probe T,B,NT,ST,NB,SB,ET,WT,EB,WB as well
248  ENDIF
249 
250  DO d = 1,dmax
251 
252  ijkc = dir(d)
253 
254  u_node = ((.NOT.blocked_u_cell_at(ijkc)).AND.(.NOT.wall_u_at(ijkc)))
255  v_node = ((.NOT.blocked_v_cell_at(ijkc)).AND.(.NOT.wall_v_at(ijkc)))
256 
257 
258  IF(no_k) THEN
259  vel_node = ((u_node).AND.(v_node))
260  ELSE
261  w_node = ((.NOT.blocked_w_cell_at(ijkc)).AND.(.NOT.wall_w_at(ijkc)))
262  vel_node = ((u_node).AND.(v_node).AND.(w_node))
263  ENDIF
264 
265  IF(v_node) THEN
266  v_master_of(ijk) = ijkc
267  master_found = .true.
268  EXIT
269  ENDIF
270  ENDDO
271 
272  IF(.NOT.master_found) THEN
273  bcv = bc_v_id(ijk)
274  IF(bcv>0) THEN
275  IF(bc_type_enum(bcv) == cg_fsw) THEN
276  WRITE(*,*) ' WARNING IN SUBROUTINE: GET_V_MASTER_CELLS:'
277  WRITE(*,*) ' NO MASTER CELL FOUND FOR V_MOMENTUM WALL CELL:', ijk,i,j,k
278  WRITE(*,*) ' REVERTING TO NO SLIP WALL BOUNDARY CONDITION IN THIS CELL'
279  bc_v_id(ijk) = nsw_ghost_bc_id
280  WRITE(*,*) ' BC_V_ID(IJK) = ', bc_v_id(ijk)
281  ENDIF
282 ! WRITE(*,*) ' ERROR IN SUBROUTINE: GET_V_MASTER_CELLS:'
283 ! WRITE(*,*) ' NO MASTER CELL FOUND FOR V_MOMENTUM WALL CELL:', IJK,I,J,K
284 ! WRITE(*,*) ' MFIX WILL EXIT NOW.'
285 ! CALL MFIX_EXIT(myPE)
286  ENDIF
287  ENDIF
288  ENDIF
289 
290  END DO
291 
292 
293 
294  RETURN
295 
296  END SUBROUTINE get_v_master_cells
297 
298 
299 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
300 ! C
301 ! Module name: GET_W_MASTER_CELLS C
302 ! Purpose: Identify master cells for wall W-Momentum cells C
303 ! C
304 ! Author: Jeff Dietiker Date: 21-Feb-08 C
305 ! Reviewer: Date: C
306 ! C
307 ! Revision Number # Date: ##-###-## C
308 ! Author: # C
309 ! Purpose: # C
310 ! C
311 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
312  SUBROUTINE get_w_master_cells
314  USE param
315  USE param1
316  USE parallel
317  USE constant
318  USE run
319  USE toleranc
320  USE geometry
321  USE indices
322  USE compar
323  USE sendrecv
324  USE bc
325  USE quadric
326  USE cutcell
327  USE functions
328 
329  IMPLICIT NONE
330  INTEGER :: IJK,I,J,K,IJKC,D,DIR(18),DMAX
331  LOGICAL :: U_NODE,V_NODE,W_NODE,VEL_NODE,MASTER_FOUND
332  INTEGER :: NC,BCV
333 
334  IF(mype == pe_io) THEN
335  WRITE(*,10)'FINDING MASTER CELLS FOR W-MOMENTUM CELLS...'
336  ENDIF
337 10 FORMAT(1x,a)
338 
339 !======================================================================
340 ! For each wall_w_cell: Probe neighboors and identify the master cell
341 ! as the first one having all velocity components available
342 ! A velocity component is available is the cell is not blocked nor a wall cell
343 !======================================================================
344 
345  nc = 0
346 
347  DO ijk = ijkstart3, ijkend3
348 
349  IF(wall_w_at(ijk)) THEN
350 
351  master_found = .false.
352  nc = nc + 1
353 
354  i = i_of(ijk)
355  j = j_of(ijk)
356  k = k_of(ijk)
357 
358 
359  dir(1) = east_of(ijk)
360  dir(2) = west_of(ijk)
361 
362  dir(3) = north_of(ijk)
363  dir(4) = south_of(ijk)
364 
365 
366  dir(5) = east_of(dir(3)) ! NORTH-EAST
367  dir(6) = east_of(dir(4)) ! SOUTH-EAST
368 
369  dir(7) = west_of(dir(3)) ! NORTH-WEST
370  dir(8) = west_of(dir(4)) ! SOUTH-WEST
371 
372  dir(9) = top_of(ijk)
373  dir(10) = bottom_of(ijk)
374 
375  dir(11) = north_of(dir(9)) ! NORTH-TOP
376  dir(12) = south_of(dir(9)) ! SOUTH-TOP
377 
378  dir(13) = north_of(dir(10)) ! NORTH-BOTTOM
379  dir(14) = south_of(dir(10)) ! SOUTH-BOTTOM
380 
381  dir(15) = east_of(dir(9)) ! EAST-TOP
382  dir(16) = west_of(dir(9)) ! WEST-TOP
383 
384  dir(17) = east_of(dir(10)) ! EAST-BOTTOM
385  dir(18) = west_of(dir(10)) ! WEST-BOTTOM
386 
387  IF(no_k) THEN
388  dmax = 8 ! In 2D, probe E,W,N,S,NE,SE,NW,SW
389  ELSE
390  dmax = 18 ! In 3D, probe T,B,NT,ST,NB,SB,ET,WT,EB,WB as well
391  ENDIF
392 
393  DO d = 1,dmax
394 
395  ijkc = dir(d)
396 
397  u_node = ((.NOT.blocked_u_cell_at(ijkc)).AND.(.NOT.wall_u_at(ijkc)))
398  v_node = ((.NOT.blocked_v_cell_at(ijkc)).AND.(.NOT.wall_v_at(ijkc)))
399 
400 
401  IF(no_k) THEN
402  vel_node = ((u_node).AND.(v_node))
403  ELSE
404  w_node = ((.NOT.blocked_w_cell_at(ijkc)).AND.(.NOT.wall_w_at(ijkc)))
405  vel_node = ((u_node).AND.(v_node).AND.(w_node))
406  ENDIF
407 
408  IF(w_node) THEN
409  w_master_of(ijk) = ijkc
410  master_found = .true.
411  EXIT
412  ENDIF
413  ENDDO
414 
415  IF(.NOT.master_found) THEN
416  bcv = bc_w_id(ijk)
417  IF(bcv>0) THEN
418  IF(bc_type_enum(bcv) == cg_fsw) THEN
419  WRITE(*,*) ' WARNING IN SUBROUTINE: GET_W_MASTER_CELLS:'
420  WRITE(*,*) ' NO MASTER CELL FOUND FOR W_MOMENTUM WALL CELL:', ijk,i,j,k
421  WRITE(*,*) ' REVERTING TO NO SLIP WALL BOUNDARY CONDITION IN THIS CELL'
422  bc_w_id(ijk) = nsw_ghost_bc_id
423  WRITE(*,*) ' BC_W_ID(IJK) = ', bc_w_id(ijk)
424  ENDIF
425 ! WRITE(*,*) ' ERROR IN SUBROUTINE: GET_W_MASTER_CELLS:'
426 ! WRITE(*,*) ' NO MASTER CELL FOUND FOR W_MOMENTUM WALL CELL:', IJK,I,J,K
427 ! WRITE(*,*) ' MFIX WILL EXIT NOW.'
428 ! CALL MFIX_EXIT(myPE)
429  ENDIF
430 
431  ENDIF
432  ENDIF
433  END DO
434 
435 
436  RETURN
437 
438  END SUBROUTINE get_w_master_cells
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable wall_u_at
Definition: cutcell_mod.f:126
integer ijkend3
Definition: compar_mod.f:80
subroutine get_w_master_cells
Definition: get_master.f:313
logical, dimension(:), allocatable wall_v_at
Definition: cutcell_mod.f:127
integer, parameter dimension_bc
Definition: param_mod.f:61
subroutine get_u_master_cells
Definition: get_master.f:15
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
integer, dimension(:), allocatable w_master_of
Definition: cutcell_mod.f:422
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
integer pe_io
Definition: compar_mod.f:30
logical, dimension(:), allocatable blocked_w_cell_at
Definition: cutcell_mod.f:366
integer, dimension(:), allocatable bc_u_id
Definition: cutcell_mod.f:434
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
logical, dimension(:), allocatable wall_w_at
Definition: cutcell_mod.f:128
integer, dimension(:), allocatable bc_w_id
Definition: cutcell_mod.f:436
logical, dimension(:), allocatable blocked_u_cell_at
Definition: cutcell_mod.f:364
logical, dimension(dimension_bc) bc_defined
Definition: bc_mod.f:207
Definition: run_mod.f:13
integer, dimension(:), allocatable bc_v_id
Definition: cutcell_mod.f:435
Definition: param_mod.f:2
logical no_k
Definition: geometry_mod.f:28
integer mype
Definition: compar_mod.f:24
integer ijkstart3
Definition: compar_mod.f:80
logical, dimension(:), allocatable blocked_v_cell_at
Definition: cutcell_mod.f:365
integer nsw_ghost_bc_id
Definition: cutcell_mod.f:438
integer, dimension(:), allocatable u_master_of
Definition: cutcell_mod.f:420
double precision, dimension(:), allocatable x
Definition: geometry_mod.f:129
logical function is_cg(boundary_condition)
Definition: bc_mod.f:422
integer, dimension(:), allocatable v_master_of
Definition: cutcell_mod.f:421
Definition: bc_mod.f:23
subroutine get_v_master_cells
Definition: get_master.f:170