aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortradke <schnetter@cct.lsu.edu>2005-03-16 14:09:00 +0000
committertradke <schnetter@cct.lsu.edu>2005-03-16 14:09:00 +0000
commit19c58432407fc822f2aadb0db1b8485d17fd1f35 (patch)
treeb8cddf20dd6ab6103eaab04bd506711c63465599
parente0825134160af7708d4233dad8600d7f51ad1020 (diff)
Carpet: simplify SyncGroup(); merge SyncGFArrayGroup() and SyncGFGroup() into SyncGVGroup()
darcs-hash:20050316140925-3fd61-fd64d2290d26975fa5521f57f0d83442d5af7feb.gz
-rw-r--r--Carpet/Carpet/src/Comm.cc79
-rw-r--r--Carpet/Carpet/src/Restrict.cc2
-rw-r--r--Carpet/Carpet/src/carpet.hh2
3 files changed, 18 insertions, 65 deletions
diff --git a/Carpet/Carpet/src/Comm.cc b/Carpet/Carpet/src/Comm.cc
index 4e66f7ace..bc5b81991 100644
--- a/Carpet/Carpet/src/Comm.cc
+++ b/Carpet/Carpet/src/Comm.cc
@@ -20,7 +20,6 @@ namespace Carpet {
const char *groupname );
static void ProlongateGroupBoundaries ( const cGH* cgh,
CCTK_REAL initial_time, int group );
- static void SyncGFArrayGroup ( const cGH* cgh, int group );
int SyncGroup (const cGH* cgh, const char* groupname)
{
@@ -29,54 +28,27 @@ namespace Carpet {
const int group = CCTK_GroupIndex(groupname);
assert (group>=0 and group<CCTK_NumGroups());
assert (group<(int)arrdata.size());
-
+ const int grouptype = CCTK_GroupTypeI(group);
+ assert(grouptype == CCTK_GF ||
+ grouptype == CCTK_SCALAR || grouptype == CCTK_ARRAY);
+ assert (CCTK_NumVarsInGroupI(group) != 0);
+
Checkpoint ("SyncGroup \"%s\" time=%g", groupname, (double)cgh->cctk_time);
- const int grouptype = CCTK_GroupTypeI(group);
retval = CheckSyncGroupConsistency (cgh, groupname);
- if (retval == 0 and CCTK_NumVarsInGroupI(group) != 0) {
- const int n0 = CCTK_FirstVarIndexI(group);
- assert (n0>=0);
- const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
- assert (num_tl>0);
+ if (retval == 0) {
// Prolongate the boundaries
- if (do_prolongate) {
- switch (grouptype) {
-
- case CCTK_GF:
- assert (reflevel>=0 and reflevel<reflevels);
- if (reflevel > 0) {
- ProlongateGroupBoundaries ( cgh, cctk_initial_time, group );
- }
- break;
-
- case CCTK_SCALAR:
- case CCTK_ARRAY:
- // do nothing
- break;
-
- default:
- assert (0);
+ if (do_prolongate && grouptype == CCTK_GF) {
+ assert (reflevel>=0 and reflevel<reflevels);
+ if (reflevel > 0) {
+ ProlongateGroupBoundaries ( cgh, cctk_initial_time, group );
}
}
// Sync
- switch (CCTK_GroupTypeI(group)) {
-
- case CCTK_GF:
- SyncGFGroup ( cgh, group );
- break;
-
- case CCTK_SCALAR:
- case CCTK_ARRAY:
- SyncGFArrayGroup ( cgh, group );
- break;
-
- default:
- assert (0);
- }
+ SyncGVGroup ( cgh, group );
}
return retval;
}
@@ -117,7 +89,7 @@ namespace Carpet {
}
}
- void SyncGFGroup ( const cGH* cgh, int group )
+ void SyncGVGroup ( const cGH* cgh, int group )
{
DECLARE_CCTK_PARAMETERS;
const int tl = 0;
@@ -126,7 +98,8 @@ namespace Carpet {
// in order to minimise the number of outstanding communications
if (minimise_outstanding_communications) {
for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ CCTK_GroupName (group));
+ for (int var=0; var<(int)arrdata.at(group).at(m).data.size(); ++var) {
for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
for (comm_state state; ! state.done(); state.step()) {
arrdata.at(group).at(m).data.at(var)->sync
@@ -134,11 +107,12 @@ namespace Carpet {
}
}
}
+ CCTK_GroupName (group));
}
} else {
for (comm_state state; ! state.done(); state.step()) {
for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ for (int var=0; var<(int)arrdata.at(group).at(m).data.size(); ++var) {
for (int c=0; c<vhh.at(m)->components(reflevel); ++c) {
arrdata.at(group).at(m).data.at(var)->sync
(state, tl, reflevel, c, mglevel);
@@ -149,27 +123,6 @@ namespace Carpet {
}
}
- void SyncGFArrayGroup ( const cGH* cgh, int group )
- {
- DECLARE_CCTK_PARAMETERS;
-
- // make the comm_state loop the innermost
- // in order to minimise the number of outstanding communications
- if (minimise_outstanding_communications) {
- for (int var=0; var<(int)arrdata.at(group).at(0).data.size(); ++var) {
- for (comm_state state; ! state.done(); state.step()) {
- arrdata.at(group).at(0).data.at(var)->sync (state, 0, 0, 0, 0);
- }
- }
- } else {
- for (comm_state state; ! state.done(); state.step()) {
- for (int var=0; var<(int)arrdata.at(group).at(0).data.size(); ++var) {
- arrdata.at(group).at(0).data.at(var)->sync (state, 0, 0, 0, 0);
- }
- }
- }
- }
-
int CheckSyncGroupConsistency ( const cGH* cgh,const char *groupname )
{
int retval = 0;
diff --git a/Carpet/Carpet/src/Restrict.cc b/Carpet/Carpet/src/Restrict.cc
index 81fc38f21..f8d7397bf 100644
--- a/Carpet/Carpet/src/Restrict.cc
+++ b/Carpet/Carpet/src/Restrict.cc
@@ -108,7 +108,7 @@ namespace Carpet {
for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_GroupTypeI(group) == CCTK_GF
&& CCTK_QueryGroupStorageI(cgh, group)) {
- SyncGFGroup(cgh, group);
+ SyncGVGroup(cgh, group);
}
}
} // if not finest refinement level
diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh
index bc276d683..beafefe05 100644
--- a/Carpet/Carpet/src/carpet.hh
+++ b/Carpet/Carpet/src/carpet.hh
@@ -36,7 +36,7 @@ namespace Carpet {
void CycleTimeLevels (const cGH* cgh);
void FlipTimeLevels (const cGH* cgh);
void Restrict (const cGH* cgh);
- void SyncGFGroup (const cGH* cgh, int group);
+ void SyncGVGroup (const cGH* cgh, int group);
// Sanity checks
enum checktimes { currenttime,