File: N:\mfix\model\cartesian_grid\update_dashboard.f

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
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     !     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
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     !         WRITE(111,40,ADVANCE='NO')' DT      ',DT,DTMIN,DTMAX
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     !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)
189     
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     
244