SlowDown Algorithmic Regularization (SDAR)
Algorithmic Regularization with slowdown method for integrating few-body motions
AR/profile.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <sys/time.h>
4 
5 namespace AR{
7  struct TimeMeasure{
8  // time measure function
9  static double get_wtime(){
10  struct timeval tv;
11  gettimeofday(&tv, NULL);
12  return tv.tv_sec + 1.e-6 * tv.tv_usec;
13  }
14  double time;
15 
16  // time measure start
17  void start() {
18  time -= get_wtime();
19  }
20 
21  // time measure end
22  void end() {
23  time += get_wtime();
24  }
25  };
26 
28  class Profile {
29  public:
30  typedef long long unsigned int UInt64;
31  UInt64 step_count_sum; // number of integration steps summation
32  UInt64 step_count_tsyn_sum; // number of integration steps during time synchronization summation
33  UInt64 step_count; // number of integration steps from last step
34  UInt64 step_count_tsyn; // number of integration steps during time synchronization from last step
35 
36  // constructor
38 
39  // clear function
40  void clear() {
43  }
44 
46 
50  void printColumnTitle(std::ostream & _fout, const int _width=20) {
51  _fout<<std::setw(_width)<<"Nstep(sum)"
52  <<std::setw(_width)<<"Nstep_tsyn(sum)"
53  <<std::setw(_width)<<"Nstep"
54  <<std::setw(_width)<<"Nstep_tsyn";
55  }
56 
58 
62  void printColumn(std::ostream & _fout, const int _width=20){
63  _fout<<std::setw(_width)<<step_count_sum
64  <<std::setw(_width)<<step_count_tsyn_sum
65  <<std::setw(_width)<<step_count
66  <<std::setw(_width)<<step_count_tsyn;
67  }
68 
70 
72  void writeBinary(FILE *_fout) {
73  fwrite(this, sizeof(*this),1,_fout);
74  }
75 
77 
79  void readBinary(FILE *_fin) {
80  size_t rcount = fread(this, sizeof(*this), 1, _fin);
81  if (rcount<1) {
82  std::cerr<<"Error: Data reading fails! requiring data number is 1, only obtain "<<rcount<<".\n";
83  abort();
84  }
85  }
86  };
87 }
AR::Profile::printColumnTitle
void printColumnTitle(std::ostream &_fout, const int _width=20)
print titles of class members using column style
Definition: AR/profile.h:50
AR
Algorithmic regularization (time transformed explicit symplectic integrator) namespace.
Definition: force.h:5
AR::Profile::step_count
UInt64 step_count
Definition: AR/profile.h:33
AR::Profile::readBinary
void readBinary(FILE *_fin)
read class data with BINARY format and initial the array
Definition: AR/profile.h:79
AR::TimeMeasure
Profile class to measure the performance.
Definition: AR/profile.h:7
AR::TimeMeasure::get_wtime
static double get_wtime()
Definition: AR/profile.h:9
AR::Profile::step_count_tsyn
UInt64 step_count_tsyn
Definition: AR/profile.h:34
AR::Profile::step_count_sum
UInt64 step_count_sum
Definition: AR/profile.h:31
AR::Profile
profiling class for AR integrator
Definition: AR/profile.h:28
AR::Profile::Profile
Profile()
Definition: AR/profile.h:37
AR::Profile::printColumn
void printColumn(std::ostream &_fout, const int _width=20)
print data of class members using column style
Definition: AR/profile.h:62
AR::Profile::writeBinary
void writeBinary(FILE *_fout)
write class data with BINARY format
Definition: AR/profile.h:72
AR::TimeMeasure::start
void start()
Definition: AR/profile.h:17
AR::TimeMeasure::time
double time
Definition: AR/profile.h:14
AR::Profile::step_count_tsyn_sum
UInt64 step_count_tsyn_sum
Definition: AR/profile.h:32
AR::Profile::clear
void clear()
Definition: AR/profile.h:40
AR::TimeMeasure::end
void end()
Definition: AR/profile.h:22
AR::Profile::UInt64
long long unsigned int UInt64
Definition: AR/profile.h:30