#include #include #include #include #include #include "defs.hh" #include "gh.hh" #include "th.hh" using namespace std; set th::allth; // Constructors th::th (gh& h_, bool const time_interpolation_during_regridding_) : h(h_), time_interpolation_during_regridding (time_interpolation_during_regridding_), timelevels(0) { reffacts.resize(1, 1); allth.insert(this); h.insert(this); } th::th (gh& h_, int const timelevels_, vector const& reffacts_, bool const time_interpolation_during_regridding_) : h(h_), time_interpolation_during_regridding (time_interpolation_during_regridding_), timelevels(timelevels_), reffacts(reffacts_) { assert (reffacts.size() >= 1); assert (reffacts.front() == 1); for (size_t n = 1; n < reffacts.size(); ++ n) { assert (reffacts.AT(n) >= reffacts.AT(n-1)); assert (reffacts.AT(n) % reffacts.AT(n-1) == 0); } allth.insert(this); h.insert(this); } // Destructors th::~th () { h.erase(this); allth.erase(this); } // Modifiers void th::regrid () { CCTK_REAL const basetime = 0.0; CCTK_REAL const basedelta = 1.0; const int old_mglevels = times.size(); times.resize(h.mglevels()); deltas.resize(h.mglevels()); for (int ml=0; ml0 and alpha<1); times.AT(ml).AT(rl).AT(tl) = (1-alpha) * times.AT(ml).AT(rl-1).AT(ctl ) + ( alpha) * times.AT(ml).AT(rl-1).AT(ctl+1); } } } else { times.AT(ml).AT(rl) = times.AT(ml).AT(rl-1); } } } } for (int ml=0; ml0; --tl) { set_time (ml,rl,tl, get_time(ml,rl,tl-1)); } set_time (ml,rl,0, get_time(ml,rl,0) + get_delta(ml,rl)); } void th::retreat_time (int const ml, int const rl) { CCTK_REAL const t = get_time(ml,rl,0); for (int tl=0; tl::const_iterator thi = allth.begin(); thi != allth.end(); ++ thi) { mem += memoryof(**thi); } return mem; } // Input istream& th::input (istream& is) { skipws (is); consume (is, "th:{"); consume (is, "timelevels="); is >> timelevels; consume (is, ","); consume (is, "reffacts="); is >> reffacts; consume (is, ","); consume (is, "times="); is >> times; consume (is, ","); consume (is, "deltas="); is >> deltas; consume (is, "}"); return is; } // Output ostream& th::output (ostream& os) const { os << "th:{" << "timelevels=" << timelevels << "," << "reffacts=" << reffacts << "," << "times=" << times << "," << "deltas=" << deltas << "}"; return os; }