File: /nfs/home/0/users/jenkins/mfix.git/model/adjust_dt.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 LOGICAL FUNCTION ADJUST_DT (IER, NIT)
19
20
21
22
23
24
25 USE param
26 USE param1
27 USE run
28 USE output
29 USE compar
30 USE mpi_utility
31
32 IMPLICIT NONE
33
34
35
36
37
38
39 INTEGER IER, NIT
40
41
42
43 INTEGER, PARAMETER :: STEPS_MIN = 5
44
45
46
47 DOUBLE PRECISION :: NITOS_NEW
48 CHARACTER(LEN=70), DIMENSION(1) :: LINE
49
50
51
52
53
54
55
56
57
58
59 = .FALSE.
60 IF (DT==UNDEFINED .OR. DT<ZERO) RETURN
61
62 use_DT_prev = .FALSE.
63
64
65
66 IF (IER == 100) THEN
67 DT_DIR = -1
68 STEPS_TOT = 0
69 NITOS = 0.
70 NIT_TOT = 0
71
72
73
74 ELSE IF(IER == 0) THEN
75
76
77
78 IF((CN_ON.AND.NSTEP>1 .AND. RUN_TYPE == 'NEW') .OR. &
79 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP >= (NSTEPRST+1))) &
80 DT = 2.D0*DT
81
82 IF(STEPS_TOT >= STEPS_MIN) THEN
83 NITOS_NEW = DBLE(NIT_TOT)/(STEPS_TOT*DT)
84 IF (NITOS_NEW > NITOS) DT_DIR = DT_DIR*(-1)
85 STEPS_TOT = 0
86 NITOS = NITOS_NEW
87 NIT_TOT = 0
88 IF (DT_DIR > 0) THEN
89 DT = MIN(DT_MAX,DT/DT_FAC)
90 ELSE
91 DT = DT*DT_FAC
92 ENDIF
93
94 = .TRUE.
95 IF (FULL_LOG.and.myPE.eq.PE_IO) &
96 WRITE (*, *) 'DT = ', DT, ' NIT/s = ', NINT(NITOS)
97 ELSE
98 STEPS_TOT = STEPS_TOT + 1
99 NIT_TOT = NIT_TOT + NIT
100 ENDIF
101
102 = .FALSE.
103
104
105
106 IF((CN_ON.AND.NSTEP>1 .AND. RUN_TYPE == 'NEW') .OR. &
107 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP >= (NSTEPRST+1))) &
108 DT = 0.5D0*DT
109
110
111
112 ELSE
113
114
115 IF ((CN_ON.AND.NSTEP>1.AND.RUN_TYPE == 'NEW') .OR. &
116 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP >= (NSTEPRST+1))) &
117 DT = 2.D0*DT
118
119
120 IF (DT < DT_MIN) THEN
121 IF(AUTO_RESTART) THEN
122 LINE(1) = 'DT < DT_MIN. Recovery not possible! Trying Automatic Restart'
123 ELSE
124 LINE(1) = 'DT < DT_MIN. Recovery not possible!'
125 ENDIF
126 IF (FULL_LOG.and.myPE.eq.PE_IO) WRITE (*, *) LINE(1)
127 CALL WRITE_ERROR ('ADJUST_DT', LINE, 1)
128
129
130
131 ELSE IF (DT_FAC >= ONE) THEN
132 LINE(1) = 'DT_FAC >= 1. Recovery not possible!'
133 IF (FULL_LOG.and.myPE.eq.PE_IO) WRITE (*, *) LINE(1)
134 CALL WRITE_ERROR ('ADJUST_DT', LINE, 1)
135 CALL MFIX_EXIT(myPE)
136 ELSE
137
138
139 = -1
140 STEPS_TOT = 0
141 NITOS = 0.
142 NIT_TOT = 0
143 DT = DT*DT_FAC
144
145 IF (FULL_LOG) THEN
146 IF(myPE.eq.PE_IO) then
147 WRITE (*, '(12X,A,G12.5,9X,A)') &
148 ' Dt=', DT, ' Recovered :-)'
149 ENDIF
150 CALL START_LOG
151 IF(DMP_LOG)WRITE (UNIT_LOG, '(12X,A,G12.5,9X,A)') &
152 ' Dt=', DT, ' Recovered :-)'
153 CALL END_LOG
154 ENDIF
155 CALL RESET_NEW
156
157 = .TRUE.
158
159
160
161
162 IF ((CN_ON.AND.NSTEP>1.AND.RUN_TYPE == 'NEW') .OR. &
163 (CN_ON.AND.RUN_TYPE /= 'NEW' .AND. NSTEP>=(NSTEPRST+1)))&
164 DT = 0.5D0*DT
165 ENDIF
166
167
168
169
170 ENDIF
171
172
173
174
175 = ONE/DT
176
177 call bcast (dt,root)
178 call bcast (odt,root)
179
180 RETURN
181 END FUNCTION ADJUST_DT
182
183
184
185
186