1212#include <assert.h>
1313#include <stddef.h>
1414#include <unistd.h>
15+ #include <sys/time.h>
16+
1517
1618#include "interp.h"
1719#include "query.h"
2022#include "diff.h"
2123#include "heapsort.h"
2224#include "index.h"
25+ #include "progressbar.h"
2326#include "fmm.h"
2427
2528
@@ -31,8 +34,12 @@ void FastMarching(
3134 double rr , double tt , double pp ,
3235 int maxodr , const float * Slw ,
3336 float * TT , bool sphcoord ,
34- int rfgfac , int rfgn )
37+ int rfgfac , int rfgn , bool printbar )
3538{
39+ // 程序运行开始时间
40+ struct timeval begin_t ;
41+ gettimeofday (& begin_t , NULL );
42+
3643 int ntp = nt * np ;
3744 int nrtp = nr * ntp ;
3845 int Ndots = nrtp ;
@@ -71,7 +78,7 @@ void FastMarching(
7178 rr , tt , pp ,
7279 maxodr , Slw , TT ,
7380 FMM_stat , sphcoord ,
74- rfgfac , rfgn ,
81+ rfgfac , rfgn , printbar ,
7582 FMM_data , psize , pcap , NroIdx , & Ndots );
7683 } else {
7784 FMM_data = init_source_TT (
@@ -90,13 +97,20 @@ void FastMarching(
9097 ts , nt ,
9198 ps , np ,
9299 maxodr , Slw , TT ,
93- FMM_stat , sphcoord , NULL ,
100+ FMM_stat , sphcoord , NULL , printbar ,
94101 FMM_data , psize , pcap , NroIdx , & Ndots );
95102
96103 // printf("done, Ndots=%d, size=%d\n", Ndots, *psize);
97104 free (FMM_data );
98105 free (FMM_stat );
99106 free (NroIdx );
107+
108+
109+ // 程序运行结束时间
110+ struct timeval end_t ;
111+ gettimeofday (& end_t , NULL );
112+ if (printbar ) printf ("Runtime: %.3f s\n" , (end_t .tv_sec - begin_t .tv_sec ) + (end_t .tv_usec - begin_t .tv_usec ) / 1e6 );
113+ fflush (stdout );
100114}
101115
102116
@@ -107,7 +121,7 @@ HEAP_DATA * FastMarching_with_initial(
107121 const double * ts , int nt ,
108122 const double * ps , int np ,
109123 int maxodr , const float * Slw , float * TT ,
110- char * FMM_stat , bool sphcoord , bool * edgeStop ,
124+ char * FMM_stat , bool sphcoord , bool * edgeStop , bool printbar ,
111125 HEAP_DATA * FMM_data , int * psize , int * pcap , int * NroIdx , int * pNdots )
112126{
113127 double dr = (nr > 1 )? rs [1 ] - rs [0 ] : 0.0 ;
@@ -141,6 +155,10 @@ HEAP_DATA * FastMarching_with_initial(
141155 float * pt ;
142156 char * pstat ;
143157
158+ // 打印进度条时每隔print_interv打印一次
159+ int size_bak = nr * ntp ;
160+ int last_barpercent = 0 , barpercent ;
161+
144162 // printf("loop start, size=%d\n", *psize );
145163 char travt_stat ;
146164 float maxtravt = -999 ;
@@ -247,14 +265,22 @@ HEAP_DATA * FastMarching_with_initial(
247265 newdata = idx ;
248266 FMM_data = HeapPush (FMM_data , psize , pcap , newdata , NroIdx , TT );
249267 * pstat = FMM_CLS ;
250- (pNdots )-- ;
268+ (* pNdots )-- ;
251269 }
252270
253271 }
254272 // print_FMM_HEAP(FMM_data, *psize, nr, nt, np, NroIdx, TT, gTr, gTt, gTp);
255273
256274 }
257275
276+
277+ // 打印进度条
278+ barpercent = 100 - (* pNdots * 100 ) / size_bak ;
279+ if (printbar && barpercent != last_barpercent ){
280+ printprogressBar ("Fast Marching... " , barpercent );
281+ last_barpercent = barpercent ;
282+ }
283+
258284 }
259285
260286
@@ -436,6 +462,7 @@ HEAP_DATA * init_source_TT_refinegrid(
436462 int maxodr , const float * Slw , float * TT ,
437463 char * FMM_stat , bool sphcoord ,
438464 int rfgfac , int rfgn , // refine grid factor and number of grids
465+ bool printbar ,
439466 HEAP_DATA * FMM_data , int * psize , int * pcap , int * NroIdx , int * pNdots )
440467{
441468 double dr = (nr > 1 )? rs [1 ] - rs [0 ] : 0.0 ;
@@ -546,7 +573,7 @@ HEAP_DATA * init_source_TT_refinegrid(
546573 rfg_ts , rfg_nt ,
547574 rfg_ps , rfg_np ,
548575 maxodr , rfg_Slw , rfg_TT ,
549- rfg_FMM_stat , sphcoord , edgeStop , // break loop in advance
576+ rfg_FMM_stat , sphcoord , edgeStop , printbar , // break loop in advance
550577 rfg_FMM_data , prfg_size , prfg_cap , rfg_NroIdx , & rfg_Ndots );
551578
552579 // record result to main TT
0 commit comments