File: /nfs/home/0/users/jenkins/mfix.git/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 parallel
31 USE sendrecv
32 USE run
33 USE leqsol
34 USE time_cpu
35 Use residual
36 USE dashboard
37 USE vtk
38
39 IMPLICIT NONE
40
41 DOUBLE PRECISION :: Smass,TLEFT
42 DOUBLE PRECISION :: CPU_NOW
43 INTEGER :: NIT
44 CHARACTER(LEN=4) :: TUNIT,CPU_TUNIT
45
46 INTEGER DAT(8)
47 CHARACTER(LEN=10) DATE, TIM, ZONE
48 LOGICAL :: Sm_flag
49
50
51 CALL DATE_AND_TIME(DATE, TIM, ZONE, DAT)
52 ID_YEAR = DAT(1)
53 ID_MONTH = DAT(2)
54 ID_DAY = DAT(3)
55 ID_HOUR = DAT(5)
56 ID_MINUTE = DAT(6)
57 ID_SECOND = DAT(7)
58
59 CALL CPU_TIME (CPU_NOW)
60 CALL GET_TUNIT(CPU_NOW,CPU_TUNIT)
61
62 IF (CPU_NOW > 60.0d0 .AND. CPU_TUNIT == 's') THEN
63 CPU_NOW = CPU_NOW/60.0d0
64 CPU_TUNIT = 'min'
65 ENDIF
66
67 IF (TLEFT > 60.0d0 .AND. TUNIT == 's') THEN
68 TLEFT = TLEFT/60.0d0
69 TUNIT = 'min'
70 ENDIF
71
72 Sm_flag = (TRIM(RUN_STATUS)=='In Progress...'.OR.TRIM(RUN_STATUS)=='Complete.')
73
74 IF(Sm_flag) THEN
75 CALL GET_SMASS (SMASS)
76
77 SMMIN = DMIN1(SMASS,SMMIN)
78 SMMAX = DMAX1(SMASS,SMMAX)
79 ENDIF
80
81 DTMIN = DMIN1(DT,DTMIN)
82 DTMAX = DMAX1(DT,DTMAX)
83
84
85
86 = MIN0(NIT,NIT_MIN)
87 NIT_MAX = MAX0(NIT,NIT_MAX)
88
89 IF(myPE /= PE_IO) RETURN
90
91
92
93 OPEN(UNIT = 111 , &
94 FILE = 'DASHBOARD.TXT', &
95 FORM = 'FORMATTED' , &
96 ACCESS = 'SEQUENTIAL' , &
97 STATUS = 'REPLACE' , &
98 ACTION = 'WRITE')
99
100
101
102 WRITE(111,30) ' _____________________________________________________________________________ '
103 WRITE(111,30) ' | |'
104 WRITE(111,30) ' | MFIX DASHBOARD |'
105 WRITE(111,30) ' |_____________________________________________________________________________|'
106 WRITE(111,30) ' | |'
107 WRITE (111,10)' | RUN_NAME = ',RUN_NAME, '|'
108 WRITE (111,10)' | Description = ',DESCRIPTION, '|'
109 WRITE (111,10)' | Run Status = ',RUN_STATUS, '|'
110 IF(RUN_STATUS/='Complete.') THEN
111 WRITE (111,15)' | CPU time elapsed = ',CPU_NOW,CPU_TUNIT, '|'
112 WRITE (111,15)' | CPU time left = ',TLEFT,TUNIT, '|'
113 ELSE
114 WRITE (111,15)' | CPU time used = ',TLEFT,TUNIT, '|'
115 ENDIF
116 IF(WRITE_VTK_FILES) WRITE(111,10) ' | Latest vtu file = ',VTU_FILENAME, '|'
117 IF(IS_SERIAL) THEN
118 WRITE (111,30)' | Serial run |'
119 ELSE
120 WRITE (111,25)' | Parallel run, numPEs = ',numPEs, '|'
121 ENDIF
122
123
124 WRITE(111,30) ' |_____________________________________________________________________________|'
125 WRITE(111,30) ' | | | | | | |'
126 WRITE(111,30) ' | Name | Value | Min | Max | % of max|0% Progress 100%|'
127 WRITE(111,30) ' |_________|_________|_________|_________|_________|___________________________|'
128 WRITE(111,30) ' | | | | | | |'
129 WRITE(111,40,ADVANCE='NO')' Time ',Time,Init_Time,Tstop
130 CALL WRITE_SIMPLE_PROGRESS_BAR(Time,TStop-Init_Time)
131 IF(DT_DIR>0) THEN
132 WRITE(111,40,ADVANCE='NO')' DT (+) ',DT,DTMIN,DTMAX
133
134 ELSE
135 WRITE(111,40,ADVANCE='NO')' DT (-) ',DT,DTMIN,DTMAX
136 ENDIF
137 CALL WRITE_SIMPLE_PROGRESS_BAR(DT,DTMAX)
138 IF(Sm_flag) THEN
139 WRITE(111,40,ADVANCE='NO')' Sm ',SMASS,SMMIN,SMMAX
140 CALL WRITE_SIMPLE_PROGRESS_BAR(SMASS,SMMAX)
141 ELSE
142 WRITE(111,30) ' | Sm | | | | | |'
143 ENDIF
144 WRITE(111,50,ADVANCE='NO')' NIT ',NIT,NIT_MIN,NIT_MAX
145 CALL WRITE_SIMPLE_PROGRESS_BAR(dble(NIT),dble(NIT_MAX))
146 IF (RESID_INDEX(8,1) == UNDEFINED_I) THEN
147 WRITE (111,55) ' Max res ',RESID_STRING(8)
148 ENDIF
149 WRITE(111,30)' |_________|_________|_________|_________|_________|___________________________|'
150 WRITE(111,60)' Last updated at: ',ID_HOUR,ID_MINUTE,ID_SECOND,' on: ',ID_MONTH,ID_DAY,ID_YEAR
151 10 FORMAT(A,A,T80,A)
152 15 FORMAT(A, F6.1, 1X, A,T80,A)
153 20 FORMAT(A, F9.3, 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