MFIX  2016-1
set_increments3.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Subroutine: SET_INCREMENTS3 !
4 ! Author: M. Syamlal, W. Rogers Date: 10-DEC-91 !
5 ! !
6 ! Purpose: The purpose of this module is to create increments to be !
7 ! stored in the array STORE_INCREMENT which will be added !
8 ! to cell index ijk to find the effective indices of its !
9 ! neighbors. These increments are found using the 'class' !
10 ! of cell ijk. The class is determined based on the !
11 ! neighboring cell type, i.e. wall or fluid. !
12 ! !
13 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
14  SUBROUTINE set_increments3
15 
16  USE param
17  USE param1
18  USE indices
19  USE geometry
20  USE compar
21  USE physprop
22  USE fldvar
23  USE funits
24 
25 ! Module procedures
26 !---------------------------------------------------------------------//
27  use mpi_utility, only: global_all_sum
28  use error_manager
29  use function3
30  use functions
31 
32  IMPLICIT NONE
33 
34 ! Local Variables:
35 !---------------------------------------------------------------------//
36 ! Indices
37  INTEGER :: I, J, K, IJK
38  INTEGER :: IMJK, IPJK, IJKW, IJKE ! I+, I-, east/west
39  INTEGER :: IJMK, IJPK, IJKS, IJKN ! J+, J-, north/south
40  INTEGER :: IJKM, IJKP, IJKB, IJKT ! K+, K-, top/bottom
41 ! DO-loop index, ranges from 1 to ICLASS
42  INTEGER :: IC
43 ! Index denoting cell class
44  INTEGER :: ICLASS
45 ! Array of sum of increments to make the class determination faster.
46  INTEGER :: DENOTE_CLASS(max_class)
47 ! Flag for using the 'real' I/J/K value (not cyclic.)
48  LOGICAL :: SHIFT
49 !......................................................................!
50 
51 
52 ! Initialize the error manager.
53  CALL init_err_msg("SET_INCREMENTS3")
54 
55 ! Initialize the default values to Undefined_I
56 
57  ip1_3(:) = undefined_i
58  im1_3(:) = undefined_i
59  jp1_3(:) = undefined_i
60  jm1_3(:) = undefined_i
61  kp1_3(:) = undefined_i
62  km1_3(:) = undefined_i
63 
64  DO i = istart4, iend4
65 
66  shift = .NOT.(i==imin4 .OR. i==imin3 .OR. i==imin2 .OR. &
67  i==imax4 .OR. i==imax3 .OR. i==imax2)
68 
69  IF(cyclic_x .AND. nodesi.EQ.1 .AND. do_i .AND. shift) THEN
70  ip1_3(i) = imap_c(imap_c(i)+1)
71  im1_3(i) = imap_c(imap_c(i)-1)
72  ELSE
73  im1_3(i) = max(istart4,i - 1)
74  ip1_3(i) = min(iend4,i + 1)
75  ENDIF
76  ENDDO
77 
78 
79  DO j = jstart4, jend4
80 
81  shift = .NOT.(j==jmin4 .OR. j==jmin3 .OR. j==jmin2 .OR. &
82  j==jmax4 .OR. j==jmax3 .OR. j==jmax2)
83 
84  IF(cyclic_y .AND. nodesj.EQ.1 .AND. do_j .AND. shift) THEN
85  jp1_3(j) = jmap_c(jmap_c(j)+1)
86  jm1_3(j) = jmap_c(jmap_c(j)-1)
87  ELSE
88  jm1_3(j) = max(jstart4,j - 1)
89  jp1_3(j) = min(jend4,j + 1)
90  ENDIF
91  ENDDO
92 
93 
94  DO k = kstart4, kend4
95 
96  shift = .NOT.(k==kmin4 .OR. k==kmin3 .OR. k==kmin2 .OR. &
97  k==kmax4 .OR. k==kmax3 .OR. k==kmax2)
98 
99  IF(cyclic_z .AND. nodesk.EQ.1 .AND. do_k .AND. shift) THEN
100  kp1_3(k) = kmap_c(kmap_c(k)+1)
101  km1_3(k) = kmap_c(kmap_c(k)-1)
102  ELSE
103  km1_3(k) = max(kstart4,k - 1)
104  kp1_3(k) = min(kend4,k + 1)
105  ENDIF
106  ENDDO
107 
108 ! Loop over all cells
109  DO k = kstart4, kend4
110  DO j = jstart4, jend4
111  DO i = istart4, iend4
112  ijk = funijk3(i,j,k)
113 
114  i3_of(ijk) = i
115  j3_of(ijk) = j
116  k3_of(ijk) = k
117  ENDDO
118  ENDDO
119  ENDDO
120 
121 ! Initialize the number of cell classes
122  iclass = 0
123 
124 ! Loop over all cells (minus the ghost layers)
125  DO k = kstart4, kend4
126  DO j = jstart4, jend4
127  l100: DO i = istart4, iend4
128 
129  ijk = funijk3(i,j,k)
130 
131 ! Find the the effective cell-center indices for all neighbor cells
132  CALL set_index1a3 (i, j, k, ijk, imjk, ipjk, ijmk, ijpk, ijkm,&
133  ijkp, ijkw, ijke, ijks, ijkn, ijkb, ijkt)
134 
135 ! Increment the ICLASS counter
136  iclass = iclass + 1
137  IF(iclass > max_class) THEN
138  WRITE(err_msg, 1200) trim(ival(max_class))
139  CALL flush_err_msg(abort=.true.)
140  ENDIF
141 
142  1200 FORMAT('Error 1200: The number of classes has exceeded the ', &
143  'maximum: ',a,/'Increase the MAX_CLASS parameter in param1', &
144  '_mod.f and recompile.')
145 
146  increment3_for_im(iclass) = imjk - ijk
147  increment3_for_ip(iclass) = ipjk - ijk
148  increment3_for_jm(iclass) = ijmk - ijk
149  increment3_for_jp(iclass) = ijpk - ijk
150  increment3_for_km(iclass) = ijkm - ijk
151  increment3_for_kp(iclass) = ijkp - ijk
152 
153  denote_class(iclass) = &
154  increment3_for_im(iclass) + increment3_for_ip(iclass) + &
155  increment3_for_jm(iclass) + increment3_for_jp(iclass) + &
156  increment3_for_km(iclass) + increment3_for_kp(iclass)
157 
158  cell_class3(ijk) = iclass
159 
160 ! Place the cell in a class based on its DENOTE_CLASS(ICLASS) value
161 ! Loop over previous and present classes
162  DO ic = 1, iclass - 1
163 
164  IF (denote_class(iclass) == denote_class(ic)) THEN
165  IF(increment3_for_im(iclass)/=increment3_for_im(ic))cycle
166  IF(increment3_for_ip(iclass)/=increment3_for_ip(ic))cycle
167  IF(increment3_for_jm(iclass)/=increment3_for_jm(ic))cycle
168  IF(increment3_for_jp(iclass)/=increment3_for_jp(ic))cycle
169  IF(increment3_for_km(iclass)/=increment3_for_km(ic))cycle
170  IF(increment3_for_kp(iclass)/=increment3_for_kp(ic))cycle
171  cell_class3(ijk) = ic
172  iclass = iclass - 1
173  cycle l100 ! Go to next cell
174  ENDIF
175  END DO
176 
177  END DO l100
178  END DO
179  END DO
180 
181  CALL finl_err_msg
182 
183  RETURN
184  END SUBROUTINE set_increments3
integer, dimension(:), allocatable jmap_c
Definition: compar_mod.f:78
integer, dimension(:), allocatable k3_of
Definition: indices_mod.f:59
integer imax2
Definition: geometry_mod.f:61
integer, dimension(:), allocatable kmap_c
Definition: compar_mod.f:78
integer, parameter max_class
Definition: param1_mod.f:8
integer kend4
Definition: compar_mod.f:94
subroutine finl_err_msg
integer imax3
Definition: geometry_mod.f:91
subroutine set_increments3
integer, dimension(max_class) increment3_for_kp
Definition: indices_mod.f:36
integer iend4
Definition: compar_mod.f:94
integer, dimension(:), allocatable jm1_3
Definition: indices_mod.f:62
integer, dimension(:), allocatable kp1_3
Definition: indices_mod.f:63
integer istart4
Definition: compar_mod.f:94
integer, dimension(max_class) increment3_for_jm
Definition: indices_mod.f:33
integer kmin4
Definition: geometry_mod.f:94
integer, dimension(:), allocatable im1_3
Definition: indices_mod.f:61
integer imax4
Definition: geometry_mod.f:95
logical cyclic_z
Definition: geometry_mod.f:153
integer, dimension(max_class) increment3_for_im
Definition: indices_mod.f:31
integer jmin2
Definition: geometry_mod.f:89
integer imin3
Definition: geometry_mod.f:90
integer, dimension(:), allocatable km1_3
Definition: indices_mod.f:63
integer, dimension(:), allocatable j3_of
Definition: indices_mod.f:58
integer, dimension(:), allocatable cell_class3
Definition: indices_mod.f:55
subroutine init_err_msg(CALLER)
Definition: ic_mod.f:9
integer kmax4
Definition: geometry_mod.f:95
integer imin4
Definition: geometry_mod.f:94
integer jmax2
Definition: geometry_mod.f:63
logical cyclic_y
Definition: geometry_mod.f:151
integer jend4
Definition: compar_mod.f:94
integer, dimension(max_class) increment3_for_ip
Definition: indices_mod.f:32
integer jmax3
Definition: geometry_mod.f:91
integer jstart4
Definition: compar_mod.f:94
logical do_j
Definition: geometry_mod.f:26
integer, dimension(max_class) increment3_for_km
Definition: indices_mod.f:35
integer kmax2
Definition: geometry_mod.f:65
integer, dimension(:), allocatable ip1_3
Definition: indices_mod.f:61
integer, dimension(max_class) increment3_for_jp
Definition: indices_mod.f:34
subroutine set_index1a3(I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM
Definition: set_index1a3.f:35
integer, dimension(:), allocatable imap_c
Definition: compar_mod.f:78
logical cyclic_x
Definition: geometry_mod.f:149
Definition: param_mod.f:2
integer jmin3
Definition: geometry_mod.f:90
integer jmin4
Definition: geometry_mod.f:94
integer kstart4
Definition: compar_mod.f:94
integer kmax3
Definition: geometry_mod.f:91
logical do_k
Definition: geometry_mod.f:30
integer nodesj
Definition: compar_mod.f:37
integer, parameter undefined_i
Definition: param1_mod.f:19
integer kmin3
Definition: geometry_mod.f:90
character(len=line_length), dimension(line_count) err_msg
integer nodesk
Definition: compar_mod.f:37
integer imin2
Definition: geometry_mod.f:89
integer nodesi
Definition: compar_mod.f:37
logical do_i
Definition: geometry_mod.f:22
integer, dimension(:), allocatable jp1_3
Definition: indices_mod.f:62
integer, dimension(:), allocatable i3_of
Definition: indices_mod.f:57
integer function funijk3(LI3, LJ3, LK3)
Definition: function3_mod.f:49
integer jmax4
Definition: geometry_mod.f:95
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
integer kmin2
Definition: geometry_mod.f:89