MFIX  2016-1
write_progress_bar.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2 ! C
3 ! Module name: WRITE_PROGRESS_BAR C
4 ! Purpose: Displays a progress bar on the screen 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 write_progress_bar(I,I_MAX,JUSTIFICATION)
25 
26 !-----------------------------------------------
27 ! M o d u l e s
28 !-----------------------------------------------
29 
30  USE compar
31  USE exit, only: mfix_exit
32  USE fldvar
33  USE funits
34  USE mpi_utility
35  USE param
36  USE param1
37  USE physprop
38  USE progress_bar
39  USE run
40  USE rxns
41  USE scalars
42  IMPLICIT NONE
43 
44  INTEGER :: I,I_MAX,ISKIP,PROGRESS
45  INTEGER :: P,P1,P2
46  CHARACTER (LEN=9) :: TEXT
47  CHARACTER (LEN=4) :: BAR_STATUS
48  CHARACTER (LEN=BAR_WIDTH) :: PROGRESSBAR
49  CHARACTER (LEN=1) :: JUSTIFICATION
50  DOUBLE PRECISION :: PERCENT
51 
52  IF(.NOT.print_progress_bar) RETURN
53 
54  IF(mype /= pe_io) RETURN
55 
56  iskip = int(bar_resolution * 0.01 *float(i_max))
57 
58  IF((mod(i,iskip)/=0).AND.(i/=i_max)) RETURN
59 
60  CALL erase_progress_bar(bar_width,bar_status,justification)
61 
62  bar_status =''
63  IF((bar_width<10).OR.(bar_width>80)) RETURN
64 
65  percent = float(i)/float(i_max) * 100.0
66  progress = int(0.01*percent * bar_width) + 1
67 
68  WRITE(text,10) percent
69 10 FORMAT(' ',f5.1,' % ')
70 
71  DO p = 1, progress
72  progressbar(p:p)= bar_char
73  ENDDO
74 
75  DO p = progress+1,bar_width
76  progressbar(p:p)= ' '
77  ENDDO
78 
79  SELECT CASE(justification)
80  CASE('L')
81 
82  WRITE(*,15,advance='NO')text,'|',progressbar,'|'
83 
84  CASE('C')
85 
86  p1 = bar_width / 2 - 3
87  p2 = bar_width / 2 + 5
88 
89  progressbar(p1:p2)= text
90 
91  WRITE(*,20,advance='NO')'|',progressbar,'|'
92 
93  CASE('R')
94 
95  WRITE(*,15,advance='NO')'|',progressbar,'|',text
96 
97  CASE('N')
98 
99  WRITE(*,20,advance='NO')'|',progressbar,'|'
100 
101  CASE DEFAULT
102  WRITE(*,*)'SUBROUTINE: WRITE_PROGRESS_BAR.'
103  WRITE(*,*)'INCORRECT JUSTIFICATION DESCRIPTOR:',justification
104  WRITE(*,*)'ACCEPTABLE VALUES ARE:'
105  WRITE(*,*)'L : LEFT JUSTIFICATION'
106  WRITE(*,*)'C : CENTER JUSTIFICATION'
107  WRITE(*,*)'R : RIGHT JUSTIFICATION'
108  WRITE(*,*)'N : NO TEXT'
109  call mfix_exit(mype)
110  END SELECT
111 
112  IF(percent>=100.0) THEN
113  bar_status ='DONE'
114  WRITE(*,*)
115  ENDIF
116 
117 15 FORMAT(a,a,a,a)
118 20 FORMAT(a,a,a)
119 
120 
121  RETURN
122  END SUBROUTINE write_progress_bar
123 
124 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
125 ! C
126 ! Module name: ERASE_PROGRESS_BAR C
127 ! Purpose: Erases a progress bar on the screen C
128 ! C
129 ! Author: Jeff Dietiker Date: 30-JAN-09 C
130 ! Reviewer: Date: **-***-** C
131 ! C
132 ! Revision Number: C
133 ! Purpose: C
134 ! Author: Date: dd-mmm-yy C
135 ! Reviewer: Date: dd-mmm-yy C
136 ! C
137 ! Literature/Document References: C
138 ! C
139 ! Variables referenced: C
140 ! C
141 ! Variables modified: C
142 ! C
143 ! Local variables: C
144 ! C
145 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
146 
147  SUBROUTINE erase_progress_bar(BAR_WIDTH,BAR_STATUS,JUSTIFICATION)
149 !-----------------------------------------------
150 ! M o d u l e s
151 !-----------------------------------------------
152  USE compar
153  USE exit, only: mfix_exit
154  USE fldvar
155  USE funits
156  USE mpi_utility
157  USE parallel
158  USE param
159  USE param1
160  USE physprop
161  USE run
162  USE rxns
163  USE scalars
164  USE sendrecv
165  IMPLICIT NONE
166 
167  INTEGER :: I,BAR_WIDTH,NERASE
168  CHARACTER (LEN=4) :: BAR_STATUS
169  CHARACTER (LEN=1) :: JUSTIFICATION
170 
171  IF(mype /= pe_io) RETURN
172 
173  IF(bar_status=='DONE') THEN
174  bar_status = ''
175  RETURN
176  ENDIF
177 
178  IF((bar_width<10).OR.(bar_width>80)) RETURN
179 
180 
181  SELECT CASE(justification)
182  CASE('L')
183  nerase = bar_width + 11
184  CASE('C')
185  nerase = bar_width + 2
186  CASE('R')
187  nerase = bar_width + 11
188  CASE('N')
189  nerase = bar_width + 2
190  CASE DEFAULT
191  WRITE(*,*)'SUBROUTINE: WRITE_PROGRESS_BAR.'
192  WRITE(*,*)'INCORRECT JUSTIFICATION DESCRIPTOR:',justification
193  WRITE(*,*)'ACCEPTABLE VALUES ARE:'
194  WRITE(*,*)'L : LEFT JUSTIFICATION'
195  WRITE(*,*)'C : CENTER JUSTIFICATION'
196  WRITE(*,*)'R : RIGHT JUSTIFICATION'
197  WRITE(*,*)'N : NO TEXT'
198  call mfix_exit(mype)
199  END SELECT
200 
201  DO i = 1,nerase
202  WRITE(*,10,advance='NO')char(8)
203  ENDDO
204 10 FORMAT(a)
205 
206  RETURN
207  END SUBROUTINE erase_progress_bar
208 
209 
Definition: rxns_mod.f:1
double precision, dimension(:), allocatable a
Definition: scalars_mod.f:29
integer pe_io
Definition: compar_mod.f:30
integer bar_width
subroutine mfix_exit(myID, normal_termination)
Definition: exit.f:5
Definition: exit.f:2
double precision bar_resolution
Definition: run_mod.f:13
Definition: param_mod.f:2
logical print_progress_bar
integer mype
Definition: compar_mod.f:24
subroutine erase_progress_bar(BAR_WIDTH, BAR_STATUS, JUSTIFICATION)
subroutine write_progress_bar(I, I_MAX, JUSTIFICATION)
character(len=1) bar_char