MFIX  2016-1
get_cut_cell_flags.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: SET_3D_CUT_CELL_FLAGS C
4 ! Purpose: Set flags for scalar cut cells, based on intersection C
5 ! of the grid with the quadric(s) C
6 ! C
7 ! Author: Jeff Dietiker Date: 21-Feb-08 C
8 ! Reviewer: Date: C
9 ! C
10 ! Revision Number # Date: ##-###-## C
11 ! Author: # C
12 ! Purpose: # C
13 ! C
14 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
15  SUBROUTINE set_3d_cut_cell_flags
16 
18  USE cutcell
19  USE functions, ONLY: funijk, ip_of, jp_of, kp_of, bottom_of, south_of, west_of, fluid_at, is_on_mype_wobnd
20  USE geometry, ONLY: do_i, do_j, do_k, imin1, imax3, jmin1, jmax3, kmin1, kmax3, no_k, vol, axy, axz, ayz, dx, dy, dz, flag
21  USE indices, ONLY: i_of, j_of, k_of
22  USE param, only: dimension_3
23  USE param1, only: zero, half, one, undefined
24  USE polygon, ONLY: n_polygon
25  USE quadric, ONLY: tol_f
26  USE sendrecv
29 
30  IMPLICIT NONE
31  INTEGER :: IJK,I,J,K
32  INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
33  INTEGER :: NODE,N_N1,N_N2,Q_ID
34  INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
35  LOGICAL :: CLIP_FLAG
36  INTEGER :: BCID
37 
38  INTEGER, DIMENSION(DIMENSION_3,15) :: OLD_CONNECTIVITY
39  DOUBLE PRECISION, DIMENSION(:), allocatable :: X_OLD_POINT,Y_OLD_POINT,Z_OLD_POINT
40 
41  INTEGER, DIMENSION(6) :: NB
42 
43  INTEGER :: IJK_NB,NODE_NB,NN,N_NB,NC
44 
45  DOUBLE PRECISION :: X1,Y1,Z1,X2,Y2,Z2,D,TOT_VOL_NODE,TOT_VOL_CELLS
46 
47  DOUBLE PRECISION, DIMENSION(:,:), allocatable :: SCALAR_NODE_XYZ_TEMP
48 
49  DOUBLE PRECISION :: DIST, NORM1, NORM2, NORM3,Diagonal
50  INTEGER :: IJK2, I1, I2, J1, J2, K1, K2, II, JJ, KK
51  LOGICAL :: COND_1, COND_2
52 
53  allocate(x_old_point(dimension_max_cut_cell))
54  allocate(y_old_point(dimension_max_cut_cell))
55  allocate(z_old_point(dimension_max_cut_cell))
56  allocate(scalar_node_xyz_temp(dimension_3, 3))
57 
58  IF(mype == pe_io) THEN
59  WRITE(*,10)'INTERSECTING GEOMETRY WITH SCALAR CELLS...'
60  ENDIF
61 10 FORMAT(1x,a)
62 
63  global_var_allocated = .false.
65 
66 ! Set arrays for computing indices
67 !
68 
69 ! CALL SET_INCREMENTS
70 
71  dx(imax3+1) = dx(imax3)
72  dy(jmax3+1) = dy(jmax3)
73  dz(kmax3+1) = dz(kmax3)
74 
75 ! x-Location of U-momentum cells for original (uncut grid)
76  IF (do_i) THEN
77  xg_e(1) = zero
78  DO i = imin1, imax3
79  xg_e(i) = xg_e(i-1) + dx(i)
80  END DO
81  ENDIF
82 
83 
84 ! y-Location of V-momentum cells for original (uncut grid)
85  IF (do_j) THEN
86  yg_n(1) = zero
87  DO j = jmin1, jmax3
88  yg_n(j) = yg_n(j-1) + dy(j)
89  END DO
90  ENDIF
91 
92 
93 ! z-Location of W-momentum cells for original (uncut grid)
94  IF (do_k) THEN
95  zg_t(1) = zero
96  DO k = kmin1, kmax3
97  zg_t(k) = zg_t(k-1) + dz(k)
98  END DO
99  ENDIF
100 
101  partition = dble(mype) ! ASSIGN processor ID (for vizualisation)
102 
103  CALL set_geometry1 ! INITIALIZE ALL VOLUMES AND AREAS
104 
105 
106 !======================================================================
107 ! Grid coordinates:
108 !======================================================================
109 
110  small_cell_at = .false.
111  small_cell_flag = 0
113 
114 !======================================================================
115 ! Intersection between quadric Grid
116 !======================================================================
117 
118  intersect_x = .false.
119  intersect_y = .false.
120  intersect_z = .false.
121  snap = .false.
122 
123  DO ijk = ijkstart3, ijkend3
124 
125  i = i_of(ijk)
126  j = j_of(ijk)
127  k = k_of(ijk)
128 
129  IF(no_k) THEN ! 2D case
130 
131  interior_cell_at(ijk) = ( (i >= istart1 ).AND.(i <= iend1 ) &
132  .AND.(j >= jstart1 ).AND.(j <= jend1 ) )
133 
134  ELSE ! 3D case
135 
136  interior_cell_at(ijk) = ( (i >= istart1 ).AND.(i <= iend1 ) &
137  .AND.(j >= jstart1 ).AND.(j <= jend1 ) &
138  .AND.(k >= kstart1 ).AND.(k <= kend1 ) )
139 
140  ENDIF
141 
142  END DO
143 
144  number_of_nodes = 0
145 
147 
148 ! POTENTIAL_CUT_CELL_AT=.TRUE.
149 
150  IF(.NOT.(use_stl.OR.use_msh)) THEN
151  DO ijk = ijkstart3, ijkend3
152  IF(potential_cut_cell_at(ijk)) CALL intersect(ijk,'SCALAR',xn_int(ijk),ye_int(ijk),zt_int(ijk))
153 ! CALL INTERSECT(IJK,'SCALAR',Xn_int(IJK),Ye_int(IJK),Zt_int(IJK))
154  END DO
155 
156 !======================================================================
157 ! Clean-up intersection flags by snapping intersection points to close
158 ! corner (within tolerance TOL_SNAP)
159 !======================================================================
161 
162  ELSE
163  CALL cad_intersect('SCALAR',xn_int,ye_int,zt_int)
164  ENDIF
165 ! NUMBER_OF_NODES = 0
166 
167  DO ijk = ijkstart3, ijkend3
168 
169  IF(potential_cut_cell_at(ijk)) THEN
170 
171  CALL write_progress_bar(ijk,ijkend3 - ijkstart3 + 1,'C')
172 
173 !======================================================================
174 ! Get coordinates of eight nodes
175 !======================================================================
176 
177  CALL get_cell_node_coordinates(ijk,'SCALAR')
178 
179  scalar_node_xyz_temp(ijk,1) = x_node(8)
180  scalar_node_xyz_temp(ijk,2) = y_node(8)
181  scalar_node_xyz_temp(ijk,3) = z_node(8)
182 !======================================================================
183 ! Initialize location of velocity nodes
184 !======================================================================
185 
186  x_u(ijk) = x_node(8)
187  y_u(ijk) = half * (y_node(6) + y_node(8))
188  z_u(ijk) = half * (z_node(4) + z_node(8))
189 
190  x_v(ijk) = half * (x_node(7) + x_node(8))
191  y_v(ijk) = y_node(8)
192  z_v(ijk) = half * (z_node(4) + z_node(8))
193 
194  x_w(ijk) = half * (x_node(7) + x_node(8))
195  y_w(ijk) = half * (y_node(6) + y_node(8))
196  z_w(ijk) = z_node(8)
197 
198  IF(interior_cell_at(ijk)) THEN
199 !======================================================================
200 ! Get Connectivity
201 !======================================================================
202 
203  IF(no_k) THEN
204  min_intersections = 2
205  max_intersections = 2
206  n_n1 = 5
207  n_n2 = 8
208 
209  ELSE
210  min_intersections = 3
211  max_intersections = 6
212  n_n1 = 1
213  n_n2 = 8
214  ENDIF
215 
217  x_new_point,y_new_point,z_new_point,total_number_of_intersections,xn_int,ye_int,zt_int)
218 
219  IF(total_number_of_intersections < min_intersections ) THEN ! Not a cut cell
220 
221  q_id = 1
222  CALL eval_f('QUADRIC',x_node(0),y_node(0),z_node(0),q_id,f_node(0),clip_flag)
223 
224  CALL eval_f('POLYGON',x_node(0),y_node(0),z_node(0),n_polygon,f_node(0),clip_flag)
225 
226  CALL eval_f('USR_DEF',x_node(0),y_node(0),z_node(0),n_usr_def,f_node(0),clip_flag)
227 
228 ! CALL EVAL_STL_FCT_AT('SCALAR',IJK,0,F_NODE(0),CLIP_FLAG,BCID)
229 
230  IF(use_msh.OR.use_stl) THEN
231 ! CALL EVAL_STL_FCT_AT('SCALAR',IJK,1,F_NODE(1),CLIP_FLAG,BCID)
232 ! CALL EVAL_STL_FCT_AT('SCALAR',IJK,8,F_NODE(8),CLIP_FLAG,BCID)
233 ! F_NODE(0) = HALF*(F_NODE(1)+F_NODE(8))
234 ! Pick the first defined value of F_AT at one of the cell corners
235 ! This should avoid wrongly setting a cell next to the global ghost layer as blocked cell
236 ! when the average between undefined and negative is a positive number
237 ! This occurs for external flows only due to F_AT being initialized as UNDEFINED
238 ! which is a positive number (considered outside the fluid region).
239  DO node=1,8
240  CALL eval_stl_fct_at('SCALAR',ijk,node,f_node(node),clip_flag,bcid)
241  IF(f_node(node)/=undefined.AND.f_node(node)/=zero) THEN
242  f_node(0) = f_node(node)
243  EXIT
244  ENDIF
245 
246  ENDDO
247  ENDIF
248 
249 
250 ! Uncomment the line below to force the cell to be a fluid cell
251 ! Currently, F_NODE(0) > 0 ==> Blocked cell
252 ! F_NODE(0) < 0 ==> Fluid cell
253 
254 ! IF(TOTAL_NUMBER_OF_INTERSECTIONS==-1) F_NODE(0) = -ONE
255 
256  bc_id(ijk) = 0
257 
258 ! IF(F_NODE(0) < TOL_F) THEN
259  IF(f_node(0) < zero) THEN
260  IF((flag(ijk)>=100).AND.(flag(ijk)<=102)) THEN
261  blocked_cell_at(ijk) = .true.
262  ELSE
263  blocked_cell_at(ijk) = .false.
264  standard_cell_at(ijk) = .true. ! Regular fluid cell
265  ENDIF
266  ELSE
267  flag(ijk) = 100
268  blocked_cell_at(ijk) = .true. ! Blocked fluid cell
269  standard_cell_at(ijk) = .false.
270  axy(ijk) = zero
271  axz(ijk) = zero
272  ayz(ijk) = zero
273  vol(ijk) = zero
274 
275  axy(bottom_of(ijk)) = zero
276  axz(south_of(ijk)) = zero
277  ayz(west_of(ijk)) = zero
278  ENDIF
279 
280  IF(no_k) THEN
281  number_of_nodes(ijk) = 4
282  connectivity(ijk,1) = ijk_of_node(5)
283  connectivity(ijk,2) = ijk_of_node(6)
284  connectivity(ijk,3) = ijk_of_node(8)
285  connectivity(ijk,4) = ijk_of_node(7)
286  ELSE
287  number_of_nodes(ijk) = 8
288  DO node = n_n1,n_n2
289  connectivity(ijk,node) = ijk_of_node(node)
290  END DO
291  ENDIF
292 
293 
294  ELSE IF(total_number_of_intersections > max_intersections ) THEN
295 
296  IF(print_warnings) THEN
297 
298  WRITE(*,*) 'TOO MANY INTERSECTIONS FOUND IN CELL IJK = ',ijk
299  WRITE(*,*) 'MAXIMUM NUMBER OF INTERSECTIONS = ',max_intersections
300  WRITE(*,*) 'TOTAL NUMBER OF INTERSECTIONS = ',total_number_of_intersections
301  WRITE(*,*) 'REMOVING SCALAR CELL FROM COMPUTATION.'
302 ! WRITE(*,*) 'MFIX WILL EXIT NOW.'
303 ! CALL MFIX_EXIT(MYPE)
304 
305  ENDIF
306 
307  blocked_cell_at(ijk) = .true. ! Blocked fluid cell
308 
309  ELSE ! Cut cell
310 
311  cut_cell_at(ijk) = .true.
312  blocked_cell_at(ijk) = .false.
313  standard_cell_at(ijk) = .false.
314 
315  DO node = n_n1,n_n2
316  IF(f_node(node) < - tol_f) THEN
317  IF(.NOT.snap(ijk_of_node(node))) THEN
318  number_of_nodes(ijk) = number_of_nodes(ijk) + 1
319  connectivity(ijk,number_of_nodes(ijk)) = ijk_of_node(node)
320  ENDIF
321  ENDIF
322  END DO
323 
326 
327  ENDIF
328 
329  ENDIF ! Interior cell
330 
331  ENDIF
332  END DO ! IJK Loop
333 
334 
339 
340 ! Consolidate blocked cells
341  DO ijk = ijkstart3, ijkend3
342  IF(blocked_cell_at(ijk)) THEN
343  standard_cell_at(ijk) = .false.
344  cut_cell_at(ijk) = .false.
345 
346  flag(ijk) = 100
347 
348  vol(ijk) = zero
349  axy(ijk) = zero
350  axz(ijk) = zero
351  ayz(ijk) = zero
352 
353  axy(bottom_of(ijk)) = zero
354  axz(south_of(ijk)) = zero
355  ayz(west_of(ijk)) = zero
356  ENDIF
357  ENDDO
358 
363 
364  call send_recv(flag,2)
365  call send_recv(vol,2)
366  call send_recv(axy,2)
367  call send_recv(axz,2)
368  call send_recv(ayz,2)
369 
370 ! print*,'Before removing duplicate nodes:'
371  DO ijk = ijkstart3, ijkend3,-1
372  IF(cut_cell_at(ijk)) THEN
373  print*,'==========================================================='
374  print*,'IJK, I,J=',ijk,i_of(ijk),j_of(ijk)
375  print*,'NUMBER_OF_NODES=',number_of_nodes(ijk)
376  DO node = 1,number_of_nodes(ijk)
377  IF(connectivity(ijk,node)>ijkend3) THEN
378  print*,'CNCT=',node,connectivity(ijk,node), &
380  ELSE
381  print*,'CNCT=',node,connectivity(ijk,node)
382  ENDIF
383  ENDDO
384  print*,''
385  ENDIF
386  ENDDO
387 
388 
389 
390  old_connectivity = connectivity
391 ! X_OLD_POINT = X_NEW_POINT
392 ! Y_OLD_POINT = Y_NEW_POINT
393 ! Z_OLD_POINT = Z_NEW_POINT
394 
395 
396 !======================================================================
397 ! Removing duplicate new points
398 ! Up to here, a cut face node that is shared among neighbor cells had
399 ! a different index, and appeared as a duplicate node.
400 ! The list will be updated and duplicate nodes will be removed from
401 ! the connectivity list
402 ! This is done to ensure that we can assign a volume surrounding each
403 ! node, that will be used to compute solids volume fraction for MPPIC
404 !======================================================================
405 
406 ! print*,'Removing duplicate nodes...'
407 
408  DO ijk = ijkstart3, ijkend3
409  IF(cut_cell_at(ijk)) THEN ! for each cut cell, identify neibhor cells that are also cut cells
410  ! Look east and north in 2D, and also Top in 3D
411 
412  diagonal = dsqrt(dx(i_of(ijk))**2 + dy(j_of(ijk))**2 + dz(k_of(ijk))**2)
413 
414  nb(1) = ip_of(ijk)
415  nb(2) = jp_of(ijk)
416 
417  IF(no_k) THEN
418  n_nb = 2
419  ELSE
420  n_nb = 3
421  nb(3) = kp_of(ijk)
422  ENDIF
423 
424 
425  DO nn = 1,n_nb
426  IF(cut_cell_at(nb(nn))) THEN ! For two neighbor cut cells, compare each cut-face node to remove duplicates
427 
428  ijk_nb = nb(nn)
429 
430 ! print*,'comparing:',IJK,' and',IJK_NB
431 
432  DO node = 1,number_of_nodes(ijk)
433  IF(old_connectivity(ijk,node)>ijkend3) THEN ! node belongs to the cut-face
434 
435  x1 = x_new_point(old_connectivity(ijk,node)-ijkend3)
436  y1 = y_new_point(old_connectivity(ijk,node)-ijkend3)
437  z1 = z_new_point(old_connectivity(ijk,node)-ijkend3)
438 
439 
440  DO node_nb = 1,number_of_nodes(ijk_nb)
441  IF(old_connectivity(ijk_nb,node_nb)>ijkend3) THEN ! node belongs to the cut-face
442 
443  x2 = x_new_point(old_connectivity(ijk_nb,node_nb)-ijkend3)
444  y2 = y_new_point(old_connectivity(ijk_nb,node_nb)-ijkend3)
445  z2 = z_new_point(old_connectivity(ijk_nb,node_nb)-ijkend3)
446 
447  ! compare coordinates of cut-face nodes
448  d = (x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2
449 
450  ! Duplicate nodes have identical coordinates (within tolerance TOL_MERGE times diagonal)
451  IF(d<tol_merge*diagonal) THEN ! keep the smallest node ID
452  ! print*,'DULICATE NODES:', &
453  ! NODE,NODE_NB,OLD_CONNECTIVITY(IJK,NODE),OLD_CONNECTIVITY(IJK_NB,NODE_NB)
454  nc = min(old_connectivity(ijk,node),old_connectivity(ijk_nb,node_nb))
455  connectivity(ijk ,node ) = nc
456  connectivity(ijk_nb,node_nb) = nc
457 
458  ENDIF
459  ENDIF
460  ENDDO
461 
462  ENDIF
463  ENDDO
464 
465  ENDIF
466  ENDDO
467 
468  ENDIF
469  ENDDO
470 
474 
475  !first fill with standard nodes
476  DO ijk = ijkstart3, ijkend3
477  scalar_node_xyz(ijk,1:3) = scalar_node_xyz_temp(ijk,1:3)
478  ENDDO
479 
480  !now fill with cut-face nodes
481  DO ijk = 1,number_of_new_points
482  scalar_node_xyz(ijkend3+ijk,1) = x_new_point(ijk)
483  scalar_node_xyz(ijkend3+ijk,2) = y_new_point(ijk)
484  scalar_node_xyz(ijkend3+ijk,3) = z_new_point(ijk)
485  ENDDO
486 
487 
488 
489  scalar_node_atwall(:) = .true.
490  !Rahul:
491  !One could either set all scalar_node_atwall to false and
492  !then set to true the nodes that are found as on the wall or outside
493  !the doamin
494  !In some situations, a node can be deemed to be both inside
495  !and outside the domain depending upon which cell you look from.
496  !Think of a small cell. According to the small cells, all the nodes
497  !are outside the domain, but from the perspective or surrounding
498  !cut-cells, some of the nodes of this small cell are within the domain.
499 
500  !so I'm setting all the points as being outside the domain.
501  !if a point is ever found to be in the domain, then it will stay away
502  !and further tests will not be able to revert it.
503  ijkloop: DO ijk = ijkstart3, ijkend3
504  i = i_of(ijk)
505  j = j_of(ijk)
506  k = k_of(ijk)
507  IF(.not. is_on_mype_wobnd(i,j,k)) cycle
508 
509  i1 = i-1
510  i2 = i
511  j1 = j-1
512  j2 = j
513 
514  IF(no_k) THEN
515  k1 = k
516  k2 = k
517  ELSE
518  k1 = k-1
519  k2 = k
520  ENDIF
521  !Convention used to number node numbers is described below
522 
523  ! i=1, j=2 i=2, j=2
524  ! _____________________
525  ! | |
526  ! | I = 2, J = 2 |
527  ! |___________________|
528  ! i=1, j=1 i=2, j=1
529 
530  !Let's say the scalar cell with I = 2 and J = 2, i.e., the
531  !first scalar cell in either direction.
532  !then this scalar cell's node numbering in x- direction
533  !will go from 1 to 2 and likewise in other directions.
534  DO kk = k1, k2
535  DO jj = j1, j2
536  DO ii = i1, i2
537  ijk2 = funijk(ii, jj, kk)
538  cond_1 = .false.
539  cond_2 = .false.
540  !if it was already found to be inside the domain, then don't bother
541  IF(.not.scalar_node_atwall(ijk2)) cycle
542 
543  IF(.not.fluid_at(ijk)) THEN
544  !do nothing
545  ELSE
546  !IJK is a fluid scalar cell. Check if it is
547  !a cut-cell or not
548  IF(cut_cell_at(ijk)) THEN
549  CALL get_del_h_des(ijk,'SCALAR', &
550  & scalar_node_xyz(ijk2,1), scalar_node_xyz(ijk2,2), &
551  & scalar_node_xyz(ijk2,3), &
552  & dist, norm1, norm2, norm3, .true.)
553  IF(dist.GE.zero) THEN
554  scalar_node_atwall(ijk2) = .false.
555  cond_1 = .true.
556  ENDIF
557  ELSE
558  scalar_node_atwall(ijk2) = .false.
559  cond_2 = .true.
560  ENDIF
561  ENDIF
562  !if(II == 1) then
563  ! write(*,'(10x, A, 4(2x,i10),3(2x,L2))') &
564  ! 'I1,J1, I, J, ATWALL, COND1, COND2 = ', II, JJ, I, J, SCALAR_NODE_ATWALL(IJK2), COND_1, COND_2
565  !endif
566  ENDDO
567  ENDDO
568  ENDDO
569 
570  ENDDO ijkloop
571 
572 ! print*,'After removing duplicate nodes:'
573  DO ijk = ijkstart3, ijkend3,-1
574  print*,'==========================================================='
575  print*,'IJK, I,J=',ijk,i_of(ijk),j_of(ijk)
576  print*,'NUMBER_OF_NODES=',number_of_nodes(ijk)
577  DO node = 1,number_of_nodes(ijk)
578  print*,'CNCT=',node,connectivity(ijk,node), &
579  scalar_node_xyz(connectivity(ijk,node),1),scalar_node_xyz(connectivity(ijk,node),2)
580  ENDDO
581  print*,''
582  ENDDO
583 
584 
585 
586  ovol_around_node = zero !UNDEFINED
587 
588  tot_vol_cells = zero
589 
590  DO ijk = ijkstart3, ijkend3
591 
592  DO node = 1,number_of_nodes(ijk)
593  nc = connectivity(ijk,node)
595  ENDDO
596 
597 ! print*,'IJK,VOL=',IJK,VOL(IJK)
598 
599 
600  IF(interior_cell_at(ijk)) tot_vol_cells = tot_vol_cells + vol(ijk)
601 
602 
603  ENDDO
604 
605 
606  tot_vol_node= zero
607 
608  DO ijk = ijkstart3, ijkend3 + number_of_new_points ! Loop over all nodes
609 
610  IF(ovol_around_node(ijk)>zero) THEN
611 ! print*,'NODE,VOL=',IJK,Ovol_around_node(IJK)
612  tot_vol_node = tot_vol_node + ovol_around_node(ijk)
613  ovol_around_node(ijk) = one / ovol_around_node(ijk) ! Store One/volume
614  ENDIF
615 
616 
617  ENDDO
618 
619  IF(tot_vol_cells>zero) THEN
620  IF(dabs(one-dabs(tot_vol_node/tot_vol_cells))>1.0d-6) THEN
621  WRITE(*,*)'==========================================================='
622  WRITE(*,*)'Total volume around nodes=',tot_vol_node
623  WRITE(*,*)'Total volume =',tot_vol_cells
624  WRITE(*,*)'The two volumes above should be the same.'
625  WRITE(*,*)'==========================================================='
626  CALL mfix_exit(mype)
627  ENDIF
628  ENDIF
629 
630  deallocate(x_old_point)
631  deallocate(y_old_point)
632  deallocate(z_old_point)
633  deallocate(scalar_node_xyz_temp)
634 
635  RETURN
636  END SUBROUTINE set_3d_cut_cell_flags
637 
638 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
639 ! C
640 ! Module name: SET_3D_CUT_U_CELL_FLAGS C
641 ! Purpose: Set flags for U-Momentum cut cells, based on intersection C
642 ! of the grid with the quadric(s) C
643 ! C
644 ! Author: Jeff Dietiker Date: 21-Feb-08 C
645 ! Reviewer: Date: C
646 ! C
647 ! Revision Number # Date: ##-###-## C
648 ! Author: # C
649 ! Purpose: # C
650 ! C
651 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
652  SUBROUTINE set_3d_cut_u_cell_flags
654  USE compar, ONLY: mype, pe_io, ijkstart3, ijkend3
656  USE cutcell
657  USE geometry, ONLY: no_k, axy_u, ayz_u, vol_u, axz_u
658  USE param1, ONLY: half, one, zero
659  USE polygon, ONLY: n_polygon
660  USE quadric, ONLY: tol_f
661 
662  IMPLICIT NONE
663  INTEGER :: IJK
664  INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
665  INTEGER :: NODE,N_N1,N_N2,Q_ID
666  INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
667  LOGICAL :: CLIP_FLAG
668  INTEGER :: BCID
669 
670  IF(mype == pe_io) THEN
671  WRITE(*,10)'INTERSECTING GEOMETRY WITH U-MOMENTUM CELLS...'
672  ENDIF
673 10 FORMAT(1x,a)
674 !======================================================================
675 ! Intersection between quadric Grid
676 !======================================================================
677 
678  intersect_x = .false.
679  intersect_y = .false.
680  intersect_z = .false.
681  snap = .false.
682  tol_snap = zero
683 
684  IF(.NOT.(use_stl.OR.use_msh)) THEN
685  DO ijk = ijkstart3, ijkend3
686 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL INTERSECT(IJK,'U_MOMENTUM',Xn_U_int(IJK),Ye_U_int(IJK),Zt_U_int(IJK))
687  CALL intersect(ijk,'U_MOMENTUM',xn_u_int(ijk),ye_u_int(ijk),zt_u_int(ijk))
688  END DO
689 
690 !======================================================================
691 ! Clean-up intersection flags in preparaton of small cells removal
692 !======================================================================
693  DO ijk = ijkstart3, ijkend3
694  IF(interior_cell_at(ijk)) THEN
695 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL CLEAN_INTERSECT(IJK,'U_MOMENTUM',Xn_U_int(IJK),Ye_U_int(IJK),Zt_U_int(IJK))
696  CALL clean_intersect(ijk,'U_MOMENTUM',xn_u_int(ijk),ye_u_int(ijk),zt_u_int(ijk))
697  ENDIF
698  END DO
699 
700  ELSE
701  CALL cad_intersect('U_MOMENTUM',xn_u_int,ye_u_int,zt_u_int)
702  ENDIF
703 
704 
706 
707  DO ijk = ijkstart3, ijkend3
708 
709  CALL write_progress_bar(ijk,ijkend3 - ijkstart3 + 1,'C')
710 
711  IF(interior_cell_at(ijk)) THEN
712 
713 !======================================================================
714 ! Get coordinates of eight nodes
715 !======================================================================
716 
717  CALL get_cell_node_coordinates(ijk,'U_MOMENTUM')
718 
719 !======================================================================
720 ! Initialize location of velocity nodes at center of E,W,T faces
721 !======================================================================
722 
723  x_u_ec(ijk) = x_node(8)
724  y_u_ec(ijk) = half * (y_node(6) + y_node(8))
725  z_u_ec(ijk) = half * (z_node(4) + z_node(8))
726 
727  x_u_nc(ijk) = half * (x_node(7) + x_node(8))
728  y_u_nc(ijk) = y_node(8)
729  z_u_nc(ijk) = half * (z_node(4) + z_node(8))
730 
731  x_u_tc(ijk) = half * (x_node(7) + x_node(8))
732  y_u_tc(ijk) = half * (y_node(6) + y_node(8))
733  z_u_tc(ijk) = z_node(8)
734 
735 !======================================================================
736 ! Get Connectivity
737 !======================================================================
738 
739  IF(no_k) THEN
740  min_intersections = 2
741  max_intersections = 2
742  n_n1 = 5
743  n_n2 = 8
744 
745  ELSE
746  min_intersections = 3
747  max_intersections = 6
748  n_n1 = 1
749  n_n2 = 8
750  ENDIF
751 
753  x_new_u_point,y_new_u_point,z_new_u_point,total_number_of_intersections,xn_u_int,ye_u_int,zt_u_int)
754 
755 
756  IF(total_number_of_intersections < min_intersections ) THEN ! Not a cut cell
757 
758  q_id = 1
759  CALL eval_f('QUADRIC',x_node(0),y_node(0),z_node(0),q_id,f_node(0),clip_flag)
760 
761  CALL eval_f('POLYGON',x_node(0),y_node(0),z_node(0),n_polygon,f_node(0),clip_flag)
762 
763  CALL eval_f('USR_DEF',x_node(0),y_node(0),z_node(0),n_usr_def,f_node(0),clip_flag)
764 
765  CALL eval_stl_fct_at('U_MOMENTUM',ijk,0,f_node(0),clip_flag,bcid)
766 
767  IF(total_number_of_intersections==-1) f_node(0) = -one
768  bc_u_id(ijk) = 0
769 
770  IF(f_node(0) <= zero) THEN
771  blocked_u_cell_at(ijk) = .false.
772  standard_u_cell_at(ijk) = .true. ! Regular fluid cell
773 
774  x_u_ec(ijk) = x_node(8)
775  y_u_ec(ijk) = half * (y_node(6) + y_node(8))
776  z_u_ec(ijk) = half * (z_node(4) + z_node(8))
777 
778  x_u_nc(ijk) = half * (x_node(7) + x_node(8))
779  y_u_nc(ijk) = y_node(8)
780  z_u_nc(ijk) = half * (z_node(4) + z_node(8))
781 
782  x_u_tc(ijk) = half * (x_node(7) + x_node(8))
783  y_u_tc(ijk) = half * (y_node(6) + y_node(8))
784  z_u_tc(ijk) = z_node(8)
785 
786  ELSE
787  blocked_u_cell_at(ijk) = .true. ! Blocked fluid cell
788  standard_u_cell_at(ijk) = .false.
789  axy_u(ijk) = zero
790  axz_u(ijk) = zero
791  ayz_u(ijk) = zero
792  vol_u(ijk) = zero
793  ENDIF
794 
795  IF(no_k) THEN
796  number_of_u_nodes(ijk) = 4
797  connectivity_u(ijk,1) = ijk_of_node(5)
798  connectivity_u(ijk,2) = ijk_of_node(6)
799  connectivity_u(ijk,3) = ijk_of_node(8)
800  connectivity_u(ijk,4) = ijk_of_node(7)
801  ELSE
802  number_of_u_nodes(ijk) = 8
803  DO node = n_n1,n_n2
804  connectivity_u(ijk,node) = ijk_of_node(node)
805  END DO
806  ENDIF
807 
808  ELSE IF(total_number_of_intersections > max_intersections) THEN
809 
810  IF(print_warnings) THEN
811  WRITE(*,*) 'TOO MANY INTERSECTIONS FOUND IN U-CELL IJK = ',ijk
812  WRITE(*,*) 'MAXIMUM NUMBER OF INTERSECTIONS = ',max_intersections
813  WRITE(*,*) 'TOTAL NUMBER OF INTERSECTIONS = ',total_number_of_intersections
814  WRITE(*,*) 'REMOVING U-CELL FROM COMPUTATION.'
815 ! WRITE(*,*) 'MFIX WILL EXIT NOW.'
816 ! CALL MFIX_EXIT(MYPE)
817 
818  ENDIF
819 
820  blocked_u_cell_at(ijk) = .true. ! Blocked fluid cell
821  standard_u_cell_at(ijk) = .false.
822  cut_u_cell_at(ijk) = .false.
823  axy_u(ijk) = zero
824  axz_u(ijk) = zero
825  ayz_u(ijk) = zero
826  vol_u(ijk) = zero
827 
828  ELSE ! Cut cell
829 
830  cut_u_cell_at(ijk) = .true.
831  blocked_u_cell_at(ijk) = .false.
832  standard_u_cell_at(ijk) = .false.
833 
834  DO node = n_n1,n_n2
835  IF(f_node(node) < - tol_f) THEN
836  number_of_u_nodes(ijk) = number_of_u_nodes(ijk) + 1
838  ENDIF
839  END DO
840 
843 
844  ENDIF
845 
846  ENDIF
847 
848  END DO
849 
850  DO ijk = ijkstart3, ijkend3
851 
852  CALL get_cell_node_coordinates(ijk,'U_MOMENTUM')
853 
854  delx_ue(ijk) = x_node(8) - x_u(ijk)
855  delx_uw(ijk) = x_u(ijk) - x_node(1)
856 
857  dely_un(ijk) = y_node(8) - y_u(ijk)
858  dely_us(ijk) = y_u(ijk) - y_node(1)
859 
860  delz_ut(ijk) = z_node(8) - z_u(ijk)
861  delz_ub(ijk) = z_u(ijk) - z_node(1)
862 
863  ENDDO
864 
865  RETURN
866 
867  END SUBROUTINE set_3d_cut_u_cell_flags
868 
869 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
870 ! C
871 ! Module name: SET_3D_CUT_V_CELL_FLAGS C
872 ! Purpose: Set flags for V-Momentum cut cells, based on intersection C
873 ! of the grid with the quadric(s) C
874 ! C
875 ! Author: Jeff Dietiker Date: 21-Feb-08 C
876 ! Reviewer: Date: C
877 ! C
878 ! Revision Number # Date: ##-###-## C
879 ! Author: # C
880 ! Purpose: # C
881 ! C
882 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
883  SUBROUTINE set_3d_cut_v_cell_flags
885  USE compar, ONLY: mype, pe_io, ijkstart3, ijkend3
887  USE cutcell
888  USE geometry, ONLY: no_k, axy_v, axz_v, ayz_v, vol_v
889  USE param1, ONLY: half, one, zero
890  USE polygon, ONLY: n_polygon
891  USE quadric, ONLY: tol_f
892 
893  IMPLICIT NONE
894  INTEGER :: IJK
895  INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
896  INTEGER :: NODE,N_N1,N_N2,Q_ID
897  INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
898  LOGICAL :: CLIP_FLAG
899  INTEGER :: BCID
900 
901  IF(mype == pe_io) THEN
902  WRITE(*,*)'INTERSECTING GEOMETRY WITH V-MOMENTUM CELLS...'
903  ENDIF
904 !======================================================================
905 ! Intersection between quadric Grid
906 !======================================================================
907 
908  intersect_x = .false.
909  intersect_y = .false.
910  intersect_z = .false.
911  snap = .false.
912 
913  IF(.NOT.(use_stl.OR.use_msh)) THEN
914  DO ijk = ijkstart3, ijkend3
915 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL INTERSECT(IJK,'V_MOMENTUM',Xn_V_int(IJK),Ye_V_int(IJK),Zt_V_int(IJK))
916  CALL intersect(ijk,'V_MOMENTUM',xn_v_int(ijk),ye_v_int(ijk),zt_v_int(ijk))
917  END DO
918 
919 !======================================================================
920 ! Clean-up intersection flags in preparaton of small cells removal
921 !======================================================================
922  DO ijk = ijkstart3, ijkend3
923  IF(interior_cell_at(ijk)) THEN
924 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL CLEAN_INTERSECT(IJK,'V_MOMENTUM',Xn_V_int(IJK),Ye_V_int(IJK),Zt_V_int(IJK))
925  CALL clean_intersect(ijk,'V_MOMENTUM',xn_v_int(ijk),ye_v_int(ijk),zt_v_int(ijk))
926  ENDIF
927  END DO
928 
929  ELSE
930  CALL cad_intersect('V_MOMENTUM',xn_v_int,ye_v_int,zt_v_int)
931  ENDIF
932 
933 
935 
936  DO ijk = ijkstart3, ijkend3
937  CALL write_progress_bar(ijk,ijkend3 - ijkstart3 + 1,'C')
938 
939  IF(interior_cell_at(ijk)) THEN
940 
941 !======================================================================
942 ! Get coordinates of eight nodes
943 !======================================================================
944 
945  CALL get_cell_node_coordinates(ijk,'V_MOMENTUM')
946 
947 !======================================================================
948 ! Initialize location of velocity nodes at center of E,W,T faces
949 !======================================================================
950 
951  x_v_ec(ijk) = x_node(8)
952  y_v_ec(ijk) = half * (y_node(6) + y_node(8))
953  z_v_ec(ijk) = half * (z_node(4) + z_node(8))
954 
955  x_v_nc(ijk) = half * (x_node(7) + x_node(8))
956  y_v_nc(ijk) = y_node(8)
957  z_v_nc(ijk) = half * (z_node(4) + z_node(8))
958 
959  x_v_tc(ijk) = half * (x_node(7) + x_node(8))
960  y_v_tc(ijk) = half * (y_node(6) + y_node(8))
961  z_v_tc(ijk) = z_node(8)
962 
963 !======================================================================
964 ! Get Connectivity
965 !======================================================================
966 
967  IF(no_k) THEN
968  min_intersections = 2
969  max_intersections = 2
970  n_n1 = 5
971  n_n2 = 8
972 
973  ELSE
974  min_intersections = 3
975  max_intersections = 6
976  n_n1 = 1
977  n_n2 = 8
978  ENDIF
979 
980 
982  x_new_v_point,y_new_v_point,z_new_v_point,total_number_of_intersections,xn_v_int,ye_v_int,zt_v_int)
983 
984 
985  IF(total_number_of_intersections < min_intersections ) THEN ! Not a cut cell
986 
987  q_id = 1
988  CALL eval_f('QUADRIC',x_node(0),y_node(0),z_node(0),q_id,f_node(0),clip_flag)
989 
990  CALL eval_f('POLYGON',x_node(0),y_node(0),z_node(0),n_polygon,f_node(0),clip_flag)
991 
992  CALL eval_f('USR_DEF',x_node(0),y_node(0),z_node(0),n_usr_def,f_node(0),clip_flag)
993 
994  CALL eval_stl_fct_at('V_MOMENTUM',ijk,0,f_node(0),clip_flag,bcid)
995 
996  IF(total_number_of_intersections==-1) f_node(0) = -one
997  bc_v_id(ijk) = 0
998 
999  IF(f_node(0) <= zero) THEN
1000  blocked_v_cell_at(ijk) = .false.
1001  standard_v_cell_at(ijk) = .true. ! Regular fluid cell
1002 
1003  x_v_ec(ijk) = x_node(8)
1004  y_v_ec(ijk) = half * (y_node(6) + y_node(8))
1005  z_v_ec(ijk) = half * (z_node(4) + z_node(8))
1006 
1007  x_v_nc(ijk) = half * (x_node(7) + x_node(8))
1008  y_v_nc(ijk) = y_node(8)
1009  z_v_nc(ijk) = half * (z_node(4) + z_node(8))
1010 
1011  x_v_tc(ijk) = half * (x_node(7) + x_node(8))
1012  y_v_tc(ijk) = half * (y_node(6) + y_node(8))
1013  z_v_tc(ijk) = z_node(8)
1014 
1015  ELSE
1016  blocked_v_cell_at(ijk) = .true. ! Blocked fluid cell
1017  standard_v_cell_at(ijk) = .false.
1018  axy_v(ijk) = zero
1019  axz_v(ijk) = zero
1020  ayz_v(ijk) = zero
1021  vol_v(ijk) = zero
1022  ENDIF
1023 
1024  IF(no_k) THEN
1025  number_of_v_nodes(ijk) = 4
1026  connectivity_v(ijk,1) = ijk_of_node(5)
1027  connectivity_v(ijk,2) = ijk_of_node(6)
1028  connectivity_v(ijk,3) = ijk_of_node(8)
1029  connectivity_v(ijk,4) = ijk_of_node(7)
1030  ELSE
1031  number_of_v_nodes(ijk) = 8
1032  DO node = n_n1,n_n2
1033  connectivity_v(ijk,node) = ijk_of_node(node)
1034  END DO
1035  ENDIF
1036 
1037  ELSE IF(total_number_of_intersections > max_intersections ) THEN
1038 
1039  IF(print_warnings) THEN
1040  WRITE(*,*) 'TOO MANY INTERSECTIONS FOUND IN V-CELL IJK = ',ijk
1041  WRITE(*,*) 'MAXIMUM NUMBER OF INTERSECTIONS = ',max_intersections
1042  WRITE(*,*) 'TOTAL NUMBER OF INTERSECTIONS = ',total_number_of_intersections
1043  WRITE(*,*) 'REMOVING V-CELL FROM COMPUTATION.'
1044 ! WRITE(*,*) 'MFIX WILL EXIT NOW.'
1045 ! CALL MFIX_EXIT(MYPE)
1046 
1047  ENDIF
1048 
1049  blocked_v_cell_at(ijk) = .true. ! Blocked fluid cell
1050  standard_v_cell_at(ijk) = .false.
1051  cut_v_cell_at(ijk) = .false.
1052  axy_v(ijk) = zero
1053  axz_v(ijk) = zero
1054  ayz_v(ijk) = zero
1055  vol_v(ijk) = zero
1056 
1057  ELSE ! Cut cell
1058 
1059  cut_v_cell_at(ijk) = .true.
1060  blocked_v_cell_at(ijk) = .false.
1061  standard_v_cell_at(ijk) = .false.
1062 
1063  DO node = n_n1,n_n2
1064  IF(f_node(node) < - tol_f) THEN
1065  number_of_v_nodes(ijk) = number_of_v_nodes(ijk) + 1
1066  connectivity_v(ijk,number_of_v_nodes(ijk)) = ijk_of_node(node)
1067  ENDIF
1068  END DO
1069 
1072 
1073  ENDIF
1074 
1075  ENDIF
1076  END DO
1077 
1078  DO ijk = ijkstart3, ijkend3
1079 
1080  CALL get_cell_node_coordinates(ijk,'V_MOMENTUM')
1081 
1082  delx_ve(ijk) = x_node(8) - x_v(ijk)
1083  delx_vw(ijk) = x_v(ijk) - x_node(1)
1084 
1085  dely_vn(ijk) = y_node(8) - y_v(ijk)
1086  dely_vs(ijk) = y_v(ijk) - y_node(1)
1087 
1088  delz_vt(ijk) = z_node(8) - z_v(ijk)
1089  delz_vb(ijk) = z_v(ijk) - z_node(1)
1090 
1091  ENDDO
1092 
1093  RETURN
1094 
1095  END SUBROUTINE set_3d_cut_v_cell_flags
1096 
1097 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
1098 ! C
1099 ! Module name: SET_3D_CUT_W_CELL_FLAGS C
1100 ! Purpose: Set flags for W-Momentum cut cells, based on intersection C
1101 ! of the grid with the quadric(s) C
1102 ! C
1103 ! Author: Jeff Dietiker Date: 21-Feb-08 C
1104 ! Reviewer: Date: C
1105 ! C
1106 ! Revision Number # Date: ##-###-## C
1107 ! Author: # C
1108 ! Purpose: # C
1109 ! C
1110 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
1111  SUBROUTINE set_3d_cut_w_cell_flags
1113  USE compar, ONLY: mype, pe_io, ijkstart3, ijkend3
1115  USE cutcell
1116  USE geometry, ONLY: axy_w, axz_w, ayz_w, vol_w
1117  USE param1, ONLY: half, one, zero
1118  USE polygon, ONLY: n_polygon
1119  USE quadric, ONLY: tol_f
1120 
1121  IMPLICIT NONE
1122  INTEGER :: IJK
1123  INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
1124  INTEGER :: NODE,Q_ID
1125  LOGICAL :: CLIP_FLAG
1126  INTEGER :: BCID
1127 
1128  IF(mype == pe_io) THEN
1129  WRITE(*,10)'INTERSECTING GEOMETRY WITH W-MOMENTUM CELLS...'
1130  ENDIF
1131 10 FORMAT(1x,a)
1132 !======================================================================
1133 ! Intersection between quadric Grid
1134 !======================================================================
1135 
1136  intersect_x = .false.
1137  intersect_y = .false.
1138  intersect_z = .false.
1139  snap = .false.
1140 
1141  IF(.NOT.(use_stl.OR.use_msh)) THEN
1142  DO ijk = ijkstart3, ijkend3
1143 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL INTERSECT(IJK,'W_MOMENTUM',Xn_W_int(IJK),Ye_W_int(IJK),Zt_W_int(IJK))
1144  CALL intersect(ijk,'W_MOMENTUM',xn_w_int(ijk),ye_w_int(ijk),zt_w_int(ijk))
1145  END DO
1146 
1147 !======================================================================
1148 ! Clean-up intersection flags in preparaton of small cells removal
1149 !======================================================================
1150  DO ijk = ijkstart3, ijkend3
1151  IF(interior_cell_at(ijk)) THEN
1152 ! IF(POTENTIAL_CUT_CELL_AT(IJK)) CALL CLEAN_INTERSECT(IJK,'W_MOMENTUM',Xn_W_int(IJK),Ye_W_int(IJK),Zt_W_int(IJK))
1153  CALL clean_intersect(ijk,'W_MOMENTUM',xn_w_int(ijk),ye_w_int(ijk),zt_w_int(ijk))
1154  ENDIF
1155  END DO
1156 
1157  ELSE
1158  CALL cad_intersect('W_MOMENTUM',xn_w_int,ye_w_int,zt_w_int)
1159  ENDIF
1160 
1161 
1163 
1164  DO ijk = ijkstart3, ijkend3
1165 
1166  CALL write_progress_bar(ijk,ijkend3 - ijkstart3 + 1,'C')
1167 
1168  IF(interior_cell_at(ijk)) THEN
1169 
1170 !======================================================================
1171 ! Get coordinates of eight nodes
1172 !======================================================================
1173 
1174  CALL get_cell_node_coordinates(ijk,'W_MOMENTUM')
1175 
1176 !======================================================================
1177 ! Initialize location of velocity nodes at center of E,W,T faces
1178 !======================================================================
1179 
1180  x_w_ec(ijk) = x_node(8)
1181  y_w_ec(ijk) = half * (y_node(6) + y_node(8))
1182  z_w_ec(ijk) = half * (z_node(4) + z_node(8))
1183 
1184  x_w_nc(ijk) = half * (x_node(7) + x_node(8))
1185  y_w_nc(ijk) = y_node(8)
1186  z_w_nc(ijk) = half * (z_node(4) + z_node(8))
1187 
1188  x_w_tc(ijk) = half * (x_node(7) + x_node(8))
1189  y_w_tc(ijk) = half * (y_node(6) + y_node(8))
1190  z_w_tc(ijk) = z_node(8)
1191 
1192 !======================================================================
1193 ! Get Connectivity
1194 !======================================================================
1195 
1197  x_new_w_point,y_new_w_point,z_new_w_point,total_number_of_intersections,xn_w_int,ye_w_int,zt_w_int)
1198 
1199 
1200  IF(total_number_of_intersections < 3 ) THEN ! Not a cut cell
1201 
1202  q_id = 1
1203  CALL eval_f('QUADRIC',x_node(0),y_node(0),z_node(0),q_id,f_node(0),clip_flag)
1204 
1205  CALL eval_f('POLYGON',x_node(0),y_node(0),z_node(0),n_polygon,f_node(0),clip_flag)
1206 
1207  CALL eval_f('USR_DEF',x_node(0),y_node(0),z_node(0),n_usr_def,f_node(0),clip_flag)
1208 
1209  CALL eval_stl_fct_at('W_MOMENTUM',ijk,0,f_node(0),clip_flag,bcid)
1210 
1211  IF(total_number_of_intersections==-1) f_node(0) = -one
1212  bc_w_id(ijk) = 0
1213 
1214  IF(f_node(0) <= zero) THEN
1215  blocked_w_cell_at(ijk) = .false.
1216  standard_w_cell_at(ijk) = .true. ! Regular fluid cell
1217 
1218  x_w_ec(ijk) = x_node(8)
1219  y_w_ec(ijk) = half * (y_node(6) + y_node(8))
1220  z_w_ec(ijk) = half * (z_node(4) + z_node(8))
1221 
1222  x_w_nc(ijk) = half * (x_node(7) + x_node(8))
1223  y_w_nc(ijk) = y_node(8)
1224  z_w_nc(ijk) = half * (z_node(4) + z_node(8))
1225 
1226  x_w_tc(ijk) = half * (x_node(7) + x_node(8))
1227  y_w_tc(ijk) = half * (y_node(6) + y_node(8))
1228  z_w_tc(ijk) = z_node(8)
1229 
1230  ELSE
1231  blocked_w_cell_at(ijk) = .true. ! Blocked fluid cell
1232  standard_w_cell_at(ijk) = .false.
1233  axy_w(ijk) = zero
1234  axz_w(ijk) = zero
1235  ayz_w(ijk) = zero
1236  vol_w(ijk) = zero
1237  ENDIF
1238 
1239  number_of_w_nodes(ijk) = 8
1240  DO node = 1,8
1241  connectivity_w(ijk,node) = ijk_of_node(node)
1242  END DO
1243 
1244  ELSE IF(total_number_of_intersections > 6 ) THEN
1245 
1246  IF(print_warnings) THEN
1247  WRITE(*,*) 'TOO MANY INTERSECTIONS FOUND IN W-CELL IJK = ',ijk
1248  WRITE(*,*) 'MAXIMUM NUMBER OF INTERSECTIONS = ',6
1249  WRITE(*,*) 'TOTAL NUMBER OF INTERSECTIONS = ',total_number_of_intersections
1250  WRITE(*,*) 'REMOVING W-CELL FROM COMPUTATION.'
1251 ! WRITE(*,*) 'MFIX WILL EXIT NOW.'
1252 ! CALL MFIX_EXIT(MYPE)
1253 
1254  ENDIF
1255 
1256  blocked_w_cell_at(ijk) = .true. ! Blocked fluid cell
1257  standard_w_cell_at(ijk) = .false.
1258  cut_w_cell_at(ijk) = .false.
1259  axy_w(ijk) = zero
1260  axz_w(ijk) = zero
1261  ayz_w(ijk) = zero
1262  vol_w(ijk) = zero
1263 
1264  ELSE ! Cut cell
1265 
1266  cut_w_cell_at(ijk) = .true.
1267 
1268  DO node = 1,8
1269  IF(f_node(node) < - tol_f) THEN
1270  number_of_w_nodes(ijk) = number_of_w_nodes(ijk) + 1
1271  connectivity_w(ijk,number_of_w_nodes(ijk)) = ijk_of_node(node)
1272  ENDIF
1273  END DO
1274 
1275 
1278 
1279  ENDIF
1280 
1281  ENDIF
1282  END DO
1283 
1284  DO ijk = ijkstart3, ijkend3
1285 
1286  CALL get_cell_node_coordinates(ijk,'W_MOMENTUM')
1287 
1288  delx_we(ijk) = x_node(8) - x_w(ijk)
1289  delx_ww(ijk) = x_w(ijk) - x_node(1)
1290 
1291  dely_wn(ijk) = y_node(8) - y_w(ijk)
1292  dely_ws(ijk) = y_w(ijk) - y_node(1)
1293 
1294  delz_wt(ijk) = z_node(8) - z_w(ijk)
1295  delz_wb(ijk) = z_w(ijk) - z_node(1)
1296 
1297  ENDDO
1298 
1299  RETURN
1300 
1301  END SUBROUTINE set_3d_cut_w_cell_flags
1302 
1303 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
1304 ! C
1305 ! Module name: SET_3D_CUT_CELL_TREATMENT_FLAGS C
1306 ! Purpose: Set flags for scalar cut cells, based on intersection C
1307 ! of the grid with the quadric(s) C
1308 ! C
1309 ! Author: Jeff Dietiker Date: 21-Feb-08 C
1310 ! Reviewer: Date: C
1311 ! C
1312 ! Revision Number # Date: ##-###-## C
1313 ! Author: # C
1314 ! Purpose: # C
1315 ! C
1316 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
1319  USE compar, only: mype, pe_io, ijkstart3, ijkend3
1320  USE cutcell
1321  USE functions, ONLY: funijk
1322  USE geometry, ONLY: do_k
1323  USE indices, ONLY: i_of, j_of, k_of
1324 
1325  IMPLICIT NONE
1326  INTEGER :: IJK,I,J,K,IM,IP,JM,JP,KM,KP
1327  INTEGER :: IMJK,IPJK,IJMK,IJPK,IJKM,IJKP
1328 
1329  IF(mype == pe_io) THEN
1330  WRITE(*,*)'SETTING CUT CELL TREATMENT FLAGS...'
1331  ENDIF
1332 !======================================================================
1333 ! Set flags identifying cells requiring cut cell treatment:
1334 ! These are the cut cells and their neighbours
1335 !======================================================================
1336 
1337  cut_treatment_at = .false.
1338  cut_u_treatment_at = .false.
1339  cut_v_treatment_at = .false.
1340  cut_w_treatment_at = .false.
1341 
1346 
1347  DO ijk = ijkstart3, ijkend3
1348 
1349  CALL write_progress_bar(ijk,ijkend3 - ijkstart3 + 1,'C')
1350 
1351  IF(interior_cell_at(ijk)) THEN
1352 
1353  i = i_of(ijk)
1354  j = j_of(ijk)
1355  k = k_of(ijk)
1356 
1357  ip = i + 1
1358  jp = j + 1
1359  kp = k + 1
1360 
1361  im = i - 1
1362  jm = j - 1
1363  km = k - 1
1364 
1365  imjk = funijk(im,j,k)
1366  ijmk = funijk(i,jm,k)
1367  ijkm = funijk(i,j,km)
1368 
1369  ipjk = funijk(ip,j,k)
1370  ijpk = funijk(i,jp,k)
1371  ijkp = funijk(i,j,kp)
1372 
1373  cut_treatment_at(ijk) = (cut_cell_at(ijk ).OR. &
1374  cut_cell_at(imjk).OR. &
1375  cut_cell_at(ipjk).OR. &
1376  cut_cell_at(ijmk).OR. &
1377  cut_cell_at(ijpk))
1378 
1379  cut_u_treatment_at(ijk) = (cut_u_cell_at(ijk ).OR. &
1380  cut_u_cell_at(imjk).OR. &
1381  cut_u_cell_at(ipjk).OR. &
1382  cut_u_cell_at(ijmk).OR. &
1383  cut_u_cell_at(ijpk))
1384 
1385  cut_v_treatment_at(ijk) = (cut_v_cell_at(ijk ).OR. &
1386  cut_v_cell_at(imjk).OR. &
1387  cut_v_cell_at(ipjk).OR. &
1388  cut_v_cell_at(ijmk).OR. &
1389  cut_v_cell_at(ijpk))
1390 
1391  IF(do_k) THEN
1392 
1393  cut_treatment_at(ijk) = (cut_treatment_at(ijk).OR. &
1394  cut_cell_at(ijkm).OR. &
1395  cut_cell_at(ijkp))
1396 
1397  cut_u_treatment_at(ijk) = (cut_u_treatment_at(ijk).OR. &
1398  cut_u_cell_at(ijkm).OR. &
1399  cut_u_cell_at(ijkp))
1400 
1401  cut_v_treatment_at(ijk) = (cut_v_treatment_at(ijk).OR. &
1402  cut_v_cell_at(ijkm).OR. &
1403  cut_v_cell_at(ijkp))
1404 
1405  cut_w_treatment_at(ijk) = (cut_w_cell_at(ijk ).OR. &
1406  cut_w_cell_at(imjk).OR. &
1407  cut_w_cell_at(ipjk).OR. &
1408  cut_w_cell_at(ijmk).OR. &
1409  cut_w_cell_at(ijpk).OR. &
1410  cut_w_cell_at(ijkm).OR. &
1411  cut_w_cell_at(ijkp))
1412 
1413  ENDIF
1414 
1415  ENDIF
1416 
1417  IF(.NOT.re_indexing) THEN
1418  IF(blocked_cell_at(ijk)) cut_treatment_at(ijk) = .false.
1419  IF(blocked_u_cell_at(ijk)) cut_u_treatment_at(ijk) = .false.
1420  IF(blocked_v_cell_at(ijk)) cut_v_treatment_at(ijk) = .false.
1421  IF(blocked_w_cell_at(ijk)) cut_w_treatment_at(ijk) = .false.
1422  ENDIF
1423 
1424  END DO
1425 
1426  IF(cg_safe_mode(1)==1) cut_treatment_at = .false.
1427  IF(cg_safe_mode(3)==1) cut_u_treatment_at = .false.
1428  IF(cg_safe_mode(4)==1) cut_v_treatment_at = .false.
1429  IF(cg_safe_mode(5)==1) cut_w_treatment_at = .false.
1430 
1431  RETURN
1432 
1433  END SUBROUTINE set_3d_cut_cell_treatment_flags
1434 
1435 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
1436 ! C
1437 ! Module name: SET_GHOST_CELL_FLAGS C
1438 ! Purpose: Set flags for ghost cell flags C
1439 ! C
1440 ! Author: Jeff Dietiker Date: 21-Feb-08 C
1441 ! Reviewer: Date: C
1442 ! C
1443 ! Revision Number # Date: ##-###-## C
1444 ! Author: # C
1445 ! Purpose: # C
1446 ! C
1447 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
1448  SUBROUTINE set_ghost_cell_flags
1450  USE compar, ONLY: ijkstart3, ijkend3
1453  USE cutcell
1454  USE functions, ONLY: funijk
1455  USE functions, ONLY: west_of, east_of, south_of, north_of, bottom_of, top_of
1456  USE functions, ONLY: im_of, ip_of, jm_of, jp_of, km_of, kp_of
1458 
1459  USE bc
1460  USE sendrecv
1461 
1462  IMPLICIT NONE
1463  INTEGER :: IJK,I,J,K,I23,J23,K23
1464  INTEGER :: BCID
1465  INTEGER :: IPJK,IMJK,IJPK,IJMK,IJKP,IJKM
1466 
1467 ! EAST BOUNDARY
1468  i = iend1
1469 
1470  IF(i==imax1) THEN
1471 
1472  DO i23 = iend2,iend3
1473  DO k = kstart3,kend3
1474  DO j = jstart3, jend3
1475 
1476  ijk = funijk(i,j,k)
1477  ipjk = funijk(i23,j,k)
1478 
1479  blocked_cell_at(ipjk) = blocked_cell_at(ijk)
1483 
1484  IF(blocked_cell_at(ipjk)) flag(ipjk) = 100
1485 
1486  vol(ipjk) = vol(ijk)
1487  vol_u(ipjk) = vol_u(ijk)
1488  vol_v(ipjk) = vol_v(ijk)
1489  vol_w(ipjk) = vol_w(ijk)
1490 
1491  ayz(ipjk) = ayz(ijk)
1492  ayz_u(ipjk) = ayz_u(ijk)
1493  ayz_v(ipjk) = ayz_v(ijk)
1494  ayz_w(ipjk) = ayz_w(ijk)
1495 
1496  axy(ipjk) = axy(ijk)
1497  axy_u(ipjk) = axy_u(ijk)
1498  axy_v(ipjk) = axy_v(ijk)
1499  axy_w(ipjk) = axy_w(ijk)
1500 
1501  axz(ipjk) = axz(ijk)
1502  axz_u(ipjk) = axz_u(ijk)
1503  axz_v(ipjk) = axz_v(ijk)
1504  axz_w(ipjk) = axz_w(ijk)
1505 
1506  bc_id(ipjk) = bc_id(ijk)
1507  bc_u_id(ipjk) = bc_u_id(ijk)
1508  bc_v_id(ipjk) = bc_v_id(ijk)
1509  bc_w_id(ipjk) = bc_w_id(ijk)
1510 
1511  END DO
1512  END DO
1513  END DO
1514 
1515  ENDIF
1516 
1517 ! WEST BOUNDARY
1518  i = istart1
1519 
1520  IF(i==imin1) THEN
1521 
1522  DO i23 = istart3,istart2
1523  DO k = kstart3,kend3
1524  DO j = jstart3, jend3
1525 
1526  ijk = funijk(i,j,k)
1527  imjk = funijk(i23,j,k)
1528 
1529  blocked_cell_at(imjk) = blocked_cell_at(ijk)
1533 
1534  IF(blocked_cell_at(imjk)) flag(imjk) = 100
1535 
1536  vol(imjk) = vol(ijk)
1537  vol_u(imjk) = vol_u(ijk)
1538  vol_v(imjk) = vol_v(ijk)
1539  vol_w(imjk) = vol_w(ijk)
1540 
1541  ayz(imjk) = ayz(ijk)
1542  ayz_u(imjk) = ayz_u(ijk)
1543  ayz_v(imjk) = ayz_v(ijk)
1544  ayz_w(imjk) = ayz_w(ijk)
1545 
1546  axy(imjk) = axy(ijk)
1547  axy_u(imjk) = axy_u(ijk)
1548  axy_v(imjk) = axy_v(ijk)
1549  axy_w(imjk) = axy_w(ijk)
1550 
1551  axz(imjk) = axz(ijk)
1552  axz_u(imjk) = axz_u(ijk)
1553  axz_v(imjk) = axz_v(ijk)
1554  axz_w(imjk) = axz_w(ijk)
1555 
1556  bc_id(imjk) = bc_id(ijk)
1557  bc_u_id(imjk) = bc_u_id(ijk)
1558  bc_v_id(imjk) = bc_v_id(ijk)
1559  bc_w_id(imjk) = bc_w_id(ijk)
1560 
1561  END DO
1562  END DO
1563  END DO
1564 
1565  ENDIF
1566 
1567 ! NORTH BOUNDARY
1568  j = jend1
1569 
1570  IF(j==jmax1) THEN
1571 
1572  DO j23 = jend2,jend3
1573  DO k = kstart3,kend3
1574  DO i = istart3, iend3
1575 
1576  ijk = funijk(i,j,k)
1577  ijpk = funijk(i,j23,k)
1578 
1579  blocked_cell_at(ijpk) = blocked_cell_at(ijk)
1583 
1584  IF(blocked_cell_at(ijpk)) flag(ijpk) = 100
1585 
1586  vol(ijpk) = vol(ijk)
1587  vol_u(ijpk) = vol_u(ijk)
1588  vol_v(ijpk) = vol_v(ijk)
1589  vol_w(ijpk) = vol_w(ijk)
1590 
1591  ayz(ijpk) = ayz(ijk)
1592  ayz_u(ijpk) = ayz_u(ijk)
1593  ayz_v(ijpk) = ayz_v(ijk)
1594  ayz_w(ijpk) = ayz_w(ijk)
1595 
1596  axy(ijpk) = axy(ijk)
1597  axy_u(ijpk) = axy_u(ijk)
1598  axy_v(ijpk) = axy_v(ijk)
1599  axy_w(ijpk) = axy_w(ijk)
1600 
1601  axz(ijpk) = axz(ijk)
1602  axz_u(ijpk) = axz_u(ijk)
1603  axz_v(ijpk) = axz_v(ijk)
1604  axz_w(ijpk) = axz_w(ijk)
1605 
1606  bc_id(ijpk) = bc_id(ijk)
1607  bc_u_id(ijpk) = bc_u_id(ijk)
1608  bc_v_id(ijpk) = bc_v_id(ijk)
1609  bc_w_id(ijpk) = bc_w_id(ijk)
1610 
1611  END DO
1612  END DO
1613  END DO
1614 
1615  ENDIF
1616 ! SOUTH BOUNDARY
1617  j = jstart1
1618 
1619  IF(j==jmin1) THEN
1620 
1621  DO j23 = jstart3,jstart2
1622  DO k = kstart3,kend3
1623  DO i = istart3, iend3
1624 
1625  ijk = funijk(i,j,k)
1626  ijmk = funijk(i,j23,k)
1627 
1628  blocked_cell_at(ijmk) = blocked_cell_at(ijk)
1632 
1633  IF(blocked_cell_at(ijmk)) flag(ijmk) = 100
1634 
1635  vol(ijmk) = vol(ijk)
1636  vol_u(ijmk) = vol_u(ijk)
1637  vol_v(ijmk) = vol_v(ijk)
1638  vol_w(ijmk) = vol_w(ijk)
1639 
1640  ayz(ijmk) = ayz(ijk)
1641  ayz_u(ijmk) = ayz_u(ijk)
1642  ayz_v(ijmk) = ayz_v(ijk)
1643  ayz_w(ijmk) = ayz_w(ijk)
1644 
1645  axy(ijmk) = axy(ijk)
1646  axy_u(ijmk) = axy_u(ijk)
1647  axy_v(ijmk) = axy_v(ijk)
1648  axy_w(ijmk) = axy_w(ijk)
1649 
1650  axz(ijmk) = axz(ijk)
1651  axz_u(ijmk) = axz_u(ijk)
1652  axz_v(ijmk) = axz_v(ijk)
1653  axz_w(ijmk) = axz_w(ijk)
1654 
1655  bc_id(ijmk) = bc_id(ijk)
1656  bc_u_id(ijmk) = bc_u_id(ijk)
1657  bc_v_id(ijmk) = bc_v_id(ijk)
1658  bc_w_id(ijmk) = bc_w_id(ijk)
1659 
1660  END DO
1661  END DO
1662  END DO
1663 
1664  ENDIF
1665 
1666  IF(do_k) THEN
1667 
1668 ! TOP BOUNDARY
1669  k = kend1
1670 
1671  IF(k==kmax1) THEN
1672 
1673  DO k23=kend2,kend3
1674  DO j = jstart3,jend3
1675  DO i = istart3, iend3
1676 
1677  ijk = funijk(i,j,k)
1678  ijkp = funijk(i,j,k23)
1679 
1680  blocked_cell_at(ijkp) = blocked_cell_at(ijk)
1684 
1685  IF(blocked_cell_at(ijkp)) flag(ijkp) = 100
1686 
1687  vol(ijkp) = vol(ijk)
1688  vol_u(ijkp) = vol_u(ijk)
1689  vol_v(ijkp) = vol_v(ijk)
1690  vol_w(ijkp) = vol_w(ijk)
1691 
1692  ayz(ijkp) = ayz(ijk)
1693  ayz_u(ijkp) = ayz_u(ijk)
1694  ayz_v(ijkp) = ayz_v(ijk)
1695  ayz_w(ijkp) = ayz_w(ijk)
1696 
1697  axy(ijkp) = axy(ijk)
1698  axy_u(ijkp) = axy_u(ijk)
1699  axy_v(ijkp) = axy_v(ijk)
1700  axy_w(ijkp) = axy_w(ijk)
1701 
1702  axz(ijkp) = axz(ijk)
1703  axz_u(ijkp) = axz_u(ijk)
1704  axz_v(ijkp) = axz_v(ijk)
1705  axz_w(ijkp) = axz_w(ijk)
1706 
1707  bc_id(ijkp) = bc_id(ijk)
1708  bc_u_id(ijkp) = bc_u_id(ijk)
1709  bc_v_id(ijkp) = bc_v_id(ijk)
1710  bc_w_id(ijkp) = bc_w_id(ijk)
1711 
1712  END DO
1713  END DO
1714  END DO
1715 
1716  ENDIF
1717 
1718 ! BOTTOM BOUNDARY
1719  k = kstart1
1720 
1721  IF(k==kmin1) THEN
1722 
1723  DO k23 = kstart3,kstart2
1724  DO j = jstart3,jend3
1725  DO i = istart3, iend3
1726 
1727  ijk = funijk(i,j,k)
1728  ijkm = funijk(i,j,k23)
1729 
1730  blocked_cell_at(ijkm) = blocked_cell_at(ijk)
1734 
1735  IF(blocked_cell_at(ijkm)) flag(ijkm) = 100
1736 
1737  vol(ijkm) = vol(ijk)
1738  vol_u(ijkm) = vol_u(ijk)
1739  vol_v(ijkm) = vol_v(ijk)
1740  vol_w(ijkm) = vol_w(ijk)
1741 
1742  ayz(ijkm) = ayz(ijk)
1743  ayz_u(ijkm) = ayz_u(ijk)
1744  ayz_v(ijkm) = ayz_v(ijk)
1745  ayz_w(ijkm) = ayz_w(ijk)
1746 
1747  axy(ijkm) = axy(ijk)
1748  axy_u(ijkm) = axy_u(ijk)
1749  axy_v(ijkm) = axy_v(ijk)
1750  axy_w(ijkm) = axy_w(ijk)
1751 
1752  axz(ijkm) = axz(ijk)
1753  axz_u(ijkm) = axz_u(ijk)
1754  axz_v(ijkm) = axz_v(ijk)
1755  axz_w(ijkm) = axz_w(ijk)
1756 
1757  bc_id(ijkm) = bc_id(ijk)
1758  bc_u_id(ijkm) = bc_u_id(ijk)
1759  bc_v_id(ijkm) = bc_v_id(ijk)
1760  bc_w_id(ijkm) = bc_w_id(ijk)
1761 
1762  END DO
1763  END DO
1764  END DO
1765 
1766  ENDIF
1767 
1768  ENDIF
1769 
1770  DO ijk = ijkstart3, ijkend3
1771 
1772  IF(blocked_u_cell_at(ijk)) flag_e(ijk)=100
1773  IF(blocked_v_cell_at(ijk)) flag_n(ijk)=100
1774  IF(blocked_w_cell_at(ijk)) flag_t(ijk)=100
1775 
1776  ENDDO
1777 
1778 ! BLOCKED CELLS WERE ASSIGNED THE FLAG 100 DURING PRE_PROCESSING
1779 ! THIS IS INCORRECT FOR FREEE-SLIP AND PARTIAL-SLIP
1780 ! THE FLAG IS OVERWRITTEN HERE TO ACCOUNT FOR NSW,FSW AND PSW BCs
1781 
1782  DO ijk = ijkstart3, ijkend3
1783 
1784  IF(flag(ijk)==100) THEN
1785 
1786  imjk = im_of(ijk)
1787  ijmk = jm_of(ijk)
1788  ijkm = km_of(ijk)
1789 
1790  ipjk = ip_of(ijk)
1791  ijpk = jp_of(ijk)
1792  ijkp = kp_of(ijk)
1793 
1794  IF(cut_cell_at(imjk)) THEN
1795  bcid=bc_id(imjk)
1796  IF(bcid>0) THEN
1797  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1798  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1799  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1800  ENDIF
1801 
1802  ELSEIF(cut_cell_at(ipjk)) THEN
1803  bcid=bc_id(ipjk)
1804  IF(bcid>0) THEN
1805  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1806  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1807  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1808  ENDIF
1809 
1810  ELSEIF(cut_cell_at(ijmk)) THEN
1811  bcid=bc_id(ijmk)
1812  IF(bcid>0) THEN
1813  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1814  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1815  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1816  ENDIF
1817 
1818  ELSEIF(cut_cell_at(ijpk)) THEN
1819  bcid=bc_id(ijpk)
1820  IF(bcid>0) THEN
1821  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1822  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1823  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1824  ENDIF
1825 
1826  ELSEIF(cut_cell_at(ijkm)) THEN
1827  bcid=bc_id(ijkm)
1828  IF(bcid>0) THEN
1829  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1830  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1831  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1832  ENDIF
1833 
1834  ELSEIF(cut_cell_at(ijkp)) THEN
1835  bcid=bc_id(ijkp)
1836  IF(bcid>0) THEN
1837  IF(is_nsw(bc_type_enum(bcid))) flag(ijk) = 100
1838  IF(is_fsw(bc_type_enum(bcid))) flag(ijk) = 101
1839  IF(is_psw(bc_type_enum(bcid))) flag(ijk) = 102
1840  ENDIF
1841 
1842  ENDIF
1843  ENDIF
1844  ENDDO
1845 
1846  call send_recv(flag,2)
1847  RETURN
1848 
1849  END SUBROUTINE set_ghost_cell_flags
1850 
1851 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
1852 ! C
1853 ! Module name: GET_POTENTIAL_CUT_CELLS C
1854 ! Purpose: Set flags for scalar cut cells, based on intersection C
1855 ! of the grid with the quadric(s) C
1856 ! C
1857 ! Author: Jeff Dietiker Date: 21-Feb-08 C
1858 ! Reviewer: Date: C
1859 ! C
1860 ! Revision Number # Date: ##-###-## C
1861 ! Author: # C
1862 ! Purpose: # C
1863 ! C
1864 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
1865  SUBROUTINE get_potential_cut_cells
1867  USE compar, only: ijkstart3, ijkend3, mype, pe_io
1868  USE cutcell
1869  USE functions, only: funijk, bottom_of, south_of, west_of
1870  USE geometry, ONLY: dx, dy, dz, do_k, imin3, imax3, jmin3, jmax3, kmin3, kmax3, flag, axy, axz, ayz, vol, no_k
1871  USE indices, only: i_of, j_of, k_of
1872  USE polygon, ONLY: n_polygon
1873  USE quadric, ONLY: tol_f
1874  USE param, ONLY: dimension_3
1875  USE param1, ONLY: half, zero
1876 
1877  IMPLICIT NONE
1878  INTEGER :: IJK,I,J,K,II,JJ,KK
1879  INTEGER :: I1,I2,J1,J2,K1,K2
1880  INTEGER :: NODE,N_N1,N_N2
1881  LOGICAL :: ALL_NEGATIVE,ALL_POSITIVE,CLIP_FLAG
1882  INTEGER :: Q_ID,BCID
1883 
1884  INTEGER :: IJK_NB,NUMBER_OF_POTENTIAL_CUT_CELLS
1885 
1886  DOUBLE PRECISION :: xc,yc,zc,fc
1887 
1888  LOGICAL, DIMENSION(DIMENSION_3) ::POSITIVE_F_AT
1889 
1890  potential_cut_cell_at=.true.
1891 
1892  RETURN ! This subroutine is currently disabled
1893 
1894  IF(mype == pe_io) THEN
1895  WRITE(*,10)'ESTIMATING POTENTIAL SCALAR CUT CELLS...'
1896  ENDIF
1897 10 FORMAT(1x,a)
1898 
1899 !======================================================================
1900 ! Evaluate f at cell center and store where f>0
1901 !======================================================================
1902 
1903  DO ijk = ijkstart3, ijkend3
1904 
1905  i = i_of(ijk)
1906  j = j_of(ijk)
1907  k = k_of(ijk)
1908 
1909  xc = xg_e(i) - half*dx(i)
1910  yc = yg_n(j) - half*dy(j)
1911 
1912  IF(do_k) THEN
1913  zc = zg_t(k) - half*dz(k)
1914  ELSE
1915  zc = zero
1916  ENDIF
1917 
1918  q_id = 1
1919  CALL eval_f('QUADRIC',xc,yc,zc,q_id,fc,clip_flag)
1920 
1921  CALL eval_f('POLYGON',xc,yc,zc,n_polygon,fc,clip_flag)
1922 
1923  CALL eval_f('USR_DEF',xc,yc,zc,n_usr_def,fc,clip_flag)
1924 
1925  x_node(15) = xc
1926  y_node(15) = yc
1927  z_node(15) = zc
1928  CALL eval_stl_fct_at('SCALAR',ijk,15,fc,clip_flag,bcid)
1929 
1930  IF(fc>tol_f) THEN
1931  positive_f_at(ijk)=.true.
1932  ELSE
1933  positive_f_at(ijk)=.false.
1934  ENDIF
1935 
1936  ENDDO
1937 
1938  DO ijk = ijkstart3, ijkend3
1939 
1940  IF(interior_cell_at(ijk)) THEN
1941 
1942  i = i_of(ijk)
1943  j = j_of(ijk)
1944  k = k_of(ijk)
1945 
1946  i1 = max(i - 2,imin3)
1947  i2 = min(i + 2,imax3)
1948  j1 = max(j - 2,jmin3)
1949  j2 = min(j + 2,jmax3)
1950 
1951  IF(do_k) THEN
1952  k1 = max(k - 2,kmin3)
1953  k2 = min(k + 2,kmax3)
1954  ELSE
1955  k1=k
1956  k2=k
1957  ENDIF
1958 
1959  IF(positive_f_at(ijk)) THEN
1960  all_positive=.true.
1961  DO kk=k1,k2
1962  DO jj=j1,j2
1963  DO ii=i1,i2
1964  ijk_nb = funijk(ii,jj,kk)
1965  IF(.NOT.positive_f_at(ijk_nb)) THEN
1966  all_positive=.false.
1967  ENDIF
1968  ENDDO
1969  ENDDO
1970  ENDDO
1971 
1972  IF(all_positive) THEN
1973  potential_cut_cell_at(ijk)=.false.
1974  flag(ijk) = 100
1975  blocked_cell_at(ijk) = .true. ! Blocked fluid cell
1976  standard_cell_at(ijk) = .false.
1977  axy(ijk) = zero
1978  axz(ijk) = zero
1979  ayz(ijk) = zero
1980  vol(ijk) = zero
1981 
1982  axy(bottom_of(ijk)) = zero
1983  axz(south_of(ijk)) = zero
1984  ayz(west_of(ijk)) = zero
1985  ENDIF
1986 
1987  ELSE
1988  all_negative=.true.
1989  DO kk=k1,k2
1990  DO jj=j1,j2
1991  DO ii=i1,i2
1992  ijk_nb = funijk(ii,jj,kk)
1993  IF(positive_f_at(ijk_nb)) THEN
1994  all_negative=.false.
1995  ENDIF
1996  ENDDO
1997  ENDDO
1998  ENDDO
1999 
2000  IF(all_negative) THEN
2001  potential_cut_cell_at(ijk)=.false.
2002  blocked_cell_at(ijk) = .false.
2003  standard_cell_at(ijk) = .true. ! Regular fluid cell
2004  ENDIF
2005 
2006  ENDIF
2007 
2008  IF((flag(ijk)>=100).AND.(flag(ijk)<=102)) THEN
2009  potential_cut_cell_at(ijk)=.false.
2010  blocked_cell_at(ijk) = .true.
2011  standard_cell_at(ijk) = .false. ! Blocked cell = wall cell
2012  ENDIF
2013 
2014  ENDIF
2015 
2016  END DO
2017 
2018  number_of_potential_cut_cells = 0
2019 
2020  IF(no_k) THEN
2021  n_n1 = 5
2022  n_n2 = 8
2023  ELSE
2024  n_n1 = 1
2025  n_n2 = 8
2026  ENDIF
2027 
2028  DO ijk=ijkstart3,ijkend3
2029  IF(potential_cut_cell_at(ijk)) THEN
2030  number_of_potential_cut_cells = number_of_potential_cut_cells + 1
2031  ELSE
2032  CALL get_cell_node_coordinates(ijk,'SCALAR')
2033 
2034  IF(no_k) THEN
2035  number_of_nodes(ijk) = 4
2036  connectivity(ijk,1) = ijk_of_node(5)
2037  connectivity(ijk,2) = ijk_of_node(6)
2038  connectivity(ijk,3) = ijk_of_node(8)
2039  connectivity(ijk,4) = ijk_of_node(7)
2040  ELSE
2041  number_of_nodes(ijk) = 8
2042  DO node = n_n1,n_n2
2043  connectivity(ijk,node) = ijk_of_node(node)
2044  END DO
2045  ENDIF
2046 
2047  x_u(ijk) = x_node(8)
2048  y_u(ijk) = half * (y_node(6) + y_node(8))
2049  z_u(ijk) = half * (z_node(4) + z_node(8))
2050 
2051  x_v(ijk) = half * (x_node(7) + x_node(8))
2052  y_v(ijk) = y_node(8)
2053  z_v(ijk) = half * (z_node(4) + z_node(8))
2054 
2055  x_w(ijk) = half * (x_node(7) + x_node(8))
2056  y_w(ijk) = half * (y_node(6) + y_node(8))
2057  z_w(ijk) = z_node(8)
2058 
2059  ENDIF
2060  ENDDO
2061 
2062 ! call SEND_RECEIVE_1D_LOGICAL(SNAP,2)
2063  IF(mype == pe_io) THEN
2064  WRITE(*,*)'DONE ESTIMATING POTENTIAL SCALAR CUT CELLS.',number_of_potential_cut_cells,ijkend3
2065  ENDIF
2066 
2067  RETURN
2068  END SUBROUTINE get_potential_cut_cells
integer number_of_new_v_points
Definition: cutcell_mod.f:93
integer jend2
Definition: compar_mod.f:80
double precision, dimension(:,:), allocatable scalar_node_xyz
Definition: cutcell_mod.f:469
double precision, dimension(:), allocatable delx_we
Definition: cutcell_mod.f:151
integer iend3
Definition: compar_mod.f:80
integer, dimension(:,:), allocatable connectivity_u
Definition: cutcell_mod.f:112
subroutine get_potential_cut_cells
logical re_indexing
Definition: cutcell_mod.f:16
double precision, dimension(:), allocatable y_v
Definition: cutcell_mod.f:55
double precision, dimension(:), allocatable vol_w
Definition: geometry_mod.f:242
subroutine set_3d_cut_w_cell_flags
double precision, dimension(:), allocatable dely_vn
Definition: cutcell_mod.f:146
double precision, dimension(:), allocatable y_v_nc
Definition: cutcell_mod.f:176
double precision, dimension(:), allocatable z_u
Definition: cutcell_mod.f:51
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
logical, dimension(:), allocatable potential_cut_cell_at
Definition: cutcell_mod.f:474
logical, dimension(:), allocatable cut_u_cell_at
Definition: cutcell_mod.f:356
logical, dimension(:), allocatable standard_u_cell_at
Definition: cutcell_mod.f:369
double precision, dimension(:), allocatable x_new_v_point
Definition: cutcell_mod.f:94
integer jstart3
Definition: compar_mod.f:80
integer ijkend3
Definition: compar_mod.f:80
integer kend1
Definition: compar_mod.f:80
subroutine eval_stl_fct_at(TYPE_OF_CELL, IJK, NODE, f_stl, CLIP_FLAG, B
double precision, dimension(:), allocatable delx_uw
Definition: cutcell_mod.f:138
double precision, dimension(:), allocatable yg_n
Definition: cutcell_mod.f:45
double precision, dimension(:), allocatable xn_int
Definition: cutcell_mod.f:333
integer istart1
Definition: compar_mod.f:80
subroutine set_3d_cut_u_cell_flags
integer iend1
Definition: compar_mod.f:80
integer imax3
Definition: geometry_mod.f:91
double precision, parameter one
Definition: param1_mod.f:29
double precision, dimension(:), allocatable dely_ws
Definition: cutcell_mod.f:154
integer dimension_3
Definition: param_mod.f:11
double precision, dimension(:), allocatable xn_w_int
Definition: cutcell_mod.f:336
double precision, dimension(:), allocatable xg_e
Definition: cutcell_mod.f:44
double precision, dimension(:), allocatable ye_int
Definition: cutcell_mod.f:338
double precision, dimension(:), allocatable x_v_nc
Definition: cutcell_mod.f:175
double precision, dimension(:), allocatable z_v_nc
Definition: cutcell_mod.f:177
double precision, dimension(:), allocatable zt_u_int
Definition: cutcell_mod.f:344
double precision, dimension(:), allocatable axy
Definition: geometry_mod.f:210
subroutine cad_intersect(TYPE_OF_CELL, Xint, Yint, Zint)
double precision, dimension(:), allocatable y_new_u_point
Definition: cutcell_mod.f:89
double precision, dimension(:), allocatable x_new_w_point
Definition: cutcell_mod.f:100
double precision, dimension(:), allocatable z_u_nc
Definition: cutcell_mod.f:165
double precision, dimension(0:15) z_node
Definition: cutcell_mod.f:76
integer istart2
Definition: compar_mod.f:80
integer, dimension(:), allocatable number_of_w_nodes
Definition: cutcell_mod.f:108
double precision, dimension(:), allocatable x_v_ec
Definition: cutcell_mod.f:171
double precision, dimension(:), allocatable ye_w_int
Definition: cutcell_mod.f:341
integer, dimension(:), allocatable small_cell_flag
Definition: cutcell_mod.f:362
double precision, dimension(:), allocatable x_u
Definition: cutcell_mod.f:49
double precision, dimension(:), allocatable xn_v_int
Definition: cutcell_mod.f:335
double precision, dimension(:), allocatable y_new_v_point
Definition: cutcell_mod.f:95
subroutine set_geometry1
Definition: set_geometry1.f:19
subroutine send_receive_1d_logical(L1D, NLAYERS)
subroutine get_connectivity(IJK, TYPE_OF_CELL, N_NEW_POINTS, N_NODES, CONNECT, X_NP, Y_NP, Z_NP, TOTAL_NUMBER_OF_INTERSECTIONS, X_intersect, Y_intersect, Z_intersect)
integer, dimension(10) cg_safe_mode
Definition: cutcell_mod.f:415
double precision, dimension(0:15) y_node
Definition: cutcell_mod.f:75
integer iend2
Definition: compar_mod.f:80
logical function is_psw(boundary_condition)
Definition: bc_mod.f:448
integer number_of_new_u_points
Definition: cutcell_mod.f:87
double precision, dimension(:), allocatable x_w_ec
Definition: cutcell_mod.f:183
subroutine set_3d_cut_cell_treatment_flags
logical, dimension(:), allocatable small_cell_at
Definition: cutcell_mod.f:360
logical print_warnings
Definition: cutcell_mod.f:416
logical, dimension(:), allocatable standard_w_cell_at
Definition: cutcell_mod.f:371
double precision, dimension(:), allocatable delx_ww
Definition: cutcell_mod.f:152
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
double precision, dimension(:), allocatable delx_ue
Definition: cutcell_mod.f:137
double precision, dimension(:), allocatable x_v_tc
Definition: cutcell_mod.f:179
integer kstart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable y_w_ec
Definition: cutcell_mod.f:184
double precision, dimension(:), allocatable z_u_ec
Definition: cutcell_mod.f:161
Definition: vtk_mod.f:1
integer, dimension(dimension_bc) bc_type_enum
Definition: bc_mod.f:146
double precision, dimension(:), allocatable x_new_u_point
Definition: cutcell_mod.f:88
double precision, dimension(:), allocatable ayz_u
Definition: geometry_mod.f:218
double precision, dimension(:), allocatable z_w_nc
Definition: cutcell_mod.f:189
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(:), allocatable delz_wt
Definition: cutcell_mod.f:155
double precision, dimension(:), allocatable y_w
Definition: cutcell_mod.f:60
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
subroutine set_3d_cut_cell_flags
double precision, dimension(:), allocatable ayz
Definition: geometry_mod.f:206
integer number_of_new_points
Definition: cutcell_mod.f:81
integer kend2
Definition: compar_mod.f:80
double precision, dimension(:), allocatable z_v
Definition: cutcell_mod.f:56
logical, dimension(:), allocatable cut_u_treatment_at
Definition: cutcell_mod.f:350
integer imin3
Definition: geometry_mod.f:90
double precision, dimension(:), allocatable delz_vt
Definition: cutcell_mod.f:148
subroutine set_3d_cut_v_cell_flags
integer kstart2
Definition: compar_mod.f:80
double precision, dimension(:), allocatable zt_v_int
Definition: cutcell_mod.f:345
integer kstart1
Definition: compar_mod.f:80
integer kend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ayz_v
Definition: geometry_mod.f:227
logical function is_nsw(boundary_condition)
Definition: bc_mod.f:434
double precision, dimension(:), allocatable axz_u
Definition: geometry_mod.f:220
double precision, dimension(:), allocatable dely_vs
Definition: cutcell_mod.f:147
double precision, dimension(:), allocatable x_w_nc
Definition: cutcell_mod.f:187
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
double precision, dimension(:), allocatable dely_wn
Definition: cutcell_mod.f:153
integer pe_io
Definition: compar_mod.f:30
logical, dimension(:), allocatable blocked_w_cell_at
Definition: cutcell_mod.f:366
double precision, dimension(:), allocatable partition
Definition: cutcell_mod.f:117
integer kmax1
Definition: geometry_mod.f:58
double precision, dimension(:), allocatable z_new_v_point
Definition: cutcell_mod.f:96
integer, dimension(:), allocatable bc_u_id
Definition: cutcell_mod.f:434
double precision, dimension(:), allocatable x_w
Definition: cutcell_mod.f:59
double precision, dimension(:), allocatable x_u_tc
Definition: cutcell_mod.f:167
logical use_stl
Definition: cutcell_mod.f:428
double precision, dimension(:), allocatable z_new_w_point
Definition: cutcell_mod.f:102
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
double precision, dimension(:), allocatable dely_us
Definition: cutcell_mod.f:140
double precision, dimension(:), allocatable y_u_tc
Definition: cutcell_mod.f:168
double precision, dimension(:), allocatable y_v_ec
Definition: cutcell_mod.f:172
integer imax1
Definition: geometry_mod.f:54
integer jend3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable z_v_ec
Definition: cutcell_mod.f:173
double precision, dimension(:), allocatable axy_v
Definition: geometry_mod.f:231
double precision, dimension(:), allocatable x_w_tc
Definition: cutcell_mod.f:191
integer, dimension(:), allocatable bc_w_id
Definition: cutcell_mod.f:436
integer jstart2
Definition: compar_mod.f:80
subroutine get_cell_node_coordinates(IJK, TYPE_OF_CELL)
double precision, dimension(:), allocatable delz_wb
Definition: cutcell_mod.f:156
double precision, dimension(:), allocatable z_w_tc
Definition: cutcell_mod.f:193
double precision, dimension(:), allocatable y_w_nc
Definition: cutcell_mod.f:188
logical function is_fsw(boundary_condition)
Definition: bc_mod.f:441
integer jmax3
Definition: geometry_mod.f:91
double precision, dimension(:), allocatable zt_w_int
Definition: cutcell_mod.f:346
logical, dimension(:), allocatable blocked_u_cell_at
Definition: cutcell_mod.f:364
double precision, dimension(:), allocatable ovol_around_node
Definition: cutcell_mod.f:471
integer, dimension(:), allocatable number_of_u_nodes
Definition: cutcell_mod.f:106
double precision tol_f
Definition: quadric_mod.f:76
double precision, dimension(:), allocatable zt_int
Definition: cutcell_mod.f:343
logical, dimension(:), allocatable cut_w_cell_at
Definition: cutcell_mod.f:358
double precision, dimension(:), allocatable x_u_ec
Definition: cutcell_mod.f:159
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
logical do_j
Definition: geometry_mod.f:26
logical, dimension(:), allocatable cut_treatment_at
Definition: cutcell_mod.f:349
integer n_usr_def
Definition: cutcell_mod.f:424
double precision, dimension(3) tol_snap
Definition: cutcell_mod.f:374
double precision, dimension(:), allocatable z_new_point
Definition: cutcell_mod.f:84
double precision, dimension(:), allocatable y_new_point
Definition: cutcell_mod.f:83
logical, dimension(:), allocatable intersect_z
Definition: cutcell_mod.f:66
logical global_var_allocated
Definition: vtk_mod.f:69
double precision, dimension(:), allocatable x_v
Definition: cutcell_mod.f:54
double precision, dimension(:), allocatable x_new_point
Definition: cutcell_mod.f:82
integer, dimension(:), allocatable number_of_nodes
Definition: cutcell_mod.f:105
double precision, parameter half
Definition: param1_mod.f:28
integer jmax1
Definition: geometry_mod.f:56
double precision, dimension(:), allocatable axz
Definition: geometry_mod.f:208
double precision, dimension(:), allocatable ayz_w
Definition: geometry_mod.f:236
integer, dimension(:), allocatable bc_v_id
Definition: cutcell_mod.f:435
Definition: param_mod.f:2
integer jmin3
Definition: geometry_mod.f:90
logical no_k
Definition: geometry_mod.f:28
logical, dimension(:), allocatable cut_w_treatment_at
Definition: cutcell_mod.f:352
logical, dimension(:), allocatable cut_v_cell_at
Definition: cutcell_mod.f:357
double precision, dimension(:), allocatable delz_ub
Definition: cutcell_mod.f:142
logical, dimension(:), allocatable interior_cell_at
Definition: cutcell_mod.f:40
double precision, dimension(:), allocatable delx_vw
Definition: cutcell_mod.f:145
integer jmin1
Definition: geometry_mod.f:42
double precision, dimension(:), allocatable xn_u_int
Definition: cutcell_mod.f:334
integer, dimension(:), allocatable flag_e
Definition: geometry_mod.f:103
integer kmax3
Definition: geometry_mod.f:91
logical do_k
Definition: geometry_mod.f:30
logical, dimension(:), allocatable cut_cell_at
Definition: cutcell_mod.f:355
integer mype
Definition: compar_mod.f:24
double precision, dimension(:), allocatable axz_w
Definition: geometry_mod.f:238
subroutine clean_intersect(IJK, TYPE_OF_CELL, Xi, Yi, Zi)
integer dimension_max_cut_cell
Definition: cutcell_mod.f:25
logical, dimension(:), allocatable cut_v_treatment_at
Definition: cutcell_mod.f:351
integer ijkstart3
Definition: compar_mod.f:80
integer, dimension(:,:), allocatable connectivity_w
Definition: cutcell_mod.f:114
logical use_msh
Definition: cutcell_mod.f:430
integer number_of_small_cells
Definition: cutcell_mod.f:399
subroutine set_ghost_cell_flags
double precision, dimension(:), allocatable y_new_w_point
Definition: cutcell_mod.f:101
double precision, dimension(:), allocatable axy_w
Definition: geometry_mod.f:240
integer kmin3
Definition: geometry_mod.f:90
subroutine get_cut_cell_volume_and_areas(IJK, TYPE_OF_CELL, N_NODES, CONNECT, X_NP, Y_NP, Z_NP)
integer n_polygon
Definition: polygon_mod.f:6
integer, dimension(:), allocatable bc_id
Definition: cutcell_mod.f:433
double precision, dimension(:), allocatable y_w_tc
Definition: cutcell_mod.f:192
subroutine write_progress_bar(I, I_MAX, JUSTIFICATION)
double precision, dimension(:), allocatable z_w_ec
Definition: cutcell_mod.f:185
double precision, dimension(:), allocatable y_u_ec
Definition: cutcell_mod.f:160
integer, dimension(:,:), allocatable connectivity_v
Definition: cutcell_mod.f:113
double precision, dimension(:), allocatable vol_u
Definition: geometry_mod.f:224
double precision, dimension(:), allocatable y_u_nc
Definition: cutcell_mod.f:164
logical, dimension(:), allocatable standard_cell_at
Definition: cutcell_mod.f:368
logical, dimension(:), allocatable intersect_x
Definition: cutcell_mod.f:64
logical, dimension(:), allocatable standard_v_cell_at
Definition: cutcell_mod.f:370
subroutine get_del_h_des(IJK, TYPE_OF_CELL, X0, Y0, Z0, Del_H, Nx, Ny, Nz, allow_neg_dist)
Definition: get_delh.f:177
logical do_i
Definition: geometry_mod.f:22
logical, dimension(:), allocatable scalar_node_atwall
Definition: cutcell_mod.f:467
subroutine intersect(IJK, TYPE_OF_CELL, Xi, Yi, Zi)
double precision, dimension(:), allocatable delz_vb
Definition: cutcell_mod.f:149
logical, dimension(:), allocatable blocked_v_cell_at
Definition: cutcell_mod.f:365
logical, dimension(:), allocatable intersect_y
Definition: cutcell_mod.f:65
logical grid_info_printed_on_screen
Definition: vtk_mod.f:71
integer, dimension(:), allocatable flag
Definition: geometry_mod.f:99
double precision, dimension(:), allocatable z_v_tc
Definition: cutcell_mod.f:181
subroutine eval_f(METHOD, x1, x2, x3, Q, f, CLIP_FLAG)
double precision, dimension(:), allocatable z_w
Definition: cutcell_mod.f:61
double precision, dimension(:), allocatable delz_ut
Definition: cutcell_mod.f:141
integer, dimension(:), allocatable number_of_v_nodes
Definition: cutcell_mod.f:107
logical, dimension(:), allocatable blocked_cell_at
Definition: cutcell_mod.f:361
integer imin1
Definition: geometry_mod.f:40
double precision, dimension(:), allocatable dely_un
Definition: cutcell_mod.f:139
double precision, dimension(:), allocatable vol
Definition: geometry_mod.f:212
integer istart3
Definition: compar_mod.f:80
double precision, dimension(:), allocatable zg_t
Definition: cutcell_mod.f:46
double precision, dimension(:), allocatable axy_u
Definition: geometry_mod.f:222
integer, dimension(:), allocatable flag_n
Definition: geometry_mod.f:105
double precision, dimension(0:15) f_node
Definition: cutcell_mod.f:77
double precision tol_merge
Definition: cutcell_mod.f:380
double precision, dimension(:), allocatable ye_u_int
Definition: cutcell_mod.f:339
integer, dimension(0:15) ijk_of_node
Definition: cutcell_mod.f:78
double precision, dimension(:), allocatable z_new_u_point
Definition: cutcell_mod.f:90
integer kmin1
Definition: geometry_mod.f:44
double precision, dimension(:), allocatable axz_v
Definition: geometry_mod.f:229
integer number_of_new_w_points
Definition: cutcell_mod.f:99
double precision, dimension(:), allocatable y_u
Definition: cutcell_mod.f:50
double precision, parameter zero
Definition: param1_mod.f:27
double precision, dimension(0:15) x_node
Definition: cutcell_mod.f:74
integer jend1
Definition: compar_mod.f:80
integer jstart1
Definition: compar_mod.f:80
double precision, dimension(:), allocatable ye_v_int
Definition: cutcell_mod.f:340
Definition: bc_mod.f:23
integer, dimension(:,:), allocatable connectivity
Definition: cutcell_mod.f:111
integer, dimension(:), allocatable flag_t
Definition: geometry_mod.f:107
double precision, dimension(:), allocatable delx_ve
Definition: cutcell_mod.f:144
double precision, dimension(:), allocatable vol_v
Definition: geometry_mod.f:233
double precision, dimension(:), allocatable z_u_tc
Definition: cutcell_mod.f:169
logical, dimension(:), allocatable snap
Definition: cutcell_mod.f:413
double precision, dimension(:), allocatable x_u_nc
Definition: cutcell_mod.f:163
double precision, dimension(:), allocatable y_v_tc
Definition: cutcell_mod.f:180