From 9120be8a2dd829ce13b731a3e830bf7a8b8b01ff Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Mon, 9 Jul 2001 07:00:00 +0000 Subject: Changed handling of scalars. Scalars are now zero-dimensional arrays. Changed handling of scalars. Scalars are now zero-dimensional arrays. Now handling CCTK_GroupDynamicData correctly. Now using "include header". Added results of test case. darcs-hash:20010709070002-07bb3-ba0f4339acb8652e35a884fbdf7e8482b7236f8e.gz --- Carpet/Carpet/interface.ccl | 5 +- Carpet/Carpet/src/CarpetStartup.cc | 3 +- Carpet/Carpet/src/Checksum.cc | 144 +++----- Carpet/Carpet/src/Comm.cc | 46 +-- Carpet/Carpet/src/Cycle.cc | 42 +-- Carpet/Carpet/src/Evolve.cc | 3 +- Carpet/Carpet/src/Poison.cc | 161 +++------ Carpet/Carpet/src/Recompose.cc | 3 +- Carpet/Carpet/src/Restrict.cc | 37 +- Carpet/Carpet/src/SetupGH.cc | 69 ++-- Carpet/Carpet/src/Storage.cc | 232 ++++--------- Carpet/Carpet/src/carpet.h | 8 - Carpet/Carpet/src/carpet.hh | 193 +---------- Carpet/Carpet/src/carpet_public.h | 112 +----- Carpet/Carpet/src/carpet_public.hh | 189 +++++++++- Carpet/Carpet/src/helpers.cc | 214 +++--------- Carpet/Carpet/src/variables.cc | 19 +- Carpet/CarpetIOASCII/interface.ccl | 4 +- Carpet/CarpetIOASCII/src/ioascii.cc | 383 ++++++++++----------- Carpet/CarpetSlab/src/carpetslab.cc | 29 +- Carpet/CarpetTest/interface.ccl | 7 +- .../CarpetTest/src/carpettest_check_arguments.F77 | 5 +- Carpet/CarpetTest/src/carpettest_check_sizes.c | 181 +++++----- Carpet/CarpetTest/test/arraysizes.par | 8 +- CarpetAttic/CarpetIOFlexIO/interface.ccl | 4 +- CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 332 ++++++++---------- 26 files changed, 914 insertions(+), 1519 deletions(-) delete mode 100644 Carpet/Carpet/src/carpet.h diff --git a/Carpet/Carpet/interface.ccl b/Carpet/Carpet/interface.ccl index 6c5c91088..8f9d007e0 100644 --- a/Carpet/Carpet/interface.ccl +++ b/Carpet/Carpet/interface.ccl @@ -1,4 +1,7 @@ # Interface definition for thorn Carpet -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/interface.ccl,v 1.2 2001/03/05 14:29:38 eschnett Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/interface.ccl,v 1.3 2001/07/09 09:00:02 schnetter Exp $ implements: driver + +include header: carpet_public.hh in carpet.hh +include header: carpet_public.h in carpet.h diff --git a/Carpet/Carpet/src/CarpetStartup.cc b/Carpet/Carpet/src/CarpetStartup.cc index b82589fe5..dd3a47ff8 100644 --- a/Carpet/Carpet/src/CarpetStartup.cc +++ b/Carpet/Carpet/src/CarpetStartup.cc @@ -5,7 +5,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CarpetStartup.cc,v 1.1 2001/07/04 12:29:46 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/CarpetStartup.cc,v 1.2 2001/07/09 09:00:04 schnetter Exp $"; @@ -36,6 +36,7 @@ namespace Carpet { CCTK_OverloadnProcs (nProcs); CCTK_OverloadArrayGroupSizeB (ArrayGroupSizeB); CCTK_OverloadQueryGroupStorageB (QueryGroupStorageB); + CCTK_OverloadGroupDynamicData (GroupDynamicData); return 0; } diff --git a/Carpet/Carpet/src/Checksum.cc b/Carpet/Carpet/src/Checksum.cc index a24461318..030e699e6 100644 --- a/Carpet/Carpet/src/Checksum.cc +++ b/Carpet/Carpet/src/Checksum.cc @@ -8,7 +8,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Checksum.cc,v 1.1 2001/07/04 12:29:46 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Checksum.cc,v 1.2 2001/07/09 09:00:05 schnetter Exp $"; @@ -39,27 +39,10 @@ namespace Carpet { checksums[n].resize(maxreflevels); checksums[n][reflevel].resize(num_tl); for (int tl=min_tl; tl<=max_tl; ++tl) { - switch (CCTK_GroupTypeFromVarI(n)) { - - case CCTK_SCALAR: { - checksums[n][reflevel][tl].resize(1); - const int c=0; - checksums[n][reflevel][tl][c].valid = false; - break; - } - - case CCTK_ARRAY: - case CCTK_GF: { - checksums[n][reflevel][tl].resize(hh->components(reflevel)); - BEGIN_COMPONENT_LOOP(cgh) { - checksums[n][reflevel][tl][component].valid = false; - } END_COMPONENT_LOOP(cgh); - break; - } - - default: - abort(); - } + checksums[n][reflevel][tl].resize(hh->components(reflevel)); + BEGIN_COMPONENT_LOOP(cgh) { + checksums[n][reflevel][tl][component].valid = false; + } END_COMPONENT_LOOP(cgh); } } } @@ -77,45 +60,22 @@ namespace Carpet { const int max_tl = maxtl(where, num_tl); for (int tl=min_tl; tl<=max_tl; ++tl) { - switch (CCTK_GroupTypeFromVarI(n)) { - - case CCTK_SCALAR: { - const int c=0; - int chk = 0; - const void* data = cgh->data[n][tl]; - for (int i=0; iis_local(reflevel,component)) { - const int gpdim = CCTK_GroupDimI(group); - int np = 1; - for (int d=0; ddata[n][tl]; - int chk = 0; - for (int i=0; iis_local(reflevel,component)) { + const int gpdim = arrdata[group].info.dim; + int np = 1; + for (int d=0; ddata[n][tl]; + int chk = 0; + for (int i=0; idata[n][tl]; - for (int i=0; icomponents(reflevel)); - BEGIN_COMPONENT_LOOP(cgh) { - if (checksums[n][reflevel][tl][component].valid) { - if (hh->is_local(reflevel,component)) { - const int gpdim = CCTK_GroupDimI(group); - int np = 1; - for (int d=0; ddata[n][tl]; - int chk = 0; - for (int i=0; icomponents(reflevel)); + BEGIN_COMPONENT_LOOP(cgh) { + if (checksums[n][reflevel][tl][component].valid) { + if (hh->is_local(reflevel,component)) { + const int gpdim = arrdata[group].info.dim; + int np = 1; + for (int d=0; ddata[n][tl]; + int chk = 0; + for (int i=0; i0); const int tl = 0; - switch (CCTK_GroupTypeI(group)) { - - case CCTK_SCALAR: - // TODO: Check whether the local values are consistent - break; - - case CCTK_ARRAY: - assert (group<(int)arrdata.size()); - for (int var=0; var<(int)arrdata[group].data.size(); ++var) { - if (num_tl>1 && reflevel>0) { - for (int c=0; ccomponents(reflevel); ++c) { - arrdata[group].data[var]->ref_bnd_prolongate - (tl, reflevel, c, mglevel, - prolongation_order_space, prolongation_order_time); - } - } + assert (group<(int)arrdata.size()); + for (int var=0; var<(int)arrdata[group].data.size(); ++var) { + if (num_tl>1 && reflevel>0) { for (int c=0; ccomponents(reflevel); ++c) { - arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); + arrdata[group].data[var]->ref_bnd_prolongate + (tl, reflevel, c, mglevel, + prolongation_order_space, prolongation_order_time); } } - break; - - case CCTK_GF: - assert (group<(int)gfdata.size()); - for (int var=0; var<(int)gfdata[group].data.size(); ++var) { - if (num_tl>1 && reflevel>0) { - for (int c=0; ccomponents(reflevel); ++c) { - gfdata[group].data[var]->ref_bnd_prolongate - (tl, reflevel, c, mglevel, - prolongation_order_space, prolongation_order_time); - } - } - for (int c=0; ccomponents(reflevel); ++c) { - gfdata[group].data[var]->sync (tl, reflevel, c, mglevel); - } + for (int c=0; ccomponents(reflevel); ++c) { + arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); } - break; - - default: - abort(); } return 0; diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc index d0c841cae..3bf771939 100644 --- a/Carpet/Carpet/src/Cycle.cc +++ b/Carpet/Carpet/src/Cycle.cc @@ -8,7 +8,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.1 2001/07/04 12:29:46 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.2 2001/07/09 09:00:08 schnetter Exp $"; @@ -25,41 +25,13 @@ namespace Carpet { for (int group=0; group0); - void* tmpdata = scdata[group].data[var][reflevel][0]; - for (int tl=1; tlcomponents(reflevel); ++c) { - arrdata[group].data[var]->cycle (reflevel, c, mglevel); - } - break; - } - case CCTK_GF: { - assert (group<(int)gfdata.size()); - assert (var<(int)gfdata[group].data.size()); - for (int c=0; ccomponents(reflevel); ++c) { - gfdata[group].data[var]->cycle (reflevel, c, mglevel); - } - break; - } - default: - abort(); + + assert (group<(int)arrdata.size()); + assert (var<(int)arrdata[group].data.size()); + for (int c=0; ccomponents(reflevel); ++c) { + arrdata[group].data[var]->cycle (reflevel, c, mglevel); } + } } } diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index a9e464c44..2dde2757a 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -8,7 +8,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.1 2001/07/04 12:29:46 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.2 2001/07/09 09:00:08 schnetter Exp $"; @@ -46,6 +46,7 @@ namespace Carpet { // Advance level times tt->advance_time (reflevel, mglevel); + tt0->advance_time (reflevel, mglevel); for (int group=0; groupdata[n][tl], poison_value, sz); - break; - } - case CCTK_ARRAY: - case CCTK_GF: { - BEGIN_COMPONENT_LOOP(cgh) { - if (hh->is_local(reflevel,component)) { - int np = 1; - const int gpdim = CCTK_GroupDimI(group); - for (int d=0; ddata[n][tl], poison_value, np*sz); + BEGIN_COMPONENT_LOOP(cgh) { + if (hh->is_local(reflevel,component)) { + int np = 1; + const int gpdim = arrdata[group].info.dim; + for (int d=0; ddata[n][tl], poison_value, np*sz); + } + } END_COMPONENT_LOOP(cgh); } // for tl @@ -115,91 +101,56 @@ namespace Carpet { for (int tl=min_tl; tl<=max_tl; ++tl) { - switch (CCTK_GroupTypeFromVarI(n)) { - - case CCTK_SCALAR: { - bool poisoned=false; - switch (CCTK_VarTypeI(n)) { -#define TYPECASE(N,T) \ - case N: { \ - T worm; \ - memset (&worm, poison_value, sizeof(worm)); \ - poisoned = *(const T*)cgh->data[n][tl] == worm; \ - break; \ - } -#include "typecase" -#undef TYPECASE - default: - UnsupportedVarType(n); - } - if (poisoned) { - char* fullname = CCTK_FullName(n); - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "The variable \"%s\" contains poison in timelevel %d", - fullname, tl); - free (fullname); - } - break; - } - - case CCTK_ARRAY: - case CCTK_GF: { - BEGIN_COMPONENT_LOOP(cgh) { - if (hh->is_local(reflevel,component)) { - vect size(1); - const int gpdim = CCTK_GroupDimI(group); - for (int d=0; ddata[n][tl]; - int numpoison=0; - for (int k=0; kis_local(reflevel,component)) { + vect size(1); + const int gpdim = arrdata[group].info.dim; + for (int d=0; ddata[n][tl]; + int numpoison=0; + for (int k=0; k10) { - char* fullname = CCTK_FullName(n); - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "The variable \"%s\" contains poison at %d locations in timelevel %d; not all locations were printed.", - fullname, numpoison, tl); - free (fullname); - } - } // if is local - } END_COMPONENT_LOOP(cgh); - break; - } - - default: - abort(); - } + } // if poisoned + } // for i + } // for j + } // for k + if (numpoison>10) { + char* fullname = CCTK_FullName(n); + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "The variable \"%s\" contains poison at %d locations in timelevel %d; not all locations were printed.", + fullname, numpoison, tl); + free (fullname); + } + } // if is local + } END_COMPONENT_LOOP(cgh); } // for tl diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc index e1c9afba8..1e250df40 100644 --- a/Carpet/Carpet/src/Recompose.cc +++ b/Carpet/Carpet/src/Recompose.cc @@ -12,7 +12,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.1 2001/07/04 12:29:47 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Recompose.cc,v 1.2 2001/07/09 09:00:09 schnetter Exp $"; @@ -34,6 +34,7 @@ namespace Carpet { Checkpoint ("%*sRecompose", 2*reflevel, ""); Recompose_gh (cgh, hh); + Recompose_gh (cgh, hh0); for (int group=0; groupcomponents(reflevel); ++c) { - arrdata[group].data[var]->ref_restrict - (tl, reflevel, c, mglevel); - } - for (int c=0; ccomponents(reflevel); ++c) { - arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); - } + for (int var=0; var<(int)arrdata[group].data.size(); ++var) { + for (int c=0; ccomponents(reflevel); ++c) { + arrdata[group].data[var]->ref_restrict + (tl, reflevel, c, mglevel); } - break; - - case CCTK_GF: - for (int var=0; var<(int)gfdata[group].data.size(); ++var) { - for (int c=0; ccomponents(reflevel); ++c) { - gfdata[group].data[var]->ref_restrict - (tl, reflevel, c, mglevel); - } - for (int c=0; ccomponents(reflevel); ++c) { - gfdata[group].data[var]->sync (tl, reflevel, c, mglevel); - } + for (int c=0; ccomponents(reflevel); ++c) { + arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); } - break; - - default: - abort(); } } // if group has storage diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index c7837edc9..0f59d3fa0 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -10,7 +10,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.1 2001/07/04 12:29:47 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.2 2001/07/09 09:00:10 schnetter Exp $"; @@ -85,10 +85,24 @@ namespace Carpet { } } + // Allocate grid hierarchy for scalars + const vect lb0(0); + const vect ub0(0); + const bbox baseext0(lb0, ub0, str); + hh0 = new gh(refinement_factor, vertex_centered, + multigrid_factor, vertex_centered, + baseext0); + + // Allocate time hierarchy for scalars + tt0 = new th(hh0, maxreflevelfact); + + // Allocate data hierarchy for scalars + const vect lghosts0(0); + const vect ughosts0(0); + dd0 = new dh(*hh0, lghosts0, ughosts0, prolongation_order_space); + // Allocate space for groups - scdata.resize(CCTK_NumGroups()); arrdata.resize(CCTK_NumGroups()); - gfdata.resize(CCTK_NumGroups()); // Allocate space for variables in group (but don't enable storage // yet) @@ -97,17 +111,10 @@ namespace Carpet { switch (CCTK_GroupTypeI(group)) { case CCTK_SCALAR: { - scdata[group].data.resize(CCTK_NumVarsInGroupI(group)); - for (int var=0; var<(int)scdata[group].data.size(); ++var) { - const int n = (CCTK_FirstVarIndexI(group) + var); - scdata[group].data[var].resize(maxreflevels); - for (int rl=0; rl=1 || gp.dim<=dim); + arrdata[group].info.dim = gp.dim; switch (gp.disttype) { case CCTK_DISTRIB_CONSTANT: @@ -148,7 +156,7 @@ namespace Carpet { multigrid_factor, vertex_centered, arrext); - arrdata[group].tt = new th (arrdata[group].hh, maxreflevelfact); + arrdata[group].tt = new th(arrdata[group].hh, maxreflevelfact); vect alghosts(0), aughosts(0); for (int d=0; dcctk_nghostzones[d] = dd->lghosts[d]; } + for (int group=0; groupcctk_nghostzones[d] = arrdata[group].dd->lghosts[d]; + } + } // Initialise current position reflevel = 0; diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc index a741ff5e7..ae54bf0b0 100644 --- a/Carpet/Carpet/src/Storage.cc +++ b/Carpet/Carpet/src/Storage.cc @@ -8,7 +8,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.1 2001/07/04 12:29:47 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.2 2001/07/09 09:00:11 schnetter Exp $"; @@ -41,8 +41,8 @@ namespace Carpet { // There is a difference between the Cactus time levels and the // Carpet time levels. If there are n time levels, then the // Cactus time levels are numbered 0 ... n-1, with the current - // time level being n-1. In Carpet, the time levels are numbered - // -(n-1) ... 0, where the current time level is always 0. + // time level being 0. In Carpet, the time levels are numbered + // -(n-1) ... 0, where the current time level is also 0. const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0); const int num_tl = CCTK_NumTimeLevelsFromVarI(n0); @@ -50,74 +50,23 @@ namespace Carpet { const int tmin = 1 - num_tl; const int tmax = 0; - switch (CCTK_GroupTypeI(group)) { - - case CCTK_SCALAR: - assert (scdata[group].data.size()==0 - || scdata[group].data[0].size()==0 - || scdata[group].data[0][0].size()==0 - || scdata[group].data[0][0][0] == 0); - for (int var=0; var<(int)scdata[group].data.size(); ++var) { - for (int rl=0; rl<(int)scdata[group].data[var].size(); ++rl) { - for (int tl=0; tl<(int)scdata[group].data[var][rl].size(); ++tl) { - const int n = n0 + var; - switch (CCTK_VarTypeI(n)) { -#define TYPECASE(N,T) \ - case N: \ - scdata[group].data[var][rl][tl] = new T; \ - break; -#include "typecase" -#undef TYPECASE - default: - UnsupportedVarType(n); - } // switch - } // for - } // for - } // for - break; - - case CCTK_ARRAY: - assert (arrdata[group].data.size()==0 - || arrdata[group].data[0] == 0); - for (int var=0; var<(int)arrdata[group].data.size(); ++var) { - const int n = n0 + var; - switch (CCTK_VarTypeI(n)) { + assert (arrdata[group].data.size()==0 + || arrdata[group].data[0] == 0); + for (int var=0; var<(int)arrdata[group].data.size(); ++var) { + const int n = n0 + var; + switch (CCTK_VarTypeI(n)) { #define TYPECASE(N,T) \ - case N: \ - arrdata[group].data[var] = new gf \ - (CCTK_VarName(n), *arrdata[group].tt, *arrdata[group].dd, \ - tmin, tmax); \ - break; -#include "typecase" -#undef TYPECASE - default: - UnsupportedVarType(n); - } // switch - } // for - break; - - case CCTK_GF: - assert (gfdata[group].data.size()==0 - || gfdata[group].data[0] == 0); - for (int var=0; var<(int)gfdata[group].data.size(); ++var) { - const int n = n0 + var; - switch (CCTK_VarTypeI(n)) { -#define TYPECASE(N,T) \ - case N: \ - gfdata[group].data[var] = new gf \ - (CCTK_VarName(n), *tt, *(dh*)dd, tmin, tmax); \ - break; + case N: \ + arrdata[group].data[var] = new gf \ + (CCTK_VarName(n), *arrdata[group].tt, *arrdata[group].dd, \ + tmin, tmax); \ + break; #include "typecase" #undef TYPECASE - default: - UnsupportedVarType(n); - } // switch - } // for - break; - - default: - abort(); - } + default: + UnsupportedVarType(n); + } // switch + } // for // Reinitialise Cactus variables set_component (cgh, component); @@ -147,82 +96,22 @@ namespace Carpet { const int n0 = CCTK_FirstVarIndexI(group); - switch (CCTK_GroupTypeI(group)) { - - case CCTK_SCALAR: - if (scdata[group].data.size()==0 - || scdata[group].data[0].size()==0 - || scdata[group].data[0][0].size()==0 - || scdata[group].data[0][0][0] == 0) { - // group already has no storage - break; - } - for (int var=0; var<(int)scdata[group].data.size(); ++var) { - const int n = n0 + var; - for (int rl=0; rl<(int)scdata[group].data[var].size(); ++rl) { - for (int tl=0; tl<(int)scdata[group].data[var][rl].size(); ++tl) { - switch (CCTK_VarTypeI(n)) { -#define TYPECASE(N,T) \ - case N: \ - delete (T*)scdata[group].data[var][rl][tl]; \ - break; -#include "typecase" -#undef TYPECASE - default: - UnsupportedVarType(n); - } - scdata[group].data[var][rl][tl] = 0; - } - } - } - break; - - case CCTK_ARRAY: - if (arrdata[group].data.size()==0 || arrdata[group].data[0] == 0) { - // group already has no storage - break; - } - for (int var=0; var<(int)arrdata[group].data.size(); ++var) { - const int n = CCTK_FirstVarIndexI(group) + var; - switch (CCTK_VarTypeI(n)) { + assert (arrdata[group].data.size()); + assert (arrdata[group].data[0]); + for (int var=0; var<(int)arrdata[group].data.size(); ++var) { + const int n = n0 + var; + switch (CCTK_VarTypeI(n)) { #define TYPECASE(N,T) \ - case N: \ - delete (gf*)arrdata[group].data[var]; \ - break; -#include "typecase" -#undef TYPECASE - default: - UnsupportedVarType(n); - } // switch - arrdata[group].data[var] = 0; - } // for - break; - - case CCTK_GF: - if (gfdata[group].data.size()==0 - || gfdata[group].data[0] == 0) { - // group already has no storage + case N: \ + delete (gf*)arrdata[group].data[var]; \ break; - } - for (int var=0; var<(int)gfdata[group].data.size(); ++var) { - const int n = CCTK_FirstVarIndexI(group) + var; - switch (CCTK_VarTypeI(n)) { -#define TYPECASE(N,T) \ - case N: \ - delete (gf*)gfdata[group].data[var]; \ - break; #include "typecase" #undef TYPECASE - default: - UnsupportedVarType(n); - } // switch - gfdata[group].data[var] = 0; - } // for - break; - - default: - abort(); - } + default: + UnsupportedVarType(n); + } // switch + arrdata[group].data[var] = 0; + } // for // Reinitialise Cactus variables set_component (cgh, component); @@ -244,32 +133,55 @@ namespace Carpet { assert (n>=0 && n=0 && group=0 && dir=0 && var=0 && group - -#include "cctk.h" - -int CarpetStartup (void); -MPI_Comm CarpetMPICommunicator (void); diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh index f3005fb49..c8a55c201 100644 --- a/Carpet/Carpet/src/carpet.hh +++ b/Carpet/Carpet/src/carpet.hh @@ -1,198 +1,9 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.11 2001/07/04 12:29:48 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.12 2001/07/09 09:00:13 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 -// distribution onto the processors is the same, and that all -// processors own the same number of components. - -// TODO: treat scalars as arrays with a dimension of zero - -#include - -#include "cctk.h" -#include "cctk_Schedule.h" - -#include "Carpet/CarpetLib/src/dh.hh" -#include "Carpet/CarpetLib/src/ggf.hh" -#include "Carpet/CarpetLib/src/gh.hh" -#include "Carpet/CarpetLib/src/th.hh" +#include "carpet_public.hh" namespace Carpet { - - - const int dim = 3; - - - - // Handle from CCTK_RegisterGHExtension - extern int GHExtension; - - // Maximum number of refinement levels - extern int maxreflevels; - - // Refinement factor on finest grid - extern int maxreflevelfact; - - // Current iteration per refinement level - extern vector iteration; - - // Current position on the grid hierarchy - extern int reflevel; - extern int mglevel; - extern int component; - - // Current refinement factor - extern int reflevelfact; - - // Time step on base grid - extern CCTK_REAL base_delta_time; - - - - // Data for scalars - struct scdesc { - vector > > data; // [var][rl][tl] - }; - extern vector scdata; // group - - // Data for arrays - struct arrdesc { - gh* hh; - th* tt; - dh* dd; - vector* > data; // [var] - int size[dim]; - }; - extern vector arrdata; // [group] - - // Data for grid functions - - // The grid hierarchy - extern gh* hh; - extern th* tt; - extern dh* dd; - extern int gfsize[dim]; - - struct gfdesc { - vector*> data; // [var] - }; - extern vector gfdata; // [group] - - // Checksums - struct ckdesc { - bool valid; - int sum; - }; - extern vector > > > checksums; // [n][rl][tl][c] - - - - // Scheduled functions - extern "C" { - int CarpetStartup(); - } - - // Registered functions - void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cgh); - - int Initialise (tFleshConfig* config); - int Evolve (tFleshConfig* config); - int Shutdown (tFleshConfig* config); - int CallFunction (void* function, cFunctionData* attribute, void* data); - - int SyncGroup (cGH* cgh, const char* groupname); - int EnableGroupStorage (cGH* cgh, const char* groupname); - int DisableGroupStorage (cGH* cgh, const char* groupname); - int EnableGroupComm (cGH* cgh, const char* groupname); - int DisableGroupComm (cGH* cgh, const char* groupname); - int Barrier (cGH* cgh); - int Exit (cGH* cgh, int retval); - int Abort (cGH* cgh, int retval); - int MyProc (cGH* cgh); - int nProcs (cGH* cgh); - const int* ArrayGroupSizeB (cGH* cgh, int dir, int group, - const char* groupname); - int QueryGroupStorageB (cGH* cgh, int group, const char* groupname); - - - - // Helper functions - void set_reflevel (cGH* cgh, int rl); - void set_mglevel (cGH* cgh, int ml); - void set_component (cGH* cgh, int c); - - - - // Refinement level iterator - -#define BEGIN_REFLEVEL_LOOP(cgh) \ - do { \ - int _rl; \ - assert (reflevel==0); \ - for (;;) { \ - { -#define END_REFLEVEL_LOOP(cgh) \ - } \ - if (reflevel==maxreflevels-1) break; \ - set_reflevel ((cgh), reflevel+1); \ - } \ - set_reflevel ((cgh), 0); \ - assert (reflevel==0); \ - _rl = 0; \ - } while (0) - - - - // Reverse refinement level iterator - -#define BEGIN_REVERSE_REFLEVEL_LOOP(cgh) \ - do { \ - int _rrl; \ - assert (reflevel==0); \ - set_reflevel ((cgh), maxreflevels-1); \ - for (;;) { \ - { -#define END_REVERSE_REFLEVEL_LOOP(cgh) \ - } \ - if (reflevel==0) break; \ - set_reflevel ((cgh), reflevel-1); \ - } \ - assert (reflevel==0); \ - _rrl = 0; \ - } while (0) - - - - // Component iterator - -#define BEGIN_COMPONENT_LOOP(cgh) \ - do { \ - int _cl; \ - assert (component==-1); \ - set_component ((cgh), 0); \ - for (;;) { \ - { -#define END_COMPONENT_LOOP(cgh) \ - } \ - if (component==hh->components(reflevel)-1) break; \ - set_component ((cgh), component+1); \ - } \ - set_component ((cgh), -1); \ - assert (component==-1); \ - _cl = 0; \ - } while (0) - - - - extern "C" { - MPI_Comm CarpetMPICommunicator(); - } - - - - // These are private; don't use these from the outside - void Recompose (cGH* cgh); void CycleTimeLevels (cGH* cgh); void Restrict (cGH* cgh); diff --git a/Carpet/Carpet/src/carpet_public.h b/Carpet/Carpet/src/carpet_public.h index 87c9130bc..168ef725b 100644 --- a/Carpet/Carpet/src/carpet_public.h +++ b/Carpet/Carpet/src/carpet_public.h @@ -1,113 +1,11 @@ -/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.h,v 1.15 2004/06/16 16:36:02 schnetter Exp $ */ - -#ifndef CARPET_PUBLIC_H -#define CARPET_PUBLIC_H +/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.h,v 1.1 2001/07/09 09:00:13 schnetter Exp $ */ #include #include "cctk.h" +/* Scheduled functions */ +int CarpetStartup (void); - -/* Tell thorns that the Carpet routines exist */ -#define HAVE_CARPET - - - -#ifdef __cplusplus -namespace Carpet { - extern "C" { -#endif - - /* Carpet's GH extension */ - struct CarpetGH { - -#if 0 - /* Maximum number of refinement levels */ - int maxreflevels; - - /* Refinement levels */ - int reflevels; - - /* Refinement factor */ - int reffact; - - /* Refinement factor on finest possible grid */ - int maxreflevelfact; - - /* Base multigrid level */ - int basemglevel; - - /* Multigrid levels */ - int mglevels; - - /* Multigrid factor */ - int mgfact; - - /* Multigrid factor on coarsest grid */ - int maxmglevelfact; -#endif - - /* Maps */ - int maps; - - - -#if 0 - /* Current position on the grid hierarchy */ - int reflevel; - int mglevel; -#endif - int map; -#if 0 - int component; - - /* Current refinement factor */ - int reflevelfact; - - /* Current multigrid factor */ - int mglevelfact; -#endif - - }; - - struct CarpetGH const * GetCarpetGH (const cGH * const cgh); - - - - /* Prolongation management */ - CCTK_INT CarpetEnableProlongating (const CCTK_INT flag); - - - - /* Call a schedule group */ - int CallScheduleGroup (cGH * const cgh, const char * const group); - - /* Call a local function */ - int CallLocalFunction (cGH * const cgh, - void (* const function) (cGH * const cgh)); - int CallSinglemapFunction (cGH * const cgh, - void (* const function) (cGH * const cgh)); - int CallLevelFunction (cGH * const cgh, - void (* const function) (cGH * const cgh)); - int CallGlobalFunction (cGH * const cgh, - void (* const function) (cGH * const cgh)); - int CallMetaFunction (cGH * const cgh, - void (* const function) (cGH * const cgh)); - - - - /* Helper functions */ - MPI_Comm CarpetMPIComm (void); - MPI_Datatype CarpetMPIDatatype (int vartype); - MPI_Datatype CarpetSimpleMPIDatatype (int vartype); - int CarpetSimpleMPIDatatypeLength (int vartype); - - - -#ifdef __cplusplus - } /* extern "C" */ -} /* namespace Carpet */ -#endif - -#endif /* !defined(CARPET_PUBLIC_H) */ +/* Helper functions */ +MPI_Comm CarpetMPICommunicator (void); diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh index fbe9d8c0f..5c12b3ce3 100644 --- a/Carpet/Carpet/src/carpet_public.hh +++ b/Carpet/Carpet/src/carpet_public.hh @@ -1,15 +1,182 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.40 2004/01/25 14:57:27 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.1 2001/07/09 09:00:14 schnetter Exp $ -#ifndef CARPET_PUBLIC_HH -#define CARPET_PUBLIC_HH +// 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 +// distribution onto the processors is the same, and that all +// processors own the same number of components. -// Stuff with C linkage -#include "carpet_public.h" +#include + +#include "cctk.h" +#include "cctk_Schedule.h" -// Other declarations -#include "defines.hh" -#include "functions.hh" -#include "modes.hh" -#include "variables.hh" +#include "Carpet/CarpetLib/src/dh.hh" +#include "Carpet/CarpetLib/src/ggf.hh" +#include "Carpet/CarpetLib/src/gh.hh" +#include "Carpet/CarpetLib/src/th.hh" -#endif // !defined(CARPET_PUBLIC_HH) +namespace Carpet { + + + + const int dim = 3; + + + + // Handle from CCTK_RegisterGHExtension + extern int GHExtension; + + // Maximum number of refinement levels + extern int maxreflevels; + + // Refinement factor on finest grid + extern int maxreflevelfact; + + // Current iteration per refinement level + extern vector iteration; + + // Current position on the grid hierarchy + extern int reflevel; + extern int mglevel; + extern int component; + + // Current refinement factor + extern int reflevelfact; + + // Time step on base grid + extern CCTK_REAL base_delta_time; + + + + // Data for grid functions + + // The grid hierarchy + extern gh* hh; + extern th* tt; + extern dh* dd; + + // Data for scalars + extern gh* hh0; + extern th* tt0; + extern dh* dd0; + + // Data for everything + struct arrdesc { + // points to hh etc. for GF, and to hh0 etc. for SCALAR + // is unique for ARRAY + cGroupDynamicData info; + gh* hh; + th* tt; + dh* dd; + vector* > data; // [var] + }; + extern vector arrdata; // [group] + + + + // Checksums + struct ckdesc { + bool valid; + int sum; + }; + extern vector > > > checksums; // [n][rl][tl][c] + + + + // Stuff with C linkage + extern "C" { +#include "carpet_public.h" + } + + // Registered functions + void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cgh); + + int Initialise (tFleshConfig* config); + int Evolve (tFleshConfig* config); + int Shutdown (tFleshConfig* config); + int CallFunction (void* function, cFunctionData* attribute, void* data); + + int SyncGroup (cGH* cgh, const char* groupname); + int EnableGroupStorage (cGH* cgh, const char* groupname); + int DisableGroupStorage (cGH* cgh, const char* groupname); + int EnableGroupComm (cGH* cgh, const char* groupname); + int DisableGroupComm (cGH* cgh, const char* groupname); + int Barrier (cGH* cgh); + int Exit (cGH* cgh, int retval); + int Abort (cGH* cgh, int retval); + int MyProc (cGH* cgh); + int nProcs (cGH* cgh); + const int* ArrayGroupSizeB (cGH* cgh, int dir, int group, + const char* groupname); + int QueryGroupStorageB (cGH* cgh, int group, const char* groupname); + int GroupDynamicData (cGH* cgh, int group, cGroupDynamicData* data); + + + + // Helper functions + void set_reflevel (cGH* cgh, int rl); + void set_mglevel (cGH* cgh, int ml); + void set_component (cGH* cgh, int c); + + + + // Refinement level iterator + +#define BEGIN_REFLEVEL_LOOP(cgh) \ + do { \ + int _rl; \ + assert (reflevel==0); \ + for (;;) { \ + { +#define END_REFLEVEL_LOOP(cgh) \ + } \ + if (reflevel==maxreflevels-1) break; \ + set_reflevel ((cgh), reflevel+1); \ + } \ + set_reflevel ((cgh), 0); \ + assert (reflevel==0); \ + _rl = 0; \ + } while (0) + + + + // Reverse refinement level iterator + +#define BEGIN_REVERSE_REFLEVEL_LOOP(cgh) \ + do { \ + int _rrl; \ + assert (reflevel==0); \ + set_reflevel ((cgh), maxreflevels-1); \ + for (;;) { \ + { +#define END_REVERSE_REFLEVEL_LOOP(cgh) \ + } \ + if (reflevel==0) break; \ + set_reflevel ((cgh), reflevel-1); \ + } \ + assert (reflevel==0); \ + _rrl = 0; \ + } while (0) + + + + // Component iterator + +#define BEGIN_COMPONENT_LOOP(cgh) \ + do { \ + int _cl; \ + assert (component==-1); \ + set_component ((cgh), 0); \ + for (;;) { \ + { +#define END_COMPONENT_LOOP(cgh) \ + } \ + if (component==hh->components(reflevel)-1) break; \ + set_component ((cgh), component+1); \ + } \ + set_component ((cgh), -1); \ + assert (component==-1); \ + _cl = 0; \ + } while (0) + +} // namespace Carpet diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc index c7af53a78..924a42d14 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -1,4 +1,5 @@ #include +#include #include #include @@ -10,7 +11,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.1 2001/07/04 12:29:48 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.2 2001/07/09 09:00:15 schnetter Exp $"; @@ -59,58 +60,6 @@ namespace Carpet { - const int* ArrayGroupSizeB (cGH* cgh, int dir, int group, - const char* groupname) - { - static const int zero = 0, one = 1; - - if (component == -1) { - // global routine - return &zero; - } - - if (groupname) { - group = CCTK_GroupIndex(groupname); - } - assert (group>=0 && group=0 && dir=0 && varlghosts + dd->ughosts)[d] - 1) * reflevelfact + 1; cgh->cctk_levfac[d] = reflevelfact; } + for (int group=0; group& base = arrdata[group].hh->baseextent; + for (int d=0; dlghosts + arrdata[group].dd->ughosts)[d] + - 1) + * reflevelfact + 1); + } + } } @@ -240,25 +199,13 @@ namespace Carpet { cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = 0xdeadbeef; } } - - // Set local grid function and array sizes - for (int d=0; d=0); - if (CCTK_QueryGroupStorageI(cgh, group)) { - // Group has storage - - switch (CCTK_GroupTypeFromVarI(n)) { - - case CCTK_SCALAR: - // Scalar variables can be accessed - assert (group<(int)scdata.size()); - assert (var<(int)scdata[group].data.size()); - assert (reflevel<(int)scdata[group].data[var].size()); - assert (tl<(int)scdata[group].data[var][reflevel].size()); - cgh->data[n][tl] = scdata[group].data[var][reflevel][tl]; - break; - - case CCTK_ARRAY: - case CCTK_GF: - // Arrays and grid functions cannot be accessed - cgh->data[n][tl] = 0; - break; - - default: - abort(); - } - - } else { - // Group has no storage - - cgh->data[n][tl] = 0; - - } + // Scalars, arrays, and grid functions cannot be accessed + cgh->data[n][tl] = 0; } // for tl } // for n @@ -335,34 +254,36 @@ namespace Carpet { cgh->cctk_lssh[CCTK_LSSH_IDX(stg,d)] = cgh->cctk_lsh[d]; } } - - // Set local grid function and array sizes - const bbox ext = - dd->boxes[reflevel][component][mglevel].exterior; - for (int d=0; dboxes.size()); - assert (component < (int)arrdata[group].dd->boxes[reflevel].size()); - assert (mglevel - < (int)arrdata[group].dd->boxes[reflevel][component].size()); - const bbox ext = - arrdata[group].dd->boxes[reflevel][component][mglevel].exterior; - for (int d=0; d& ext + = arrdata[group].dd->boxes[reflevel][component][mglevel].exterior; + ((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]& base = arrdata[group].hh->baseextent; + ((int*)arrdata[group].info.bbox)[2*d ] + = (ext.lower() < base.lower())[d]; + ((int*)arrdata[group].info.bbox)[2*d+1] + = (ext.upper() > base.upper())[d]; +#endif } } @@ -381,37 +302,12 @@ namespace Carpet { if (CCTK_QueryGroupStorageI(cgh, group)) { // Group has storage - switch (CCTK_GroupTypeFromVarI(n)) { - - case CCTK_SCALAR: - assert (group<(int)scdata.size()); - assert (var<(int)scdata[group].data.size()); - assert (reflevel<(int)scdata[group].data[var].size()); - assert (tl<(int)scdata[group].data[var][reflevel].size()); - cgh->data[n][tl] = scdata[group].data[var][reflevel][tl]; - break; - - case CCTK_ARRAY: - assert (group<(int)arrdata.size()); - assert (var<(int)arrdata[group].data.size()); - cgh->data[n][tl] - = ((*arrdata[group].data[var]) - (-tl, reflevel, component, mglevel)->storage()); - break; - - case CCTK_GF: - assert (group<(int)gfdata.size()); - assert (var<(int)gfdata[group].data.size()); - cgh->data[n][tl] - = ((*gfdata[group].data[var]) - (-tl, reflevel, component, mglevel)->storage()); - break; - - default: - abort(); - } - if (CCTK_GroupTypeFromVarI(n)==CCTK_SCALAR - || hh->is_local(reflevel,component)) { + assert (group<(int)arrdata.size()); + assert (var<(int)arrdata[group].data.size()); + 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]); diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc index f884950f1..91ee10bb6 100644 --- a/Carpet/Carpet/src/variables.cc +++ b/Carpet/Carpet/src/variables.cc @@ -5,7 +5,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.1 2001/07/04 12:29:48 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.2 2001/07/09 09:00:15 schnetter Exp $"; @@ -40,21 +40,20 @@ namespace Carpet { - // Data for scalars - vector scdata; // [group] - - // Data for arrays - // TODO: have replicated arrays - vector arrdata; // [group] + // Data for grid functions // The grid hierarchy gh* hh; th* tt; dh* dd; - int gfsize[dim]; - // Data for grid functions - vector gfdata; // [group] + // Data for scalars + gh* hh0; + th* tt0; + dh* dd0; + + // Data for everything + vector arrdata; // [group] // Checksums vector > > > checksums; // [n][rl][tl][c] diff --git a/Carpet/CarpetIOASCII/interface.ccl b/Carpet/CarpetIOASCII/interface.ccl index b199f1942..59a56d523 100644 --- a/Carpet/CarpetIOASCII/interface.ccl +++ b/Carpet/CarpetIOASCII/interface.ccl @@ -1,4 +1,6 @@ # Interface definition for thorn CarpetIOASCII -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/interface.ccl,v 1.2 2001/03/05 14:30:22 eschnett Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/interface.ccl,v 1.3 2001/07/09 09:00:17 schnetter Exp $ implements: IOASCII + +uses include header: carpet.hh diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc index f6a5a049e..4f8df4840 100644 --- a/Carpet/CarpetIOASCII/src/ioascii.cc +++ b/Carpet/CarpetIOASCII/src/ioascii.cc @@ -20,11 +20,11 @@ #include "Carpet/CarpetLib/src/gf.hh" #include "Carpet/CarpetLib/src/ggf.hh" -#include "Carpet/Carpet/src/carpet.hh" +#include "carpet.hh" #include "ioascii.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.15 2001/07/04 13:55:23 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetIOASCII/src/ioascii.cc,v 1.16 2001/07/09 09:00:19 schnetter Exp $"; @@ -129,71 +129,154 @@ int CarpetIOASCII const int n = CCTK_VarIndex(varname); assert (n>=0 && n=0 && group<(int)Carpet::gfdata.size()); + assert (group>=0 && group<(int)Carpet::arrdata.size()); const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0 && n0=0 && var dirs; + for (int d=0; d dirs; - for (int d=0; d=0 && dirs[d]<3); + const char* const coords = "xyz"; + sprintf (filename, "%s%c", filename, coords[dirs[d]]); + } + const char* const suffixes = "lpv"; + sprintf (filename, "%s%c", filename, suffixes[outdim-1]); + + // If this is the first time, then write a nice header on + // the root processor + if (do_truncate[n]) { + if (CCTK_MyProc(cgh)==0) { + struct stat fileinfo; + if (! IOUtil_RestartFromRecovery(cgh) + || stat(filename, &fileinfo)!=0) { + ofstream file(filename, ios::out | ios::trunc); + assert (file.good()); + file << "# " << varname; + for (int d=0; d offset(0); switch (outdim) { case 1: switch (dirs[0]) { case 0: - desired = out1D_x; + offset[1] = GetGridOffset (cgh, 2, + "out%dD_xline_yi", "out_xline_yi", + "out%dD_xline_y", "out_xline_y", + out_xline_y); + offset[2] = GetGridOffset (cgh, 3, + "out%dD_xline_zi", "out_xline_zi", + "out%dD_xline_z", "out_xline_z", + out_xline_z); break; case 1: - desired = out1D_y; + offset[0] = GetGridOffset (cgh, 1, + "out%dD_yline_xi", "out_yline_xi", + "out%dD_yline_x", "out_yline_x", + out_yline_x); + offset[2] = GetGridOffset (cgh, 3, + "out%dD_yline_zi", "out_yline_zi", + "out%dD_yline_z", "out_yline_z", + out_yline_z); break; case 2: - desired = out1D_z; + offset[0] = GetGridOffset (cgh, 1, + "out%dD_zline_xi", "out_zline_xi", + "out%dD_zline_x", "out_zline_x", + out_zline_x); + offset[1] = GetGridOffset (cgh, 2, + "out%dD_zline_yi", "out_zline_yi", + "out%dD_zline_y", "out_zline_y", + out_zline_y); break; default: abort(); @@ -201,194 +284,78 @@ int CarpetIOASCII break; case 2: if (dirs[0]==0 && dirs[1]==1) { - desired = out2D_xy; + offset[2] = GetGridOffset + (cgh, 3, + "out%dD_xyplane_zi", "out_xyplane_zi", + "out%dD_xyplane_z", "out_xyplane_z", + out_xyplane_z); } else if (dirs[0]==0 && dirs[1]==2) { - desired = out2D_xz; + offset[1] = GetGridOffset + (cgh, 2, + "out%dD_xzplane_yi", "out_xzplane_yi", + "out%dD_xzplane_y", "out_xzplane_y", + out_xzplane_y); } else if (dirs[0]==1 && dirs[1]==2) { - desired = out2D_yz; + offset[0] = GetGridOffset + (cgh, 1, + "out%dD_yzplane_xi", "out_yzplane_xi", + "out%dD_yzplane_x", "out_yzplane_x", + out_yzplane_x); } else { abort(); } break; case 3: - // Output is always desired (if switched on) - desired = true; + // The offset doesn't matter in this case break; default: abort(); } - // Skip output if not desired - if (desired) { + // Traverse all components on this refinement and multigrid + // level + BEGIN_COMPONENT_LOOP(cgh) { - // Invent a file name - char* const filename - = (char*)alloca(strlen(myoutdir)+strlen(alias)+100); - sprintf (filename, "%s/%s.", myoutdir, alias); - for (int d=0; d=0 && dirs[d]<3); - const char* const coords = "xyz"; - sprintf (filename, "%s%c", filename, coords[dirs[d]]); - } - const char* const suffixes = "lpv"; - sprintf (filename, "%s%c", filename, suffixes[outdim-1]); + generic_gf* ff = 0; - // If this is the first time, then write a nice header on - // the root processor - if (do_truncate[n]) { - if (CCTK_MyProc(cgh)==0) { - struct stat fileinfo; - if (! IOUtil_RestartFromRecovery(cgh) - || stat(filename, &fileinfo)!=0) { - ofstream file(filename, ios::out | ios::trunc); - assert (file.good()); - file << "# " << varname; - for (int d=0; d offset(0); - switch (outdim) { - case 1: - switch (dirs[0]) { - case 0: - offset[1] = GetGridOffset (cgh, 2, - "out%dD_xline_yi", "out_xline_yi", - "out%dD_xline_y", "out_xline_y", - out_xline_y); - offset[2] = GetGridOffset (cgh, 3, - "out%dD_xline_zi", "out_xline_zi", - "out%dD_xline_z", "out_xline_z", - out_xline_z); - break; - case 1: - offset[0] = GetGridOffset (cgh, 1, - "out%dD_yline_xi", "out_yline_xi", - "out%dD_yline_x", "out_yline_x", - out_yline_x); - offset[2] = GetGridOffset (cgh, 3, - "out%dD_yline_zi", "out_yline_zi", - "out%dD_yline_z", "out_yline_z", - out_yline_z); - break; - case 2: - offset[0] = GetGridOffset (cgh, 1, - "out%dD_zline_xi", "out_zline_xi", - "out%dD_zline_x", "out_zline_x", - out_zline_x); - offset[1] = GetGridOffset (cgh, 2, - "out%dD_zline_yi", "out_zline_yi", - "out%dD_zline_y", "out_zline_y", - out_zline_y); - break; - default: - abort(); - } - break; - case 2: - if (dirs[0]==0 && dirs[1]==1) { - offset[2] = GetGridOffset - (cgh, 3, - "out%dD_xyplane_zi", "out_xyplane_zi", - "out%dD_xyplane_z", "out_xyplane_z", - out_xyplane_z); - } else if (dirs[0]==0 && dirs[1]==2) { - offset[1] = GetGridOffset - (cgh, 2, - "out%dD_xzplane_yi", "out_xzplane_yi", - "out%dD_xzplane_y", "out_xzplane_y", - out_xzplane_y); - } else if (dirs[0]==1 && dirs[1]==2) { - offset[0] = GetGridOffset - (cgh, 1, - "out%dD_yzplane_xi", "out_yzplane_xi", - "out%dD_yzplane_x", "out_yzplane_x", - out_yzplane_x); - } else { - abort(); - } - break; - case 3: - // The offset doesn't matter in this case - break; - default: - abort(); - } + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf*)arrdata[group].data[var]; - // Traverse all components on this refinement and multigrid - // level - BEGIN_COMPONENT_LOOP(cgh) { - - generic_gf* ff = 0; - - switch (CCTK_GroupTypeI(group)) { - - case CCTK_ARRAY: - assert (var < (int)arrdata[group].data.size()); - ff = (generic_gf*)arrdata[group].data[var]; - break; - - case CCTK_GF: - assert (var < (int)gfdata[group].data.size()); - ff = (generic_gf*)gfdata[group].data[var]; - break; - - default: - abort(); - } - - const generic_data* const data - = (*ff) (tl, reflevel, component, mglevel); - const bbox ext = data->extent(); - const vect offset1 = offset * ext.stride(); - - data->write_ascii (filename, cgh->cctk_iteration, offset1, dirs, - tl, reflevel, component, mglevel); - - } END_COMPONENT_LOOP(cgh); + const generic_data* const data + = (*ff) (tl, reflevel, component, mglevel); + const bbox ext = data->extent(); + const vect offset1 = offset * ext.stride(); - // Append EOL after every complete set of components - if (CCTK_MyProc(cgh)==0) { - ofstream file(filename, ios::app); - assert (file.good()); - file << endl; - file.close(); - assert (file.good()); - } + data->write_ascii (filename, cgh->cctk_iteration, offset1, dirs, + tl, reflevel, component, mglevel); - } // if (desired) + } END_COMPONENT_LOOP(cgh); - } // if (ascending) - - // Next direction combination - done = true; - for (int d=0; d #include @@ -18,7 +18,7 @@ #include "carpetslab.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/Attic/carpetslab.cc,v 1.10 2001/07/04 12:29:52 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetSlab/src/Attic/carpetslab.cc,v 1.11 2001/07/09 09:00:24 schnetter Exp $"; @@ -108,28 +108,13 @@ namespace CarpetSlab { const gh* myhh; const dh* mydd; const generic_gf* myff; - switch (gp.grouptype) { - case CCTK_SCALAR: - abort(); - case CCTK_ARRAY: - assert (group < (int)arrdata.size()); - myhh = arrdata[group].hh; - mydd = arrdata[group].dd; - assert (var < (int)arrdata[group].data.size()); - myff = arrdata[group].data[var]; - break; - case CCTK_GF: - myhh = hh; - mydd = Carpet::dd; // dd is int dd above for old C++ compilers - assert (group < (int)gfdata.size()); - assert (var < (int)gfdata[group].data.size()); - myff = gfdata[group].data[var]; - break; - default: - abort(); - } + assert (group < (int)arrdata.size()); + myhh = arrdata[group].hh; assert (myhh); + mydd = arrdata[group].dd; assert (mydd); + assert (var < (int)arrdata[group].data.size()); + myff = arrdata[group].data[var]; assert (myff); // Detemine collecting processor diff --git a/Carpet/CarpetTest/interface.ccl b/Carpet/CarpetTest/interface.ccl index eb5323639..55cd937c5 100644 --- a/Carpet/CarpetTest/interface.ccl +++ b/Carpet/CarpetTest/interface.ccl @@ -1,5 +1,5 @@ # Interface definition for thorn CarpetTest -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/interface.ccl,v 1.1 2001/07/04 12:29:53 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/interface.ccl,v 1.2 2001/07/09 09:00:26 schnetter Exp $ implements: CarpetTest @@ -22,3 +22,8 @@ CCTK_REAL arrg1 type=ARRAY dim=1 size=i8 { arr1 } "1D array" + +CCTK_REAL scg type=SCALAR +{ + sc +} "scalar" diff --git a/Carpet/CarpetTest/src/carpettest_check_arguments.F77 b/Carpet/CarpetTest/src/carpettest_check_arguments.F77 index d24f2a391..9a3a08351 100644 --- a/Carpet/CarpetTest/src/carpettest_check_arguments.F77 +++ b/Carpet/CarpetTest/src/carpettest_check_arguments.F77 @@ -1,4 +1,5 @@ -c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_arguments.F77,v 1.2 2001/07/04 13:55:25 schnetter Exp $ +c -*-Fortran-*- +c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_arguments.F77,v 1.3 2001/07/09 09:00:27 schnetter Exp $ #include "cctk.h" #include "cctk_Arguments.h" @@ -13,6 +14,7 @@ c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_c print *, "arrg3 ", arrg30, arrg31, arrg32 print *, "arrg2 ", arrg20, arrg21 print *, "arrg1 ", arrg10 + print *, "scg" print * do k=1,gfg2 do j=1,gfg1 @@ -36,4 +38,5 @@ c $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_c do i=1,arrg10 arr1(i) = i end do + sc = 42 end diff --git a/Carpet/CarpetTest/src/carpettest_check_sizes.c b/Carpet/CarpetTest/src/carpettest_check_sizes.c index 79ca08929..c4e17baf7 100644 --- a/Carpet/CarpetTest/src/carpettest_check_sizes.c +++ b/Carpet/CarpetTest/src/carpettest_check_sizes.c @@ -1,4 +1,4 @@ -/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_sizes.c,v 1.1 2001/07/04 12:29:54 schnetter Exp $ */ +/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetTest/src/carpettest_check_sizes.c,v 1.2 2001/07/09 09:00:27 schnetter Exp $ */ #include #include @@ -10,125 +10,98 @@ void carpettest_check_sizes (CCTK_ARGUMENTS); +static void print_scalar (const char *name, int sc); +static void print_scalar_descr (const char *name, int sc, const char *descr); +static void print_array (const char *name, int dim, const int *arr); + +static const char *grouptype_string (int grouptype); +static const char *disttype_string (int disttype); + void carpettest_check_sizes (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS - char msg[1000]; int group; - int var; int dim; - CCTK_INT **sizes, **ghostsizes; - int d; - int gsh[3], lsh[3], lbnd[3], ubnd[3]; - const int *cip; - int size[3]; + cGroup data; + cGroupDynamicData dyndata; - sprintf (msg, "gsh: %d %d %d\n", cctk_gsh[0], cctk_gsh[1], cctk_gsh[2]); - printf (msg); - sprintf (msg, "lsh: %d %d %d\n", cctk_lsh[0], cctk_lsh[1], cctk_lsh[2]); - printf (msg); - sprintf (msg, "lbnd: %d %d %d\n", cctk_lbnd[0], cctk_lbnd[1], cctk_lbnd[2]); - printf (msg); - sprintf (msg, "ubnd: %d %d %d\n", cctk_ubnd[0], cctk_ubnd[1], cctk_ubnd[2]); - printf (msg); + dim = cctk_dim; + print_scalar ("cctk_dim", cctk_dim); + print_array ("cctk_gsh", dim, cctk_gsh); + print_array ("cctk_lsh", dim, cctk_lsh); + print_array ("cctk_lbnd", dim, cctk_lbnd); + print_array ("cctk_ubnd", dim, cctk_ubnd); + print_array ("cctk_bbox", 2*dim, cctk_bbox); + print_array ("cctk_nghostzones", dim, cctk_nghostzones); printf ("\n"); -#if 0 for (group=0; group=0 && n=0 && group<(int)Carpet::gfdata.size()); + assert (group>=0 && group<(int)Carpet::arrdata.size()); const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0 && n0=0 && varisValid()); + amrwriter = new AMRwriter(*writer); - char* const filename = (char*)alloca(strlen(myoutdir) - +strlen(alias) - +strlen(extension)+100); - sprintf (filename, "%s/%s%s", myoutdir, alias, extension); + // Set datatype + assert (CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL8 + || (sizeof(CCTK_REAL) == sizeof(CCTK_REAL8) + && CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL)); + // TODO: Set datatype correctly + amrwriter->setType (IObase::Float64); - IObase* writer = 0; - AMRwriter* amrwriter = 0; + const int gpdim = CCTK_GroupDimI(group); - // Write the file only on the root processor - if (CCTK_MyProc(cgh)==0) { - - // If this is the first time, then create and truncate the - // file - if (do_truncate[n]) { - struct stat fileinfo; - if (! IOUtil_RestartFromRecovery(cgh) - || stat(filename, &fileinfo)!=0) { - writer = 0; - if (CCTK_Equals(out3D_format, "IEEE")) { - writer = new IEEEIO(filename, IObase::Create); -#ifdef HDF5 - } else if (CCTK_Equals(out3D_format, "HDF4")) { - writer = new HDFIO(filename, IObase::Create); - } else if (CCTK_Equals(out3D_format, "HDF5")) { - writer = new H5IO(filename, IObase::Create); -#endif - } else { - abort(); - } - delete writer; - writer = 0; - } - } - - // Open the file - if (CCTK_Equals(out3D_format, "IEEE")) { - writer = new IEEEIO(filename, IObase::Append); -#ifdef HDF5 - } else if (CCTK_Equals(out3D_format, "HDF4")) { - writer = new HDFIO(filename, IObase::Append); - } else if (CCTK_Equals(out3D_format, "HDF5")) { - writer = new H5IO(filename, IObase::Append); -#endif - } else { - abort(); - } - assert (writer->isValid()); - amrwriter = new AMRwriter(*writer); - - // Set datatype - assert (CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL8 - || (sizeof(CCTK_REAL) == sizeof(CCTK_REAL8) - && CCTK_VarTypeI(n) == CCTK_VARIABLE_REAL)); - // TODO: Set datatype correctly - amrwriter->setType (IObase::Float64); - - const int gpdim = CCTK_GroupDimI(group); - - // Set coordinate information - CCTK_REAL lower[dim], upper[dim]; - double origin[dim], delta[dim], timestep; - for (int d=0; dcctk_delta_space[d]; - } - timestep = base_delta_time; - amrwriter->setTopLevelParameters - (gpdim, origin, delta, timestep, maxreflevels); - - // Set refinement information - int interlevel_timerefinement; - int interlevel_spacerefinement[dim]; - int initial_gridplacementrefinement[dim]; - interlevel_timerefinement = hh->reffact; - for (int d=0; dreffact; - initial_gridplacementrefinement[d] = 1; - } - amrwriter->setRefinement - (interlevel_timerefinement, interlevel_spacerefinement, - initial_gridplacementrefinement); - - // Set level - amrwriter->setLevel (reflevel); - - // Set current time - amrwriter->setTime (cgh->cctk_iteration); + // Set coordinate information + CCTK_REAL lower[dim], upper[dim]; + double origin[dim], delta[dim], timestep; + for (int d=0; dcctk_delta_space[d]; } + timestep = base_delta_time; + amrwriter->setTopLevelParameters + (gpdim, origin, delta, timestep, maxreflevels); - // Traverse all components on this refinement and multigrid - // level - BEGIN_COMPONENT_LOOP(cgh) { - - const generic_gf* ff = 0; - - switch (CCTK_GroupTypeI(group)) { - - case CCTK_ARRAY: - assert (var < (int)arrdata[group].data.size()); - ff = (generic_gf*)arrdata[group].data[var]; - break; - - case CCTK_GF: - assert (var < (int)gfdata[group].data.size()); - ff = (generic_gf*)gfdata[group].data[var]; - break; - - default: - abort(); - } - - const generic_data* const data - = (*ff) (tl, reflevel, component, mglevel); - - /* Make temporary copy on processor 0 */ - const bbox ext = data->extent(); - generic_data* const tmp = data->make_typed (); - tmp->allocate (ext, 0); - tmp->copy_from (data, ext); - - /* Write data */ - if (CCTK_MyProc(cgh)==0) { - int origin[dim], dims[dim]; - for (int d=0; dwrite (origin, dims, (void*)tmp->storage()); - } - - /* Delete temporary copy */ - delete tmp; - - } END_COMPONENT_LOOP(cgh); + // Set refinement information + int interlevel_timerefinement; + int interlevel_spacerefinement[dim]; + int initial_gridplacementrefinement[dim]; + interlevel_timerefinement = hh->reffact; + for (int d=0; dreffact; + initial_gridplacementrefinement[d] = 1; + } + amrwriter->setRefinement + (interlevel_timerefinement, interlevel_spacerefinement, + initial_gridplacementrefinement); - // Close the file + // Set level + amrwriter->setLevel (reflevel); + + // Set current time + amrwriter->setTime (cgh->cctk_iteration); + } + + // Traverse all components on this refinement and multigrid level + BEGIN_COMPONENT_LOOP(cgh) { + + const generic_gf* ff = 0; + + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf*)arrdata[group].data[var]; + + const generic_data* const data + = (*ff) (tl, reflevel, component, mglevel); + + // Make temporary copy on processor 0 + const bbox ext = data->extent(); + generic_data* const tmp = data->make_typed (); + tmp->allocate (ext, 0); + tmp->copy_from (data, ext); + + // Write data if (CCTK_MyProc(cgh)==0) { - delete amrwriter; - amrwriter = 0; - delete writer; - writer = 0; + int origin[dim], dims[dim]; + for (int d=0; dwrite (origin, dims, (void*)tmp->storage()); } - break; - } // ARRAY or GROUP + // Delete temporary copy + delete tmp; - default: - abort(); + } END_COMPONENT_LOOP(cgh); + + // Close the file + if (CCTK_MyProc(cgh)==0) { + delete amrwriter; + amrwriter = 0; + delete writer; + writer = 0; } // Don't truncate again @@ -406,7 +371,7 @@ namespace CarpetIOFlexIO { const int n = CCTK_VarIndex(varname); assert (n>=0 && n=0 && group<(int)Carpet::gfdata.size()); + assert (group>=0 && group<(int)Carpet::arrdata.size()); const int n0 = CCTK_FirstVarIndexI(group); assert (n0>=0 && n0* ff = 0; - switch (CCTK_GroupTypeI(group)) { - - case CCTK_ARRAY: - assert (var < (int)arrdata[group].data.size()); - ff = (generic_gf*)arrdata[group].data[var]; - break; - - case CCTK_GF: - assert (var < (int)gfdata[group].data.size()); - ff = (generic_gf*)gfdata[group].data[var]; - break; - - default: - abort(); - } + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf*)arrdata[group].data[var]; generic_data* const data = (*ff) (tl, reflevel, component, mglevel); - /* Create temporary data storage on processor 0 */ + // Create temporary data storage on processor 0 const vect str = vect(reflevelfact); const vect lb = vect(amr_origin) * str; const vect ub @@ -583,10 +535,10 @@ namespace CarpetIOFlexIO { tmp->allocate (ext, 0, 0); } - /* Copy into grid function */ + // Copy into grid function data->copy_from (tmp, ext); - /* Delete temporary copy */ + // Delete temporary copy delete tmp; } END_COMPONENT_LOOP(cgh); -- cgit v1.2.3