File: N:\mfix\model\cartesian_grid\update_dashboard.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 SUBROUTINE UPDATE_DASHBOARD(NIT,TLEFT,TUNIT)
25
26
27
28
29 USE compar
30 USE dashboard
31 USE leqsol
32 USE machine
33 USE parallel
34 USE run, ONLY: get_tunit, description, dt, dt_dir, run_name, time, tstop
35 USE sendrecv
36 USE time_cpu
37 USE vtk
38 Use residual
39
40 IMPLICIT NONE
41
42 DOUBLE PRECISION :: Smass,TLEFT
43 DOUBLE PRECISION :: CPU_NOW
44 INTEGER :: NIT
45 CHARACTER(LEN=4) :: TUNIT,CPU_TUNIT
46
47 INTEGER DAT(8)
48 CHARACTER(LEN=10) DATE, TIM, ZONE
49 LOGICAL :: Sm_flag
50
51
52 CALL DATE_AND_TIME(DATE, TIM, ZONE, DAT)
53 ID_YEAR = DAT(1)
54 ID_MONTH = DAT(2)
55 ID_DAY = DAT(3)
56 ID_HOUR = DAT(5)
57 ID_MINUTE = DAT(6)
58 ID_SECOND = DAT(7)
59
60 CALL CPU_TIME (CPU_NOW)
61 CALL GET_TUNIT(CPU_NOW,CPU_TUNIT)
62
63 IF (CPU_NOW > 60.0d0 .AND. CPU_TUNIT == 's') THEN
64 CPU_NOW = CPU_NOW/60.0d0
65 CPU_TUNIT = 'min'
66 ENDIF
67
68 IF (TLEFT > 60.0d0 .AND. TUNIT == 's') THEN
69 TLEFT = TLEFT/60.0d0
70 TUNIT = 'min'
71 ENDIF
72
73 Sm_flag = (TRIM(RUN_STATUS)=='In Progress...'.OR.TRIM(RUN_STATUS)=='Complete.')
74
75 IF(Sm_flag) THEN
76 CALL GET_SMASS (SMASS)
77
78 SMMIN = DMIN1(SMASS,SMMIN)
79 SMMAX = DMAX1(SMASS,SMMAX)
80 ENDIF
81
82 DTMIN = DMIN1(DT,DTMIN)
83 DTMAX = DMAX1(DT,DTMAX)
84
85
86
87 = MIN0(NIT,NIT_MIN)
88 NIT_MAX = MAX0(NIT,NIT_MAX)
89
90 IF(myPE /= PE_IO) RETURN
91
92
93
94 OPEN(CONVERT='BIG_ENDIAN',UNIT = 111 , &
95 FILE = 'DASHBOARD.TXT', &
96 FORM = 'FORMATTED' , &
97 ACCESS = 'SEQUENTIAL' , &
98 STATUS = 'REPLACE' , &
99 ACTION = 'WRITE')
100
101
102
103 WRITE(111,30) ' _____________________________________________________________________________ '
104 WRITE(111,30) ' | |'
105 WRITE(111,30) ' | MFIX DASHBOARD |'
106 WRITE(111,30) ' |_____________________________________________________________________________|'
107 WRITE(111,30) ' | |'
108 WRITE (111,10)' | RUN_NAME = ',RUN_NAME, '|'
109 WRITE (111,10)' | Description = ',DESCRIPTION, '|'
110 WRITE (111,10)' | Run Status = ',RUN_STATUS, '|'
111 IF(RUN_STATUS/='Complete.') THEN
112 WRITE (111,15)' | CPU time elapsed = ',CPU_NOW,CPU_TUNIT, '|'
113 WRITE (111,15)' | CPU time left = ',TLEFT,TUNIT, '|'
114 ELSE
115 WRITE (111,15)' | CPU time used = ',TLEFT,TUNIT, '|'
116 ENDIF
117 IF(WRITE_VTK_FILES) WRITE(111,10) ' | Latest vtu file = ',VTU_FILENAME, '|'
118 IF(IS_SERIAL) THEN
119 WRITE (111,30)' | Serial run |'
120 ELSE
121 WRITE (111,25)' | Parallel run, numPEs = ',numPEs, '|'
122 ENDIF
123
124
125 WRITE(111,30) ' |_____________________________________________________________________________|'
126 WRITE(111,30) ' | | | | | | |'
127 WRITE(111,30) ' | Name | Value | Min | Max | % of max|0% Progress 100%|'
128 WRITE(111,30) ' |_________|_________|_________|_________|_________|___________________________|'
129 WRITE(111,30) ' | | | | | | |'
130 WRITE(111,40,ADVANCE='NO')' Time ',Time,Init_Time,Tstop
131 CALL WRITE_SIMPLE_PROGRESS_BAR(Time,TStop-Init_Time)
132 IF(DT_DIR>0) THEN
133 WRITE(111,40,ADVANCE='NO')' DT (+) ',DT,DTMIN,DTMAX
134
135 ELSE
136 WRITE(111,40,ADVANCE='NO')' DT (-) ',DT,DTMIN,DTMAX
137 ENDIF
138 CALL WRITE_SIMPLE_PROGRESS_BAR(DT,DTMAX)
139 IF(Sm_flag) THEN
140 WRITE(111,40,ADVANCE='NO')' Sm ',SMASS,SMMIN,SMMAX
141 CALL WRITE_SIMPLE_PROGRESS_BAR(SMASS,SMMAX)
142 ELSE
143 WRITE(111,30) ' | Sm | | | | | |'
144 ENDIF
145 WRITE(111,50,ADVANCE='NO')' NIT ',NIT,NIT_MIN,NIT_MAX
146 CALL WRITE_SIMPLE_PROGRESS_BAR(dble(NIT),dble(NIT_MAX))
147 IF (RESID_INDEX(8,1) == UNDEFINED_I) THEN
148 WRITE (111,55) ' Max res ',RESID_STRING(8)
149 ENDIF
150 WRITE(111,30)' |_________|_________|_________|_________|_________|___________________________|'
151 WRITE(111,60)' Last updated at: ',ID_HOUR,ID_MINUTE,ID_SECOND,' on: ',ID_MONTH,ID_DAY,ID_YEAR
152 10 FORMAT(A,A,T80,A)
153 15 FORMAT(A, F6.1, 1X, A,T80,A)
154 25 FORMAT(A,I6,T80,A)
155 30 FORMAT(A)
156 40 FORMAT(' |',A,'|',3(E9.2,'|'))
157 50 FORMAT(' |',A,'|',3(I9,'|'))
158 55 FORMAT(' |',A,'|',A7,' | | | | |')
159 60 FORMAT(A,I2.2,':',I2.2,':',I2.2,A,I2.2,'/',I2.2,'/',I4)
160 CLOSE(111)
161
162 RETURN
163 END SUBROUTINE UPDATE_DASHBOARD
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188 SUBROUTINE WRITE_SIMPLE_PROGRESS_BAR(x,x_MAX)
189
190
191
192
193 USE param1, only: zero
194
195
196 IMPLICIT NONE
197
198 INTEGER :: BAR_WIDTH
199 CHARACTER (LEN=1) :: BAR_CHAR
200 DOUBLE PRECISION :: BAR_RESOLUTION
201
202 INTEGER :: PROGRESS
203 INTEGER :: P
204 CHARACTER (LEN=9) :: TEXT
205 CHARACTER (LEN=69) :: PROGRESSBAR
206 DOUBLE PRECISION :: PERCENT,PTEST
207 DOUBLE PRECISION :: x,x_max
208
209
210 IF(X_MAX==ZERO) THEN
211 WRITE(111,5)
212 5 FORMAT(9X,'|',27X,'|')
213 RETURN
214 ENDIF
215
216 BAR_WIDTH = 27
217 BAR_CHAR = '='
218 BAR_RESOLUTION = 1.0
219
220 PERCENT = x/x_MAX * 100.0
221 PROGRESS = INT(PERCENT * BAR_WIDTH)
222
223 WRITE(TEXT,10) PERCENT
224 10 FORMAT(' ',F5.1,' % ')
225
226 DO P = 1, BAR_WIDTH
227 PTEST = FLOAT(P)/FLOAT(BAR_WIDTH) * 100.0
228 IF(PERCENT<PTEST-BAR_RESOLUTION) THEN
229 PROGRESSBAR(P:P)= ' '
230 ELSE
231 PROGRESSBAR(P:P)= BAR_CHAR
232 ENDIF
233 ENDDO
234
235 WRITE(111,15)TEXT,'|',TRIM(PROGRESSBAR),'|'
236
237 15 FORMAT(A,A,A27,A)
238
239 RETURN
240 END SUBROUTINE WRITE_SIMPLE_PROGRESS_BAR
241
242
243
244