main_loop_2d.cpp
1 #include "main_loop_2d.hpp"
2 #include "../../misc/universal_error.hpp"
3 #include "../../misc/simple_io.hpp"
4 #include "../../newtonian/two_dimensional/diagnostics.hpp"
5 #include "../two_dimensional/hdf5_diagnostics.hpp"
6 
7 DiagnosticFunction::~DiagnosticFunction(void) {}
8 
9 WriteTime::WriteTime(string const& fname):
10  fname_(fname) {}
11 
12 void WriteTime::operator()(hdsim const& sim)
13 {
14  write_number(sim.getTime(),fname_);
15 }
16 
18 
20 (double termination_time,
21  int max_cycles):
22  termination_time_(termination_time),
23  max_cycles_(max_cycles) {}
24 
26 {
27  if(sim.getCycle()>max_cycles_)
28  throw UniversalError("Error in SafeTimeTermination: too many iterations");
29 
30  return sim.getTime()<termination_time_;
31 }
32 
34  max_cycles_(max_cycles) {}
35 
37 {
38  return sim.getCycle()<max_cycles_;
39 }
40 
41 Manipulate::~Manipulate(void) {}
42 
44  TerminationCondition& term_cond,
45  void (hdsim::*time_advance_method)(void),
46  DiagnosticFunction* diagfunc,
47  Manipulate* manipulate)
48 {
49  while(term_cond(sim))
50  {
51  try
52  {
53  (sim.*time_advance_method)();
54  }
55  catch(UniversalError const& eo)
56  {
57  DisplayError(eo);
58  throw;
59  }
60  if(manipulate)
61  (*manipulate)(sim);
62  if(diagfunc)
63  (*diagfunc)(sim);
64  }
65 }
66 
67 WriteData::WriteData(string const& fname) :
68  fname_(fname) {}
69 
70 void WriteData::operator()(hdsim const& sim)
71 {
72  write_snapshot_to_hdf5(sim, fname_);
73 }
WriteData(const string &fname)
Class constructor.
WriteTime(const string &fname)
Class constructor.
Definition: main_loop_2d.cpp:9
Container for error reports.
Newtonian hydrodynamic simulation.
Definition: hdsim2d.hpp:43
void DisplayError(UniversalError const &eo)
Displays the UniversalError information.
Definition: diagnostics.cpp:9
double getTime(void) const
Returns the time.
Definition: hdsim2d.cpp:729
void operator()(const hdsim &sim)
Perform diagnostics.
void main_loop(hdsim &sim, TerminationCondition &term_cond, void(hdsim::*time_advance_method)(void), DiagnosticFunction *diagfunc=0, Manipulate *manipulate=0)
Simulation time advance loop.
int getCycle(void) const
Returns the number cycles.
Definition: hdsim2d.cpp:734
SafeTimeTermination(double termination_time, int max_cycles)
Class constructor.
CycleTermination(int max_cycles)
Class constructor.
void write_snapshot_to_hdf5(hdsim const &sim, string const &fname, const vector< DiagnosticAppendix *> &appendices=vector< DiagnosticAppendix *>())
Writes the simulation data into an HDF5 file.
Standard simulation time advance loop.
Abstract class for a diagnostic function.
Class for manual tweaking with the simulation data.
bool operator()(const hdsim &sim)
Returns true if the simulation should continue, false otherwise.
bool operator()(const hdsim &sim)
Returns true if the simulation should continue, false otherwise.
Abstract class for a termination condition for the main loop.
void operator()(const hdsim &sim)
Perform diagnostics.
void write_number(double num, string const &fname, int prec=6)
Writes a single number to a file.
Definition: simple_io.cpp:5
virtual ~TerminationCondition(void)
Virtual destructor.