MFIX  2016-1
update_dashboard.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: UPDATE_DASHBOARD C
4 ! Purpose: Updates and writes dashboard file C
5 ! C
6 ! Author: Jeff Dietiker Date: 30-JAN-09 C
7 ! Reviewer: Date: **-***-** C
8 ! C
9 ! Revision Number: C
10 ! Purpose: C
11 ! Author: Date: dd-mmm-yy C
12 ! Reviewer: Date: dd-mmm-yy C
13 ! C
14 ! Literature/Document References: C
15 ! C
16 ! Variables referenced: C
17 ! C
18 ! Variables modified: C
19 ! C
20 ! Local variables: C
21 ! C
22 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
23 !
24  SUBROUTINE update_dashboard(NIT,TLEFT,TUNIT)
25 
26 !-----------------------------------------------
27 ! M o d u l e s
28 !-----------------------------------------------
29  USE compar
30  USE dashboard
31  USE leqsol
32  USE machine
33  USE parallel
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 ! temporary array to hold time data
47  INTEGER DAT(8)
48  CHARACTER(LEN=10) DATE, TIM, ZONE
49  LOGICAL :: Sm_flag
50 
51 ! Intel Linux compiler supports this function thru it's portability library
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 ! IF(NIT==0) NIT=NIT_MIN
86 
87  nit_min = 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 ! OPEN(CONVERT='BIG_ENDIAN',UNIT=111,FILE='DASHBOARD.TXT',STATUS='REPLACE')
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
132  IF(dt_dir>0) THEN
133  WRITE(111,40,advance='NO')' DT (+) ',dt,dtmin,dtmax
134 ! WRITE(111,40,ADVANCE='NO')' DT ',DT,DTMIN,DTMAX
135  ELSE
136  WRITE(111,40,advance='NO')' DT (-) ',dt,dtmin,dtmax
137  ENDIF
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 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
166 ! C
167 ! Module name: WRITE_SIMPLE_PROGRESS_BAR C
168 ! Purpose: Displays a progress bar on the screen C
169 ! C
170 ! Author: Jeff Dietiker Date: 30-JAN-09 C
171 ! Reviewer: Date: **-***-** C
172 ! C
173 ! Revision Number: C
174 ! Purpose: C
175 ! Author: Date: dd-mmm-yy C
176 ! Reviewer: Date: dd-mmm-yy C
177 ! C
178 ! Literature/Document References: C
179 ! C
180 ! Variables referenced: C
181 ! C
182 ! Variables modified: C
183 ! C
184 ! Local variables: C
185 ! C
186 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
187 !
188  SUBROUTINE write_simple_progress_bar(x,x_MAX)
190 !-----------------------------------------------
191 ! M o d u l e s
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 
character(len=255) vtu_filename
Definition: vtk_mod.f:28
double precision dtmin
Definition: dashboard_mod.f:6
character(len=60) description
Definition: run_mod.f:27
subroutine write_simple_progress_bar(x, x_MAX)
subroutine update_dashboard(NIT, TLEFT, TUNIT)
logical write_vtk_files
Definition: vtk_mod.f:24
integer id_month
Definition: machine_mod.f:22
integer dt_dir
Definition: run_mod.f:217
character(len=60) run_name
Definition: run_mod.f:24
integer id_second
Definition: machine_mod.f:27
integer id_day
Definition: machine_mod.f:23
double precision dt
Definition: run_mod.f:51
Definition: vtk_mod.f:1
integer nit_max
Definition: dashboard_mod.f:5
integer, dimension(max_resid_index, 2) resid_index
Definition: residual_mod.f:66
integer numpes
Definition: compar_mod.f:24
double precision smmax
Definition: dashboard_mod.f:7
double precision smmin
Definition: dashboard_mod.f:7
integer pe_io
Definition: compar_mod.f:30
double precision init_time
Definition: dashboard_mod.f:7
double precision dtmax
Definition: dashboard_mod.f:6
integer id_year
Definition: machine_mod.f:24
integer id_minute
Definition: machine_mod.f:26
character(len=40) run_status
Definition: dashboard_mod.f:8
double precision tstop
Definition: run_mod.f:48
subroutine get_smass(SMASS)
Definition: get_smass.f:25
logical is_serial
Definition: parallel_mod.f:11
Definition: run_mod.f:13
integer mype
Definition: compar_mod.f:24
character(len=4), dimension(max_resid_index) resid_string
Definition: residual_mod.f:62
integer id_hour
Definition: machine_mod.f:25
double precision time
Definition: run_mod.f:45
subroutine get_tunit(TLEFT, TUNIT)
Definition: run_mod.f:277
integer nit_min
Definition: dashboard_mod.f:5
double precision, parameter zero
Definition: param1_mod.f:27