hdf5_diagnostics1d.cpp
1 #include "hdf5_diagnostics1d.hpp"
2 
3 using H5::PredType;
4 using H5::DataSet;
5 using H5::FloatType;
6 using H5::DataSpace;
7 using H5::H5File;
8 using std::vector;
9 
10 namespace {
12  (H5File& file,
13  vector<double> const& num_list,
14  string const& caption)
15  {
16  hsize_t dimsf[1];
17  dimsf[0] = num_list.size();
18  DataSpace dataspace(1, dimsf);
19 
20  FloatType datatype(PredType::NATIVE_DOUBLE);
21  datatype.setOrder(H5T_ORDER_LE);
22 
23  DataSet dataset = file.createDataSet(H5std_string(caption),
24  datatype,
25  dataspace);
26 
27  /* To do: Replace raw pointers with smart pointers
28  */
29  double *data = new double[static_cast<int>(num_list.size())];
30  for(size_t i=0;i<num_list.size();++i)
31  data[i] = num_list[i];
32  dataset.write(data, PredType::NATIVE_DOUBLE);
33  delete[] data;
34  }
35 }
36 
38 (hdsim1D const& sim,
39  string const& fname)
40 {
41  // Create file
42  H5File file(H5std_string(fname),
43  H5F_ACC_TRUNC);
44 
45  // Write time
46  {
47  vector<double> time_vector(1,0);
48  time_vector[0] = sim.GetTime();
49  write_std_vector_to_hdf5(file, time_vector, "time");
50  }
51 
52  // Write grid
53  {
54  const vector<double>& grid = sim.getState().getVertices();
55  vector<double> grid_vector(grid.size()-1);
56  for(size_t i=0;i<grid_vector.size();++i)
57  grid_vector[i] = 0.5*(grid.at(i)+grid.at(i+1));
58  write_std_vector_to_hdf5(file, grid_vector, "grid");
59  }
60 
61  // Write Hydrodynamic variables
62  {
63  const vector<ComputationalCell>& cells = sim.getState().getCells();
64  const size_t n = cells.size();
65  vector<double> density_vector(n);
66  vector<double> pressure_vector(n);
67  vector<double> x_velocity_vector(n);
68  vector<double> y_velocity_vector(n);
69  // const vector<Primitive>& cells = sim.getCells();
70  for(size_t i=0;i<n;++i){
71  density_vector[size_t(i)] = cells.at(i).density;
72  pressure_vector[size_t(i)] = cells.at(i).pressure;
73  x_velocity_vector[size_t(i)] = cells.at(i).velocity.x;
74  y_velocity_vector[size_t(i)] = cells.at(i).velocity.y;
75  }
76  write_std_vector_to_hdf5(file, density_vector, "density");
77  write_std_vector_to_hdf5(file, pressure_vector, "pressure");
78  write_std_vector_to_hdf5(file, x_velocity_vector, "x_velocity");
79  write_std_vector_to_hdf5(file, y_velocity_vector, "y_velocity");
80  }
81 
82  // Write tracers
83  {
84  const vector<string>& tracer_names =
86  const vector<ComputationalCell>& cells = sim.getState().getCells();
87  const size_t n = cells.size();
88  const size_t m = cells.at(0).tracers.size();
89  vector<double> tracers(n);
90  for(size_t i=0;i<m;++i){
91  for(size_t j=0;j<n;++j){
92  tracers.at(j) = cells.at(j).tracers.at(i);
93  }
94  write_std_vector_to_hdf5(file, tracers, tracer_names.at(i));
95  }
96  }
97 }
Output method formatted in hdf5.
Newtonian hydrodynamic simulation.
Definition: hdsim.hpp:25
void write_std_vector_to_hdf5(const Group &file, const vector< T > &data, const string &caption, const DataType &dt)
Master function for writing vectors to hdf5 files.
Definition: hdf5_utils.hpp:31
const vector< double > & getVertices(void) const
Access to vertices.
double GetTime(void) const
Returns the time of the simulation.
Definition: hdsim.cpp:15
const TracerStickerNames & getTracerStickerNames(void) const
Access to tracer and sticker names.
const vector< ComputationalCell > & getCells(void) const
Access to hydro cells.
std::vector< std::string > tracer_names
The names of the tracers.
const SimulationState1D & getState(void) const
Access to computational domain and hydro cells.
Definition: hdsim.cpp:25
void write_snapshot_to_hdf5(hdsim1D const &sim, string const &fname)
Writes all hydrodynamic data to an hdf5 file.