// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/th.hh,v 1.9 2003/01/03 15:49:36 schnetter Exp $ #ifndef TH_HH #define TH_HH #include #include #include #include "cctk.h" #include "defs.hh" #include "gh.hh" using namespace std; // Forward declaration template class th; // Output template ostream& operator<< (ostream& os, const th& t); // The time hierarchy (information about the current time) template class th { public: // should be readonly // Fields gh *h; // hierarchy private: CCTK_REAL delta; // time step vector > times; // current times vector > deltas; // time steps public: // Constructors th (gh* h, const CCTK_REAL basedelta); // Destructors ~th (); // Modifiers void recompose (); // Time management CCTK_REAL get_time (const int rl, const int ml) const { assert (rl>=0 && rlreflevels()); assert (ml>=0 && mlmglevels(rl,0)); return times[rl][ml]; } void set_time (const int rl, const int ml, const CCTK_REAL t) { assert (rl>=0 && rlreflevels()); assert (ml>=0 && mlmglevels(rl,0)); times[rl][ml] = t; } void advance_time (const int rl, const int ml) { set_time(rl,ml, get_time(rl,ml) + get_delta(rl,ml)); } CCTK_REAL get_delta (const int rl, const int ml) const { assert (rl>=0 && rlreflevels()); assert (ml>=0 && mlmglevels(rl,0)); return deltas[rl][ml]; } void set_delta (const int rl, const int ml, const CCTK_REAL dt) { assert (rl>=0 && rlreflevels()); assert (ml>=0 && mlmglevels(rl,0)); deltas[rl][ml] = dt; } CCTK_REAL time (const int tl, const int rl, const int ml) const { assert (rl>=0 && rlreflevels()); assert (ml>=0 && mlmglevels(rl,0)); return get_time(rl, ml) + tl * get_delta(rl, ml); } // Output void output (ostream& os) const; }; template inline ostream& operator<< (ostream& os, const th& t) { t.output(os); return os; } #endif // TH_HH