aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/modes.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/Carpet/src/modes.cc')
-rw-r--r--Carpet/Carpet/src/modes.cc185
1 files changed, 90 insertions, 95 deletions
diff --git a/Carpet/Carpet/src/modes.cc b/Carpet/Carpet/src/modes.cc
index e831b2dd8..891ba2085 100644
--- a/Carpet/Carpet/src/modes.cc
+++ b/Carpet/Carpet/src/modes.cc
@@ -12,7 +12,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/modes.cc,v 1.9 2004/08/07 20:07:27 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/modes.cc,v 1.1 2004/01/25 14:57:28 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_modes_cc);
}
@@ -57,7 +57,7 @@ namespace Carpet {
// assert (mglevel>=0 && mglevel<mglevels);
// assert (reflevel>=0 && reflevel<reflevels);
// assert (map>=0 && map<maps);
-// assert (vhh.at(map)->local_components(reflevel)==1 || component==-1);
+// assert (vhh[map]->local_components(reflevel)==1 || component==-1);
}
@@ -76,55 +76,51 @@ namespace Carpet {
mglevel = ml;
mglevelfact = ipow(mgfact, mglevel);
- // TODO: this could also just be "mglevel" instead
cgh->cctk_convlevel = basemglevel + mglevel;
- // Set time and space delta
+ // Set time delta
cgh->cctk_delta_time = delta_time * mglevelfact;
- for (int d=0; d<dim; ++d) {
- cgh->cctk_origin_space[d] = origin_space.at(mglevel)[d];
- cgh->cctk_delta_space[d] = delta_space[d] * mglevelfact;
- }
// Set array information
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) != CCTK_GF) {
+ const int ml = mglevel;
const int rl = 0;
const int m = 0;
const int c = CCTK_MyProc(cgh);
- const ibbox& base = arrdata.at(group).at(m).hh->bases.at(rl).at(ml);
- const bbvect& obnds = arrdata.at(group).at(m).hh->outer_boundaries.at(rl).at(c);
- const ibbox& ext = arrdata.at(group).at(m).dd->boxes.at(rl).at(c).at(ml).exterior;
+ const ibbox& base = arrdata[group][m].hh->bases[rl][ml];
+ const bbvect& obnds = arrdata[group][m].hh->outer_boundaries[rl][c];
+ const ibbox& ext = arrdata[group][m].dd->boxes[rl][c][ml].exterior;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
- = arrdata.at(group).at(m).dd->lghosts;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.nghostzones))
+ = arrdata[group][m].dd->lghosts;
+ ivect::ref(const_cast<int*>(groupdata[group].info.gsh))
= base.shape() / base.stride();
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lsh))
= ext.shape() / ext.stride();
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lbnd))
= (ext.lower() - base.lower()) / ext.stride();
- ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.ubnd))
= (ext.upper() - base.lower()) / ext.stride();
for (int d=0; d<dim; ++d) {
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = obnds[d][0];
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = obnds[d][1];
+ const_cast<int*>(groupdata[group].info.bbox)[2*d ] = obnds[d][0];
+ const_cast<int*>(groupdata[group].info.bbox)[2*d+1] = obnds[d][1];
}
for (int d=0; d<dim; ++d) {
- assert (groupdata.at(group).info.lsh[d]>=0);
- assert (groupdata.at(group).info.lsh[d]<=groupdata.at(group).info.gsh[d]);
- if (d>=groupdata.at(group).info.dim) {
- assert (groupdata.at(group).info.lsh[d]==1);
+ assert (groupdata[group].info.lsh[d]>=0);
+ assert (groupdata[group].info.lsh[d]<=groupdata[group].info.gsh[d]);
+ if (d>=groupdata[group].info.dim) {
+ assert (groupdata[group].info.lsh[d]==1);
}
- assert (groupdata.at(group).info.lbnd[d]>=0);
- assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1);
- assert (groupdata.at(group).info.ubnd[d]<groupdata.at(group).info.gsh[d]);
- assert (groupdata.at(group).info.lbnd[d] + groupdata.at(group).info.lsh[d] - 1
- == groupdata.at(group).info.ubnd[d]);
- assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1);
+ assert (groupdata[group].info.lbnd[d]>=0);
+ assert (groupdata[group].info.lbnd[d]<=groupdata[group].info.ubnd[d]+1);
+ assert (groupdata[group].info.ubnd[d]<groupdata[group].info.gsh[d]);
+ assert (groupdata[group].info.lbnd[d] + groupdata[group].info.lsh[d] - 1
+ == groupdata[group].info.ubnd[d]);
+ assert (groupdata[group].info.lbnd[d]<=groupdata[group].info.ubnd[d]+1);
}
const int numvars = CCTK_NumVarsInGroupI (group);
@@ -133,16 +129,21 @@ namespace Carpet {
assert (firstvar>=0);
const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
- assert (arrdata.at(group).at(m).hh->is_local(rl,c));
+ assert (rl>=0 && rl<(int)arrdata[group][m].dd->boxes.size());
+ assert (c>=0 && c<(int)arrdata[group][m].dd->boxes[rl].size());
+ assert (ml>=0 && ml<(int)arrdata[group][m].dd->boxes[rl][c].size());
+ assert (arrdata[group][m].hh->is_local(rl,c));
+ assert (group<(int)arrdata.size());
for (int var=0; var<numvars; ++var) {
- assert (firstvar+var<CCTK_NumVars());
+ assert (var<(int)arrdata[group][m].data.size());
for (int tl=0; tl<num_tl; ++tl) {
- ggf<dim> * const ff = arrdata.at(group).at(m).data.at(var);
+ ggf<dim> * const ff = arrdata[group][m].data[var];
if (ff) {
gdata<dim> * const data = (*ff) (-tl, rl, c, ml);
assert (data);
- cgh->data[firstvar+var][tl] = data->storage();
+ cgh->data[firstvar+var][tl]
+ = (*ff) (-tl, rl, c, ml)->storage();
} else {
cgh->data[firstvar+var][tl] = 0;
}
@@ -163,15 +164,8 @@ namespace Carpet {
if (mglevel == -1) return; // early return
- // Save and unset time and space delta
+ // Save and unset time delta
delta_time = cgh->cctk_delta_time / mglevelfact;
- cgh->cctk_delta_time = 0.0;
- for (int d=0; d<dim; ++d) {
- origin_space.at(mglevel)[d] = cgh->cctk_origin_space[d];
- delta_space[d] = cgh->cctk_delta_space[d] / mglevelfact;
- cgh->cctk_origin_space[d] = -424242.0;
- cgh->cctk_delta_space[d] = 0.0;
- }
// Set array information
for (int group=0; group<CCTK_NumGroups(); ++group) {
@@ -179,21 +173,21 @@ namespace Carpet {
const int m = 0;
-// ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+// ivect::ref(const_cast<int*>(groupdata[group].info.nghostzones))
// = 0xdead;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
- = arrdata.at(group).at(m).dd->lghosts;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.nghostzones))
+ = arrdata[group][m].dd->lghosts;
+ ivect::ref(const_cast<int*>(groupdata[group].info.gsh))
= 0xdead;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lsh))
= 0xdead;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lbnd))
= -0xdead;
- ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.ubnd))
= 0xdead;
for (int d=0; d<dim; ++d) {
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = 0xdead;
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = 0xdead;
+ const_cast<int*>(groupdata[group].info.bbox)[2*d ] = 0xdead;
+ const_cast<int*>(groupdata[group].info.bbox)[2*d+1] = 0xdead;
}
const int numvars = CCTK_NumVarsInGroupI (group);
@@ -204,7 +198,7 @@ namespace Carpet {
assert (group<(int)arrdata.size());
for (int var=0; var<numvars; ++var) {
- assert (firstvar+var<CCTK_NumVars());
+ assert (var<(int)arrdata[group][m].data.size());
for (int tl=0; tl<num_tl; ++tl) {
cgh->data[firstvar+var][tl] = 0;
}
@@ -237,9 +231,9 @@ namespace Carpet {
cgh->cctk_timefac = reflevelfact;
// Set current time
- assert (mglevel>=0 && mglevel<(int)leveltimes.size());
- assert (reflevel>=0 && reflevel<(int)leveltimes.at(mglevel).size());
- cgh->cctk_time = leveltimes.at(mglevel).at(reflevel);
+ assert (mglevel>=0 && mglevel<leveltimes.size());
+ assert (reflevel>=0 && reflevel<leveltimes[mglevel].size());
+ cgh->cctk_time = leveltimes[mglevel][reflevel];
assert (is_level_mode());
}
@@ -252,9 +246,9 @@ namespace Carpet {
if (reflevel == -1) return; // early return
// Save and unset current time
- assert (mglevel>=0 && mglevel<(int)leveltimes.size());
- assert (reflevel>=0 && reflevel<(int)leveltimes.at(mglevel).size());
- leveltimes.at(mglevel).at(reflevel) = cgh->cctk_time;
+ assert (mglevel>=0 && mglevel<leveltimes.size());
+ assert (reflevel>=0 && reflevel<leveltimes[mglevel].size());
+ leveltimes[mglevel][reflevel] = cgh->cctk_time;
cgh->cctk_time = global_time;
reflevel = -1;
@@ -275,24 +269,25 @@ namespace Carpet {
assert (m>=0 && m<maps);
Checkpoint ("Entering singlemap mode");
- carpetGH.map = map = m;
+ map = m;
+// TODO: disable temporarily
+// cgh->cctk_map = map;
+ assert (map==0);
// Set grid shape
- const ibbox& coarseext = vdd.at(map)->bases.at(0 ).at(mglevel).exterior;
- const ibbox& baseext = vdd.at(map)->bases.at(reflevel).at(mglevel).exterior;
+ const ibbox& baseext = vdd[map]->bases[reflevel][mglevel].exterior;
assert (all (baseext.lower() % baseext.stride() == 0));
- assert (all ((baseext.lower() - coarseext.lower()) % baseext.stride() == 0));
- ivect::ref(cgh->cctk_levoff) = (baseext.lower() - coarseext.lower()) / baseext.stride();
+ ivect::ref(cgh->cctk_levoff) = baseext.lower() / baseext.stride();
ivect::ref(cgh->cctk_levoffdenom) = 1;
ivect::ref(cgh->cctk_gsh) = baseext.shape() / baseext.stride();
- assert (all (vdd.at(map)->lghosts == vdd.at(map)->ughosts));
- ivect::ref(cgh->cctk_nghostzones) = vdd.at(map)->lghosts;
+ assert (all (vdd[map]->lghosts == vdd[map]->ughosts));
+ ivect::ref(cgh->cctk_nghostzones) = vdd[map]->lghosts;
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) == CCTK_GF) {
- ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.gsh))
= ivect::ref(cgh->cctk_gsh);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ ivect::ref(const_cast<int*>(groupdata[group].info.nghostzones))
= ivect::ref(cgh->cctk_nghostzones);
}
}
@@ -312,18 +307,20 @@ namespace Carpet {
ivect::ref(cgh->cctk_levoffdenom) = 0;
ivect::ref(cgh->cctk_gsh) = 0xdead;
// ivect::ref(cgh->cctk_nghostzones) = 0xdead;
- ivect::ref(cgh->cctk_nghostzones) = vdd.at(map)->lghosts;
+ ivect::ref(cgh->cctk_nghostzones) = vdd[map]->lghosts;
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) == CCTK_GF) {
- ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.gsh))
= ivect::ref(cgh->cctk_gsh);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
+ ivect::ref(const_cast<int*>(groupdata[group].info.nghostzones))
= ivect::ref(cgh->cctk_nghostzones);
}
}
- carpetGH.map = map = -1;
+ map = -1;
+// TODO: disable temporarily
+// cgh->cctk_map = -0xdead;
assert (is_level_mode());
}
@@ -335,15 +332,15 @@ namespace Carpet {
void enter_local_mode (cGH * const cgh, int const c)
{
assert (is_singlemap_mode());
- assert (c>=0 && c<vhh.at(map)->components(reflevel));
+ assert (c>=0 && c<vhh[map]->components(reflevel));
Checkpoint ("Entering local mode");
component = c;
// Set cGH fields
- const ibbox& baseext = vdd.at(map)->bases.at(reflevel).at(mglevel).exterior;
- const bbvect& obnds = vhh.at(map)->outer_boundaries.at(reflevel).at(component);
- const ibbox& ext = vdd.at(map)->boxes.at(reflevel).at(component).at(mglevel).exterior;
+ const ibbox& baseext = vdd[map]->bases[reflevel][mglevel].exterior;
+ const bbvect& obnds = vhh[map]->outer_boundaries[reflevel][component];
+ const ibbox& ext = vdd[map]->boxes[reflevel][component][mglevel].exterior;
ivect::ref(cgh->cctk_lsh) = ext.shape() / ext.stride();
ivect::ref(cgh->cctk_lbnd)
@@ -376,17 +373,17 @@ namespace Carpet {
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) == CCTK_GF) {
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lsh))
= ivect::ref(cgh->cctk_lsh);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lbnd))
= ivect::ref(cgh->cctk_lbnd);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.ubnd))
= ivect::ref(cgh->cctk_ubnd);
for (int d=0; d<dim; ++d) {
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d ]
+ const_cast<int*>(groupdata[group].info.bbox)[2*d ]
= cgh->cctk_bbox[2*d ];
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1]
+ const_cast<int*>(groupdata[group].info.bbox)[2*d+1]
= cgh->cctk_bbox[2*d+1];
}
@@ -396,18 +393,16 @@ namespace Carpet {
assert (firstvar>=0);
const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
-// assert (vhh.at(map)->is_local(reflevel,component));
+// assert (vhh[map]->is_local(reflevel,component));
assert (group<(int)arrdata.size());
for (int var=0; var<numvars; ++var) {
- assert (firstvar+var<CCTK_NumVars());
+ assert (var<(int)arrdata[group][map].data.size());
for (int tl=0; tl<num_tl; ++tl) {
- ggf<dim> * const ff = arrdata.at(group).at(map).data.at(var);
+ ggf<dim> * const ff = arrdata[group][map].data[var];
if (ff) {
- gdata<dim> * const data
- = (*ff) (-tl, reflevel, component, mglevel);
- assert (data);
- cgh->data[firstvar+var][tl] = data->storage();
+ cgh->data[firstvar+var][tl]
+ = (*ff) (-tl, reflevel, component, mglevel)->storage();
} else {
cgh->data[firstvar+var][tl] = 0;
}
@@ -448,17 +443,17 @@ namespace Carpet {
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) == CCTK_GF) {
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lsh))
= ivect::ref(cgh->cctk_lsh);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.lbnd))
= ivect::ref(cgh->cctk_lbnd);
- ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd))
+ ivect::ref(const_cast<int*>(groupdata[group].info.ubnd))
= ivect::ref(cgh->cctk_ubnd);
for (int d=0; d<dim; ++d) {
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d ]
+ const_cast<int*>(groupdata[group].info.bbox)[2*d ]
= cgh->cctk_bbox[2*d ];
- const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1]
+ const_cast<int*>(groupdata[group].info.bbox)[2*d+1]
= cgh->cctk_bbox[2*d+1];
}
@@ -470,7 +465,7 @@ namespace Carpet {
assert (group<(int)arrdata.size());
for (int var=0; var<numvars; ++var) {
- assert (firstvar+var<CCTK_NumVars());
+ assert (var<(int)arrdata[group][map].data.size());
for (int tl=0; tl<num_tl; ++tl) {
cgh->data[firstvar+var][tl] = 0;
}
@@ -658,7 +653,7 @@ namespace Carpet {
bool component_iterator::done () const
{
return (grouptype == CCTK_GF
- ? c >= vhh.at(map)->components(reflevel)
+ ? c >= vhh[map]->components(reflevel)
: c >= CCTK_nProcs(cgh));
}
@@ -693,7 +688,7 @@ namespace Carpet {
bool local_component_iterator::done () const
{
return c >= (grouptype == CCTK_GF
- ? vhh.at(map)->components(reflevel)
+ ? vhh[map]->components(reflevel)
: CCTK_nProcs(cgh));
}
@@ -702,7 +697,7 @@ namespace Carpet {
do {
++ c;
} while (! done() && ! (grouptype == CCTK_GF
- ? vhh.at(map)->is_local(reflevel, c)
+ ? vhh[map]->is_local(reflevel, c)
: c == CCTK_MyProc(cgh)));
if (! done()) {
leave_local_mode (cgh);