diagnostics.cpp
1 #include "../../misc/simple_io.hpp"
2 #include "../../misc/lazy_list.hpp"
3 #include "diagnostics.hpp"
4 
5 using std::cout;
6 using std::fstream;
7 using std::ios;
8 
9 void DisplayError(UniversalError const& eo)
10 {
11  cout.precision(16);
12  cout << eo.GetErrorMessage() << endl;
13  for(size_t i=0;i<eo.GetFields().size();++i)
14  cout << eo.GetFields()[i] << " = "<< eo.GetValues()[i] << endl;
15 }
16 
17 void write_error(const string& fname,
18  const UniversalError& eo)
19 {
20  ofstream f(fname.c_str());
21  f << eo.GetErrorMessage() << endl;
22  for(size_t i=0;eo.GetFields().size();++i)
23  f << eo.GetFields()[i] << " = " << eo.GetValues()[i] << endl;
24  f.close();
25 }
26 
27 namespace {
28 
29  class ExtensiveConservedCalculator: public LazyList<Extensive>
30  {
31  public:
32 
33  explicit ExtensiveConservedCalculator(const hdsim& sim):
34  sim_(sim), pg_(sim.getPhysicalGeometry()) {}
35 
36  size_t size(void) const
37  {
38  return sim_.getAllExtensives().size();
39  }
40 
41  Extensive operator[](size_t i) const
42  {
43  return sim_.getAllExtensives()[i];
44  }
45 
46  private:
47  const hdsim& sim_;
48  const PhysicalGeometry& pg_;
49  };
50 }
51 
53 {
54  Extensive res = lazy_sum(ExtensiveConservedCalculator(sim));
55  return res;
56 }
57 
58 vector<Vector2D> ReadVector2DFromFile(string filename)
59 {
60  fstream myFile (filename.c_str(),ios::in | ios::binary);
61  if(!myFile.good())
62  throw UniversalError("Error opening Vector2D file!!");
63  int N;
64  myFile.read(reinterpret_cast<char*>(&N),sizeof (int));
65  vector<Vector2D> res(static_cast<size_t>(N));
66  for(int i=0;i<N;++i)
67  {
68  double x,y;
69  myFile.read(reinterpret_cast<char*>(&x),sizeof(double));
70  myFile.read(reinterpret_cast<char*>(&y),sizeof(double));
71  res[static_cast<size_t>(i)]=Vector2D(x,y);
72  }
73  myFile.close();
74  return res;
75 }
76 
77 void WriteVector2DToFile(vector<Vector2D> const& vec,string filename)
78 {
79  if(vec.empty())
80  throw UniversalError("Attempted to write a vector of Vector2D to file with zero length");
81  fstream myFile (filename.c_str(),ios::out | ios::binary);
82  int n=static_cast<int>(vec.size());
83  myFile.write (reinterpret_cast<char*>(&n),sizeof(int));
84  for(int i=0;i<n;++i)
85  {
86  myFile.write (reinterpret_cast<const char*>(&vec[static_cast<size_t>(i)].x),
87  sizeof(double));
88  myFile.write (reinterpret_cast<const char*>(&vec[static_cast<size_t>(i)].y),
89  sizeof(double));
90  }
91  myFile.close();
92 }
Extensive variables.
Definition: extensive.hpp:18
Container for error reports.
Newtonian hydrodynamic simulation.
Definition: hdsim2d.hpp:43
std::vector< double > const & GetValues(void) const
Returns entry values.
void DisplayError(UniversalError const &eo)
Displays the UniversalError information.
Definition: diagnostics.cpp:9
Contains function that write simulation data to a file.
std::vector< std::string > const & GetFields(void) const
Returns entry fields.
Ordered list whose terms are evaluated lazily.
Definition: lazy_list.hpp:17
const PhysicalGeometry & getPhysicalGeometry(void) const
Access to physical geometry.
Definition: hdsim2d.cpp:712
virtual T operator[](const size_t i) const =0
Returns a single member of the list.
vector< Vector2D > ReadVector2DFromFile(string filename)
Reads a vector of Vector2D from a binary file.
Definition: diagnostics.cpp:58
void write_error(const string &fname, const UniversalError &eo)
Writes all the error information to a file.
Definition: diagnostics.cpp:17
T lazy_sum(const LazyList< T > &i2m)
Sums terms of a lazy list.
Definition: lazy_list.hpp:162
void WriteVector2DToFile(vector< Vector2D > const &vec, string filename)
Writes a vector of Vector2D to a binary file.
Definition: diagnostics.cpp:77
Extensive total_conserved(hdsim const &sim)
Calculates the total extensive conserved variables of the entire computational domain.
Definition: diagnostics.cpp:52
2D Mathematical vector
Definition: geometry.hpp:15
Base class for physical geometry.
virtual size_t size(void) const =0
Returns the length of the list.
std::string const & GetErrorMessage(void) const
Returns the error message.