00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "Teuchos_Time.hpp"
00033
00034 using namespace Teuchos;
00035
00036
00037 Time::Time(const string& name, bool start)
00038 : startTime_(0), totalTime_(0), isRunning_(false), name_(name)
00039 {
00040 if(start) this->start();
00041 }
00042
00043 void Time::start(bool reset)
00044 {
00045 isRunning_ = true;
00046 startTime_ = wallTime();
00047 if(reset) totalTime_ = 0;
00048 }
00049
00050 double Time::stop()
00051 {
00052 totalTime_ += ( wallTime() - startTime_ );
00053 isRunning_ = false;
00054 startTime_ = 0;
00055 return totalTime_;
00056 }
00057
00058
00059
00060
00061 double Time::wallTime()
00062 {
00063
00064
00065
00066 #ifdef HAVE_MPI
00067
00068 int mpiInitialized;
00069 MPI_Initialized(&mpiInitialized);
00070
00071 if( mpiInitialized ) {
00072
00073 return(MPI_Wtime());
00074
00075 }
00076 else {
00077
00078 clock_t start;
00079
00080 start = clock();
00081 return( (double)( start ) / CLOCKS_PER_SEC );
00082
00083 }
00084
00085 #elif ICL
00086
00087 clock_t start;
00088
00089 start = clock();
00090 return( (double)( start ) / CLOCKS_PER_SEC );
00091
00092 #else
00093
00094 # ifndef MINGW
00095 struct timeval tp;
00096 static long start = 0, startu;
00097 if (!start)
00098 {
00099 gettimeofday(&tp, NULL);
00100 start = tp.tv_sec;
00101 startu = tp.tv_usec;
00102 return(0.0);
00103 }
00104 gettimeofday(&tp, NULL);
00105 return( ((double) (tp.tv_sec - start)) + (tp.tv_usec-startu)/1000000.0 );
00106 # else
00107 return( (double) clock() / CLOCKS_PER_SEC );
00108 # endif
00109
00110 #endif
00111
00112 }