aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/th.cc
diff options
context:
space:
mode:
authoreschnett <>2001-03-01 11:40:00 +0000
committereschnett <>2001-03-01 11:40:00 +0000
commit310f0ea48d18866b773136aed11200b6eda6378b (patch)
tree445d3e34ce8b89812994b6614f7bc9f4acbc7fe2 /Carpet/CarpetLib/src/th.cc
Initial revision
darcs-hash:20010301114010-f6438-12fb8a9ffcc80e86c0a97e37b5b0dae0dbc59b79.gz
Diffstat (limited to 'Carpet/CarpetLib/src/th.cc')
-rw-r--r--Carpet/CarpetLib/src/th.cc81
1 files changed, 81 insertions, 0 deletions
diff --git a/Carpet/CarpetLib/src/th.cc b/Carpet/CarpetLib/src/th.cc
new file mode 100644
index 000000000..0ad9beca1
--- /dev/null
+++ b/Carpet/CarpetLib/src/th.cc
@@ -0,0 +1,81 @@
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/th.cc,v 1.14 2004/03/23 19:30:14 schnetter Exp $
+
+#include <assert.h>
+#include <math.h>
+
+#include <iostream>
+
+#include "cctk.h"
+
+#include "defs.hh"
+#include "gh.hh"
+
+#include "th.hh"
+
+using namespace std;
+
+
+
+// Constructors
+template<int D>
+th<D>::th (gh<D>& h, const CCTK_REAL basedelta)
+ : h(h), delta(basedelta) {
+ h.add(this);
+}
+
+// Destructors
+template<int D>
+th<D>::~th () {
+ h.remove(this);
+}
+
+// Modifiers
+template<int D>
+void th<D>::recompose () {
+ times.resize(h.reflevels());
+ deltas.resize(h.reflevels());
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ const int old_mglevels = times.at(rl).size();
+ CCTK_REAL mgtime;
+ // Select default time
+ if (old_mglevels==0 && rl==0) {
+ mgtime = 0;
+ } else if (old_mglevels==0) {
+ mgtime = times.at(rl-1).at(0);
+ } else {
+ mgtime = times.at(rl).at(old_mglevels-1);
+ }
+ times.at(rl).resize(h.mglevels(rl,0), mgtime);
+ deltas.at(rl).resize(h.mglevels(rl,0));
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ if (rl==0 && ml==0) {
+ deltas.at(rl).at(ml) = delta;
+ } else if (ml==0) {
+ deltas.at(rl).at(ml) = deltas.at(rl-1).at(ml) / h.reffact;
+ } else {
+ deltas.at(rl).at(ml) = deltas.at(rl).at(ml-1) * h.mgfact;
+ }
+ }
+ }
+}
+
+
+
+// Output
+template<int D>
+void th<D>::output (ostream& os) const {
+ os << "th<" << D << ">:"
+ << "times={";
+ for (int rl=0; rl<h.reflevels(); ++rl) {
+ for (int ml=0; ml<h.mglevels(rl,0); ++ml) {
+ if (!(rl==0 && ml==0)) os << ",";
+ os << rl << ":" << ml << ":"
+ << times.at(rl).at(ml) << "(" << deltas.at(rl).at(ml) << ")";
+ }
+ }
+ os << "}";
+}
+
+
+
+template class th<3>;