aboutsummaryrefslogtreecommitdiff
path: root/Carpet
diff options
context:
space:
mode:
authorschnetter <>2003-05-08 13:35:00 +0000
committerschnetter <>2003-05-08 13:35:00 +0000
commite639a79b9b9c715bc3213f2ed9fd7b80e509f9b3 (patch)
treeee121ff0ad95d5361cff3fe9d6af698131956010 /Carpet
parent53e40a949768a1161b57a8abc6cff5cb29384921 (diff)
Implement a proper separation between global, level, and local mode.
Implement a proper separation between global, level, and local mode. This is a major change that might break things. darcs-hash:20030508133549-07bb3-95ccfb6eb2b64e72353d301afddd8722a92c64a3.gz
Diffstat (limited to 'Carpet')
-rw-r--r--Carpet/Carpet/src/CallFunction.cc9
-rw-r--r--Carpet/Carpet/src/Evolve.cc32
-rw-r--r--Carpet/Carpet/src/Initialise.cc32
-rw-r--r--Carpet/Carpet/src/SetupGH.cc62
-rw-r--r--Carpet/Carpet/src/Shutdown.cc28
-rw-r--r--Carpet/Carpet/src/Storage.cc29
-rw-r--r--Carpet/Carpet/src/carpet_public.hh19
-rw-r--r--Carpet/Carpet/src/helpers.cc291
-rw-r--r--Carpet/Carpet/src/variables.cc8
-rw-r--r--Carpet/CarpetIOASCII/src/ioascii.cc35
-rw-r--r--Carpet/CarpetInterp/src/interp.cc15
-rw-r--r--Carpet/CarpetLib/src/dh.cc6
-rw-r--r--Carpet/README8
13 files changed, 333 insertions, 241 deletions
diff --git a/Carpet/Carpet/src/CallFunction.cc b/Carpet/Carpet/src/CallFunction.cc
index a1b45641c..b1cd011d5 100644
--- a/Carpet/Carpet/src/CallFunction.cc
+++ b/Carpet/Carpet/src/CallFunction.cc
@@ -9,7 +9,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CallFunction.cc,v 1.7 2003/05/07 10:03:21 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CallFunction.cc,v 1.8 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_CallFunction_cc);
}
@@ -24,17 +24,14 @@ namespace Carpet {
// Traverse one function on all components of one refinement level
// of one multigrid level
- assert (mglevel>=0);
- assert (reflevel>=0);
-
// Checkpoint ("%*sStarting CallFunction...", 2*reflevel, "");
cGH* cgh = (cGH*)data;
- if (attribute->global) {
+ if (attribute->global || reflevel==-1) {
// Global operation: call once
- if (reflevel==0) {
+ if (do_global_mode) {
Waypoint ("%*sGlobal mode call at %s to %s::%s", 2*reflevel, "",
attribute->where, attribute->thorn, attribute->routine);
const int res = CCTK_CallFunction (function, attribute, data);
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
index 5bdceab86..b20b7d1cd 100644
--- a/Carpet/Carpet/src/Evolve.cc
+++ b/Carpet/Carpet/src/Evolve.cc
@@ -18,7 +18,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.20 2003/05/07 10:03:21 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.21 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc);
}
@@ -114,6 +114,10 @@ namespace Carpet {
initial_time = 0;
#endif
+ int next_global_mode_iter_loop1 = 0;
+ int next_global_mode_iter_loop2 = 0;
+ int next_global_mode_iter_loop3 = 0;
+
// Main loop
while (! do_terminate(cgh, cgh->cctk_time, cgh->cctk_iteration)) {
@@ -130,14 +134,19 @@ namespace Carpet {
const int do_every = mglevelfact * maxreflevelfact/reflevelfact;
if ((cgh->cctk_iteration-1) % do_every == 0) {
+ do_global_mode = cgh->cctk_iteration >= next_global_mode_iter_loop1;
+ next_global_mode_iter_loop1 = cgh->cctk_iteration + 1;
+
// Advance level times
tt->advance_time (reflevel, mglevel);
+ // TODO: set cctk_time in set_mglevel
cgh->cctk_time
= tt->time (0, reflevel, mglevel) * base_delta_time;
- Waypoint ("%*sCurrent time is %g", 2*reflevel, "",
- cgh->cctk_time);
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
// Cycle time levels
CycleTimeLevels (cgh);
@@ -180,16 +189,20 @@ namespace Carpet {
const int do_every = mglevelfact * maxreflevelfact/reflevelfact;
if (cgh->cctk_iteration % do_every == 0) {
+ do_global_mode = cgh->cctk_iteration >= next_global_mode_iter_loop2;
+ next_global_mode_iter_loop2 = cgh->cctk_iteration + 1;
+
cgh->cctk_time
= tt->time (0, reflevel, mglevel) * base_delta_time;
// Restrict
- Waypoint ("%*sCurrent time is %g", 2*reflevel, "",
- cgh->cctk_time);
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
Restrict (cgh);
Waypoint ("%*sScheduling POSTRESTRICT", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_POSTRESTRICT", cgh, CallFunction);
+ CCTK_ScheduleTraverse ("POSTRESTRICT", cgh, CallFunction);
}
} END_MGLEVEL_LOOP(cgh);
@@ -207,8 +220,15 @@ namespace Carpet {
const int do_every = mglevelfact * maxreflevelfact/reflevelfact;
if (cgh->cctk_iteration % do_every == 0) {
+ do_global_mode = cgh->cctk_iteration >= next_global_mode_iter_loop3;
+ next_global_mode_iter_loop3 = cgh->cctk_iteration + 1;
+
cgh->cctk_time
= tt->time (0, reflevel, mglevel) * base_delta_time;
+
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
// Checkpoint
Waypoint ("%*sScheduling CHECKPOINT", 2*reflevel, "");
diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc
index 5a79fca67..9dbc80b70 100644
--- a/Carpet/Carpet/src/Initialise.cc
+++ b/Carpet/Carpet/src/Initialise.cc
@@ -12,7 +12,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.25 2003/05/02 14:22:32 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.26 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Initialise_cc);
}
@@ -43,6 +43,7 @@ namespace Carpet {
// Initialise stuff
cgh->cctk_iteration = 0;
cgh->cctk_time = cctk_initial_time;
+ do_global_mode = true;
// Enable storage and communtication
CCTKi_ScheduleGHInit (cgh);
@@ -51,12 +52,10 @@ namespace Carpet {
CCTKi_InitGHExtensions (cgh);
// Check parameters
- set_mglevel (cgh, 0);
Waypoint ("Current time is %g", cgh->cctk_time);
Waypoint ("PARAMCHECK");
CCTK_ScheduleTraverse ("CCTK_PARAMCHECK", cgh, CallFunction);
CCTKi_FinaliseParamWarn();
- set_mglevel (cgh, -1);
Waypoint ("Initialising iteration %d...", cgh->cctk_iteration);
@@ -66,7 +65,11 @@ namespace Carpet {
BEGIN_MGLEVEL_LOOP(cgh) {
- Waypoint ("%*sCurrent time is %g", 2*reflevel, "", cgh->cctk_time);
+ do_global_mode = reflevel == 0;
+
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
// Checking
Poison (cgh, alltimes);
@@ -79,6 +82,9 @@ namespace Carpet {
if (reflevel==0) {
// Initialise time and time step on coarse grid
base_delta_time = cgh->cctk_delta_time;
+ for (int d=0; d<dim; ++d) {
+ base_origin_space[d] = cgh->cctk_origin_space[d];
+ }
} else {
// assert (abs(cgh->cctk_delta_time - base_delta_time / reflevelfactor)
// < 1e-6 * base_delta_time);
@@ -113,9 +119,16 @@ namespace Carpet {
BEGIN_MGLEVEL_LOOP(cgh) {
+ do_global_mode = reflevel == 0;
+
// Restrict
- Waypoint ("%*sCurrent time is %g", 2*reflevel, "", cgh->cctk_time);
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
Restrict (cgh);
+
+ Waypoint ("%*sScheduling POSTRESTRICT", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("POSTRESTRICT", cgh, CallFunction);
} END_MGLEVEL_LOOP(cgh);
@@ -134,6 +147,12 @@ namespace Carpet {
BEGIN_MGLEVEL_LOOP(cgh) {
+ do_global_mode = reflevel == 0;
+
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
+
// Checking
CalculateChecksums (cgh, allbutcurrenttime);
@@ -258,6 +277,9 @@ namespace Carpet {
// Restrict
cout << "3TL rl=" << reflevel << " restricting" << endl;
Restrict (cgh);
+
+ Waypoint ("%*sScheduling POSTRESTRICT", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("POSTRESTRICT", cgh, CallFunction);
// Flip time levels
cout << "3TL rl=" << reflevel << " flipping" << endl;
diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc
index 500b55a5e..3c109f352 100644
--- a/Carpet/Carpet/src/SetupGH.cc
+++ b/Carpet/Carpet/src/SetupGH.cc
@@ -19,7 +19,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.40 2003/04/30 12:43:21 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.41 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_SetupGH_cc);
}
@@ -346,13 +346,60 @@ namespace Carpet {
}
for (int group=0; group<CCTK_NumGroups(); ++group) {
for (int d=0; d<dim; ++d) {
- ((int*)arrdata[group].info.nghostzones)[d]
- = arrdata[group].dd->lghosts[d];
+ ((int*)arrdata[group].info.nghostzones)[d] = arrdata[group].dd->lghosts[d];
}
}
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+
+ const int rl = 0;
+ const int ml = 0;
+ const int c = CCTK_MyProc(cgh);
+
+ const bbox<int,dim>& base = arrdata[group].hh->baseextent;
+ const vect<vect<bool,2>,dim>& obnds = arrdata[group].hh->outer_boundaries[rl][c];
+ const bbox<int,dim>& ext = arrdata[group].dd->boxes[rl][c][ml].exterior;
+
+ for (int d=0; d<dim; ++d) {
+ ((int*)arrdata[group].info.gsh )[d] = (base.shape() / base.stride())[d];
+ ((int*)arrdata[group].info.lsh )[d] = (ext.shape() / ext.stride())[d];
+ ((int*)arrdata[group].info.lbnd)[d] = (ext.lower() / ext.stride())[d];
+ ((int*)arrdata[group].info.ubnd)[d] = (ext.upper() / ext.stride())[d];
+ for (int f=0; f<2; ++f) {
+ ((int*)arrdata[group].info.bbox)[2*d+f] = obnds[d][f];
+ }
+
+ assert (arrdata[group].info.lsh[d]>=0 && arrdata[group].info.lsh[d]<=arrdata[group].info.gsh[d]);
+ assert (arrdata[group].info.lbnd[d]>=0 && arrdata[group].info.ubnd[d]<arrdata[group].info.gsh[d]);
+ assert (arrdata[group].info.ubnd[d]-arrdata[group].info.lbnd[d]+1 == arrdata[group].info.lsh[d]);
+ assert (arrdata[group].info.lbnd[d]<=arrdata[group].info.ubnd[d]+1);
+ }
+
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (rl>=0 && rl<(int)arrdata[group].dd->boxes.size());
+ assert (c>=0 && c<(int)arrdata[group].dd->boxes[rl].size());
+ assert (ml>=0 && ml<(int)arrdata[group].dd->boxes[rl][c].size());
+ assert (arrdata[group].hh->is_local(rl,c));
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (var<(int)arrdata[group].data.size());
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+
+ } // if grouptype
+ } // for group
+
+
+
// Initialise current position
- reflevel = 0;
+ reflevel = -1;
mglevel = -1;
component = -1;
@@ -401,17 +448,12 @@ namespace Carpet {
// Initialise time step on coarse grid
base_delta_time = 1.0;
+ base_origin_space = vect<CCTK_REAL,dim>((CCTK_REAL)0);
// Current iteration
iteration.resize(maxreflevels, 0);
- // Set current position (this time for real)
- set_reflevel (cgh, 0);
- set_mglevel (cgh, -1);
- set_component (cgh, -1);
-
// Enable storage for all groups if desired
- // XXX
if (true || enable_all_storage) {
BEGIN_REFLEVEL_LOOP(cgh) {
BEGIN_MGLEVEL_LOOP(cgh) {
diff --git a/Carpet/Carpet/src/Shutdown.cc b/Carpet/Carpet/src/Shutdown.cc
index 3f6bb1991..67759e342 100644
--- a/Carpet/Carpet/src/Shutdown.cc
+++ b/Carpet/Carpet/src/Shutdown.cc
@@ -10,7 +10,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Shutdown.cc,v 1.8 2002/10/24 10:39:39 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Shutdown.cc,v 1.9 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Shutdown_cc);
}
@@ -31,20 +31,32 @@ namespace Carpet {
const int convlev = 0;
cGH* cgh = fc->GH[convlev];
- set_mglevel (cgh, 0);
-
Waypoint ("Current time is %g", cgh->cctk_time);
- // Terminate
- Waypoint ("%*sScheduling TERMINATE", 2*reflevel, "");
- CCTK_ScheduleTraverse ("CCTK_TERMINATE", cgh, CallFunction);
+ BEGIN_REFLEVEL_LOOP(cgh) {
+
+ BEGIN_MGLEVEL_LOOP(cgh) {
+
+ do_global_mode = reflevel == 0;
+
+ Waypoint ("%*sCurrent time is %g%s", 2*reflevel, "",
+ cgh->cctk_time,
+ do_global_mode ? " (global time)" : "");
+
+ // Terminate
+ Waypoint ("%*sScheduling TERMINATE", 2*reflevel, "");
+ CCTK_ScheduleTraverse ("CCTK_TERMINATE", cgh, CallFunction);
+
+ } END_MGLEVEL_LOOP(cgh);
+
+ } END_REFLEVEL_LOOP(cgh);
+
+ do_global_mode = true;
// Shutdown
Waypoint ("%*sScheduling SHUTDOWN", 2*reflevel, "");
CCTK_ScheduleTraverse ("CCTK_SHUTDOWN", cgh, CallFunction);
- set_mglevel (cgh, -1);
-
CCTK_PRINTSEPARATOR;
printf ("Done.\n");
diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc
index 322b51b27..50ae6793a 100644
--- a/Carpet/Carpet/src/Storage.cc
+++ b/Carpet/Carpet/src/Storage.cc
@@ -10,7 +10,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.15 2003/05/02 14:20:26 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.16 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Storage_cc);
}
@@ -39,6 +39,9 @@ namespace Carpet {
const int group = CCTK_GroupIndex(groupname);
assert (group>=0 && group<CCTK_NumGroups());
+ // No storage change in local mode
+ assert (! (component!=-1 && CCTK_GroupTypeI(group)==CCTK_GF));
+
if (CCTK_QueryGroupStorageI(cgh, group)) {
// storage was enabled previously
return 1;
@@ -96,10 +99,15 @@ namespace Carpet {
default:
UnsupportedVarType(n);
} // switch
+
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[n][tl] = ((*arrdata[group].data[var]) (-tl, 0, 0, 0)->storage());
+ }
+ }
+
} // for
- // Reinitialise Cactus variables
- if (component!=-1) set_component (cgh, component);
PoisonGroup (cgh, group, alltimes);
// storage was not enabled previously
@@ -115,6 +123,9 @@ namespace Carpet {
const int group = CCTK_GroupIndex(groupname);
assert (group>=0 && group<CCTK_NumGroups());
+ // No storage change in local mode
+ assert (! (component!=-1 && CCTK_GroupTypeI(group)==CCTK_GF));
+
if (! CCTK_QueryGroupStorageI(cgh, group)) {
// storage was disabled previously
return 0;
@@ -125,6 +136,9 @@ namespace Carpet {
return 1;
const int n0 = CCTK_FirstVarIndexI(group);
+ assert (n0>=0);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
+ assert (num_tl>0);
assert (arrdata[group].data.size());
assert (arrdata[group].data[0]);
@@ -141,11 +155,14 @@ namespace Carpet {
UnsupportedVarType(n);
} // switch
arrdata[group].data[var] = 0;
+
+ if (CCTK_GroupTypeI(group) != CCTK_GF) {
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[n][tl] = 0;
+ }
+ }
} // for
- // Reinitialise Cactus variables
- set_component (cgh, component);
-
// storage was not disabled previously
return 1;
}
diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh
index d26ffaaee..3b65786f4 100644
--- a/Carpet/Carpet/src/carpet_public.hh
+++ b/Carpet/Carpet/src/carpet_public.hh
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.25 2003/05/05 14:57:28 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.26 2003/05/08 15:35:49 schnetter Exp $
// It is assumed that the number of components of all arrays is equal
// to the number of components of the grid functions, and that their
@@ -71,9 +71,15 @@ namespace Carpet {
// Current multigrid factor
extern int mglevelfact;
+ // Is this the time for a global mode call?
+ extern bool do_global_mode;
+
// Time step on base grid
extern CCTK_REAL base_delta_time;
+ // Spatial origin on base grid
+ extern vect<CCTK_REAL,dim> base_origin_space;
+
// Data for grid functions
@@ -159,15 +165,15 @@ namespace Carpet {
#define BEGIN_REFLEVEL_LOOP(cgh) \
do { \
int _rll; \
- assert (reflevel==0); \
+ assert (reflevel==-1); \
for (int _rl=0; _rl<hh->reflevels(); ++_rl) { \
set_reflevel ((cGH*)(cgh), _rl); \
{
#define END_REFLEVEL_LOOP(cgh) \
} \
} \
- set_reflevel ((cGH*)(cgh), 0); \
- assert (reflevel==0); \
+ set_reflevel ((cGH*)(cgh), -1); \
+ assert (reflevel==-1); \
_rll = 0; \
} while (0)
@@ -178,14 +184,15 @@ namespace Carpet {
#define BEGIN_REVERSE_REFLEVEL_LOOP(cgh) \
do { \
int _rrll; \
- assert (reflevel==0); \
+ assert (reflevel==-1); \
for (int _rl=hh->reflevels()-1; _rl>=0; --_rl) { \
set_reflevel ((cGH*)(cgh), _rl); \
{
#define END_REVERSE_REFLEVEL_LOOP(cgh) \
} \
} \
- assert (reflevel==0); \
+ set_reflevel ((cGH*)(cgh), -1); \
+ assert (reflevel==-1); \
_rrll = 0; \
} while (0)
diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc
index 236d30c5a..743faad90 100644
--- a/Carpet/Carpet/src/helpers.cc
+++ b/Carpet/Carpet/src/helpers.cc
@@ -13,7 +13,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.29 2003/05/02 14:21:23 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.30 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_helpers_cc);
}
@@ -190,13 +190,19 @@ namespace Carpet {
void set_reflevel (cGH* cgh, const int rl)
{
// Check
- assert (rl>=0 && rl<maxreflevels && rl<hh->reflevels());
+ assert (rl==-1 || (rl>=0 && rl<maxreflevels && rl<maxreflevels));
assert (mglevel == -1);
assert (component == -1);
// Change
reflevel = rl;
- reflevelfact = ipow(reffact, reflevel);
+ if (reflevel == -1) {
+ // global mode
+ reflevelfact = 0xdeadbeef;
+ } else {
+ // level mode or local mode
+ reflevelfact = ipow(reffact, reflevel);
+ }
vect<int,dim>::ref(cgh->cctk_levfac) = reflevelfact;
}
@@ -206,6 +212,7 @@ namespace Carpet {
{
// Check
assert (ml==-1 || (ml>=0 && ml<mglevels));
+ assert (reflevel>=0 && reflevel<hh->reflevels());
assert (component == -1);
// Change
@@ -216,25 +223,45 @@ namespace Carpet {
// Set gsh
if (mglevel == -1) {
+ mglevelfact = 0xdeadbeef;
+ cgh->cctk_convlevel = 0xdeadbeef;
+
cgh->cctk_delta_time = 0xdeadbeef;
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_origin_space[d] = 0xdeadbeef;
+ }
+
vect<int,dim>::ref(cgh->cctk_gsh) = 0xdeadbeef;
for (int group=0; group<CCTK_NumGroups(); ++group) {
- vect<int,dim>::ref((int*)arrdata[group].info.gsh) = 0xdeadbeef;
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ vect<int,dim>::ref((int*)arrdata[group].info.gsh) = 0xdeadbeef;
+ }
}
} else {
- const bbox<int,dim>& base = hh->baseextent;
+ mglevelfact = ipow(mgfact, mglevel);
+ cgh->cctk_convlevel = mglevel;
+
+ // TODO: set cctk_time here as well
cgh->cctk_delta_time = base_delta_time / reflevelfact * mglevelfact;
- assert (all(base.shape() % base.stride() == 0));
- assert (all((base.shape() / base.stride()) % mglevelfact == 0));
- vect<int,dim>::ref(cgh->cctk_gsh)
- = (base.shape() / base.stride() - 1) / mglevelfact * reflevelfact + 1;
+
+ {
+ const bbox<int,dim>& baseext = dd->bases[reflevel][mglevel].exterior;
+ for (int d=0; d<dim; ++d) {
+ cgh->cctk_origin_space[d] = base_origin_space[d] + cgh->cctk_delta_space[d] / cgh->cctk_levfac[d] * baseext.lower()[d] / baseext.stride()[d];
+ }
+ }
+
+ const bbox<int,dim>& baseext = dd->bases[reflevel][mglevel].exterior;
+ vect<int,dim>::ref(cgh->cctk_gsh) = baseext.shape() / baseext.stride();
for (int group=0; group<CCTK_NumGroups(); ++group) {
- const bbox<int,dim>& base = arrdata[group].hh->baseextent;
- vect<int,dim>::ref((int*)arrdata[group].info.gsh)
- = ((base.shape() / base.stride() - 1)
- / mglevelfact * reflevelfact + 1);
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ const bbox<int,dim>& baseext = arrdata[group].dd->bases[reflevel][mglevel].exterior;
+ for (int d=0; d<dim; ++d) {
+ ((int*)arrdata[group].info.gsh)[d] = (baseext.shape() / baseext.stride())[d];
+ }
+ }
}
} // if mglevel != -1
@@ -250,11 +277,9 @@ namespace Carpet {
assert (component==-1
|| (mglevel>=0 && mglevel<hh->mglevels(reflevel,component)));
-
-
// Set Cactus parameters
if (component == -1) {
- // Global mode -- no component is active
+ // Level mode -- no component is active
for (int d=0; d<dim; ++d) {
cgh->cctk_lsh[d] = 0xdeadbeef;
@@ -267,168 +292,105 @@ namespace Carpet {
}
}
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+
+ for (int d=0; d<dim; ++d) {
+ ((int*)arrdata[group].info.lsh)[d] = 0xdeadbeef;
+ ((int*)arrdata[group].info.bbox)[2*d ] = 0xdeadbeef;
+ ((int*)arrdata[group].info.bbox)[2*d+1] = 0xdeadbeef;
+ ((int*)arrdata[group].info.lbnd)[d] = 0xdeadbeef;
+ ((int*)arrdata[group].info.ubnd)[d] = 0xdeadbeef;
+ }
+
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (var<(int)arrdata[group].data.size());
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[firstvar+var][tl] = 0;
+ }
+ }
+
+ } // if grouptype
+ } // for var
+
} else {
// Local mode
assert (reflevel>=0 && reflevel < (int)dd->boxes.size());
assert (component>=0 && component < (int)dd->boxes[reflevel].size());
- assert (mglevel>=0
- && mglevel < (int)dd->boxes[reflevel][component].size());
- const bbox<int,dim>& ext
- = dd->boxes[reflevel][component][mglevel].exterior;
+ assert (mglevel>=0 && mglevel < (int)dd->boxes[reflevel][component].size());
+
+ const bbox<int,dim>& baseext = dd->bases[reflevel][mglevel].exterior;
+ const vect<vect<bool,2>,dim>& obnds = hh->outer_boundaries[reflevel][component];
+ const bbox<int,dim>& ext = dd->boxes[reflevel][component][mglevel].exterior;
+
for (int d=0; d<dim; ++d) {
+
cgh->cctk_lsh[d] = (ext.shape() / ext.stride())[d];
- cgh->cctk_lbnd[d] = (ext.lower() / ext.stride())[d];
- cgh->cctk_ubnd[d] = (ext.upper() / ext.stride())[d];
- assert (cgh->cctk_lsh[d]>=0 && cgh->cctk_lsh[d]<=cgh->cctk_gsh[d]);
-// assert (cgh->cctk_lbnd[d]>=0 && cgh->cctk_ubnd[d]<cgh->cctk_gsh[d]);
- assert (cgh->cctk_ubnd[d]-cgh->cctk_lbnd[d]+1 == cgh->cctk_lsh[d]);
- assert (cgh->cctk_lbnd[d]<=cgh->cctk_ubnd[d]+1);
- cgh->cctk_bbox[2*d ] = hh->outer_boundaries[reflevel][component][d][0];
- cgh->cctk_bbox[2*d+1] = hh->outer_boundaries[reflevel][component][d][1];
+ cgh->cctk_lbnd[d] = ((ext.lower() - baseext.lower()) / ext.stride())[d];
+ cgh->cctk_ubnd[d] = ((ext.upper() - baseext.lower()) / ext.stride())[d];
+ cgh->cctk_bbox[2*d ] = obnds[d][0];
+ cgh->cctk_bbox[2*d+1] = obnds[d][1];
for (int stg=0; stg<CCTK_NSTAGGER; ++stg) {
// TODO: support staggering
cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d];
}
+
+ assert (cgh->cctk_lsh[d]>=0 && cgh->cctk_lsh[d]<=cgh->cctk_gsh[d]);
+ assert (cgh->cctk_lbnd[d]>=0 && cgh->cctk_ubnd[d]<cgh->cctk_gsh[d]);
+ assert (cgh->cctk_ubnd[d]-cgh->cctk_lbnd[d]+1 == cgh->cctk_lsh[d]);
+ assert (cgh->cctk_lbnd[d]<=cgh->cctk_ubnd[d]+1);
+
}
- } // if local mode
-
-
-
- // Set Cactus parameters for all groups
- for (int group=0; group<CCTK_NumGroups(); ++group) {
-
- if (mglevel == -1
- || (CCTK_GroupTypeI(group) == CCTK_GF
- && component == -1)) {
- // Global mode for a grid function: not active
-
- for (int d=0; d<dim; ++d) {
- ((int*)arrdata[group].info.lsh)[d] = 0xdeadbeef;
- ((int*)arrdata[group].info.bbox)[2*d ] = 0xdeadbeef;
- ((int*)arrdata[group].info.bbox)[2*d+1] = 0xdeadbeef;
- ((int*)arrdata[group].info.lbnd)[d] = 0xdeadbeef;
- ((int*)arrdata[group].info.ubnd)[d] = 0xdeadbeef;
- }
-
- } else {
- // Local mode, or array or scalar: active
-
- int rl, c;
- if (CCTK_GroupTypeI(group) == CCTK_GF) {
- rl = reflevel;
- c = component;
- } else {
- rl = 0;
- c = CCTK_MyProc(cgh);
- }
- assert (rl>=0 && rl < (int)arrdata[group].dd->boxes.size());
- assert (c>=0 && c < (int)arrdata[group].dd->boxes[rl].size());
- assert (mglevel>=0 && mglevel < (int)dd->boxes[rl][c].size());
- const bbox<int,dim>& bext = arrdata[group].hh->baseextent;
- const bbox<int,dim>& iext = arrdata[group].hh->extents[rl][c][mglevel];
- const bbox<int,dim>& ext
- = arrdata[group].dd->boxes[rl][c][mglevel].exterior;
- for (int d=0; d<dim; ++d) {
- ((int*)arrdata[group].info.lsh)[d]
- = (ext.shape() / ext.stride())[d];
- ((int*)arrdata[group].info.lbnd)[d]
- = (ext.lower() / ext.stride())[d];
- ((int*)arrdata[group].info.ubnd)[d]
- = (ext.upper() / ext.stride())[d];
- assert (arrdata[group].info.lsh[d]>=0
- && arrdata[group].info.lsh[d]<=arrdata[group].info.gsh[d]);
-// assert (arrdata[group].info.lbnd[d]>=0
-// && arrdata[group].info.ubnd[d]<arrdata[group].info.gsh[d]);
- assert (arrdata[group].info.ubnd[d]-arrdata[group].info.lbnd[d]+1
- == arrdata[group].info.lsh[d]);
- assert (arrdata[group].info.lbnd[d]<=arrdata[group].info.ubnd[d]+1);
- ((int*)arrdata[group].info.bbox)[2*d ] = hh->outer_boundaries[rl][c][d][0];
- ((int*)arrdata[group].info.bbox)[2*d+1] = hh->outer_boundaries[rl][c][d][1];
- } // for d
-
- } // if local mode
-
- } // for group
-
-
-
- // Set Cactus pointers to data
- for (int n=0; n<CCTK_NumVars(); ++n) {
-
- const int group = CCTK_GroupIndexFromVarI(n);
- assert (group>=0);
- const int var = n - CCTK_FirstVarIndexI(group);
- assert (var>=0);
- const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
- assert (num_tl>0);
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+
+ assert (reflevel>=0 && reflevel < (int)arrdata[group].dd->boxes.size());
+ assert (component>=0 && component < (int)arrdata[group].dd->boxes[reflevel].size());
+ assert (mglevel>=0 && mglevel < (int)arrdata[group].dd->boxes[reflevel][component].size());
+
+ const bbox<int,dim>& baseext = arrdata[group].dd->bases[reflevel][mglevel].exterior;
+ const vect<vect<bool,2>,dim>& obnds = arrdata[group].hh->outer_boundaries[reflevel][component];
+ const bbox<int,dim>& ext = arrdata[group].dd->boxes[reflevel][component][mglevel].exterior;
+
+ for (int d=0; d<dim; ++d) {
+
+ ((int*)arrdata[group].info.lsh)[d] = (ext.shape() / ext.stride())[d];
+ ((int*)arrdata[group].info.lbnd)[d] = ((ext.lower() - baseext.lower()) / ext.stride())[d];
+ ((int*)arrdata[group].info.ubnd)[d] = ((ext.upper() - baseext.lower()) / ext.stride())[d];
+ ((int*)arrdata[group].info.bbox)[2*d ] = obnds[d][0];
+ ((int*)arrdata[group].info.bbox)[2*d+1] = obnds[d][1];
+
+ assert (arrdata[group].info.lsh[d]>=0 && arrdata[group].info.lsh[d]<=arrdata[group].info.gsh[d]);
+ assert (arrdata[group].info.lbnd[d]>=0 && arrdata[group].info.ubnd[d]<arrdata[group].info.gsh[d]);
+ assert (arrdata[group].info.ubnd[d]-arrdata[group].info.lbnd[d]+1 == arrdata[group].info.lsh[d]);
+ assert (arrdata[group].info.lbnd[d]<=arrdata[group].info.ubnd[d]+1);
+ }
+
+ const int firstvar = CCTK_FirstVarIndexI (group);
+ const int numvars = CCTK_NumVarsInGroupI (group);
+ const int num_tl = CCTK_NumTimeLevelsFromVarI (firstvar);
+
+ assert (hh->is_local(reflevel,component));
+
+ assert (group<(int)arrdata.size());
+ for (int var=0; var<numvars; ++var) {
+ assert (var<(int)arrdata[group].data.size());
+ for (int tl=0; tl<num_tl; ++tl) {
+ cgh->data[firstvar+var][tl] = ((*arrdata[group].data[var]) (-tl, reflevel, component, mglevel)->storage());
+ }
+ }
+
+ } // if grouptype
+ } // for group
- for (int tl=0; tl<num_tl; ++tl) {
-
- if (mglevel != -1
- && CCTK_QueryGroupStorageI(cgh, group)) {
- // Group has storage
-
- if (CCTK_GroupTypeI(group) == CCTK_GF) {
- // It is a grid function
-
- if (component == -1) {
- // Global mode
-
- // Grid functions cannot be accessed in global mode
- cgh->data[n][tl] = 0;
-
- } else {
- // local mode
-
- assert (reflevel>=0 && reflevel < (int)dd->boxes.size());
- assert (component>=0
- && component < (int)dd->boxes[reflevel].size());
- assert (mglevel>=0
- && mglevel < (int)dd->boxes[reflevel][component].size());
-
- assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- assert (arrdata[group].data[var]);
- cgh->data[n][tl]
- = ((*arrdata[group].data[var])
- (-tl, reflevel, component, mglevel)->storage());
- if (hh->is_local(reflevel,component)) {
- assert (cgh->data[n][tl]);
- } else {
- assert (! cgh->data[n][tl]);
- }
-
- } // if global mode
-
- } else {
- // Scalars and arrays can always be accessed
-
- assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- assert (arrdata[group].data[var]);
- const int rl = 0;
- const int c = CCTK_MyProc(cgh);
- assert (rl>=0 && rl<(int)arrdata[group].dd->boxes.size());
- assert (c>=0 && c<(int)arrdata[group].dd->boxes[rl].size());
- assert (mglevel>=0 && mglevel < (int)dd->boxes[rl][c].size());
- assert (hh->is_local(reflevel,c));
- cgh->data[n][tl]
- = ((*arrdata[group].data[var]) (-tl, rl, c, mglevel)->storage());
- assert (cgh->data[n][tl]);
-
- } // if scalar or array
-
- } else {
- // Group has no storage
-
- cgh->data[n][tl] = 0;
-
- } // if has no storage
-
- } // for tl
- } // for n
+ } // if local mode
}
@@ -452,7 +414,6 @@ namespace Carpet {
int CallLocalFunction (cGH * const cgh,
void (* const function) (cGH * const cgh))
{
- assert (component == -1);
BEGIN_LOCAL_COMPONENT_LOOP(cgh) {
function (cgh);
} END_LOCAL_COMPONENT_LOOP(cgh);
diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc
index 4152cd0f4..6d7b2dc2e 100644
--- a/Carpet/Carpet/src/variables.cc
+++ b/Carpet/Carpet/src/variables.cc
@@ -6,7 +6,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.12 2003/01/03 15:49:36 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.13 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_variables_cc);
}
@@ -53,9 +53,15 @@ namespace Carpet {
// multigrid factor of current level: ipow(multigrid_factor, mglevel)
int mglevelfact;
+ // Is this the time for a global mode call?
+ bool do_global_mode;
+
// Time step on base grid
CCTK_REAL base_delta_time;
+ // Spatial origin on base grid
+ vect<CCTK_REAL,dim> base_origin_space;
+
// Data for grid functions
diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc
index a978330c6..b81a45ed8 100644
--- a/Carpet/CarpetIOASCII/src/ioascii.cc
+++ b/Carpet/CarpetIOASCII/src/ioascii.cc
@@ -30,7 +30,7 @@
#include "ioascii.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.46 2003/03/27 17:11:37 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.47 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_CarpetIOASCII_ioascii_cc);
}
@@ -393,20 +393,21 @@ namespace CarpetIOASCII {
// coordinates
const CCTK_REAL coord_time = cgh->cctk_time;
vect<CCTK_REAL,dim> global_lower, global_upper;
- for (int d=0; d<dim; ++d) {
- const int ierr = CCTK_CoordRange
- (cgh, &global_lower[d], &global_upper[d], d+1, 0, "cart3d");
- if (ierr<0) {
+ vect<CCTK_REAL,dim> coord_delta;
+ if (CCTK_GroupTypeI(group) == CCTK_GF) {
+ for (int d=0; d<dim; ++d) {
+ const int ierr = CCTK_CoordRange
+ (cgh, &global_lower[d], &global_upper[d], d+1, 0, "cart3d");
+ assert (!ierr);
+ coord_delta[d] = cgh->cctk_delta_space[d] / maxreflevelfact;
+ }
+ } else {
+ for (int d=0; d<dim; ++d) {
global_lower[d] = 0;
global_upper[d] = 1;
- }
- }
- const vect<int,dim> global_extent (hh->baseextent.upper() - hh->baseextent.lower());
- vect<CCTK_REAL,dim> coord_delta;
- for (int d=0; d<dim; ++d) {
- assert (global_extent[d] != 0);
- coord_delta[d] = (global_upper[d] - global_lower[d]) / global_extent[d];
- }
+ coord_delta[d] = 1.0 / (cgh->cctk_gsh[d] - 1);
+ }
+ }
// Note: don't permute the "coord_delta" and "data->extent().lower()"
// (it seems that for gcc 2.95 you'll then pick up the
// integer operator*)
@@ -600,11 +601,11 @@ namespace CarpetIOASCII {
CCTK_REAL lower, upper;
CCTK_CoordRange (cgh, &lower, &upper, dir, 0, "cart3d");
- const int npoints = cgh->cctk_gsh[dir-1];
+ assert (reflevel!=-1 && mglevel!=-1);
+ const int npoints = (hh->baseextent.shape()[dir-1] - hh->baseextent.stride()[dir-1]) / hh->bases[reflevel][mglevel].stride()[dir-1] + 1;
const CCTK_REAL rindex = (coord - lower) / (upper - lower) * (npoints-1);
- const int levfac = cgh->cctk_levfac[dir-1];
- int cindex = (int)floor(rindex / levfac + 0.5 + 1e-6) * levfac;
+ int cindex = (int)floor(rindex + 0.5 + 1e-6);
if (cindex<0 || cindex>=npoints) {
CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
@@ -712,7 +713,7 @@ namespace CarpetIOASCII {
if (rank == 0) {
assert (os.good());
-
+
os << "# iteration " << time << endl
<< "# time level " << tl << " refinement level " << rl
<< " component " << c << " multigrid level " << ml << endl
diff --git a/Carpet/CarpetInterp/src/interp.cc b/Carpet/CarpetInterp/src/interp.cc
index 9fe601901..0d34c7d53 100644
--- a/Carpet/CarpetInterp/src/interp.cc
+++ b/Carpet/CarpetInterp/src/interp.cc
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.2 2003/05/02 15:59:37 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.3 2003/05/08 15:35:49 schnetter Exp $
#include <assert.h>
#include <math.h>
@@ -18,7 +18,7 @@
#include "interp.hh"
extern "C" {
- static char const * const rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.2 2003/05/02 15:59:37 schnetter Exp $";
+ static char const * const rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetInterp/src/interp.cc,v 1.3 2003/05/08 15:35:49 schnetter Exp $";
CCTK_FILEVERSION(Carpet_CarpetInterp_interp_cc);
}
@@ -77,7 +77,8 @@ namespace CarpetInterp {
- // We want to be in global mode
+ // We want to be in level mode
+ assert (reflevel != -1);
if (hh->local_components(reflevel) != 1 && component != -1) {
CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
"Cannot interpolate in local mode");
@@ -92,9 +93,11 @@ namespace CarpetInterp {
assert (coord_system_name);
rvect lower, upper;
for (int d=0; d<dim; ++d) {
- ierr = CCTK_CoordRange
- (cgh, &lower[d], &upper[d], d+1, 0, coord_system_name);
- assert (!ierr);
+// ierr = CCTK_CoordRange
+// (cgh, &lower[d], &upper[d], d+1, 0, coord_system_name);
+// assert (!ierr);
+ lower[d] = cgh->cctk_origin_space[d];
+ upper[d] = cgh->cctk_origin_space[d] + (cgh->cctk_gsh[d] - 1) * cgh->cctk_delta_space[d] / cgh->cctk_levfac[d];
}
const ivect gsh (cgh->cctk_gsh );
diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc
index 9791b59a2..eb5bdd62f 100644
--- a/Carpet/CarpetLib/src/dh.cc
+++ b/Carpet/CarpetLib/src/dh.cc
@@ -1,4 +1,4 @@
-// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.32 2003/05/07 10:04:16 schnetter Exp $
+// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.33 2003/05/08 15:35:49 schnetter Exp $
#include <assert.h>
@@ -416,7 +416,9 @@ void dh<D>::recompose (const int initialise_upto) {
// Check that no boundaries are left over
if (rl==0) assert (sync_not.empty());
+#if 0
assert (recv_not.empty());
+#endif
}
// Assert that the interior is received exactly once during
@@ -442,7 +444,9 @@ void dh<D>::recompose (const int initialise_upto) {
assert (new_sz + this_sz == old_sz);
}
}
+#if 0
assert (intr.empty());
+#endif
}
}
diff --git a/Carpet/README b/Carpet/README
index a6cd536f6..5c6d174b6 100644
--- a/Carpet/README
+++ b/Carpet/README
@@ -1,11 +1,11 @@
-CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/README,v 1.9 2003/12/19 11:43:52 schnetter Exp $
+CVS info : $Header: /home/eschnett/C/carpet/Carpet/Carpet/README,v 1.1 2003/05/08 15:35:49 schnetter Exp $
Cactus Code Arrangement Carpet
-Arrangement Author(s) : Erik Schnetter <schnetter@aei.mpg.de>
-Arrangement Maintainer(s) : Erik Schnetter <schnetter@aei.mpg.de>
+Arrangement Author(s) : Erik Schnetter <schnetter@uni-tuebingen.de>
+Arrangement Maintainer(s) : Erik Schnetter <schnetter@uni-tuebingen.de>
--------------------------------------------------------------------------
Purpose of the arrangement:
This arrangement provides a parallel AMR (adaptive mesh refinement)
-driver with MPI. See http://www.carpetcode.org/ for more information.
+driver with MPI.