File: /nfs/home/0/users/jenkins/mfix.git/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 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     !     temporary array to hold time data
46           INTEGER DAT(8)
47           CHARACTER(LEN=10) DATE, TIM, ZONE
48           LOGICAL :: Sm_flag
49     
50     ! Intel Linux compiler supports this function thru it's portability library
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     !      IF(NIT==0) NIT=NIT_MIN
85     
86           NIT_MIN = 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     !      OPEN(UNIT=111,FILE='DASHBOARD.TXT',STATUS='REPLACE')
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     !         WRITE(111,40,ADVANCE='NO')' DT      ',DT,DTMIN,DTMAX
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     !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