File: RELATIVE:/../../../mfix.git/model/time_march.f
1
2
3
4
5
6
7
8
9
10
11
12 SUBROUTINE TIME_MARCH
13
14
15
16
17 USE MFIX_netcdf
18 USE bc
19 USE cdist
20 USE coeff
21 USE compar
22 USE cont
23 USE cutcell
24 USE dashboard
25 USE discretelement
26 USE drag
27 USE fldvar
28 USE funits
29 USE geometry
30 USE indices
31 USE leqsol, only: SOLVER_STATISTICS, REPORT_SOLVER_STATS
32 USE output, only: RES_DT
33 USE param
34 USE param1
35 USE pgcor
36 USE physprop
37 USE pscor
38 USE qmom_kinetic_equation
39 USE run
40 USE scalars
41 USE stiff_chem, only : STIFF_CHEMISTRY, STIFF_CHEM_SOLVER
42 USE tau_g
43 USE tau_s
44 USE time_cpu
45 USE toleranc
46
47 USE utilities, ONLY: MAX_VEL_INLET
48 USE visc_g
49 USE visc_s
50 USE vshear
51 USE vtk
52 USE vtp
53 use output, only: RES_DT, NLOG
54 use interactive, only: INTERACT, INIT_INTERACTIVE_MODE
55 use adjust_dt
56
57 IMPLICIT NONE
58
59
60
61
62
63 LOGICAL :: FINISH
64
65
66 INTEGER :: L, M
67
68 INTEGER :: IER
69
70 INTEGER :: NIT, NIT_TOTAL
71
72 INTEGER :: NCHECK, DNCHECK
73
74 LOGICAL :: dummy
75
76
77
78 DOUBLE PRECISION :: CPU_STOP
79
80
81 LOGICAL :: EXIT_SIGNAL = .FALSE.
82
83
84 INTERFACE
85 SUBROUTINE CHECK_SOCKETS() BIND ( C )
86 use, INTRINSIC :: iso_c_binding
87 END SUBROUTINE CHECK_SOCKETS
88 END INTERFACE
89
90
91
92
93
94 DOUBLE PRECISION, EXTERNAL :: VAVG_U_G, VAVG_V_G, VAVG_W_G, X_vavg
95
96
97
98 IF(AUTOMATIC_RESTART) RETURN
99
100 FINISH = .FALSE.
101 NCHECK = NSTEP
102 DNCHECK = 1
103 CPU_IO = ZERO
104 NIT_TOTAL = 0
105
106 CALL INIT_OUTPUT_VARS
107
108 IF(INTERACTIVE_MODE) CALL INIT_INTERACTIVE_MODE
109
110
111 CALL PARSE_RESID_STRING ()
112
113
114 IF (CALL_USR) CALL USR0
115
116 CALL RRATES_INIT()
117
118
119 CALL INIT_COEFF(IER)
120
121 DO M=1, MMAX
122 CALL ZERO_ARRAY (F_gs(1,M))
123 ENDDO
124
125
126 CALL UNDEF_2_0 (ROP_G)
127 DO M = 1, MMAX
128 CALL UNDEF_2_0 (ROP_S(1,M))
129 ENDDO
130
131
132 DO M = 0, MMAX
133 CALL ZERO_ARRAY (D_E(1,M))
134 CALL ZERO_ARRAY (D_N(1,M))
135 CALL ZERO_ARRAY (D_T(1,M))
136 ENDDO
137 CALL ZERO_ARRAY (E_E)
138 CALL ZERO_ARRAY (E_N)
139 CALL ZERO_ARRAY (E_T)
140
141
142
143 IF(SHEAR) CALL CAL_D(V_sh)
144
145
146
147
148 Call check_mass_balance (0)
149
150
151
152
153 CALL MARK_PHASE_4_COR (PHASE_4_P_G, PHASE_4_P_S, DO_CONT, MCP,&
154 DO_P_S, SWITCH_4_P_G, SWITCH_4_P_S)
155
156
157
158 IF(DISCRETE_ELEMENT.AND.(.NOT.DES_CONTINUUM_COUPLED)) THEN
159 IF(WRITE_VTK_FILES) THEN
160 DO L = 1, DIMENSION_VTK
161
162 ENDDO
163 ENDIF
164 CALL DES_TIME_MARCH
165 CALL CPU_TIME(CPU_STOP)
166 CPU_STOP = CPU_STOP - CPU00
167 RETURN
168 ENDIF
169
170
171
172 CONTINUE
173
174
175 #ifdef socket
176 IF(INTERACTIVE_MODE) THEN
177 write(*,*) "INTERACTIVE_MODE: ",INTERACTIVE_MODE
178 CALL CHECK_SOCKETS()
179 CALL INTERACT(EXIT_SIGNAL, ABORT_SIGNAL)
180 IF(ABORT_SIGNAL) RETURN
181 ENDIF
182 #endif
183
184
185 IF (CHK_BATCHQ_END) CALL CHECK_BATCH_QUEUE_END(EXIT_SIGNAL)
186
187 IF (CALL_USR) CALL USR1
188
189
190 IF(.NOT.(DISCRETE_ELEMENT .OR. QMOMK) .OR. &
191 DES_CONTINUUM_HYBRID) THEN
192 IF(KT_TYPE_ENUM == GHD_2007) THEN
193 CALL ADJUST_EPS_GHD
194 ELSE
195 CALL ADJUST_EPS
196 ENDIF
197 ENDIF
198
199
200
201
202
203
204
205
206
207 CALL SET_BC1
208
209 CALL OUTPUT_MANAGER(EXIT_SIGNAL, FINISH)
210
211 IF (DT == UNDEFINED) THEN
212 IF (FINISH) THEN
213 RETURN
214 ELSE
215 FINISH = .TRUE.
216 ENDIF
217
218
219 ELSEIF (TIME + 0.1d0*DT >= TSTOP .OR. EXIT_SIGNAL) THEN
220 IF(SOLVER_STATISTICS) &
221 CALL REPORT_SOLVER_STATS(NIT_TOTAL, NSTEP)
222 RETURN
223 ENDIF
224
225
226 CALL UPDATE_OLD
227
228
229 CALL CALC_COEFF_ALL (0, IER)
230
231
232 CALL CALC_TRD_AND_TAU()
233
234
235
236 IF (.NOT.DISCRETE_ELEMENT .OR. DES_CONTINUUM_HYBRID) THEN
237 CALL CALC_KTMOMSOURCE_U_S ()
238 CALL CALC_KTMOMSOURCE_V_S ()
239 CALL CALC_KTMOMSOURCE_W_S ()
240 ENDIF
241
242
243 IF (NSTEP == NCHECK) THEN
244 IF (DNCHECK < 256) DNCHECK = DNCHECK*2
245 NCHECK = NCHECK + DNCHECK
246
247 CALL CALC_RRATE(IER)
248 CALL CHECK_DATA_30
249 ENDIF
250
251
252 IF ((CN_ON.AND.NSTEP>1.AND.RUN_TYPE == 'NEW') .OR. &
253 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP >= (NSTEPRST+1))) THEN
254 DT = 0.5d0*DT
255 ODT = ODT * 2.0d0
256 ENDIF
257
258
259 = 100.0d0*MAX_VEL_INLET()
260
261
262 IF(MAX_INLET_VEL <= SMALL_NUMBER) THEN
263 MAX_INLET_VEL = MAX_ALLOWED_VEL
264 IF (UNITS == 'SI') MAX_INLET_VEL = 1D-2 * MAX_ALLOWED_VEL
265 ENDIF
266
267 = MAX_INLET_VEL * MAX_INLET_VEL_FAC
268
269
270 CALL ITERATE (IER, NIT)
271
272 IF(AUTOMATIC_RESTART) RETURN
273
274
275
276
277
278
279
280
281 DO WHILE (ADJUSTDT(IER,NIT))
282 CALL ITERATE (IER, NIT)
283 ENDDO
284
285
286 IF(INTERUPT) GOTO 100
287
288 IF(DT < DT_MIN) THEN
289 AUTO_RESTART = .FALSE.
290 IF(AUTO_RESTART) THEN
291 IF(TIME <= RES_DT) THEN
292
293 1000 FORMAT('Automatic restart not possible as Total Time < RES_DT')
294
295 WRITE(ERR_MSG,1000)
296 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
297 AUTOMATIC_RESTART = .TRUE.
298 ENDIF
299 RETURN
300
301 ELSE
302
303 1100 FORMAT('DT < DT_MIN. Recovery not possible!')
304
305 WRITE(ERR_MSG,1100)
306 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
307
308 IF(WRITE_DASHBOARD) THEN
309 RUN_STATUS = 'DT < DT_MIN. Recovery not possible!'
310 CALL UPDATE_DASHBOARD(NIT,0.0d0,' ')
311 ENDIF
312 CALL MFIX_EXIT(MyPE)
313 ENDIF
314 ENDIF
315
316
317
318 IF(STIFF_CHEMISTRY) THEN
319 CALL STIFF_CHEM_SOLVER(DT, IER)
320 IF(IER /= 0) THEN
321 dummy = ADJUSTDT(IER, NIT)
322 GOTO 150
323 ENDIF
324 ENDIF
325
326
327
328 CALL CHECK_MASS_BALANCE (1)
329
330
331 IF (DEM_SOLIDS) CALL DES_TIME_MARCH
332 IF (PIC_SOLIDS) CALL PIC_TIME_MARCH
333 IF (QMOMK) CALL QMOMK_TIME_MARCH
334 IF (CALL_DQMOM) CALL USR_DQMOM
335
336
337 IF((CN_ON.AND.NSTEP>1.AND.RUN_TYPE == 'NEW') .OR. &
338 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP >= (NSTEPRST+1))) THEN
339
340 = 2.d0*DT
341 ODT = ODT * 0.5d0
342
343 CALL CN_EXTRAPOL
344 ENDIF
345
346 IF (DT /= UNDEFINED) THEN
347 IF(USE_DT_PREV) THEN
348 TIME = TIME + DT_PREV
349 ELSE
350 TIME = TIME + DT
351 ENDIF
352 USE_DT_PREV = .FALSE.
353 NSTEP = NSTEP + 1
354 ENDIF
355
356 NIT_TOTAL = NIT_TOTAL+NIT
357
358
359
360
361 FLUSH (6)
362
363 GOTO 100
364
365 IF(SOLVER_STATISTICS) CALL REPORT_SOLVER_STATS(NIT_TOTAL, NSTEP)
366
367 END SUBROUTINE TIME_MARCH
368
369