aboutsummaryrefslogtreecommitdiff
path: root/CarpetAttic
diff options
context:
space:
mode:
authorschnetter <>2001-07-04 10:29:00 +0000
committerschnetter <>2001-07-04 10:29:00 +0000
commitf1aa84c14ac110f5802603b4bf9ceb7923c5b471 (patch)
tree6a45cd17c5c96c90307302e699f521d2c80bd79f /CarpetAttic
parente1cce75b6dc96e7c88ccebff3ee4e03e8fdfc28e (diff)
Broke the file "carpet.cc" into several files.
Broke the file "carpet.cc" into several files. Simplified support for arrays with a dimension different from 3. Added a testing thorn. darcs-hash:20010704102946-07bb3-82132f0c643e91f0de33bbaef93f9c693ce7227f.gz
Diffstat (limited to 'CarpetAttic')
-rw-r--r--CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc228
1 files changed, 87 insertions, 141 deletions
diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
index 17a530ff5..0c87f5701 100644
--- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
+++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc
@@ -32,7 +32,7 @@
#include "ioflexio.hh"
-static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.9 2001/07/02 13:22:11 schnetter Exp $";
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.10 2001/07/04 12:29:50 schnetter Exp $";
@@ -167,7 +167,9 @@ namespace CarpetIOFlexIO {
}
extension = GetStringParameter ("out3D_extension", extension);
- char* const filename = (char*)alloca(strlen(myoutdir)+strlen(alias)+strlen(extension)+100);
+ char* const filename = (char*)alloca(strlen(myoutdir)
+ +strlen(alias)
+ +strlen(extension)+100);
sprintf (filename, "%s/%s%s", myoutdir, alias, extension);
IObase* writer = 0;
@@ -221,11 +223,11 @@ namespace CarpetIOFlexIO {
// TODO: Set datatype correctly
amrwriter->setType (IObase::Float64);
- const int dim = CCTK_GroupDimI(group);
+ const int gpdim = CCTK_GroupDimI(group);
// Set coordinate information
- CCTK_REAL lower[maxdim], upper[maxdim];
- double origin[maxdim], delta[maxdim], timestep;
+ CCTK_REAL lower[dim], upper[dim];
+ double origin[dim], delta[dim], timestep;
for (int d=0; d<dim; ++d) {
const int ierr = CCTK_CoordRange
(cgh, &lower[d], &upper[d], d+1, 0, "cart3d");
@@ -235,12 +237,12 @@ namespace CarpetIOFlexIO {
}
timestep = base_delta_time;
amrwriter->setTopLevelParameters
- (dim, origin, delta, timestep, maxreflevels);
+ (gpdim, origin, delta, timestep, maxreflevels);
// Set refinement information
int interlevel_timerefinement;
- int interlevel_spacerefinement[maxdim];
- int initial_gridplacementrefinement[maxdim];
+ int interlevel_spacerefinement[dim];
+ int initial_gridplacementrefinement[dim];
interlevel_timerefinement = hh->reffact;
for (int d=0; d<dim; ++d) {
interlevel_spacerefinement[d] = hh->reffact;
@@ -261,77 +263,46 @@ namespace CarpetIOFlexIO {
// level
BEGIN_COMPONENT_LOOP(cgh) {
- switch (CCTK_GroupDimI(group)) {
-
-#define CODE \
- do { \
- const generic_gf<dim>* ff = 0; \
- \
- switch (CCTK_GroupTypeI(group)) { \
- \
- case CCTK_ARRAY: \
- assert (var < (int)arrdata[group].data.size()); \
- ff = (generic_gf<dim>*)arrdata[group].data[var]; \
- break; \
- \
- case CCTK_GF: \
- assert (var < (int)gfdata[group].data.size()); \
- ff = (generic_gf<dim>*)gfdata[group].data[var]; \
- break; \
- \
- default: \
- abort(); \
- } \
- \
- const generic_data<dim>* const data \
- = (*ff) (tl, reflevel, component, mglevel); \
- \
- /* Make temporary copy on processor 0 */ \
- const bbox<int,dim> ext = data->extent(); \
- generic_data<dim>* 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; d<dim; ++d) { \
- origin[d] = (ext.lower() / ext.stride())[d]; \
- dims[d] = (ext.shape() / ext.stride())[d]; \
- } \
- amrwriter->write (origin, dims, (void*)tmp->storage()); \
- } \
- \
- /* Delete temporary copy */ \
- delete tmp; \
- \
- } while (0)
+ const generic_gf<dim>* ff = 0;
+
+ switch (CCTK_GroupTypeI(group)) {
- case 1: {
- const int dim=1;
- CODE;
+ case CCTK_ARRAY:
+ assert (var < (int)arrdata[group].data.size());
+ ff = (generic_gf<dim>*)arrdata[group].data[var];
break;
- }
- case 2: {
- const int dim=2;
- CODE;
+ case CCTK_GF:
+ assert (var < (int)gfdata[group].data.size());
+ ff = (generic_gf<dim>*)gfdata[group].data[var];
break;
- }
-
- case 3: {
- const int dim=3;
- CODE;
- break;
- }
default:
abort();
-
-#undef CODE
-
}
+ const generic_data<dim>* const data
+ = (*ff) (tl, reflevel, component, mglevel);
+
+ /* Make temporary copy on processor 0 */
+ const bbox<int,dim> ext = data->extent();
+ generic_data<dim>* 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; d<dim; ++d) {
+ origin[d] = (ext.lower() / ext.stride())[d];
+ dims[d] = (ext.shape() / ext.stride())[d];
+ }
+ amrwriter->write (origin, dims, (void*)tmp->storage());
+ }
+
+ /* Delete temporary copy */
+ delete tmp;
+
} END_COMPONENT_LOOP(cgh);
// Close the file
@@ -481,14 +452,16 @@ namespace CarpetIOFlexIO {
}
extension = GetStringParameter ("in3D_extension", extension);
- char* const filename = (char*)alloca(strlen(myindir)+strlen(alias)+strlen(extension)+100);
+ char* const filename = (char*)alloca(strlen(myindir)
+ +strlen(alias)
+ +strlen(extension)+100);
sprintf (filename, "%s/%s.%s", myindir, alias, extension);
IObase* reader = 0;
AmrGridReader* amrreader = 0;
int ndatasets = -1;
- const int dim = CCTK_GroupDimI(group);
+ const int gpdim = CCTK_GroupDimI(group);
// Read the file only on the root processor
if (CCTK_MyProc(cgh)==0) {
@@ -511,11 +484,11 @@ namespace CarpetIOFlexIO {
// Read information about dataset
IObase::DataType numbertype;
int rank;
- int dims[maxdim];
+ int dims[dim];
reader->readInfo (numbertype, rank, dims);
// Check rank
- assert (rank==dim);
+ assert (rank==gpdim);
// Check datatype
// TODO: Check datatype correctly
@@ -539,8 +512,8 @@ namespace CarpetIOFlexIO {
// Read grid
AmrGrid* amrgrid = 0;
- int amr_origin[maxdim];
- int amr_dims[maxdim];
+ int amr_origin[dim];
+ int amr_dims[dim];
if (CCTK_MyProc(cgh)==0) {
@@ -554,15 +527,19 @@ namespace CarpetIOFlexIO {
IObase::DataType atype;
int alength;
if (reader->readAttributeInfo("iorigin", atype, alength) < 0) {
- for (int d=0; d<dim; ++d) {
+ for (int d=0; d<gpdim; ++d) {
amrgrid->iorigin[d] = 0;
}
}
- for (int d=0; d<dim; ++d) {
+ for (int d=0; d<gpdim; ++d) {
amr_origin[d] = amrgrid->iorigin[d];
amr_dims[d] = amrgrid->dims[d];
}
+ for (int d=gpdim; d<dim; ++d) {
+ amr_origin[d] = 0;
+ amr_dims[d] = 1;
+ }
}
MPI_Bcast (amr_origin, dim, MPI_INT, 0, dist::comm);
MPI_Bcast (amr_dims, dim, MPI_INT, 0, dist::comm);
@@ -571,78 +548,47 @@ namespace CarpetIOFlexIO {
// level
BEGIN_COMPONENT_LOOP(cgh) {
- switch (CCTK_GroupDimI(group)) {
-
-#define CODE \
- do { \
- generic_gf<dim>* ff = 0; \
- \
- switch (CCTK_GroupTypeI(group)) { \
- \
- case CCTK_ARRAY: \
- assert (var < (int)arrdata[group].data.size()); \
- ff = (generic_gf<dim>*)arrdata[group].data[var]; \
- break; \
- \
- case CCTK_GF: \
- assert (var < (int)gfdata[group].data.size()); \
- ff = (generic_gf<dim>*)gfdata[group].data[var]; \
- break; \
- \
- default: \
- abort(); \
- } \
- \
- generic_data<dim>* const data \
- = (*ff) (tl, reflevel, component, mglevel); \
- \
- /* Create temporary data storage on processor 0 */ \
- const vect<int,dim> str = vect<int,dim>(reflevelfact); \
- const vect<int,dim> lb = vect<int,dim>(amr_origin) * str; \
- const vect<int,dim> ub \
- = lb + (vect<int,dim>(amr_dims) - 1) * str; \
- const bbox<int,dim> ext(lb,ub,str); \
- generic_data<dim>* const tmp = data->make_typed (); \
- \
- if (CCTK_MyProc(cgh)==0) { \
- tmp->allocate (ext, 0, amrgrid->data); \
- } else { \
- tmp->allocate (ext, 0, 0); \
- } \
- \
- /* Copy into grid function */ \
- data->copy_from (tmp, ext); \
- \
- /* Delete temporary copy */ \
- delete tmp; \
- \
- } while (0)
-
- case 1: {
- const int dim=1;
- CODE;
- break;
- }
+ generic_gf<dim>* ff = 0;
+
+ switch (CCTK_GroupTypeI(group)) {
- case 2: {
- const int dim=2;
- CODE;
+ case CCTK_ARRAY:
+ assert (var < (int)arrdata[group].data.size());
+ ff = (generic_gf<dim>*)arrdata[group].data[var];
break;
- }
- case 3: {
- const int dim=3;
- CODE;
+ case CCTK_GF:
+ assert (var < (int)gfdata[group].data.size());
+ ff = (generic_gf<dim>*)gfdata[group].data[var];
break;
- }
default:
abort();
-
-#undef CODE
-
}
+ generic_data<dim>* const data
+ = (*ff) (tl, reflevel, component, mglevel);
+
+ /* Create temporary data storage on processor 0 */
+ const vect<int,dim> str = vect<int,dim>(reflevelfact);
+ const vect<int,dim> lb = vect<int,dim>(amr_origin) * str;
+ const vect<int,dim> ub
+ = lb + (vect<int,dim>(amr_dims) - 1) * str;
+ const bbox<int,dim> ext(lb,ub,str);
+ generic_data<dim>* const tmp = data->make_typed ();
+
+ if (CCTK_MyProc(cgh)==0) {
+ tmp->allocate (ext, 0, amrgrid->data);
+ } else {
+ tmp->allocate (ext, 0, 0);
+ }
+
+ /* Copy into grid function */
+ data->copy_from (tmp, ext);
+
+ /* Delete temporary copy */
+ delete tmp;
+
} END_COMPONENT_LOOP(cgh);
if (CCTK_MyProc(cgh)==0) {