17 USE compar, ONLY:
mype,
pe_io,
ijkstart3,
ijkend3,
istart1,
iend1,
jstart1,
jend1,
kstart1,
kend1 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 32 INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
33 INTEGER :: NODE,N_N1,N_N2,Q_ID
34 INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
38 INTEGER,
DIMENSION(DIMENSION_3,15) :: OLD_CONNECTIVITY
39 DOUBLE PRECISION,
DIMENSION(:),
allocatable :: X_OLD_POINT,Y_OLD_POINT,Z_OLD_POINT
41 INTEGER,
DIMENSION(6) :: NB
43 INTEGER :: IJK_NB,NODE_NB,NN,N_NB,NC
45 DOUBLE PRECISION :: X1,Y1,Z1,X2,Y2,Z2,D,TOT_VOL_NODE,TOT_VOL_CELLS
47 DOUBLE PRECISION,
DIMENSION(:,:),
allocatable :: SCALAR_NODE_XYZ_TEMP
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
59 WRITE(*,10)
'INTERSECTING GEOMETRY WITH SCALAR CELLS...' 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)
204 min_intersections = 2
205 max_intersections = 2
210 min_intersections = 3
211 max_intersections = 6
219 IF(total_number_of_intersections < min_intersections )
THEN 260 IF((
flag(ijk)>=100).AND.(
flag(ijk)<=102))
THEN 294 ELSE IF(total_number_of_intersections > max_intersections )
THEN 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.' 373 print*,
'===========================================================' 374 print*,
'IJK, I,J=',ijk,
i_of(ijk),
j_of(ijk)
433 IF(old_connectivity(ijk,node)>
ijkend3)
THEN 441 IF(old_connectivity(ijk_nb,node_nb)>
ijkend3)
THEN 448 d = (x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2
454 nc = min(old_connectivity(ijk,node),old_connectivity(ijk_nb,node_nb))
507 IF(.not. is_on_mype_wobnd(i,j,k)) cycle
537 ijk2 = funijk(ii, jj, kk)
543 IF(.not.fluid_at(ijk))
THEN 552 & dist, norm1, norm2, norm3, .true.)
553 IF(dist.GE.
zero)
THEN 574 print*,
'===========================================================' 575 print*,
'IJK, I,J=',ijk,
i_of(ijk),
j_of(ijk)
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(*,*)
'===========================================================' 630 deallocate(x_old_point)
631 deallocate(y_old_point)
632 deallocate(z_old_point)
633 deallocate(scalar_node_xyz_temp)
664 INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
665 INTEGER :: NODE,N_N1,N_N2,Q_ID
666 INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
671 WRITE(*,10)
'INTERSECTING GEOMETRY WITH U-MOMENTUM CELLS...' 740 min_intersections = 2
741 max_intersections = 2
746 min_intersections = 3
747 max_intersections = 6
756 IF(total_number_of_intersections < min_intersections )
THEN 767 IF(total_number_of_intersections==-1)
f_node(0) = -
one 808 ELSE IF(total_number_of_intersections > max_intersections)
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.' 895 INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
896 INTEGER :: NODE,N_N1,N_N2,Q_ID
897 INTEGER :: MIN_INTERSECTIONS,MAX_INTERSECTIONS
902 WRITE(*,*)
'INTERSECTING GEOMETRY WITH V-MOMENTUM CELLS...' 968 min_intersections = 2
969 max_intersections = 2
974 min_intersections = 3
975 max_intersections = 6
985 IF(total_number_of_intersections < min_intersections )
THEN 996 IF(total_number_of_intersections==-1)
f_node(0) = -
one 1037 ELSE IF(total_number_of_intersections > max_intersections )
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.' 1123 INTEGER :: TOTAL_NUMBER_OF_INTERSECTIONS
1124 INTEGER :: NODE,Q_ID
1125 LOGICAL :: CLIP_FLAG
1129 WRITE(*,10)
'INTERSECTING GEOMETRY WITH W-MOMENTUM CELLS...' 1200 IF(total_number_of_intersections < 3 )
THEN 1211 IF(total_number_of_intersections==-1)
f_node(0) = -
one 1244 ELSE IF(total_number_of_intersections > 6 )
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.' 1326 INTEGER :: IJK,I,J,K,IM,IP,JM,JP,KM,KP
1327 INTEGER :: IMJK,IPJK,IJMK,IJPK,IJKM,IJKP
1330 WRITE(*,*)
'SETTING CUT CELL TREATMENT FLAGS...' 1365 imjk = funijk(im,j,k)
1366 ijmk = funijk(i,jm,k)
1367 ijkm = funijk(i,j,km)
1369 ipjk = funijk(ip,j,k)
1370 ijpk = funijk(i,jp,k)
1371 ijkp = funijk(i,j,kp)
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
1457 USE geometry, ONLY:
imax1,
imin1,
jmax1,
jmin1,
kmax1,
kmin1,
vol,
vol_u,
vol_v,
vol_w,
axy,
axz,
ayz,
ayz_u,
ayz_v,
ayz_w,
axy_u,
axy_v,
axy_w,
axz_u,
axz_v,
axz_w,
flag,
do_k,
flag_e,
flag_n,
flag_t 1463 INTEGER :: IJK,I,J,K,I23,J23,K23
1465 INTEGER :: IPJK,IMJK,IJPK,IJMK,IJKP,IJKM
1472 DO i23 = iend2,iend3
1473 DO k = kstart3,
kend3 1474 DO j = jstart3,
jend3 1477 ipjk = funijk(i23,j,k)
1523 DO k = kstart3,
kend3 1524 DO j = jstart3,
jend3 1527 imjk = funijk(i23,j,k)
1573 DO k = kstart3,
kend3 1577 ijpk = funijk(i,j23,k)
1621 DO j23 = jstart3,jstart2
1622 DO k = kstart3,
kend3 1626 ijmk = funijk(i,j23,k)
1674 DO j = jstart3,
jend3 1678 ijkp = funijk(i,j,k23)
1723 DO k23 = kstart3,kstart2
1724 DO j = jstart3,
jend3 1728 ijkm = funijk(i,j,k23)
1770 DO ijk = ijkstart3, ijkend3
1782 DO ijk = ijkstart3, ijkend3
1784 IF(
flag(ijk)==100)
THEN 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 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
1884 INTEGER :: IJK_NB,NUMBER_OF_POTENTIAL_CUT_CELLS
1886 DOUBLE PRECISION :: xc,yc,zc,fc
1888 LOGICAL,
DIMENSION(DIMENSION_3) ::POSITIVE_F_AT
1895 WRITE(*,10)
'ESTIMATING POTENTIAL SCALAR CUT CELLS...' 1919 CALL eval_f(
'QUADRIC',xc,yc,zc,q_id,fc,clip_flag)
1921 CALL eval_f(
'POLYGON',xc,yc,zc,
n_polygon,fc,clip_flag)
1923 CALL eval_f(
'USR_DEF',xc,yc,zc,
n_usr_def,fc,clip_flag)
1931 positive_f_at(ijk)=.true.
1933 positive_f_at(ijk)=.false.
1946 i1 = max(i - 2,
imin3)
1947 i2 = min(i + 2,
imax3)
1948 j1 = max(j - 2,
jmin3)
1949 j2 = min(j + 2,
jmax3)
1952 k1 = max(k - 2,
kmin3)
1953 k2 = min(k + 2,
kmax3)
1959 IF(positive_f_at(ijk))
THEN 1964 ijk_nb = funijk(ii,jj,kk)
1965 IF(.NOT.positive_f_at(ijk_nb))
THEN 1966 all_positive=.false.
1972 IF(all_positive)
THEN 1992 ijk_nb = funijk(ii,jj,kk)
1993 IF(positive_f_at(ijk_nb))
THEN 1994 all_negative=.false.
2000 IF(all_negative)
THEN 2008 IF((
flag(ijk)>=100).AND.(
flag(ijk)<=102))
THEN 2018 number_of_potential_cut_cells = 0
2030 number_of_potential_cut_cells = number_of_potential_cut_cells + 1
2064 WRITE(*,*)
'DONE ESTIMATING POTENTIAL SCALAR CUT CELLS.',number_of_potential_cut_cells,
ijkend3 integer number_of_new_v_points
double precision, dimension(:,:), allocatable scalar_node_xyz
double precision, dimension(:), allocatable delx_we
integer, dimension(:,:), allocatable connectivity_u
subroutine get_potential_cut_cells
double precision, dimension(:), allocatable y_v
double precision, dimension(:), allocatable vol_w
subroutine set_3d_cut_w_cell_flags
double precision, dimension(:), allocatable dely_vn
double precision, dimension(:), allocatable y_v_nc
double precision, dimension(:), allocatable z_u
integer, dimension(:), allocatable i_of
logical, dimension(:), allocatable potential_cut_cell_at
logical, dimension(:), allocatable cut_u_cell_at
logical, dimension(:), allocatable standard_u_cell_at
double precision, dimension(:), allocatable x_new_v_point
subroutine eval_stl_fct_at(TYPE_OF_CELL, IJK, NODE, f_stl, CLIP_FLAG, B
double precision, dimension(:), allocatable delx_uw
double precision, dimension(:), allocatable yg_n
double precision, dimension(:), allocatable xn_int
subroutine set_3d_cut_u_cell_flags
double precision, parameter one
double precision, dimension(:), allocatable dely_ws
double precision, dimension(:), allocatable xn_w_int
double precision, dimension(:), allocatable xg_e
double precision, dimension(:), allocatable ye_int
double precision, dimension(:), allocatable x_v_nc
double precision, dimension(:), allocatable z_v_nc
double precision, dimension(:), allocatable zt_u_int
double precision, dimension(:), allocatable axy
subroutine cad_intersect(TYPE_OF_CELL, Xint, Yint, Zint)
double precision, dimension(:), allocatable y_new_u_point
double precision, dimension(:), allocatable x_new_w_point
double precision, dimension(:), allocatable z_u_nc
double precision, dimension(0:15) z_node
integer, dimension(:), allocatable number_of_w_nodes
double precision, dimension(:), allocatable x_v_ec
double precision, dimension(:), allocatable ye_w_int
integer, dimension(:), allocatable small_cell_flag
double precision, dimension(:), allocatable x_u
double precision, dimension(:), allocatable xn_v_int
double precision, dimension(:), allocatable y_new_v_point
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
double precision, dimension(0:15) y_node
logical function is_psw(boundary_condition)
integer number_of_new_u_points
double precision, dimension(:), allocatable x_w_ec
subroutine set_3d_cut_cell_treatment_flags
logical, dimension(:), allocatable small_cell_at
logical, dimension(:), allocatable standard_w_cell_at
double precision, dimension(:), allocatable delx_ww
double precision, dimension(0:dim_j) dy
double precision, dimension(:), allocatable delx_ue
double precision, dimension(:), allocatable x_v_tc
double precision, dimension(:), allocatable y_w_ec
double precision, dimension(:), allocatable z_u_ec
integer, dimension(dimension_bc) bc_type_enum
double precision, dimension(:), allocatable x_new_u_point
double precision, dimension(:), allocatable ayz_u
double precision, dimension(:), allocatable z_w_nc
double precision, parameter undefined
double precision, dimension(:), allocatable delz_wt
double precision, dimension(:), allocatable y_w
double precision, dimension(0:dim_k) dz
subroutine set_3d_cut_cell_flags
double precision, dimension(:), allocatable ayz
integer number_of_new_points
double precision, dimension(:), allocatable z_v
logical, dimension(:), allocatable cut_u_treatment_at
double precision, dimension(:), allocatable delz_vt
subroutine set_3d_cut_v_cell_flags
double precision, dimension(:), allocatable zt_v_int
double precision, dimension(:), allocatable ayz_v
logical function is_nsw(boundary_condition)
double precision, dimension(:), allocatable axz_u
double precision, dimension(:), allocatable dely_vs
double precision, dimension(:), allocatable x_w_nc
subroutine clean_intersect_scalar
integer, dimension(:), allocatable k_of
double precision, dimension(:), allocatable dely_wn
logical, dimension(:), allocatable blocked_w_cell_at
double precision, dimension(:), allocatable partition
double precision, dimension(:), allocatable z_new_v_point
integer, dimension(:), allocatable bc_u_id
double precision, dimension(:), allocatable x_w
double precision, dimension(:), allocatable x_u_tc
double precision, dimension(:), allocatable z_new_w_point
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable dely_us
double precision, dimension(:), allocatable y_u_tc
double precision, dimension(:), allocatable y_v_ec
double precision, dimension(:), allocatable z_v_ec
double precision, dimension(:), allocatable axy_v
double precision, dimension(:), allocatable x_w_tc
integer, dimension(:), allocatable bc_w_id
subroutine get_cell_node_coordinates(IJK, TYPE_OF_CELL)
double precision, dimension(:), allocatable delz_wb
double precision, dimension(:), allocatable z_w_tc
double precision, dimension(:), allocatable y_w_nc
logical function is_fsw(boundary_condition)
double precision, dimension(:), allocatable zt_w_int
logical, dimension(:), allocatable blocked_u_cell_at
double precision, dimension(:), allocatable ovol_around_node
integer, dimension(:), allocatable number_of_u_nodes
double precision, dimension(:), allocatable zt_int
logical, dimension(:), allocatable cut_w_cell_at
double precision, dimension(:), allocatable x_u_ec
double precision, dimension(0:dim_i) dx
logical, dimension(:), allocatable cut_treatment_at
double precision, dimension(3) tol_snap
double precision, dimension(:), allocatable z_new_point
double precision, dimension(:), allocatable y_new_point
logical, dimension(:), allocatable intersect_z
logical global_var_allocated
double precision, dimension(:), allocatable x_v
double precision, dimension(:), allocatable x_new_point
integer, dimension(:), allocatable number_of_nodes
double precision, parameter half
double precision, dimension(:), allocatable axz
double precision, dimension(:), allocatable ayz_w
integer, dimension(:), allocatable bc_v_id
logical, dimension(:), allocatable cut_w_treatment_at
logical, dimension(:), allocatable cut_v_cell_at
double precision, dimension(:), allocatable delz_ub
logical, dimension(:), allocatable interior_cell_at
double precision, dimension(:), allocatable delx_vw
double precision, dimension(:), allocatable xn_u_int
integer, dimension(:), allocatable flag_e
logical, dimension(:), allocatable cut_cell_at
double precision, dimension(:), allocatable axz_w
subroutine clean_intersect(IJK, TYPE_OF_CELL, Xi, Yi, Zi)
integer dimension_max_cut_cell
logical, dimension(:), allocatable cut_v_treatment_at
integer, dimension(:,:), allocatable connectivity_w
integer number_of_small_cells
subroutine set_ghost_cell_flags
double precision, dimension(:), allocatable y_new_w_point
double precision, dimension(:), allocatable axy_w
subroutine get_cut_cell_volume_and_areas(IJK, TYPE_OF_CELL, N_NODES, CONNECT, X_NP, Y_NP, Z_NP)
integer, dimension(:), allocatable bc_id
double precision, dimension(:), allocatable y_w_tc
subroutine write_progress_bar(I, I_MAX, JUSTIFICATION)
double precision, dimension(:), allocatable z_w_ec
double precision, dimension(:), allocatable y_u_ec
integer, dimension(:,:), allocatable connectivity_v
double precision, dimension(:), allocatable vol_u
double precision, dimension(:), allocatable y_u_nc
logical, dimension(:), allocatable standard_cell_at
logical, dimension(:), allocatable intersect_x
logical, dimension(:), allocatable standard_v_cell_at
subroutine get_del_h_des(IJK, TYPE_OF_CELL, X0, Y0, Z0, Del_H, Nx, Ny, Nz, allow_neg_dist)
logical, dimension(:), allocatable scalar_node_atwall
subroutine intersect(IJK, TYPE_OF_CELL, Xi, Yi, Zi)
double precision, dimension(:), allocatable delz_vb
logical, dimension(:), allocatable blocked_v_cell_at
logical, dimension(:), allocatable intersect_y
logical grid_info_printed_on_screen
integer, dimension(:), allocatable flag
double precision, dimension(:), allocatable z_v_tc
subroutine eval_f(METHOD, x1, x2, x3, Q, f, CLIP_FLAG)
double precision, dimension(:), allocatable z_w
double precision, dimension(:), allocatable delz_ut
integer, dimension(:), allocatable number_of_v_nodes
logical, dimension(:), allocatable blocked_cell_at
double precision, dimension(:), allocatable dely_un
double precision, dimension(:), allocatable vol
double precision, dimension(:), allocatable zg_t
double precision, dimension(:), allocatable axy_u
integer, dimension(:), allocatable flag_n
double precision, dimension(0:15) f_node
double precision tol_merge
double precision, dimension(:), allocatable ye_u_int
integer, dimension(0:15) ijk_of_node
double precision, dimension(:), allocatable z_new_u_point
double precision, dimension(:), allocatable axz_v
integer number_of_new_w_points
double precision, dimension(:), allocatable y_u
double precision, parameter zero
double precision, dimension(0:15) x_node
double precision, dimension(:), allocatable ye_v_int
integer, dimension(:,:), allocatable connectivity
integer, dimension(:), allocatable flag_t
double precision, dimension(:), allocatable delx_ve
double precision, dimension(:), allocatable vol_v
double precision, dimension(:), allocatable z_u_tc
logical, dimension(:), allocatable snap
double precision, dimension(:), allocatable x_u_nc
double precision, dimension(:), allocatable y_v_tc