Version: SMASH-2.2
vtkoutput.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2014-2021
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_SMASH_VTKOUTPUT_H_
11 #define SRC_INCLUDE_SMASH_VTKOUTPUT_H_
12 
13 #include <memory>
14 #include <string>
15 #include <utility>
16 
17 #include <boost/filesystem.hpp>
18 
19 #include "density.h"
20 #include "forwarddeclarations.h"
21 #include "outputinterface.h"
22 #include "outputparameters.h"
23 
24 namespace smash {
25 
30 class VtkOutput : public OutputInterface {
31  public:
39  VtkOutput(const bf::path &path, const std::string &name,
40  const OutputParameters &out_par);
41  ~VtkOutput();
42 
51  void at_eventstart(const Particles &particles, const int event_number,
52  const EventInfo &event) override;
53 
63  void at_eventend(const Particles &particles, const int event_number,
64  const EventInfo &event) override;
65 
74  void at_intermediate_time(const Particles &particles,
75  const std::unique_ptr<Clock> &clock,
76  const DensityParameters &dens_param,
77  const EventInfo &event) override;
78 
88  const ThermodynamicQuantity tq, const DensityType dt,
89  RectangularLattice<DensityOnLattice> &lattice) override;
90 
100  const ThermodynamicQuantity tq, const DensityType dt,
101  RectangularLattice<EnergyMomentumTensor> &lattice) override;
102 
109  void thermodynamics_output(const GrandCanThermalizer &gct) override;
110 
112  void fields_output(
113  const std::string name1, const std::string name2,
114  RectangularLattice<std::pair<ThreeVector, ThreeVector>> &lat) override;
115 
116  private:
122  void write(const Particles &particles);
123 
130  std::string make_filename(const std::string &description, int counter);
131 
138  std::string make_varname(const ThermodynamicQuantity tq,
139  const DensityType dens_type);
140 
148  template <typename T>
149  void write_vtk_header(std::ofstream &file, RectangularLattice<T> &lat,
150  const std::string &description);
151 
160  template <typename T, typename F>
161  void write_vtk_scalar(std::ofstream &file, RectangularLattice<T> &lat,
162  const std::string &varname, F &&function);
163 
172  template <typename T, typename F>
173  void write_vtk_vector(std::ofstream &file, RectangularLattice<T> &lat,
174  const std::string &varname, F &&function);
175 
177  const bf::path base_path_;
178 
180  int current_event_ = 0;
183 
200 };
201 
202 } // namespace smash
203 
204 #endif // SRC_INCLUDE_SMASH_VTKOUTPUT_H_
A class to pre-calculate and store parameters relevant for density calculation.
Definition: density.h:108
The GrandCanThermalizer class implements the following functionality:
Abstraction of generic output.
The Particles class abstracts the storage and manipulation of particles.
Definition: particles.h:33
A container class to hold all the arrays on the lattice and access them.
Definition: lattice.h:47
SMASH output in a paraview format, intended for simple visualization.
Definition: vtkoutput.h:30
void write_vtk_scalar(std::ofstream &file, RectangularLattice< T > &lat, const std::string &varname, F &&function)
Write a VTK scalar.
Definition: vtkoutput.cc:195
void at_eventend(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the final particle information list of an event to the VTK output.
Definition: vtkoutput.cc:77
int vtk_density_output_counter_
Number of density lattice vtk output in current event.
Definition: vtkoutput.h:185
void fields_output(const std::string name1, const std::string name2, RectangularLattice< std::pair< ThreeVector, ThreeVector >> &lat) override
Write fields in vtk output.
Definition: vtkoutput.cc:318
bool is_fields_output_
Is the VTK output an output for fields.
Definition: vtkoutput.h:199
int vtk_output_counter_
Number of vtk output in current event.
Definition: vtkoutput.h:182
void write(const Particles &particles)
Write the given particles to the output.
Definition: vtkoutput.cc:90
int vtk_fluidization_counter_
Number of fluidization output.
Definition: vtkoutput.h:193
int current_event_
Event number.
Definition: vtkoutput.h:180
VtkOutput(const bf::path &path, const std::string &name, const OutputParameters &out_par)
Create a new VTK output.
Definition: vtkoutput.cc:23
void write_vtk_header(std::ofstream &file, RectangularLattice< T > &lat, const std::string &description)
Write the VTK header.
Definition: vtkoutput.cc:178
const bf::path base_path_
filesystem path for output
Definition: vtkoutput.h:177
int vtk_fields_output_counter_
Number of fields output in current event.
Definition: vtkoutput.h:195
void write_vtk_vector(std::ofstream &file, RectangularLattice< T > &lat, const std::string &varname, F &&function)
Write a VTK vector.
Definition: vtkoutput.cc:213
std::string make_varname(const ThermodynamicQuantity tq, const DensityType dens_type)
Make a variable name given quantity and density type.
Definition: vtkoutput.cc:233
bool is_thermodynamics_output_
Is the VTK output a thermodynamics output.
Definition: vtkoutput.h:197
int vtk_tmn_landau_output_counter_
Number of Landau frame energy-momentum tensor vtk output in current event.
Definition: vtkoutput.h:189
void at_intermediate_time(const Particles &particles, const std::unique_ptr< Clock > &clock, const DensityParameters &dens_param, const EventInfo &event) override
Writes out all current particles.
Definition: vtkoutput.cc:80
void thermodynamics_output(const ThermodynamicQuantity tq, const DensityType dt, RectangularLattice< DensityOnLattice > &lattice) override
Prints the density lattice in VTK format on a grid.
Definition: vtkoutput.cc:239
int vtk_v_landau_output_counter_
Number of Landau rest frame velocity vtk output in current event.
Definition: vtkoutput.h:191
void at_eventstart(const Particles &particles, const int event_number, const EventInfo &event) override
Writes the initial particle information list of an event to the VTK output.
Definition: vtkoutput.cc:61
std::string make_filename(const std::string &description, int counter)
Make a file name given a description and a counter.
Definition: vtkoutput.cc:226
int vtk_tmn_output_counter_
Number of energy-momentum tensor lattice vtk output in current event.
Definition: vtkoutput.h:187
ThermodynamicQuantity
Represents thermodynamic quantities that can be printed out.
Definition: action.h:24
DensityType
Allows to choose which kind of density to calculate.
Definition: density.h:36
Structure to contain custom data for output.
Helper structure for Experiment to hold output options and parameters.