File: /nfs/home/0/users/jenkins/mfix.git/model/utilities.f
1
2
3
4
5
6
7
8 LOGICAL FUNCTION isNan(x)
9
10
11
12
13 double precision x
14
15
16
17 CHARACTER(LEN=80) :: notnumber
18
19
20 = .False.
21 WRITE(notnumber,*) x
22
23
24
25 IF(INDEX(notnumber,'?') > 0 .OR. &
26 INDEX(notnumber,'n') > 0 .OR. &
27 INDEX(notnumber,'N') > 0 ) THEN
28 isNan = .TRUE.
29 RETURN
30 ENDIF
31
32 RETURN
33 END FUNCTION isNan
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 DOUBLE PRECISION FUNCTION MAX_VEL_INLET()
53
54
55
56
57 USE param
58 USE param1
59 USE parallel
60 USE bc
61 USE fldvar
62 USE geometry
63 USE physprop
64 USE indices
65 USE constant
66 USE run
67 USE compar
68 USE discretelement
69 USE functions
70
71 IMPLICIT NONE
72
73
74
75 INTEGER :: L, I, J, K, IJK, IJK2, M
76
77
78
79 = ZERO
80
81 DO L = 1, DIMENSION_BC
82 IF (BC_DEFINED(L)) THEN
83 IF (BC_TYPE(L) == 'MASS_INFLOW' .OR. BC_TYPE(L) == 'P_INFLOW') THEN
84
85 DO K = BC_K_B(L), BC_K_T(L)
86 DO J = BC_J_S(L), BC_J_N(L)
87 DO I = BC_I_W(L), BC_I_E(L)
88 IF (.NOT.IS_ON_myPE_plus2layers(I,J,K)) CYCLE
89 IF (DEAD_CELL_AT(I,J,K)) CYCLE
90 = FUNIJK(I,J,K)
91
92 SELECT CASE (BC_PLANE(L))
93 CASE ('S')
94 IJK2 = JM_OF(IJK)
95 IF( ABS(V_G(IJK2)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(V_G(IJK2))
96 CASE ('N')
97 IF( ABS(V_G(IJK)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(V_G(IJK))
98 CASE ('W')
99 IJK2 = IM_OF(IJK)
100 IF( ABS(U_G(IJK2)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(U_G(IJK2))
101 CASE ('E')
102 IF( ABS(U_G(IJK)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(U_G(IJK))
103 CASE ('B')
104 IJK2 = KM_OF(IJK)
105 IF( ABS(W_G(IJK2)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(W_G(IJK2))
106 CASE ('T')
107 IF( ABS(W_G(IJK)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(W_G(IJK))
108 END SELECT
109
110 IF (.NOT.DES_CONTINUUM_COUPLED .OR. DES_CONTINUUM_HYBRID) THEN
111 SELECT CASE (BC_PLANE(L))
112 CASE ('S')
113 IJK2 = JM_OF(IJK)
114 DO M = 1, MMAX
115 IF( ABS(V_s(IJK2, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(V_s(IJK2, M))
116 ENDDO
117 CASE ('N')
118 DO M = 1, MMAX
119 IF( ABS(V_s(IJK, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(V_s(IJK, M))
120 ENDDO
121 CASE ('W')
122 IJK2 = IM_OF(IJK)
123 DO M = 1, MMAX
124 IF( ABS(U_s(IJK2, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(U_s(IJK2, M))
125 ENDDO
126 CASE ('E')
127 DO M = 1, MMAX
128 IF( ABS(U_s(IJK, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(U_s(IJK, M))
129 ENDDO
130 CASE ('B')
131 IJK2 = KM_OF(IJK)
132 DO M = 1, MMAX
133 IF( ABS(W_s(IJK2, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(W_s(IJK2, M))
134 ENDDO
135 CASE ('T')
136 DO M = 1, MMAX
137 IF( ABS(W_s(IJK, M)) > MAX_VEL_INLET ) MAX_VEL_INLET = ABS(W_s(IJK, M))
138 ENDDO
139 END SELECT
140 ENDIF
141
142 ENDDO
143 ENDDO
144 ENDDO
145
146 ENDIF
147 ENDIF
148 ENDDO
149
150 RETURN
151 END FUNCTION MAX_VEL_INLET
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 LOGICAL FUNCTION CHECK_VEL_BOUND ()
173
174
175
176
177 USE param
178 USE param1
179 USE parallel
180 USE fldvar
181 USE bc
182 USE geometry
183 USE physprop
184 USE indices
185 USE run
186 USE toleranc
187 USE compar
188 USE mpi_utility
189 USE discretelement
190 USE functions
191
192 IMPLICIT NONE
193
194
195
196 INTEGER :: M
197
198 INTEGER :: IJK
199 LOGICAL :: ALL_IS_ERROR
200
201
202
203
204 = .FALSE.
205 ALL_IS_ERROR = .FALSE.
206
207 LOOP_FLUID : DO IJK = IJKSTART3, IJKEND3
208
209 IF (FLUID_AT(IJK)) THEN
210 IF(ABS(U_G(IJK)) > MAX_INLET_VEL .OR. &
211 ABS(V_G(IJK)) > MAX_INLET_VEL .OR. &
212 ABS(W_G(IJK)) > MAX_INLET_VEL) THEN
213 CHECK_VEL_BOUND = .TRUE.
214 WRITE(*,1000) MAX_INLET_VEL, I_OF(IJK), J_OF(IJK), K_OF(IJK), &
215 EP_g(IJK), U_G(IJK), V_G(IJK), W_G(IJK)
216 EXIT LOOP_FLUID
217 ENDIF
218
219 IF (.NOT.DES_CONTINUUM_COUPLED .OR. DES_CONTINUUM_HYBRID) THEN
220 DO M = 1, MMAX
221 IF(ABS(U_S(IJK,M)) > MAX_INLET_VEL .OR. &
222 ABS(V_S(IJK,M)) > MAX_INLET_VEL .OR. &
223 ABS(W_S(IJK,M)) > MAX_INLET_VEL) THEN
224 CHECK_VEL_BOUND = .TRUE.
225 WRITE(*,1010) MAX_INLET_VEL, I_OF(IJK), J_OF(IJK), K_OF(IJK), M, &
226 EP_s(IJK, M), U_S(IJK,M), V_S(IJK,M), W_S(IJK,M)
227 EXIT LOOP_FLUID
228 ENDIF
229 ENDDO
230 ENDIF
231 ENDIF
232
233 ENDDO LOOP_FLUID
234
235 CALL GLOBAL_ALL_OR(CHECK_VEL_BOUND, ALL_IS_ERROR)
236 IF(ALL_IS_ERROR) CHECK_VEL_BOUND = .TRUE.
237
238 RETURN
239 1000 FORMAT(1X,'Message from: CHECK_VEL_BOUND',/&
240 'WARNING: velocity higher than maximum allowed velocity: ', &
241 G12.5, '(to change this adjust the scale factor MAX_INLET_VEL_FAC)'/&
242 'in this cell: ','I = ',I4,2X,' J = ',I4,2X,' K = ',I4, /&
243 ' ','Epg = ', G12.5, 'Ug = ', G12.5, 'Vg = ', G12.5, 'Wg = ', G12.5)
244 1010 FORMAT(1X,'Message from: CHECK_VEL_BOUND',/&
245 'WARNING: velocity higher than maximum allowed velocity: ', &
246 G12.5,/&
247 'in this cell: ','I = ',I4,2X,' J = ',I4,2X,' K = ',I4,' M = ',I4, /&
248 ' ','Eps = ', G12.5,'Us = ', G12.5, 'Vs = ', G12.5, 'Ws = ', G12.5)
249
250 END FUNCTION CHECK_VEL_BOUND
251
252