File: RELATIVE:/../../../mfix.git/model/set_increments3.f
1
2
3
4
5
6
7
8
9
10
11
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
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
35
36
37 INTEGER :: I, J, K, IJK
38 INTEGER :: IMJK, IPJK, IJKW, IJKE
39 INTEGER :: IJMK, IJPK, IJKS, IJKN
40 INTEGER :: IJKM, IJKP, IJKB, IJKT
41
42 INTEGER :: IC
43
44 INTEGER :: ICLASS
45
46 INTEGER :: DENOTE_CLASS(MAX_CLASS)
47
48 LOGICAL :: SHIFT
49
50
51
52
53 CALL INIT_ERR_MSG("SET_INCREMENTS3")
54
55
56
57 (:) = 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
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
122 = 0
123
124
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
132 CALL SET_INDEX1A3 (I, J, K, IJK, IMJK, IPJK, IJMK, IJPK, IJKM,&
133 IJKP, IJKW, IJKE, IJKS, IJKN, IJKB, IJKT)
134
135
136 = 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
161
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
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
185