From f2a4a914ac1614f1a33da62fd95e2eb0a86affee Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Wed, 4 Jul 2001 10:29:00 +0000 Subject: 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 --- CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 228 +++++++++++------------------ 1 file changed, 87 insertions(+), 141 deletions(-) (limited to 'CarpetAttic') 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; dsetTopLevelParameters - (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; dreffact; @@ -261,77 +263,46 @@ namespace CarpetIOFlexIO { // level BEGIN_COMPONENT_LOOP(cgh) { - switch (CCTK_GroupDimI(group)) { - -#define CODE \ - do { \ - 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; \ - \ - } while (0) + const generic_gf* 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*)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*)gfdata[group].data[var]; break; - } - - case 3: { - const int dim=3; - CODE; - break; - } default: abort(); - -#undef CODE - } + 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); // 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; diorigin[d] = 0; } } - for (int d=0; diorigin[d]; amr_dims[d] = amrgrid->dims[d]; } + for (int d=gpdim; d* 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(); \ - } \ - \ - generic_data* const data \ - = (*ff) (tl, reflevel, component, mglevel); \ - \ - /* Create temporary data storage on processor 0 */ \ - const vect str = vect(reflevelfact); \ - const vect lb = vect(amr_origin) * str; \ - const vect ub \ - = lb + (vect(amr_dims) - 1) * str; \ - const bbox ext(lb,ub,str); \ - generic_data* 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* 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*)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*)gfdata[group].data[var]; break; - } default: abort(); - -#undef CODE - } + generic_data* const data + = (*ff) (tl, reflevel, component, mglevel); + + /* Create temporary data storage on processor 0 */ + const vect str = vect(reflevelfact); + const vect lb = vect(amr_origin) * str; + const vect ub + = lb + (vect(amr_dims) - 1) * str; + const bbox ext(lb,ub,str); + generic_data* 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) { -- cgit v1.2.3