MFIX  2016-1
time_step.f
Go to the documentation of this file.
1 ! -*- f90 -*-
2  MODULE step
3 
4  USE exit, ONLY: mfix_exit
6  USE run, ONLY: ier
7 
8  CONTAINS
9 
10 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
11 ! !
12 ! Subroutine: TIME_STEP_INIT !
13 ! Author: M. Syamlal Date: 12-APR-96 !
14 ! !
15 ! Purpose: This module controls the iterations for solving equations !
16 ! !
17 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
18  SUBROUTINE time_step_init
19 
20  !f2py threadsafe
21  USE check, only: check_mass_balance
22  USE compar, only: mype
24  USE discretelement, only: des_continuum_coupled, des_continuum_hybrid, discrete_element
25  USE error_manager, only: err_msg
26  USE error_manager, only: flush_err_msg
27  USE output, only: res_dt
28  USE output_man, only: output_manager
29  USE param1, only: small_number, undefined
30  USE qmom_kinetic_equation, only: qmomk
32  USE run, only: cn_on, dem_solids, dt, dt_min, dt_prev, ghd_2007, kt_type_enum
35  USE toleranc, only: max_inlet_vel
36  USE utilities, only: max_vel_inlet
37 
38  IMPLICIT NONE
39 
40 ! Terminate MFIX normally before batch queue terminates.
41  IF (chk_batchq_end) CALL check_batch_queue_end(exit_signal)
42 
43  IF (call_usr) CALL usr1
44 
45 ! Remove solids from cells containing very small quantities of solids
46  IF(.NOT.(discrete_element .OR. qmomk) .OR. &
47  des_continuum_hybrid) THEN
48  IF(kt_type_enum == ghd_2007) THEN
49  CALL adjust_eps_ghd
50  ELSE
51  CALL adjust_eps
52  ENDIF
53  ENDIF
54 
55 ! sof modification: uncomment code below and modify MARK_PHASE_4_COR to
56 ! use previous MFIX algorithm. Nov 22 2010.
57 ! Mark the phase whose continuity will be solved and used to correct
58 ! void/volume fraction in calc_vol_fr (see subroutine for details)
59 ! CALL MARK_PHASE_4_COR (PHASE_4_P_G, PHASE_4_P_S, DO_CONT, MCP,&
60 ! DO_P_S, SWITCH_4_P_G, SWITCH_4_P_S, IER)
61 
62 ! Set wall boundary conditions and transient flow b.c.'s
63  CALL set_bc1
64 ! include here so they are set before calculations rely on value
65 ! (e.g., calc_mu_g, calc_mu_s)
66  CALL set_ep_factors
67 
68 
69  CALL output_manager(exit_signal, .false.)
70 
71 ! Update previous-time-step values of field variables
72  CALL update_old
73 
74 ! Calculate coefficients
75  CALL calc_coeff_all (0, ier)
76 
77 ! Calculate the stress tensor trace and cross terms for all phases.
78  CALL calc_trd_and_tau()
79 
80 ! Calculate additional solids phase momentum source terms
81  IF (.NOT.discrete_element .OR. des_continuum_hybrid) THEN
83  ENDIF
84 
85 ! Check rates and sums of mass fractions every NLOG time steps
86  IF (nstep == ncheck) THEN
87  IF (dncheck < 256) dncheck = dncheck*2
89 ! Upate the reaction rates for checking
90  CALL calc_rrate(ier)
91  CALL check_data_30
92  ENDIF
93 
94 ! Double the timestep for 2nd order accurate time implementation
95  IF ((cn_on.AND.nstep>1.AND.run_type == 'NEW') .OR. &
96  (cn_on.AND.run_type /= 'NEW' .AND. nstep >= (nsteprst+1))) THEN
97  dt = 0.5d0*dt
98  odt = odt * 2.0d0
99  ENDIF
100 
101 ! Check for maximum velocity at inlet to avoid convergence problems
103 
104  END SUBROUTINE time_step_init
105 
106 
107 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
108 ! !
109 ! Subroutine: TIME_STEP_INIT !
110 ! Author: M. Syamlal Date: 12-APR-96 !
111 ! !
112 ! Purpose: This module controls the iterations for solving equations !
113 ! !
114 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
115  SUBROUTINE time_step_end
117  USE check, only: check_mass_balance
118  USE compar, only: mype
120  USE error_manager, only: err_msg
121  USE error_manager, only: flush_err_msg
122  USE iterate, only: nit
124  USE output, only: res_dt
125  USE output_man, only: output_manager
126  USE param1, only: small_number, undefined
127  USE qmom_kinetic_equation, only: qmomk
129  USE run, only: cn_on, dem_solids, dt, dt_min, dt_prev, ghd_2007, kt_type_enum
132  use discretelement, only: des_explicitly_coupled
133  IMPLICIT NONE
134 
135  IF(dt < dt_min) THEN
136 
137  WRITE(err_msg,1100)
138  CALL flush_err_msg(header=.false., footer=.false.)
139 1100 FORMAT('DT < DT_MIN. Recovery not possible!')
140 
141  IF(write_dashboard) THEN
142  run_status = 'DT < DT_MIN. Recovery not possible!'
143  CALL update_dashboard(nit,0.0d0,' ')
144  ENDIF
145  CALL mfix_exit(mype)
146  ENDIF
147 
148 ! Stiff Chemistry Solver.
149  IF(stiff_chemistry) THEN
150  IF(des_explicitly_coupled) CALL rxns_gs_gas1
151  CALL stiff_chem_solver(dt, ier)
152  ENDIF
153 
154 
155 ! Check over mass and elemental balances. This routine is not active by default.
156 ! Edit the routine and specify a reporting interval to activate it.
157  CALL check_mass_balance (1)
158 
159 ! Other solids model implementations
160  IF (dem_solids) CALL des_time_march
161  IF (pic_solids) CALL pic_time_march
162  IF (qmomk) CALL qmomk_time_march
163  IF (call_dqmom) CALL usr_dqmom
164 
165 ! Advance the time step and continue
166  IF((cn_on.AND.nstep>1.AND.run_type == 'NEW') .OR. &
167  (cn_on.AND.run_type /= 'NEW' .AND. nstep >= (nsteprst+1))) THEN
168 ! Double the timestep for 2nd order accurate time implementation
169  dt = 2.d0*dt
170  odt = odt * 0.5d0
171 ! Perform the explicit extrapolation for CN implementation
172  CALL cn_extrapol
173  ENDIF
174 
175  IF (.NOT. steady_state) THEN
176  IF(use_dt_prev) THEN
177  time = time + dt_prev
178  ELSE
179  time = time + dt
180  ENDIF
181  use_dt_prev = .false.
182  nstep = nstep + 1
183  ENDIF
184 
186 
188 
189 ! write (*,"('Compute the Courant number')")
190 ! call get_stats(IER)
191 
192  FLUSH (6)
193 
194  CALL output_manager(exit_signal, .true.)
195 
196  END SUBROUTINE time_step_end
197 
198  END MODULE step
subroutine pic_time_march
Definition: time_march_pic.f:8
subroutine check_batch_queue_end(pEXIT_SIGNAL)
Definition: check_bqend.f:10
subroutine qmomk_time_march
logical write_dashboard
Definition: dashboard_mod.f:3
logical dem_solids
Definition: run_mod.f:257
subroutine calc_rrate(IER)
Definition: calc_coeff.f:142
logical steady_state
Definition: run_mod.f:57
double precision dt_prev
Definition: run_mod.f:230
subroutine calc_coeff_all(FLAG, IER)
Definition: calc_coeff.f:18
subroutine update_dashboard(NIT, TLEFT, TUNIT)
subroutine output_manager(EXIT_SIGNAL, FINISHED)
Definition: time_step.f:2
subroutine check_mass_balance(init)
Definition: check_mod.f:38
logical use_dt_prev
Definition: run_mod.f:234
subroutine des_time_march
subroutine update_old
Definition: update_old.f:29
integer dncheck
Definition: main.f:31
subroutine adjust_eps
Definition: adjust_eps.f:13
double precision max_inlet_vel
Definition: toleranc_mod.f:40
subroutine calc_explicit_mom_source_s()
Definition: kintheory_u_s.f:11
double precision dt
Definition: run_mod.f:51
logical automatic_restart
Definition: run_mod.f:36
subroutine adjust_eps_ghd
double precision, parameter undefined
Definition: param1_mod.f:18
logical cn_on
Definition: run_mod.f:109
integer nit
Definition: iterate.f:12
double precision res_dt
Definition: output_mod.f:15
logical chk_batchq_end
Definition: run_mod.f:190
integer ier
Definition: run_mod.f:265
subroutine time_step_end
Definition: time_step.f:116
subroutine mfix_exit(myID, normal_termination)
Definition: exit.f:5
double precision, parameter small_number
Definition: param1_mod.f:24
character(len=40) run_status
Definition: dashboard_mod.f:8
Definition: exit.f:2
double precision tstop
Definition: run_mod.f:48
character(len=16) run_type
Definition: run_mod.f:33
subroutine time_step_init
Definition: time_step.f:19
double precision odt
Definition: run_mod.f:54
subroutine set_bc1
Definition: set_bc1.f:10
subroutine usr1
Definition: usr1.f:29
logical call_dqmom
Definition: run_mod.f:127
Definition: run_mod.f:13
subroutine check_data_30
Definition: check_data_30.f:11
subroutine calc_trd_and_tau()
Definition: calc_coeff.f:204
subroutine report_solver_stats(TNIT, STEPS)
Definition: leqsol_mod.f:51
character(len=16) units
Definition: run_mod.f:30
subroutine cn_extrapol
Definition: cn_extrapol.f:48
integer nsteprst
Definition: run_mod.f:64
integer mype
Definition: compar_mod.f:24
integer nstep
Definition: run_mod.f:60
subroutine set_ep_factors
Definition: calc_vol_fr.f:231
subroutine stiff_chem_solver(ODE_DT, iErr)
character(len=line_length), dimension(line_count) err_msg
Definition: iterate.f:2
double precision dt_min
Definition: run_mod.f:223
double precision function max_vel_inlet()
Definition: utilities_mod.f:48
Definition: main.f:10
logical exit_signal
Definition: main.f:34
logical auto_restart
Definition: run_mod.f:205
double precision time
Definition: run_mod.f:45
integer nit_total
Definition: main.f:29
integer ncheck
Definition: main.f:31
logical pic_solids
Definition: run_mod.f:258
logical stiff_chemistry
logical solver_statistics
Definition: leqsol_mod.f:41
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
subroutine usr_dqmom
Definition: usr_dqmom.f:11
subroutine rxns_gs_gas1
Definition: rxns_gs_des1.f:134
logical call_usr
Definition: run_mod.f:121